Legacy single-id route retained for backward compatibility.
POST
/api/transactions/{id}/operations
deprecated
No permission required.
Looks up the transaction's `MerchantId` first, then forwards to the merchant-scoped path. New callers should target the merchant-scoped route directly, which reads the transaction without that lookup. The `Deprecation` response header lets client telemetry pick up traffic on this route during the migration.
Example request
Every block below sends the same request. 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
| Name | In | Type | Description |
|---|---|---|---|
id
required |
path | string (uuid) | The transaction to operate on. |
suppressNulls
required |
query | boolean | If true, omit properties with null values. |
Request body
application/json
, required
| Field | Type | Description |
|---|---|---|
operationType
required |
all of TransactionOperationType | The type of operation to execute (e.g., Refund, Reversal, Void, Capture). |
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 |
reason
required |
string | Optional reason or note for the operation. nullable |
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 |
offlineAdjustment
required |
all of 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. |
incrementalAuthorization
required |
all of 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. |
initiationType
required |
all of 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 |
mitReason
required |
all of 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 |
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 |
This request body has no documented fields.
Responses
200 OK
Body: TransactionOperationResultDto
Each item has these fields.
| Field | Type | Description |
|---|---|---|
success
required |
boolean | Whether the operation was successfully submitted to the orchestrator. |
message
required |
string | Human-readable message describing the result. nullable |
transactionId
required |
string (uuid) | The original transaction ID the operation was performed on. |
operationType
required |
all of TransactionOperationType | The operation type that was executed. |
errorCode
required |
string | Machine-readable error code for programmatic handling. nullable |
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. |
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 |
This response has no documented body fields.
403 Forbidden
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
401 Unauthorized
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
400 Bad Request
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
404 Not Found
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
501 Not Implemented
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
500 Internal Server Error
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
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. See the error-code reference in this document's description for the values `error.code` can take.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded. 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.
Body: RateLimitProblemDetails
Each item has these fields.
| Field | Type | Description |
|---|---|---|
type
required |
string | The problem type identifier. Always the same value: the failure is the status code itself, so there is no sub-type for a caller to branch on. nullable |
title
required |
string | A short, human-readable summary of the problem type. nullable |
status
required |
integer (int32) | The HTTP status code, repeated in the body as the problem-details format defines. |
detail
required |
string | A human-readable explanation of this occurrence of the problem. nullable |
retryAfterSeconds
required |
integer (int32) | How long to wait before retrying, in whole seconds, carrying the same figure as the `Retry-After` header. Always at least one: a value of zero would invite an immediate retry that is certain to be rejected again. |
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.