VoPay Transaction Management API

VoPay's Transaction Management API — 7 documented operation(s) across 7 path(s) on VoPay's API-first embedded finance platform for Canadian and cross-border money movement.

OpenAPI Specification

vopay-transaction-management.json Raw ↑
{"openapi":"3.0.0","info":{"version":"2.0","title":"Transaction Management","description":"The Transaction Management API allows you to manage transactions in your account. You can cancel transactions, refund transactions, and confirm flagged transactions.","contact":{"name":"API Support","email":"help@vopay.com"}},"paths":{"/account/transaction/resubmit":{"post":{"description":"This endpoint creates a new transaction from an existing one, reusing the original recipient and bank account details. It is useful for retrying a failed or returned transaction without re-entering the payment information.\n\nBy default the new transaction is created on the same payment rail as the original. To resubmit on a different rail, supply the optional PaymentRail parameter (for example, resubmitting a returned EFT withdrawal as ACH). The target rail must be supported for the transaction's direction (funding vs. withdrawal) and the bank account on file must contain the routing details that rail requires (an ABA routing number for ACH/RTP/FedNow/Fedwire, or a financial institution and branch transit number for EFT).\n\nA new idempotency key is generated for the resubmitted transaction, so it is treated as a distinct transaction from the original. The original transaction is left unchanged.\n\nThis endpoint must be enabled on your account before it can be used; contact the VoPay business team to request access.","summary":"account/transaction/resubmit","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionResubmitPost","deprecated":false,"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"AccountID":{"description":"Your account ID","type":"string"},"Key":{"description":"API key for the account","type":"string"},"Signature":{"description":"Hashed signature for the request","type":"string"},"TransactionID":{"description":"The unique ID of the original transaction to resubmit","type":"integer"},"PaymentRail":{"description":"Optional. The payment rail to resubmit the transaction on. Defaults to the original transaction's rail. Case-insensitive.","type":"string","enum":["eft","ach","rtp","fednow","fedwire"]}},"required":["AccountID","Key","Signature","TransactionID"]}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID","PaymentRail"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID of the newly created (resubmitted) transaction","example":"1125"},"PaymentRail":{"type":"string","description":"The payment rail the new transaction was created on","example":"ach"}}}}}}}}},"/account/transactions/cancel":{"post":{"description":"This endpoint allows a recently created transaction to be cancelled. Once a transaction has begun being processed it can no longer be canceled through this endpoint.\n\nPaylink can also be cancelled using this endpoint and can only be cancelled if it is in a pending status. Once the paylink is cancelled successfully, the cancellation email will be sent to the recipient as a cancellation confirmation.","summary":"account/transactions/cancel","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionsCancelPost","deprecated":false,"requestBody":{"$ref":"#/components/requestBodies/AccountTransactionsCancelPost"},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID","TransactionStatus","Timestamp"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID for the transaction","example":"1124"},"TransactionStatus":{"type":"string","description":"A message indicating the current transaction status - cancelled","example":"cancelled"},"Timestamp":{"type":"string","format":"date-time","description":"The timestamp when the transaction status was last modified","example":"2019-11-26 12:00:00"}}}}}}}}},"/account/transactions/refund":{"post":{"description":"This endpoint allows you to refund a completed transaction (EFT, ACH, Interac, and credit card). The payment information provided in the original transaction is used in the refund.","summary":"account/transactions/refund","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionsRefundPost","deprecated":false,"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"AccountID":{"description":"Your account ID","type":"string"},"Key":{"description":"API key for the account","type":"string"},"Signature":{"description":"Hashed signature for the request","type":"string"},"TransactionID":{"description":"The unique ID for the transaction you want to refund","type":"integer"},"Amount":{"description":"The amount to refund. Value must be equal to or less than the original transaction amount. If no amount is provided, the full amount from the original transaction is used.","type":"number"},"Notes":{"description":"Optional notes to attach to the refund transaction","type":"string"}},"required":["AccountID","Key","Signature","TransactionID"]}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID for the refund transaction","example":"1124"},"InteracQuestionAnswer":{"type":"string","description":"The unique answer to the Interac question. Only applicable if refunding an Interac Money Request transaction.","example":"9sdai873rb","x-absent-when":"transaction is not an Interac bulk payout"}}}}}}}}},"/account/transaction/return":{"post":{"description":"This endpoint allows you to return a transaction. A return can be initiated for EFT and ACH transactions that need to be returned (e.g., insufficient funds, account closed, or invalid account). The original transaction must be in a completed state to be returned.","summary":"account/transaction/return","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionReturnPost","deprecated":false,"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"AccountID":{"description":"Your account ID","type":"string"},"Key":{"description":"API key for the account","type":"string"},"Signature":{"description":"Hashed signature for the request","type":"string"},"TransactionID":{"description":"The unique ID for the transaction to be returned","type":"integer"},"ReturnReason":{"description":"The reason for returning the transaction (e.g., insufficient funds, account closed)","type":"string"}},"required":["AccountID","Key","Signature","TransactionID"]}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID for the return transaction","example":"1124"},"TransactionStatus":{"type":"string","description":"A message indicating the current transaction status","example":"returned","x-absent-when":"always; the route emits ReversalTransactionID instead of TransactionStatus (spec drift)"}}}}}}}}},"/account/transaction/confirm":{"post":{"description":"This endpoint allows users to confirm a flagged transaction. Confirming a flagged transaction permits the transaction to be processed. Unconfirmed flagged transactions will not be processed.","summary":"account/transaction/confirm","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionConfirmPost","deprecated":false,"requestBody":{"$ref":"#/components/requestBodies/AccountTransactionsCancelPost"},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID","TransactionConfirmed"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID for the transaction","example":"1124"},"TransactionConfirmed":{"type":"boolean","description":"Confirmed status of the transaction","example":true}}}}}}}}},"/account/transaction/hold":{"post":{"description":"This endpoint creates a hold on funds in your account. The held amount is reserved and will not be available for other transactions until the hold is released or the hold transaction is cancelled.","summary":"account/transaction/hold","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionHoldPost","deprecated":false,"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"AccountID":{"description":"Your account ID","type":"string"},"Key":{"description":"API key for the account","type":"string"},"Signature":{"description":"Hashed signature for the request","type":"string"},"Amount":{"description":"The amount to place on hold. Must be greater than 0","type":"number"},"Currency":{"description":"The currency of the hold amount. Defaults to the account's default currency if not provided","type":"string"},"ClientAccountID":{"description":"The ID of the client account to associate with this hold","type":"string"},"Notes":{"description":"Optional notes to attach to the hold transaction","type":"string"},"ClientReferenceNumber":{"description":"An optional reference number from the client to associate with the hold transaction","type":"string"}},"required":["AccountID","Key","Signature","Amount"]}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID for the hold transaction","example":"1124"}}}}}}}}},"/account/transaction/hold/release":{"post":{"description":"This endpoint releases an existing hold transaction, making the previously held funds available again. The hold must be in a pending status to be released.","summary":"account/transaction/hold/release","tags":["Transaction Management Endpoints"],"operationId":"AccountTransactionHoldReleasePost","deprecated":false,"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"AccountID":{"description":"Your account ID","type":"string"},"Key":{"description":"API key for the account","type":"string"},"Signature":{"description":"Hashed signature for the request","type":"string"},"TransactionID":{"description":"The unique ID of the hold transaction to release","type":"integer"}},"required":["AccountID","Key","Signature","TransactionID"]}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","required":["Success","ErrorMessage","TransactionID"],"properties":{"Success":{"type":"boolean","description":"True if the request was successful, false if it failed","example":true},"ErrorMessage":{"type":"string","description":"Contains a description of the error if the request failed","example":""},"TransactionID":{"type":"integer","description":"The unique ID for the released hold transaction","example":"1124"}}}}}}}}}},"servers":[{"url":"https://earthnode-dev.vopay.com/api/v2"}],"components":{"requestBodies":{"AccountTransactionsCancelPost":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"AccountID":{"description":"Your account ID","type":"string"},"Key":{"description":"API key for the account","type":"string"},"Signature":{"description":"Hashed signature for the request","type":"string"},"TransactionID":{"description":"The unique ID for the transaction","type":"integer"}},"required":["AccountID","Key","Signature","TransactionID"]}}},"required":true}}}}