openapi: 3.2.0 info: title: Escrow Transfers API description: Send funds to a recipient who may not yet have a Solana wallet. The recipient's wallet is attached after they sign up. Backs the legacy movemoney 'send to phone' flow. termsOfService: http://cfxlabs.com/terms/ contact: name: API Owner url: https://api.cfxlabs.net email: api@cfxlabs.com version: '@VERSION@' summary: CFX Escrow Transfer API servers: - url: https://api.dev.cfx.to description: Customer Sandbox - url: https://api.cfx.to description: Production security: - ApiKeyAuth: [] ApiSecretAuth: [] tags: - name: Escrow Transfers description: Create, fund, claim, reject, and cancel escrow transfers across their lifecycle. paths: /v1/escrow-transfers: get: summary: List Escrow Transfers tags: - Escrow Transfers description: List escrows the calling customer owns. Filters compose (AND) and the customer scope is enforced server-side. parameters: - schema: type: string in: query name: ids required: false description: Comma-separated escrow ids - schema: type: string in: query name: statuses required: false description: Comma-separated statuses (PENDING,CREATED,RECIPIENT_SET,CLAIMED,CANCELLED,REJECTED,EXPIRED,FAILED) - schema: type: string in: query name: senderId required: false - schema: type: string in: query name: recipientId required: false - schema: type: string in: query name: recipientPhone required: false - schema: type: integer minimum: 1 in: query name: page required: false - schema: type: integer minimum: 1 maximum: 500 in: query name: pageSize required: false responses: '200': description: Default Response content: application/json: schema: type: object required: - items - hasNext - total - page - pageSize properties: items: type: array items: type: object required: - id - legacyTransactionId - senderId - source - recipientId - recipientPhone - destination - tokenSymbol - amount - status - history - message - claimShortUrl - metadata - expiresAt - createdAt - updatedAt properties: id: type: string description: Escrow transfer external id (etr_…) example: etr_RD2of9vs3XFodUSd8T5hW legacyTransactionId: anyOf: - type: string - type: 'null' description: Set only on rows backfilled from movemoney's escrow_transfer_transaction (snd_…) senderId: type: string description: Customer-scoped identity id of the sender source: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id - address properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Ledger Account description: A self-custody Solana wallet, or one of the party identity's own ledger accounts. A ledger account settles through its own on-chain address. recipientId: anyOf: - type: string - type: 'null' description: Customer-scoped identity id of the recipient — null until they sign up recipientPhone: type: string description: E.164 phone number pattern: ^\+[1-9]\d{1,14}$ minLength: 3 maxLength: 16 example: '+15551234567' destination: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id - address properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Ledger Account - type: 'null' description: Where the escrow releases to — null until the recipient is bound. tokenSymbol: type: string example: MOVEUSD amount: type: string description: Big-number string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string history: type: array items: type: object required: - status - at properties: status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string at: type: string description: ISO 8601 timestamp signature: type: string description: Solana transaction signature detail: type: string title: EscrowTransferHistoryEntry message: anyOf: - type: string - type: 'null' claimShortUrl: anyOf: - type: string format: uri - type: 'null' description: Resolvable short URL the recipient is sent to claim the transfer (cfx-link host + short id). Null until the recipient-SMS phase mints it, or when the short-url base is unconfigured. metadata: type: object additionalProperties: {} expiresAt: type: string description: ISO 8601 — auto-expiry timestamp createdAt: type: string updatedAt: type: string title: EscrowTransfer hasNext: type: boolean total: type: integer minimum: 0 page: type: integer minimum: 1 pageSize: type: integer minimum: 1 '400': description: The service cannot understand the request content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST message: type: string errors: type: array items: type: object properties: {} additionalProperties: true title: INVALID_REQUEST description: The service cannot understand the request '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The credentials are valid but the caller is not permitted to transact content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - FORBIDDEN message: type: string title: FORBIDDEN description: The credentials are valid but the caller is not permitted to transact default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: getV1EscrowTransfers x-operation-id-source: derived post: summary: Create Escrow Transfer Quote tags: - Escrow Transfers description: Create an escrow transfer quote. Name the funding `source` — the sender's self-custody wallet, or one of their own ledger accounts. A wallet source gets an `unsignedTransaction` for the sender client to sign and POST back to `/v1/escrow-transfers/{id}/accept`; a ledger-account source gets none, and accepts with an empty body. requestBody: required: true content: application/json: schema: type: object required: - senderId - source - recipientPhone - tokenSymbol - amount properties: senderId: type: string description: Customer-scoped identity id of the sender source: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW title: Ledger Account description: A self-custody Solana wallet, or one of the party identity's own ledger accounts. recipientPhone: type: string description: E.164 phone number of the recipient pattern: ^\+[1-9]\d{1,14}$ minLength: 3 maxLength: 16 example: '+15551234567' tokenSymbol: type: string description: Token symbol — e.g. MOVEUSD, USDC example: MOVEUSD amount: type: string description: Decimal token amount as a string (e.g. "1.31"), not raw base units example: '1.31' message: type: string maxLength: 280 description: Optional human-readable note from the sender claimUrl: type: string description: URL the recipient is sent to claim the transfer; shortened and embedded in the recipient SMS. format: uri metadata: type: object additionalProperties: {} parameters: - schema: type: string in: header name: Idempotency-Key required: false responses: '201': description: Default Response content: application/json: schema: type: object required: - id - status - customerId - senderId - source - recipientPhone - tokenSymbol - amount - expiresAt - createdAt properties: id: type: string description: Escrow transfer external id (etr_…) example: etr_RD2of9vs3XFodUSd8T5hW status: type: string enum: - PENDING customerId: type: string senderId: type: string source: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id - address properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Ledger Account description: A self-custody Solana wallet, or one of the party identity's own ledger accounts. A ledger account settles through its own on-chain address. recipientPhone: type: string tokenSymbol: type: string amount: type: string description: Big-number string expiresAt: type: string description: ISO 8601 — escrow auto-expiry timestamp createdAt: type: string unsignedTransaction: type: string description: Base64-encoded v0 VersionedTransaction with all signature slots zeroed — the sender must sign and POST to /v1/escrow-transfers/{id}/accept. Present only for a `WALLET` source; a `LEDGER_ACCOUNT` source has nothing for the customer to sign. title: CreateEscrowTransferResponse '400': description: Default Response content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST - SELF_SEND - USE_LEDGER_ACCOUNT - LEDGER_ACCOUNT_TOKEN_UNSUPPORTED description: '- `INVALID_REQUEST`: The service cannot understand the request - `SELF_SEND` - `USE_LEDGER_ACCOUNT`: The wallet address belongs to a ledger account — name it as a LEDGER_ACCOUNT party - `LEDGER_ACCOUNT_TOKEN_UNSUPPORTED`: A ledger account settles MOVEUSD only — name a wallet party for any other token' message: type: string errors: type: array items: type: object properties: {} additionalProperties: true '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The named ledger account is admin-only content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - LEDGER_ACCOUNT_NOT_DEBITABLE message: type: string title: LEDGER_ACCOUNT_NOT_DEBITABLE description: The named ledger account is admin-only '404': description: Default Response content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - SENDER_NOT_FOUND - TOKEN_NOT_FOUND - INVALID_LEDGER_ACCOUNT description: '- `SENDER_NOT_FOUND` - `TOKEN_NOT_FOUND` - `INVALID_LEDGER_ACCOUNT`: The named ledger account is not this identity''s' message: type: string '409': description: A duplicate request with this idempotency key is already in progress content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_IN_PROGRESS message: type: string title: IDEMPOTENCY_IN_PROGRESS description: A duplicate request with this idempotency key is already in progress '422': description: Another request with this idempotency key was made using a different body content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_KEY_REUSED message: type: string title: IDEMPOTENCY_KEY_REUSED description: Another request with this idempotency key was made using a different body '503': description: No durable nonce was free to hold the quote open. Nothing was created — retry shortly. content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NONCE_POOL_UNAVAILABLE message: type: string title: NONCE_POOL_UNAVAILABLE description: No durable nonce was free to hold the quote open. Nothing was created — retry shortly. default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: postV1EscrowTransfers x-operation-id-source: derived /v1/escrow-transfers/{id}: get: summary: Get Escrow Transfer tags: - Escrow Transfers parameters: - schema: type: string in: path name: id required: true responses: '200': description: Default Response content: application/json: schema: type: object required: - id - legacyTransactionId - senderId - source - recipientId - recipientPhone - destination - tokenSymbol - amount - status - history - message - claimShortUrl - metadata - expiresAt - createdAt - updatedAt properties: id: type: string description: Escrow transfer external id (etr_…) example: etr_RD2of9vs3XFodUSd8T5hW legacyTransactionId: anyOf: - type: string - type: 'null' description: Set only on rows backfilled from movemoney's escrow_transfer_transaction (snd_…) senderId: type: string description: Customer-scoped identity id of the sender source: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id - address properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Ledger Account description: A self-custody Solana wallet, or one of the party identity's own ledger accounts. A ledger account settles through its own on-chain address. recipientId: anyOf: - type: string - type: 'null' description: Customer-scoped identity id of the recipient — null until they sign up recipientPhone: type: string description: E.164 phone number pattern: ^\+[1-9]\d{1,14}$ minLength: 3 maxLength: 16 example: '+15551234567' destination: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id - address properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Ledger Account - type: 'null' description: Where the escrow releases to — null until the recipient is bound. tokenSymbol: type: string example: MOVEUSD amount: type: string description: Big-number string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string history: type: array items: type: object required: - status - at properties: status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string at: type: string description: ISO 8601 timestamp signature: type: string description: Solana transaction signature detail: type: string title: EscrowTransferHistoryEntry message: anyOf: - type: string - type: 'null' claimShortUrl: anyOf: - type: string format: uri - type: 'null' description: Resolvable short URL the recipient is sent to claim the transfer (cfx-link host + short id). Null until the recipient-SMS phase mints it, or when the short-url base is unconfigured. metadata: type: object additionalProperties: {} expiresAt: type: string description: ISO 8601 — auto-expiry timestamp createdAt: type: string updatedAt: type: string title: EscrowTransfer '400': description: The service cannot understand the request content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST message: type: string errors: type: array items: type: object properties: {} additionalProperties: true title: INVALID_REQUEST description: The service cannot understand the request '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The credentials are valid but the caller is not permitted to transact content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - FORBIDDEN message: type: string title: FORBIDDEN description: The credentials are valid but the caller is not permitted to transact '404': description: The resource was not found content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NOT_FOUND message: type: string title: NOT_FOUND description: The resource was not found default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: getV1EscrowTransfersById x-operation-id-source: derived /v1/escrow-transfers/{id}/accept: post: summary: Accept Escrow Transfer Quote tags: - Escrow Transfers description: Accept a quote. A `WALLET` source submits the fully-signed transaction returned at quote creation (built server-side, signed by the sender client-side); a `LEDGER_ACCOUNT` source omits it and CFX funds the hold itself. The transfer is broadcast on chain; unclaimed transfers auto-expire after 10 days. requestBody: required: true content: application/json: schema: type: object properties: signedTransaction: type: string description: Base64-encoded fully-signed v0 transaction — the sender signs the `unsignedTransaction` returned by the create-quote call and submits it here to accept. Required for a `WALLET` source and rejected for a `LEDGER_ACCOUNT` one, which CFX funds and signs itself. claimUrl: type: string description: URL the recipient is sent to claim the transfer; shortened and embedded in the recipient SMS. format: uri parameters: - schema: type: string in: path name: id required: true - schema: type: string in: header name: Idempotency-Key required: false responses: '200': description: Default Response content: application/json: schema: type: object required: - id - status properties: id: type: string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string '400': description: Default Response content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST - SIGNED_TRANSACTION_REQUIRED - SIGNED_TRANSACTION_UNEXPECTED description: '- `INVALID_REQUEST`: The service cannot understand the request - `SIGNED_TRANSACTION_REQUIRED`: A wallet source must submit the signed transaction - `SIGNED_TRANSACTION_UNEXPECTED`: A ledger-account source has nothing for the customer to sign' message: type: string errors: type: array items: type: object properties: {} additionalProperties: true '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The credentials are valid but the caller is not permitted to transact content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - FORBIDDEN message: type: string title: FORBIDDEN description: The credentials are valid but the caller is not permitted to transact '404': description: The resource was not found content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NOT_FOUND message: type: string title: NOT_FOUND description: The resource was not found '409': description: A duplicate request with this idempotency key is already in progress content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_IN_PROGRESS message: type: string title: IDEMPOTENCY_IN_PROGRESS description: A duplicate request with this idempotency key is already in progress '422': description: Another request with this idempotency key was made using a different body content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_KEY_REUSED message: type: string title: IDEMPOTENCY_KEY_REUSED description: Another request with this idempotency key was made using a different body default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: postV1EscrowTransfersByIdAccept x-operation-id-source: derived /v1/escrow-transfers/{id}/recipient: post: summary: Attach Recipient tags: - Escrow Transfers description: 'Called after the recipient signs up to bind where the escrow releases to — their own wallet, or one of their ledger accounts — so the funds can be claimed. Runs inline: the 200 carries the status the write left behind (`RECIPIENT_SET`), and a party that does not resolve is answered here rather than failing out of sight. Repeating the same binding is a no-op 200.' requestBody: required: true content: application/json: schema: type: object required: - recipientId - destination properties: recipientId: type: string description: Customer-scoped id of the newly-onboarded recipient destination: anyOf: - type: object required: - type - address properties: type: type: string enum: - WALLET address: type: string description: Solana public key (base58) pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$ example: 7EqQdEULxWcraVx3mXKFjc84LhCkMGZCkRuDpvcMwJeK title: Wallet - type: object required: - type - id properties: type: type: string enum: - LEDGER_ACCOUNT id: type: string minLength: 1 description: Ledger account external id (redwal_…) example: redwal_RD2of9vs3XFodUSd8T5hW title: Ledger Account description: A self-custody Solana wallet, or one of the party identity's own ledger accounts. claimUrl: type: string description: URL the recipient is sent to claim the transfer; shortened and embedded in the recipient SMS. format: uri parameters: - schema: type: string in: path name: id required: true - schema: type: string in: header name: Idempotency-Key required: false responses: '200': description: Default Response content: application/json: schema: type: object required: - id - status properties: id: type: string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string '400': description: Default Response content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST - USE_LEDGER_ACCOUNT - LEDGER_ACCOUNT_TOKEN_UNSUPPORTED description: '- `INVALID_REQUEST`: The service cannot understand the request - `USE_LEDGER_ACCOUNT`: The wallet address belongs to a ledger account — name it as a LEDGER_ACCOUNT party - `LEDGER_ACCOUNT_TOKEN_UNSUPPORTED`: A ledger account settles MOVEUSD only — name a wallet party for any other token' message: type: string errors: type: array items: type: object properties: {} additionalProperties: true '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The named ledger account is admin-only content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - LEDGER_ACCOUNT_NOT_DEBITABLE message: type: string title: LEDGER_ACCOUNT_NOT_DEBITABLE description: The named ledger account is admin-only '404': description: Default Response content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NOT_FOUND - TOKEN_NOT_FOUND - INVALID_LEDGER_ACCOUNT description: '- `NOT_FOUND`: The resource was not found - `TOKEN_NOT_FOUND` - `INVALID_LEDGER_ACCOUNT`: The named ledger account is not this identity''s' message: type: string '409': description: Default Response content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_IN_PROGRESS - INVALID_STATUS_TRANSITION - RECIPIENT_ALREADY_BOUND description: '- `IDEMPOTENCY_IN_PROGRESS`: A duplicate request with this idempotency key is already in progress - `INVALID_STATUS_TRANSITION` - `RECIPIENT_ALREADY_BOUND`' message: type: string '422': description: Another request with this idempotency key was made using a different body content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_KEY_REUSED message: type: string title: IDEMPOTENCY_KEY_REUSED description: Another request with this idempotency key was made using a different body default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: postV1EscrowTransfersByIdRecipient x-operation-id-source: derived /v1/escrow-transfers/{id}/claim: post: summary: Claim Escrow Transfer tags: - Escrow Transfers description: Recipient claims the transfer; the funds are released to the recipient's wallet. requestBody: required: true content: application/json: schema: type: object required: - claimerId properties: claimerId: type: string description: Must match the row's recipientId parameters: - schema: type: string in: path name: id required: true - schema: type: string in: header name: Idempotency-Key required: false responses: '200': description: Default Response content: application/json: schema: type: object required: - id - status properties: id: type: string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string '400': description: The service cannot understand the request content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST message: type: string errors: type: array items: type: object properties: {} additionalProperties: true title: INVALID_REQUEST description: The service cannot understand the request '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The credentials are valid but the caller is not permitted to transact content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - FORBIDDEN message: type: string title: FORBIDDEN description: The credentials are valid but the caller is not permitted to transact '404': description: The resource was not found content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NOT_FOUND message: type: string title: NOT_FOUND description: The resource was not found '409': description: A duplicate request with this idempotency key is already in progress content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_IN_PROGRESS message: type: string title: IDEMPOTENCY_IN_PROGRESS description: A duplicate request with this idempotency key is already in progress '422': description: Another request with this idempotency key was made using a different body content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_KEY_REUSED message: type: string title: IDEMPOTENCY_KEY_REUSED description: Another request with this idempotency key was made using a different body default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: postV1EscrowTransfersByIdClaim x-operation-id-source: derived /v1/escrow-transfers/{id}/reject: post: summary: Reject Escrow Transfer tags: - Escrow Transfers description: Recipient rejects; funds return to sender. requestBody: required: true content: application/json: schema: type: object required: - actorRole properties: actorRole: enum: - RECIPIENT - AUTHORITY type: string parameters: - schema: type: string in: path name: id required: true - schema: type: string in: header name: Idempotency-Key required: false responses: '200': description: Default Response content: application/json: schema: type: object required: - id - status properties: id: type: string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string '400': description: The service cannot understand the request content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST message: type: string errors: type: array items: type: object properties: {} additionalProperties: true title: INVALID_REQUEST description: The service cannot understand the request '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: The credentials are valid but the caller is not permitted to transact content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - FORBIDDEN message: type: string title: FORBIDDEN description: The credentials are valid but the caller is not permitted to transact '404': description: The resource was not found content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NOT_FOUND message: type: string title: NOT_FOUND description: The resource was not found '409': description: A duplicate request with this idempotency key is already in progress content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_IN_PROGRESS message: type: string title: IDEMPOTENCY_IN_PROGRESS description: A duplicate request with this idempotency key is already in progress '422': description: Another request with this idempotency key was made using a different body content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_KEY_REUSED message: type: string title: IDEMPOTENCY_KEY_REUSED description: Another request with this idempotency key was made using a different body default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: postV1EscrowTransfersByIdReject x-operation-id-source: derived /v1/escrow-transfers/{id}/cancel: post: summary: Cancel Escrow Transfer (Sender) tags: - Escrow Transfers description: Sender-initiated recall of an escrow that has not yet been claimed; the on-chain escrow is cancelled and the funds returned to the sender. requestBody: required: true content: application/json: schema: type: object required: - senderId properties: senderId: type: string description: Customer-scoped id of the sender requesting recall. Must match the transfer's sender; otherwise the request is rejected. parameters: - schema: type: string in: path name: id required: true - schema: type: string in: header name: Idempotency-Key required: false responses: '200': description: Default Response content: application/json: schema: type: object required: - id - status properties: id: type: string status: enum: - PENDING - CREATED - RECIPIENT_SET - CLAIMED - CANCELLED - REJECTED - EXPIRED - FAILED type: string '400': description: The service cannot understand the request content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INVALID_REQUEST message: type: string errors: type: array items: type: object properties: {} additionalProperties: true title: INVALID_REQUEST description: The service cannot understand the request '401': description: The access to this resource has been denied content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - UNAUTHORIZED message: type: string title: UNAUTHORIZED description: The access to this resource has been denied '403': description: A service error has occurred content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - FORBIDDEN message: type: string title: FORBIDDEN description: A service error has occurred '404': description: The resource was not found content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - NOT_FOUND message: type: string title: NOT_FOUND description: The resource was not found '409': description: A duplicate request with this idempotency key is already in progress content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_IN_PROGRESS message: type: string title: IDEMPOTENCY_IN_PROGRESS description: A duplicate request with this idempotency key is already in progress '422': description: Another request with this idempotency key was made using a different body content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - IDEMPOTENCY_KEY_REUSED message: type: string title: IDEMPOTENCY_KEY_REUSED description: Another request with this idempotency key was made using a different body default: description: Catch-all error response for any unexpected internal errors content: application/json: schema: type: object required: - code - message properties: code: type: string enum: - INTERNAL message: type: string enum: - An unexpected internal error has occurred title: INTERNAL description: Catch-all error response for any unexpected internal errors operationId: postV1EscrowTransfersByIdCancel x-operation-id-source: derived components: securitySchemes: ApiKeyAuth: name: x-api-key type: apiKey in: header ApiSecretAuth: name: x-api-secret type: apiKey in: header externalDocs: description: Find out more about CFX url: https://www.cfxlabs.com/