diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml
index 06b0316a3..06658cda9 100644
--- a/mintlify/openapi.yaml
+++ b/mintlify/openapi.yaml
@@ -7830,6 +7830,38 @@ webhooks:
description: Payment for services
reconciliationInstructions:
reference: REF-123456789
+ incomingCompletedCryptoPayment:
+ summary: Completed payment funded from an external crypto wallet
+ value:
+ id: Webhook:019542f5-b3e7-1d02-0000-000000000009
+ type: INCOMING_PAYMENT.COMPLETED
+ timestamp: '2025-08-15T14:32:00Z'
+ data:
+ id: Transaction:019542f5-b3e7-1d02-0000-000000000006
+ status: COMPLETED
+ type: INCOMING
+ direction: CREDIT
+ source:
+ sourceType: REALTIME_FUNDING
+ currency: USDC
+ onChainTransaction:
+ transactionHash: 7RJWhvQBQPEjJmki5fhBboGBWRJhmcFkMvrr4Fu3tMSJ5EdynMEiYSyiWAH9GpcbHpeUzeSQF9ZY6q4x8AhBskUf
+ network: SOLANA
+ destination:
+ destinationType: ACCOUNT
+ accountId: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
+ platformCustomerId: 18d3e5f7b4a9c2
+ receivedAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ settledAt: '2025-08-15T14:30:00Z'
+ createdAt: '2025-08-15T14:25:18Z'
+ description: USDC deposit from self-custody wallet
responses:
'200':
description: |
@@ -7957,6 +7989,47 @@ webhooks:
gridApiFixedFee: 10
gridApiVariableFeeRate: 0.003
gridApiVariableFeeAmount: 30
+ outgoingCompletedCryptoPayment:
+ summary: Completed crypto payout to an external wallet
+ value:
+ id: Webhook:019542f5-b3e7-1d02-0000-000000000008
+ type: OUTGOING_PAYMENT.COMPLETED
+ timestamp: '2025-08-15T14:32:00Z'
+ data:
+ id: Transaction:019542f5-b3e7-1d02-0000-000000000009
+ status: COMPLETED
+ type: OUTGOING
+ direction: DEBIT
+ source:
+ sourceType: ACCOUNT
+ accountId: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ destination:
+ destinationType: ACCOUNT
+ accountId: ExternalAccount:c34dcbd6-dced-4ec4-b756-3c3a9ea3d789
+ onChainTransaction:
+ transactionHash: h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx
+ network: SOLANA
+ customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
+ platformCustomerId: 18d3e5f7b4a9c2
+ sentAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ receivedAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ quoteId: Quote:019542f5-b3e7-1d02-0000-000000000010
+ settledAt: '2025-08-15T14:30:00Z'
+ createdAt: '2025-08-15T14:25:18Z'
+ description: USDC withdrawal to self-custody wallet
+ paymentInstructions: []
failedPayment:
summary: Failed outgoing payment
value:
@@ -16950,6 +17023,31 @@ components:
type: string
description: Currency code for the destination
example: EUR
+ CryptoNetwork:
+ type: string
+ enum:
+ - BITCOIN
+ - ETHEREUM
+ - SOLANA
+ - BASE
+ - POLYGON
+ - TRON
+ - SPARK
+ description: The blockchain network an on-chain transaction settled on. Whether this is the mainnet or a test network (e.g. Solana devnet) is determined by your platform's environment — sandbox platforms operate on test networks, production platforms on mainnet — mirroring how `cryptoNetwork` is interpreted elsewhere in the API.
+ example: SOLANA
+ OnChainTransaction:
+ type: object
+ required:
+ - transactionHash
+ - network
+ properties:
+ transactionHash:
+ type: string
+ description: On-chain transaction hash of the crypto transfer for this leg of the transaction.
+ example: h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx
+ network:
+ $ref: '#/components/schemas/CryptoNetwork'
+ description: Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).
AccountTransactionDestination:
title: Account Destination
allOf:
@@ -16967,6 +17065,9 @@ components:
type: string
description: Destination account identifier
example: ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123
+ onChainTransaction:
+ $ref: '#/components/schemas/OnChainTransaction'
+ description: On-chain transaction that delivered funds to this destination, when the destination is an external crypto wallet. Populated once the crypto transfer has settled.
description: Destination account details
UmaAddressTransactionDestination:
title: UMA Address Destination
@@ -17101,6 +17202,9 @@ components:
type: string
description: Source account identifier
example: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ onChainTransaction:
+ $ref: '#/components/schemas/OnChainTransaction'
+ description: On-chain transaction that delivered funds from this source, when the source is an external crypto wallet. Populated once the crypto transfer has settled.
description: Source account details
UmaAddressTransactionSource:
title: UMA Address Source
@@ -17173,6 +17277,9 @@ components:
type: string
description: Rail-level tracking identifier for the payment, such as an ACH trace number or a wire IMAD/OMAD, useful for reconciliation.
example: '021000020123456'
+ onChainTransaction:
+ $ref: '#/components/schemas/OnChainTransaction'
+ description: On-chain transaction that delivered the funding, when the funds arrived from an external crypto wallet. Populated once the crypto transfer has settled.
description: Transaction was funded using an external funding source. All originator fields are optional and populated on a best-effort basis depending on what the funding source provides.
TransactionSourceOneOf:
oneOf:
@@ -17188,6 +17295,7 @@ components:
ReconciliationInstructions:
type: object
minProperties: 1
+ description: Instructions for reconciling a payment with this transaction. For the on-chain transaction to or from an external crypto wallet that is the transaction's own source or destination, use the `onChainTransaction` on the relevant source or destination instead.
properties:
reference:
type: string
@@ -17195,7 +17303,7 @@ components:
example: UMA-Q12345-REF
transactionHash:
type: string
- description: Transaction hash for the crypto transfer that delivered funds to the transaction destination, when available.
+ description: Transaction hash of the internal settlement transfer used to deliver a UMA payment — the inter-VASP settlement leg (e.g. USDC on Solana to the receiving partner), when available. This is not a transfer to a customer's own wallet; for that, see the `onChainTransaction` on the transaction's source or destination.
example: '0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566'
IncomingRateDetails:
description: 'Details about the rate and fees for an incoming transaction. Note: `gridApiFixedFee` is denominated in the receiving currency, so its equivalent value in the sending currency fluctuates with the FX rate. As a result, the total fee on a subsequent quote for the same transfer may differ even if the underlying fee structure is unchanged.'
@@ -17430,7 +17538,7 @@ components:
example: 10
reconciliationInstructions:
$ref: '#/components/schemas/ReconciliationInstructions'
- description: Reconciliation details for this transaction, including crypto transaction hash when available.
+ description: Reconciliation details for this transaction. For the on-chain hash of a crypto payout to an external wallet, see the destination's `onChainTransaction` instead.
quoteId:
type: string
description: The ID of the quote that was used to trigger this payment
diff --git a/mintlify/snippets/receipts.mdx b/mintlify/snippets/receipts.mdx
index 818199ede..d0659eaeb 100644
--- a/mintlify/snippets/receipts.mdx
+++ b/mintlify/snippets/receipts.mdx
@@ -197,7 +197,8 @@ Most receipt fields come directly from the [transaction object](/api-reference/t
| Total to recipient | `receivedAmount.amount` + `receivedAmount.currency` |
| Total transfer fees | `fees` (smallest unit of the sending currency) |
| Exchange rate | `exchangeRate` |
-| Transaction hash / VC address(es) | `reconciliationInstructions.transactionHash` (a dedicated transaction hash field may be exposed directly on the transaction) |
+| Transaction hash | `source.onChainTransaction` / `destination.onChainTransaction` (`transactionHash` + `network`) when that side is an external crypto wallet; `reconciliationInstructions.transactionHash` carries the internal UMA settlement-leg hash |
+| VC address(es) | Resolve `destination.accountId` to the external account and read the wallet address from its `accountInfo` |
## Example: send a receipt on completion
diff --git a/mintlify/snippets/reconciliation/reconciliation.mdx b/mintlify/snippets/reconciliation/reconciliation.mdx
index 28be2192f..f918ed2da 100644
--- a/mintlify/snippets/reconciliation/reconciliation.mdx
+++ b/mintlify/snippets/reconciliation/reconciliation.mdx
@@ -58,6 +58,15 @@ Sample webhook payload:
}
}
```
+
+
+When the transaction's source or destination is an external crypto wallet, that `source` /
+`destination` object also includes an `onChainTransaction` (`transactionHash` + `network`,
+e.g. `SOLANA`) once the crypto transfer settles — use it to match the transfer on a
+block explorer. The hash can land shortly after the terminal status, so a terminal webhook
+payload may not include it yet; retrieve the transaction (`GET /transactions/{id}`) to read
+it once settled.
+
diff --git a/openapi.yaml b/openapi.yaml
index 06b0316a3..06658cda9 100644
--- a/openapi.yaml
+++ b/openapi.yaml
@@ -7830,6 +7830,38 @@ webhooks:
description: Payment for services
reconciliationInstructions:
reference: REF-123456789
+ incomingCompletedCryptoPayment:
+ summary: Completed payment funded from an external crypto wallet
+ value:
+ id: Webhook:019542f5-b3e7-1d02-0000-000000000009
+ type: INCOMING_PAYMENT.COMPLETED
+ timestamp: '2025-08-15T14:32:00Z'
+ data:
+ id: Transaction:019542f5-b3e7-1d02-0000-000000000006
+ status: COMPLETED
+ type: INCOMING
+ direction: CREDIT
+ source:
+ sourceType: REALTIME_FUNDING
+ currency: USDC
+ onChainTransaction:
+ transactionHash: 7RJWhvQBQPEjJmki5fhBboGBWRJhmcFkMvrr4Fu3tMSJ5EdynMEiYSyiWAH9GpcbHpeUzeSQF9ZY6q4x8AhBskUf
+ network: SOLANA
+ destination:
+ destinationType: ACCOUNT
+ accountId: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
+ platformCustomerId: 18d3e5f7b4a9c2
+ receivedAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ settledAt: '2025-08-15T14:30:00Z'
+ createdAt: '2025-08-15T14:25:18Z'
+ description: USDC deposit from self-custody wallet
responses:
'200':
description: |
@@ -7957,6 +7989,47 @@ webhooks:
gridApiFixedFee: 10
gridApiVariableFeeRate: 0.003
gridApiVariableFeeAmount: 30
+ outgoingCompletedCryptoPayment:
+ summary: Completed crypto payout to an external wallet
+ value:
+ id: Webhook:019542f5-b3e7-1d02-0000-000000000008
+ type: OUTGOING_PAYMENT.COMPLETED
+ timestamp: '2025-08-15T14:32:00Z'
+ data:
+ id: Transaction:019542f5-b3e7-1d02-0000-000000000009
+ status: COMPLETED
+ type: OUTGOING
+ direction: DEBIT
+ source:
+ sourceType: ACCOUNT
+ accountId: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ destination:
+ destinationType: ACCOUNT
+ accountId: ExternalAccount:c34dcbd6-dced-4ec4-b756-3c3a9ea3d789
+ onChainTransaction:
+ transactionHash: h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx
+ network: SOLANA
+ customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
+ platformCustomerId: 18d3e5f7b4a9c2
+ sentAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ receivedAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ quoteId: Quote:019542f5-b3e7-1d02-0000-000000000010
+ settledAt: '2025-08-15T14:30:00Z'
+ createdAt: '2025-08-15T14:25:18Z'
+ description: USDC withdrawal to self-custody wallet
+ paymentInstructions: []
failedPayment:
summary: Failed outgoing payment
value:
@@ -16950,6 +17023,31 @@ components:
type: string
description: Currency code for the destination
example: EUR
+ CryptoNetwork:
+ type: string
+ enum:
+ - BITCOIN
+ - ETHEREUM
+ - SOLANA
+ - BASE
+ - POLYGON
+ - TRON
+ - SPARK
+ description: The blockchain network an on-chain transaction settled on. Whether this is the mainnet or a test network (e.g. Solana devnet) is determined by your platform's environment — sandbox platforms operate on test networks, production platforms on mainnet — mirroring how `cryptoNetwork` is interpreted elsewhere in the API.
+ example: SOLANA
+ OnChainTransaction:
+ type: object
+ required:
+ - transactionHash
+ - network
+ properties:
+ transactionHash:
+ type: string
+ description: On-chain transaction hash of the crypto transfer for this leg of the transaction.
+ example: h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx
+ network:
+ $ref: '#/components/schemas/CryptoNetwork'
+ description: Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).
AccountTransactionDestination:
title: Account Destination
allOf:
@@ -16967,6 +17065,9 @@ components:
type: string
description: Destination account identifier
example: ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123
+ onChainTransaction:
+ $ref: '#/components/schemas/OnChainTransaction'
+ description: On-chain transaction that delivered funds to this destination, when the destination is an external crypto wallet. Populated once the crypto transfer has settled.
description: Destination account details
UmaAddressTransactionDestination:
title: UMA Address Destination
@@ -17101,6 +17202,9 @@ components:
type: string
description: Source account identifier
example: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ onChainTransaction:
+ $ref: '#/components/schemas/OnChainTransaction'
+ description: On-chain transaction that delivered funds from this source, when the source is an external crypto wallet. Populated once the crypto transfer has settled.
description: Source account details
UmaAddressTransactionSource:
title: UMA Address Source
@@ -17173,6 +17277,9 @@ components:
type: string
description: Rail-level tracking identifier for the payment, such as an ACH trace number or a wire IMAD/OMAD, useful for reconciliation.
example: '021000020123456'
+ onChainTransaction:
+ $ref: '#/components/schemas/OnChainTransaction'
+ description: On-chain transaction that delivered the funding, when the funds arrived from an external crypto wallet. Populated once the crypto transfer has settled.
description: Transaction was funded using an external funding source. All originator fields are optional and populated on a best-effort basis depending on what the funding source provides.
TransactionSourceOneOf:
oneOf:
@@ -17188,6 +17295,7 @@ components:
ReconciliationInstructions:
type: object
minProperties: 1
+ description: Instructions for reconciling a payment with this transaction. For the on-chain transaction to or from an external crypto wallet that is the transaction's own source or destination, use the `onChainTransaction` on the relevant source or destination instead.
properties:
reference:
type: string
@@ -17195,7 +17303,7 @@ components:
example: UMA-Q12345-REF
transactionHash:
type: string
- description: Transaction hash for the crypto transfer that delivered funds to the transaction destination, when available.
+ description: Transaction hash of the internal settlement transfer used to deliver a UMA payment — the inter-VASP settlement leg (e.g. USDC on Solana to the receiving partner), when available. This is not a transfer to a customer's own wallet; for that, see the `onChainTransaction` on the transaction's source or destination.
example: '0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566'
IncomingRateDetails:
description: 'Details about the rate and fees for an incoming transaction. Note: `gridApiFixedFee` is denominated in the receiving currency, so its equivalent value in the sending currency fluctuates with the FX rate. As a result, the total fee on a subsequent quote for the same transfer may differ even if the underlying fee structure is unchanged.'
@@ -17430,7 +17538,7 @@ components:
example: 10
reconciliationInstructions:
$ref: '#/components/schemas/ReconciliationInstructions'
- description: Reconciliation details for this transaction, including crypto transaction hash when available.
+ description: Reconciliation details for this transaction. For the on-chain hash of a crypto payout to an external wallet, see the destination's `onChainTransaction` instead.
quoteId:
type: string
description: The ID of the quote that was used to trigger this payment
diff --git a/openapi/components/schemas/common/ReconciliationInstructions.yaml b/openapi/components/schemas/common/ReconciliationInstructions.yaml
index ee58c1e40..a52648183 100644
--- a/openapi/components/schemas/common/ReconciliationInstructions.yaml
+++ b/openapi/components/schemas/common/ReconciliationInstructions.yaml
@@ -1,5 +1,9 @@
type: object
minProperties: 1
+description: >-
+ Instructions for reconciling a payment with this transaction. For the on-chain
+ transaction to or from an external crypto wallet that is the transaction's own source or
+ destination, use the `onChainTransaction` on the relevant source or destination instead.
properties:
reference:
type: string
@@ -10,6 +14,8 @@ properties:
transactionHash:
type: string
description: >-
- Transaction hash for the crypto transfer that delivered funds to the
- transaction destination, when available.
+ Transaction hash of the internal settlement transfer used to deliver a UMA payment —
+ the inter-VASP settlement leg (e.g. USDC on Solana to the receiving partner), when
+ available. This is not a transfer to a customer's own wallet; for that, see the
+ `onChainTransaction` on the transaction's source or destination.
example: "0x9f2c6b6f4b6c8f2a8d9e0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566"
diff --git a/openapi/components/schemas/crypto/CryptoNetwork.yaml b/openapi/components/schemas/crypto/CryptoNetwork.yaml
new file mode 100644
index 000000000..8ea3884d6
--- /dev/null
+++ b/openapi/components/schemas/crypto/CryptoNetwork.yaml
@@ -0,0 +1,15 @@
+type: string
+enum:
+ - BITCOIN
+ - ETHEREUM
+ - SOLANA
+ - BASE
+ - POLYGON
+ - TRON
+ - SPARK
+description: >-
+ The blockchain network an on-chain transaction settled on. Whether this is the
+ mainnet or a test network (e.g. Solana devnet) is determined by your platform's
+ environment — sandbox platforms operate on test networks, production platforms on
+ mainnet — mirroring how `cryptoNetwork` is interpreted elsewhere in the API.
+example: SOLANA
diff --git a/openapi/components/schemas/transactions/AccountTransactionDestination.yaml b/openapi/components/schemas/transactions/AccountTransactionDestination.yaml
index 1e85b52e9..12a9984e7 100644
--- a/openapi/components/schemas/transactions/AccountTransactionDestination.yaml
+++ b/openapi/components/schemas/transactions/AccountTransactionDestination.yaml
@@ -14,4 +14,9 @@ allOf:
type: string
description: Destination account identifier
example: ExternalAccount:a12dcbd6-dced-4ec4-b756-3c3a9ea3d123
+ onChainTransaction:
+ $ref: ./OnChainTransaction.yaml
+ description: >-
+ On-chain transaction that delivered funds to this destination, when the destination
+ is an external crypto wallet. Populated once the crypto transfer has settled.
description: Destination account details
diff --git a/openapi/components/schemas/transactions/AccountTransactionSource.yaml b/openapi/components/schemas/transactions/AccountTransactionSource.yaml
index f3a05e2a9..98fde70a6 100644
--- a/openapi/components/schemas/transactions/AccountTransactionSource.yaml
+++ b/openapi/components/schemas/transactions/AccountTransactionSource.yaml
@@ -14,4 +14,9 @@ allOf:
type: string
description: Source account identifier
example: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ onChainTransaction:
+ $ref: ./OnChainTransaction.yaml
+ description: >-
+ On-chain transaction that delivered funds from this source, when the source is an
+ external crypto wallet. Populated once the crypto transfer has settled.
description: Source account details
diff --git a/openapi/components/schemas/transactions/OnChainTransaction.yaml b/openapi/components/schemas/transactions/OnChainTransaction.yaml
new file mode 100644
index 000000000..12eeb5ea7
--- /dev/null
+++ b/openapi/components/schemas/transactions/OnChainTransaction.yaml
@@ -0,0 +1,12 @@
+type: object
+required:
+ - transactionHash
+ - network
+properties:
+ transactionHash:
+ type: string
+ description: On-chain transaction hash of the crypto transfer for this leg of the transaction.
+ example: 'h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx'
+ network:
+ $ref: ../crypto/CryptoNetwork.yaml
+ description: Blockchain network the transaction settled on (mainnet vs test network is determined by your platform environment).
diff --git a/openapi/components/schemas/transactions/OutgoingTransaction.yaml b/openapi/components/schemas/transactions/OutgoingTransaction.yaml
index b6ff7eb16..4862163c5 100644
--- a/openapi/components/schemas/transactions/OutgoingTransaction.yaml
+++ b/openapi/components/schemas/transactions/OutgoingTransaction.yaml
@@ -37,8 +37,8 @@ allOf:
reconciliationInstructions:
$ref: ../common/ReconciliationInstructions.yaml
description: >-
- Reconciliation details for this transaction, including crypto
- transaction hash when available.
+ Reconciliation details for this transaction. For the on-chain hash of a crypto
+ payout to an external wallet, see the destination's `onChainTransaction` instead.
quoteId:
type: string
description: The ID of the quote that was used to trigger this payment
diff --git a/openapi/components/schemas/transactions/RealtimeFundingTransactionSource.yaml b/openapi/components/schemas/transactions/RealtimeFundingTransactionSource.yaml
index 8afbf9562..256f106a5 100644
--- a/openapi/components/schemas/transactions/RealtimeFundingTransactionSource.yaml
+++ b/openapi/components/schemas/transactions/RealtimeFundingTransactionSource.yaml
@@ -60,6 +60,11 @@ allOf:
Rail-level tracking identifier for the payment, such as an ACH trace
number or a wire IMAD/OMAD, useful for reconciliation.
example: '021000020123456'
+ onChainTransaction:
+ $ref: ./OnChainTransaction.yaml
+ description: >-
+ On-chain transaction that delivered the funding, when the funds arrived from an
+ external crypto wallet. Populated once the crypto transfer has settled.
description: >-
Transaction was funded using an external funding source. All originator
fields are optional and populated on a best-effort basis depending on what
diff --git a/openapi/webhooks/incoming-payment.yaml b/openapi/webhooks/incoming-payment.yaml
index 2127d1ad3..8079a41f7 100644
--- a/openapi/webhooks/incoming-payment.yaml
+++ b/openapi/webhooks/incoming-payment.yaml
@@ -133,6 +133,38 @@ post:
description: Payment for services
reconciliationInstructions:
reference: REF-123456789
+ incomingCompletedCryptoPayment:
+ summary: Completed payment funded from an external crypto wallet
+ value:
+ id: Webhook:019542f5-b3e7-1d02-0000-000000000009
+ type: INCOMING_PAYMENT.COMPLETED
+ timestamp: '2025-08-15T14:32:00Z'
+ data:
+ id: Transaction:019542f5-b3e7-1d02-0000-000000000006
+ status: COMPLETED
+ type: INCOMING
+ direction: CREDIT
+ source:
+ sourceType: REALTIME_FUNDING
+ currency: USDC
+ onChainTransaction:
+ transactionHash: 7RJWhvQBQPEjJmki5fhBboGBWRJhmcFkMvrr4Fu3tMSJ5EdynMEiYSyiWAH9GpcbHpeUzeSQF9ZY6q4x8AhBskUf
+ network: SOLANA
+ destination:
+ destinationType: ACCOUNT
+ accountId: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
+ platformCustomerId: 18d3e5f7b4a9c2
+ receivedAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ settledAt: '2025-08-15T14:30:00Z'
+ createdAt: '2025-08-15T14:25:18Z'
+ description: USDC deposit from self-custody wallet
responses:
'200':
description: >
diff --git a/openapi/webhooks/outgoing-payment.yaml b/openapi/webhooks/outgoing-payment.yaml
index 2be94b05c..219a17db2 100644
--- a/openapi/webhooks/outgoing-payment.yaml
+++ b/openapi/webhooks/outgoing-payment.yaml
@@ -88,6 +88,47 @@ post:
gridApiFixedFee: 10
gridApiVariableFeeRate: 0.003
gridApiVariableFeeAmount: 30
+ outgoingCompletedCryptoPayment:
+ summary: Completed crypto payout to an external wallet
+ value:
+ id: Webhook:019542f5-b3e7-1d02-0000-000000000008
+ type: OUTGOING_PAYMENT.COMPLETED
+ timestamp: '2025-08-15T14:32:00Z'
+ data:
+ id: Transaction:019542f5-b3e7-1d02-0000-000000000009
+ status: COMPLETED
+ type: OUTGOING
+ direction: DEBIT
+ source:
+ sourceType: ACCOUNT
+ accountId: InternalAccount:e85dcbd6-dced-4ec4-b756-3c3a9ea3d965
+ destination:
+ destinationType: ACCOUNT
+ accountId: ExternalAccount:c34dcbd6-dced-4ec4-b756-3c3a9ea3d789
+ onChainTransaction:
+ transactionHash: h82pJGF9p7kpzb6eU326EFZf2cDnimbTFVeJtx1qtBmUNJAEqN76R7PwPfHt3oWb8R6cKvhgyxQdDn53jFrK6wFx
+ network: SOLANA
+ customerId: Customer:019542f5-b3e7-1d02-0000-000000000001
+ platformCustomerId: 18d3e5f7b4a9c2
+ sentAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ receivedAmount:
+ amount: 100000
+ currency:
+ code: USDC
+ name: USD Coin
+ symbol: ''
+ decimals: 6
+ quoteId: Quote:019542f5-b3e7-1d02-0000-000000000010
+ settledAt: '2025-08-15T14:30:00Z'
+ createdAt: '2025-08-15T14:25:18Z'
+ description: USDC withdrawal to self-custody wallet
+ paymentInstructions: []
failedPayment:
summary: Failed outgoing payment
value: