# Confirm payment (Pismo account ID)
Confirm an existing payment operation.
NOTE:
- This endpoint requires an account token - an access token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a `401 Unauthorized` message.
This endpoint generates the following events:
- [Platform authorization created](https://developers.pismo.io/events/docs/platform-authorization-platform-authorization-1)
- [Account balance changed](https://developers.pismo.io/events/docs/account-balances-balance-change-1)
- [Account balance changed (Availables)](https://developers.pismo.io/events/docs/availables-change-available-1)
See [Data and reporting](doc:data-reporting-overview) for more information on events and setting up event notifications.
# OpenAPI definition
```json
{
"openapi": "3.0.0",
"info": {
"title": "Banking - Transaction banking",
"version": "0.9.0",
"description": "Transaction banking API",
"contact": {
"name": "API Support",
"url": "https://developers.pismo.io/support/"
},
"license": {
"name": "Copyright Pismo"
}
},
"servers": [
{
"url": "https://sandbox.pismolabs.io",
"description": "Sandbox API server for testing"
}
],
"security": [
{
"BearerAuth": []
}
],
"tags": [
{
"name": "Payments (Pismo account ID)",
"description": "Payment endpoints"
}
],
"components": {
"schemas": {
"BusinessDate": {
"type": "string",
"format": "date",
"description": "Specifying a `business_date` value impacts the account balance history.
\nNotes:\n - The business date is in ISO 8601 format.\n - The business date allows users to designate the balance history cycle in which a payment is posted.\n - You can specify a `business_date` within the current working day or up to one working day before or after.\n",
"example": "2023-03-09"
},
"ConfirmPaymentMetadata": {
"type": "object",
"description": "Key-value pairs containing data intended for storage in the Pismo system."
},
"ErrorCode": {
"description": "Error code\n`minLength: 1`\n`maxLength: 12`\n",
"type": "string",
"minLength": 1,
"maxLength": 12,
"example": "WPMT0017"
},
"ErrorMessage": {
"description": "Error message\n`minLength: 1`\n`maxLength: 1000`\n",
"type": "string",
"minLength": 1,
"maxLength": 1000,
"example": "Invalid JSON payload received: Error unmarshalling request"
},
"ErrorResponse": {
"type": "object",
"properties": {
"code": {
"$ref": "#/components/schemas/ErrorCode"
},
"message": {
"$ref": "#/components/schemas/ErrorMessage"
}
}
},
"EventDatetime": {
"type": "string",
"format": "date-time",
"minLength": 1,
"maxLength": 30,
"description": "Event date and time displayed in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
\n`minLength: 1`\n`maxLength: 30`\n",
"example": "2023-04-27T12:01:24Z"
},
"OriginalTrackingID": {
"type": "string",
"description": "Tracking ID for the original operation.",
"maxLength": 43,
"example": "249fbd1c-cfcd-48aa-8bcb-1ffe3a5f7978"
},
"PaymentSettlementV2Request": {
"title": "PaymentSettlementV2Request",
"type": "object",
"required": [
"original_tracking_id",
"tracking_id"
],
"properties": {
"original_tracking_id": {
"$ref": "#/components/schemas/OriginalTrackingID"
},
"tracking_id": {
"$ref": "#/components/schemas/TrackingID"
},
"business_date": {
"$ref": "#/components/schemas/BusinessDate"
},
"skip_account_date_validation": {
"$ref": "#/components/schemas/SkipAccountDateValidation"
},
"metadata": {
"$ref": "#/components/schemas/ConfirmPaymentMetadata"
}
}
},
"SettlementV2Response": {
"title": "SettlementV2Response",
"type": "object",
"properties": {
"original_tracking_id": {
"$ref": "#/components/schemas/OriginalTrackingID"
},
"tracking_id": {
"$ref": "#/components/schemas/TrackingID"
},
"event_datetime": {
"$ref": "#/components/schemas/EventDatetime"
}
}
},
"SkipAccountDateValidation": {
"type": "boolean",
"description": "If `FALSE`, the `payment_datetime` is validated against the account creation date and time. If `TRUE`, the validation is skipped.",
"default": false,
"example": false
},
"TrackingID": {
"type": "string",
"description": "A unique payment tracking number provided by the client. If an existing `tracking_id` already exists in the system, the API returns a `409` error.\n\nThis field is:\n - Unique within the Organization.\n - Immutable — It can't be updated.\n - Not recyclable — You can't reuse a `tracking_id`.\n",
"minLength": 1,
"maxLength": 43,
"example": "0a50c88a-ade8-4bcc-a639-9a0b0f11e244"
}
},
"responses": {
"403Forbidden": {
"description": "The request has been lost"
}
},
"securitySchemes": {
"BearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
},
"paths": {
"/cash-management/v2/payments/confirm": {
"post": {
"summary": "Confirm payment (Pismo account ID)",
"description": "Confirm an existing payment operation.\n\nNOTE:\n- This endpoint requires an account token - an access token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a `401 Unauthorized` message.\nThis endpoint generates the following events:\n- [Platform authorization created](https://developers.pismo.io/events/docs/platform-authorization-platform-authorization-1)\n- [Account balance changed](https://developers.pismo.io/events/docs/account-balances-balance-change-1)\n- [Account balance changed (Availables)](https://developers.pismo.io/events/docs/availables-change-available-1)\n\nSee [Data and reporting](https://developers.pismo.io/pismo-docs/docs/data-reporting-overview) for more information on events and setting up event notifications.",
"parameters": [],
"operationId": "cash-management-v2-post-confirm-payments",
"tags": [
"Payments (Pismo account ID)"
],
"requestBody": {
"description": "Request body",
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PaymentSettlementV2Request"
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SettlementV2Response"
}
}
}
},
"400": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Operations blocked for account": {
"description": "This error occurs when there's an operations block for this account",
"value": {
"code": "WOBK0007",
"message": "Operations blocked for account"
}
},
"Invalid JSON payload": {
"value": {
"code": "WPMT0017",
"message": "Invalid JSON payload received: Error unmarshalling request"
}
},
"Tracking ID exceed size": {
"value": {
"code": "WPMT0018",
"message": "tracking_id must be a maximum of 43 characters in length"
}
},
"Original Tracking ID exceed size": {
"value": {
"code": "WPMT0018",
"message": "original_tracking_id must be a maximum of 43 characters in length"
}
},
"Tracking ID required": {
"value": {
"code": "WPMT0018",
"message": "tracking_id is a required field"
}
},
"Original Tracking ID required": {
"value": {
"code": "WPMT0018",
"message": "original_tracking_id is a required field"
}
},
"Payment date before account creation date": {
"value": {
"code": "WPMT0001",
"message": "The payment date cannot be earlier than the account creation date"
}
},
"Payment date before account migration date": {
"value": {
"code": "WPMT0061",
"message": "The payment date cannot be earlier than the account migration date"
}
},
"Holiday error": {
"value": {
"code": "WPMT0003",
"message": "Cannot post transaction on holidays"
}
},
"Weekend error": {
"value": {
"code": "WPMT0004",
"message": "Cannot post transaction on weekends"
}
},
"Invalid business date for the current business day cycle": {
"value": {
"code": "WPMT0028",
"message": "Invalid business date for the current business day cycle"
}
},
"Transaction owned by another account": {
"value": {
"code": "WPMT0038",
"message": "transaction is owned by another account"
}
},
"Transaction cannot be confirmed": {
"value": {
"code": "WPMT0039",
"message": "transaction cannot be confirmed"
}
},
"Back business dating disabled": {
"description": "This error occurs when the back‑business‑date payment feature is disabled through [Past business date toggle](https://developers.pismo.io/pismo-docs/reference/put-back-business-toggle).",
"value": {
"code": "WPMT0044",
"message": "Back business dating is disabled"
}
},
"Transfer must be sent by debit account": {
"description": "This error occurs when the transfer confirmation request originates from a credit leg account.",
"value": {
"code": "WPMT0049",
"message": "Transfer operations must be sent by the debit account"
}
}
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Unauthorized account": {
"value": {
"code": "WCAC0001",
"message": "Account not authorized"
}
}
}
}
}
},
"403": {
"$ref": "#/components/responses/403Forbidden"
},
"404": {
"description": "Bad request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Original Tracking ID not found": {
"value": {
"code": "WPMT0037",
"message": "original_tracking_id not found"
}
}
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Tracking ID already in use": {
"description": "This error occurs when the client sends a duplicate tracking ID for the payment",
"value": {
"code": "WPMT0007",
"message": "tracking_id is already in use",
"data": {
"tracking_id": "10027506-171f-b1e1-8412-67f5f5145a3b",
"event_datetime": "2025-02-05T21:46:06Z"
}
}
},
"Tracking ID already in use by another account": {
"description": "This error occurs when the client sends a duplicate tracking ID that is already used by another account.",
"value": {
"code": "WPMT0052",
"message": "tracking_id is already in use"
}
}
}
}
}
},
"423": {
"description": "Locked",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Transaction using this tracking ID in progress": {
"description": "This error occurs when multiple payment requests with the same `tracking_id` are made simultaneously",
"value": {
"code": "WPMT0047",
"message": "transaction using this tracking_id is in progress, please try again later"
}
},
"Transaction using this original tracking ID in progress": {
"description": "This error occurs when multiple payment requests with the same `original_tracking_id` are made simultaneously.",
"value": {
"code": "WPMT0048",
"message": "transaction using this original_tracking_id is in progress, please try again later"
}
}
}
}
}
},
"500": {
"description": "Internal Errors",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
},
"examples": {
"Generic internal error": {
"value": {
"code": "ECMN9999",
"message": "Internal error"
}
}
}
}
}
}
}
}
}
}
}
```