Execute a follow-up operation on an existing transaction.
POST
/api/transactions/by-merchant/{merchantId}/{transactionId}/operations
deprecated
No permission required.
A client disconnect does not cancel an operation once the request has been received. The caller needs the permission for the requested operation type: `Transactions.Operations.Void` for Void and Reversal, `Transactions.Operations.Refund` for Refund, `Transactions.Operations.Capture` for Capture, `Transactions.Operations.Adjustment` for OfflineAdjustment and IncrementalAuthorization, `Transactions.Payments.Create` for Repeat and Retry, and `Transactions.PartialApproval.Acknowledge` for AcceptPartialApproval and SplitTender. A Refund, Repeat or Retry creates a new transaction, which also requires `Transactions.Payments.Create`. A caller without the permission receives 403 before the transaction is read, so the response does not reveal whether the transaction exists.
Signed in, you can send this request to your own sandbox merchant from the console and read the answer. Sign in to try it.
Example request
Each example below is one request, shown in every language. Choose an example and a language, then replace {{BASE_URL}} with the address of the API you are calling and {{API_KEY}} with your own key.
The request body is a ExecuteTransactionOperationInput. See the Request body section below for its fields.
Parameters
Request body
application/json
, required
| Field | Type | Description | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operationType
required |
TransactionOperationType TransactionOperationType | The type of operation to execute (e.g., Refund, Reversal, Void, Capture).
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
amount
required |
number (double) | Optional amount for partial operations (refund, reversal). What an omitted value means
differs by operation, so it is stated per operation rather than as one rule.
Conditional: When Amount is not null. Must be > 0.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
reason
required |
string | Optional reason or note for the operation.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
idempotencyKey
required |
string | Optional caller-supplied idempotency key used to deduplicate a retried operation
(reversal, void, capture, refund, repeat, retry) after a network timeout. The key is
scoped to a single merchant + transaction + operation: submitting the same operation
twice with the same key executes once and the second call returns the original
operation's outcome (for a spawning operation, the same child transaction id) instead
of re-applying it.
Conditional: When IdempotencyKey is not empty. Max length: 128.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
offlineAdjustment
required |
OfflineAdjustmentFields OfflineAdjustmentFields | Structured field bundle for the
`OfflineAdjustment`
operation. Required when `operationType` is
`OfflineAdjustment`; rejected by the input validator for any other operation
type so the wrong shape cannot ride along quietly.
Required: When OperationType == OfflineAdjustment.
Conditional: When OfflineAdjustment is not null.
Conditional: When OperationType != OfflineAdjustment.
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
Fields of OfflineAdjustmentFields:
This body has no documented fields. | |||||||||||||||||||||||||||||
incrementalAuthorization
required |
IncrementalAuthorizationFields IncrementalAuthorizationFields | Structured field bundle for the
`IncrementalAuthorization`
operation. Required when `operationType` is
`IncrementalAuthorization`; rejected by the input validator for any other
operation type so the wrong shape cannot ride along quietly.
Required: When OperationType == IncrementalAuthorization.
Conditional: When IncrementalAuthorization is not null.
Conditional: When OperationType != IncrementalAuthorization.
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
Fields of IncrementalAuthorizationFields:
This body has no documented fields. | |||||||||||||||||||||||||||||
initiationType
required |
InitiationType InitiationType | Classification gate for `Repeat`. The caller
must declare whether the new charge is being initiated by the cardholder (CIT:
cardholder is present and authorizing this specific re-run) or by the merchant
(MIT: under prior consent or as a network resubmission of a declined attempt).
Required: When OperationType == Repeat.
Conditional: When InitiationType is not null.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
mitReason
required |
MITReasonCode MITReasonCode | MIT reason code (Recurring, UnscheduledCOF, Resubmission, etc.) accompanying
`initiationType` when it is
`MerchantInitiated`.
Required: When OperationType == Repeat and InitiationType == MerchantInitiated.
Conditional: When MITReason is not null.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
storedCredentialConsentId
required |
string (uuid) | Identifier of the `StoredCredentialConsent` record that authorizes this MIT.
Required for non-resubmission MITs (Recurring, UnscheduledCOF, NoShow, DelayedCharge,
Installment, Reauthorization, IncrementalAuth). Ignored for
`Resubmission`: resubmissions are authorized by card-network
resubmission rules rather than by a consent record.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| |||||||||||||||||||||||||||
This request body has no documented fields.
Responses
200 OK
Body:
TransactionOperationResultDto
TransactionOperationResultDto
Each item has these fields.
| Field | Type | Description | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
success
required |
boolean | Whether the operation was successfully submitted to the orchestrator.
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| ||||||||||||||||||||
message
required |
string | Human-readable message describing the result.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| ||||||||||||||||||||
transactionId
required |
string (uuid) | The original transaction ID the operation was performed on.
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| ||||||||||||||||||||
operationType
required |
TransactionOperationType TransactionOperationType | The operation type that was executed.
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| ||||||||||||||||||||
errorCode
required |
string | Machine-readable error code for programmatic handling.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| ||||||||||||||||||||
timedOut
required |
boolean | True when the operation was submitted to the orchestrator but completion
timed out. The operation may still be processing: the user should check the transaction status.
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
| ||||||||||||||||||||
newTransactionId
required |
string (uuid) | The ID of a newly created transaction, set when the operation creates a new transaction
(e.g., Repeat). Null for operations that modify the existing transaction in-place.
nullable
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
403 Forbidden
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
401 Unauthorized
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
400 Bad Request
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
404 Not Found
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
501 Not Implemented
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
500 Internal Server Error
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
default The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. The error reference lists the values `error.code` can take. The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. The error reference lists the values `error.code` can take.
Body:
RemoteServiceErrorResponse
RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo RemoteServiceErrorInfo |
Values:
Values combine: send one or more member names separated by a comma and a space, or the integer sum of their values. Responses carry the names.
|
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded, or because something a later retry can clear stopped it. A rate limit refusal carries an `application/problem+json` body: wait at least the interval `Retry-After` names before retrying, then back off. Limits are tuned per deployment, so read the allowance from the response headers rather than assuming a fixed ceiling. Any other refusal carries the standard error envelope as `application/json`, and its `error.code` names the cause. A sandbox request whose merchant has spent the plan's transaction allowance is refused with a different `application/json` body: `code` is `USAGE_BUDGET_EXCEEDED`, and `limit` and `used` report the allowance. `Retry-After` is sent only when the allowance resets. An allowance that never resets sends none, and retrying won't help.
Body:
one of UsageBudgetExceededResponse, RemoteServiceErrorResponse
one of UsageBudgetExceededResponse, RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|
This response has no documented body fields.
Errors
A failed request returns the platform error envelope. The
error reference lists every value
error.code can carry and shows the four response shapes.