openapi: 3.2.0
info:
title: Fin.com Webhooks API
version: 1.0.0
description: A simple API specificationFo
servers:
- url: https://sandbox.api.fin.com
description: Sandbox server
- url: https://api.fin.com
description: Production server
tags:
- name: Webhooks
paths: {}
webhooks:
transit.payment.status:
post:
summary: Transit Payment Status
description: Triggered when a transit payment's status changes through the payment and settlement flow.
x-mint:
metadata:
title: transit.payment.status
content: "## Payment Status Values\n- **PAY_INIT**: Payment initialized\n- **PAY_PROCESS**: Payment is being processed\n- **PAY_SUCCESS**: Payment completed successfully\n- **PAY_FAILED**: Payment failed\n- **PAY_TIMEOUT**: Payment timed out\n- **PAY_CANCEL**: Payment was cancelled\n- **SETTLEMENT_INIT**: Settlement process started\n- **SETTLEMENT_SUCCESS**: Settlement completed successfully\n- **SETTLEMENT_HOLD**: On hold due to insufficient rebalancing funds. Fin will auto-proceed once funds are available.\n- **SETTLEMENT_FAILED**: Settlement failed after 3 retry attempts\n\n\n The `settlement_info` field will be `null` for PAY_* statuses and populated for SETTLEMENT_* statuses.\n\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- event
- data
properties:
event:
type: object
required:
- id
- type
- event_reference_id
- created_at
properties:
id:
type: string
format: uuid
example: 550e8400-e29b-41d4-a716-446655440000
type:
type: string
enum:
- transit.payment.status
example: transit.payment.status
event_reference_id:
type: string
format: uuid
description: Reference to the payment_id
example: FIN_PROVIDED_UUID
created_at:
type: string
format: date-time
example: '2025-10-10T15:40:56Z'
data:
type: object
required:
- payment_id
- integration_type
- status
- create_time
- payment_info
properties:
payment_id:
type: string
format: uuid
example: FIN_PROVIDED_UUID
integration_type:
type: string
example: BYBIT
quote_id:
type: string
format: uuid
example: FIN_PROVIDED_UUID
status:
type: string
enum:
- PAY_INIT
- PAY_PROCESS
- PAY_SUCCESS
- PAY_FAILED
- PAY_TIMEOUT
- PAY_CANCEL
- SETTLEMENT_INIT
- SETTLEMENT_HOLD
- SETTLEMENT_SUCCESS
- SETTLEMENT_FAILED
example: PAY_INIT
create_time:
type: integer
example: 1740748353
payment_info:
type: object
properties:
pay_id:
type: string
example: 01JN6AZVEMAC8H9SED6JES3QH8
merchant_trade_no:
type: string
example: 841e4ba2-...-a2a45de7bd00
amount:
type: string
example: '100'
status:
type: string
enum:
- PAY_INIT
- PAY_PROCESS
- PAY_SUCCESS
- PAY_FAILED
- PAY_TIMEOUT
- PAY_CANCEL
example: PAY_INIT
currency:
type: string
example: USDT
currency_type:
type: string
example: crypto
expire_time:
type: integer
example: 1740751953
payment_time:
type: integer
description: 0 until PAY_SUCCESS
example: 0
settlement_info:
type: object
nullable: true
description: null for PAY_* statuses, populated for SETTLEMENT_* statuses
properties:
settlement_via:
type: string
enum:
- ONE_TO_ONE
- MARKET_ORDER
- FEE_RETENTION
example: MARKET_ORDER
wallet_address:
type: string
example: 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU
currency:
type: string
enum:
- USDC
- USDT
- BTC
- ETH
example: USDC
rail:
type: string
enum:
- SOLANA
- BITCOIN
- ETHEREUM
- BASE
example: SOLANA
amount:
type: string
example: '100'
trx_hash:
type: string
nullable: true
settle_time:
type: integer
example: 0
status:
type: string
enum:
- SETTLEMENT_INIT
- SETTLEMENT_HOLD
- SETTLEMENT_SUCCESS
- SETTLEMENT_FAILED
example: SETTLEMENT_INIT
retry_attempts:
type: integer
minimum: 0
maximum: 3
example: 0
examples:
paymentInitiated:
summary: Payment Initiated
value:
event:
id: 550e8400-e29b-41d4-a716-446655440000
type: transit.payment.status
event_reference_id: FIN_PROVIDED_UUID
created_at: '2025-10-10T15:40:56Z'
data:
payment_id: FIN_PROVIDED_UUID
integration_type: BYBIT
status: PAY_INIT
create_time: 1740748353
payment_info:
pay_id: 01JN6AZVEMAC8H9SED6JES3QH8
merchant_trade_no: 841e4ba2-...-a2a45de7bd00
amount: '100'
status: PAY_INIT
currency: USDT
currency_type: crypto
expire_time: 1740751953
payment_time: 0
settlement_info: null
settlementSuccess:
summary: Settlement Success
value:
event:
id: 550e8400-e29b-41d4-a716-446655440003
type: transit.payment.status
event_reference_id: FIN_PROVIDED_UUID
created_at: '2025-10-10T15:47:00Z'
data:
payment_id: FIN_PROVIDED_UUID
integration_type: BYBIT
status: SETTLEMENT_SUCCESS
create_time: 1740748353
payment_info:
pay_id: 01JN6AZVEMAC8H9SED6JES3QH8
merchant_trade_no: 841e4ba2-...-a2a45de7bd00
amount: '100'
status: PAY_SUCCESS
currency: USDT
currency_type: crypto
expire_time: 1740751953
payment_time: 1740748353
settlement_info:
settlement_via: MARKET_ORDER
wallet_address: 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU
currency: USDC
rail: SOLANA
amount: '100'
trx_hash: 0x580...
settle_time: 1740748353
status: SETTLEMENT_SUCCESS
retry_attempts: 0
responses:
'200':
description: Webhook received successfully
customer.created:
post:
summary: Customer Created
description: Triggered when a customer is successfully created.
x-mint:
metadata:
title: customer.created
content: "Triggered when a customer is successfully created. Supports both `INDIVIDUAL` and `BUSINESS` customer types.\n\n\n All webhook requests include HMAC signatures for verification.\n Learn how to [verify webhook signatures](/guides/webhooks/verifying-webhooks).\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
oneOf:
- $ref: '#/components/schemas/IndividualCustomerData'
- $ref: '#/components/schemas/BusinessCustomerData'
examples:
individualCreated:
summary: Individual Customer Created
value:
event:
id: 60bef15c-4e30-4eb4-bc4d-aa697a7e0857
event_reference_id: c3309534-1517-4d15-b244-be8f943c3823
type: customer.created
created_at: '2025-11-30T07:40:06.853938Z'
sandbox_mode: true
data:
country_of_residence: USA
created_at: '2025-11-30T07:40:06Z'
customer_id: c3309534-1517-4d15-b244-be8f943c3823
customer_status: INCOMPLETE
email: john.doe@email.com
first_name: John
last_name: Doe
phone: '+12597751234'
tos_policies_url: 25764ef6-0f4f-4846-b7c6-9df0598358e9
type: INDIVIDUAL
verification_type: RELIANCE
businessCreated:
summary: Business Customer Created
value:
event:
id: d2a592e4-5703-46aa-b1ac-fa1fa6359abf
event_reference_id: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
type: customer.created
created_at: '2026-04-13T11:38:57.819938Z'
sandbox_mode: false
data:
associated_parties:
- email: fatima.rahman22@acmecorp.com.bd
id: f6b13e01-044a-4f74-a70b-d5f66b6449af
ownership_percent: 60
type: INDIVIDUAL
verification:
reason:
for_customer: null
for_developer: null
status: INITIATED
updated_at: '2026-04-13T11:38:57.824452053Z'
- email: karim.islam22@acmecorp.com.bd
id: f71dc19f-b9a0-49fb-bd2d-5add3c01626e
ownership_percent: 40
type: INDIVIDUAL
verification:
reason:
for_customer: null
for_developer: null
status: INITIATED
updated_at: '2026-04-13T11:38:57.824452053Z'
business_name: Fin.com
country_of_incorporation: BGD
created_at: '2026-04-13T11:38:57Z'
customer_id: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
customer_status: INCOMPLETE
email: m@tech.com
phone: '+8801529876543'
type: BUSINESS
verification_type: STANDARD
responses:
'200':
description: Webhook received successfully
customer.status:
post:
summary: Customer Status
description: Triggered when a customer's status changes during verification.
x-mint:
metadata:
title: customer.status
content: "### Customer Status Values\n\nThe status values in the payload depend on which API version was used to create the customer. V1 and V2 use different status names for the same underlying states. V1 has not been deprecated and both sets of statuses are active.\n\n| Status | V1 Name | V2 Name | Description |\n|--------|---------|---------|-------------|\n| Awaiting processing | `QUEUED` | `PROCESSING` | Verification request sent to the work processor |\n| Under review | `REVIEWING` | `REVIEWING` | Customer verification is currently under review |\n| Verified | `APPROVED` | `APPROVED` | Successfully verified and approved |\n| Parties pending | `ASSOCIATED_PARTIES_REMAINING` | `ASSOCIATED_PARTIES_REMAINING` | Additional associated parties need verification |\n| Paused | `ON_HOLD` | `IN_COMPLIANCE` | Verification paused for compliance review |\n| Action needed | `REINITIATE` | `ACTION_REQUIRED` | New document upload required |\n| Rejected | `REJECTED` | `REJECTED` | Customer verification rejected |\n\n\n `ACTION_REQUIRED` (V2) is also set by the `customer.rfi` webhook, which includes a structured payload describing exactly which documents or fields are missing or invalid.\n\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
oneOf:
- $ref: '#/components/schemas/IndividualCustomerData'
- $ref: '#/components/schemas/BusinessCustomerData'
examples:
v1IndividualQueued:
summary: 'V1: Individual Customer Queued'
value:
event:
id: 29ceb6c4-4849-4312-9b2b-5e8360647da0
event_reference_id: f9e1b162-8a05-4611-9e13-f38e0eb24a29
type: customer.status
created_at: '2026-01-18T09:08:18.66348Z'
sandbox_mode: true
data:
customer_id: f9e1b162-8a05-4611-9e13-f38e0eb24a29
customer_status: QUEUED
email: john.doe@acmecorp.com
first_name: John
last_name: Doe
type: INDIVIDUAL
verification_type: STANDARD
v1BusinessOnHold:
summary: 'V1: Business Customer On Hold'
value:
event:
id: 0deacdde-cd58-42ea-8a1c-dde8668a92e4
event_reference_id: 98665e7d-7736-4762-a57a-cc1e6706302f
type: customer.status
created_at: '2026-01-18T10:32:59.434557Z'
sandbox_mode: true
data:
business_name: Acme Corp Ltd
country_of_incorporation: USA
customer_id: 98665e7d-7736-4762-a57a-cc1e6706302f
customer_status: ON_HOLD
email: contact@acmecorp.com
type: BUSINESS
verification_type: STANDARD
v1BusinessReinitiate:
summary: 'V1: Business Customer Reinitiate'
value:
event:
id: c8f2a5b1-3e4d-4a9c-b7e2-d1f3c8a9b0e5
event_reference_id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
type: customer.status
created_at: '2026-01-20T14:15:30.123456Z'
sandbox_mode: true
data:
business_name: Acme Corp Ltd
country_of_incorporation: USA
customer_id: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
customer_status: REINITIATE
email: contact@acmecorp.com
type: BUSINESS
verification_type: STANDARD
v2IndividualProcessing:
summary: 'V2: Individual Customer Processing'
value:
event:
id: 3a4b5c6d-7e8f-9012-abcd-ef1234567890
event_reference_id: f9e1b162-8a05-4611-9e13-f38e0eb24a29
type: customer.status
created_at: '2026-04-04T09:08:18.66348Z'
sandbox_mode: false
data:
customer_id: f9e1b162-8a05-4611-9e13-f38e0eb24a29
customer_status: PROCESSING
email: john.doe@acmecorp.com
first_name: John
last_name: Doe
type: INDIVIDUAL
verification_type: STANDARD
v2BusinessInCompliance:
summary: 'V2: Business Customer In Compliance'
value:
event:
id: 0deacdde-cd58-42ea-8a1c-dde8668a92e4
event_reference_id: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
type: customer.status
created_at: '2026-04-13T11:40:51.434557Z'
sandbox_mode: false
data:
business_name: Fin.com
country_of_incorporation: BGD
customer_id: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
customer_status: IN_COMPLIANCE
email: m@tech.com
type: BUSINESS
verification_type: STANDARD
v2BusinessActionRequired:
summary: 'V2: Business Customer Action Required'
value:
event:
id: f1e2d3c4-b5a6-7890-cdef-123456789012
event_reference_id: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
type: customer.status
created_at: '2026-04-13T11:40:51.000000Z'
sandbox_mode: false
data:
business_name: Fin.com
country_of_incorporation: BGD
customer_id: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
customer_status: ACTION_REQUIRED
email: m@tech.com
type: BUSINESS
verification_type: STANDARD
responses:
'200':
description: Webhook received successfully
customer.rfi:
post:
summary: Customer RFI
description: Triggered when the compliance team requests additional information or documents from a customer. Sets the customer status to ACTION_REQUIRED. The payload includes a structured list of what is missing, invalid, or expired, scoped to either the customer or a specific associated party.
x-mint:
metadata:
title: customer.rfi
content: "### When This Fires\nThis webhook fires when compliance flags one or more documents or fields\nas missing, expired, or invalid. The customer status will be set to\n`ACTION_REQUIRED`.\n\n\n An RFI can also be triggered after a customer is already `APPROVED`. In that case the customer status remains unchanged. Only the `rrequest_for_information` object in the payload will contain data and this webhook will be received.\n\n\n### RFI Available Scope\n- **CUSTOMER**: The issue is with the customer's own documents or data\n- **ASSOCIATED PARTY**: The issue is with a specific associated party (identified by `associated_party_id`)\n\n### Field Status Values\n- **MISSING**: Document or field was not provided\n- **EXPIRED**: Document has passed its expiry date\n- **INVALID**: Document or field value does not meet requirements (see `reason`)\n\n### Section Values by Customer Type\n\n| Customer Type | Sections |\n|---------------|----------|\n| Individual | `proof_of_identity`, `proof_of_address`, `tos_policies_value` |\n| Business V1 | `company_details`, `ownership_structure`, `legal_presence` |\n| Business V2 | `formation_documents`, `ownership_documents`, `supporting_documents` |\n| Associated Party (V1) | `proof_of_identity`, `proof_of_address` |\n| Associated Party (V2) | `identifying_documents`, `tax_info`, `address_documents` |\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
type: object
required:
- customer_id
- request_for_information
properties:
customer_id:
type: string
format: uuid
description: The customer for whom information is requested.
example: cust-uuid-1234
request_for_information:
type: array
description: List of document or field issues that must be resolved.
items:
type: object
required:
- section
- categories
properties:
section:
type: string
description: 'The document section with the issue. Individual: proof_of_identity, proof_of_address, tos_policies_value. Business V1: company_details, ownership_structure, legal_presence. Business V2: formation_documents, ownership_documents, supporting_documents. Associated Party V1: proof_of_identity, proof_of_address. Associated Party V2: identifying_documents, tax_info, address_documents.'
example: proof_of_identity
categories:
type: array
items:
type: object
required:
- document_type
- fields
properties:
document_type:
type: string
description: The type of document with the issue.
example: GOVERNMENT_ID
fields:
type: array
items:
type: object
required:
- field_name
- data_type
- status
properties:
field_name:
type: string
description: The specific field with the issue.
example: files
data_type:
type: string
enum:
- URI
- DATE
- TEXT
- ENUM
description: The data type of the field.
example: URI
status:
type: string
enum:
- MISSING
- EXPIRED
- INVALID
description: The nature of the issue.
example: EXPIRED
side:
type: string
enum:
- FRONT
- BACK
nullable: true
description: For file fields only. Indicates which side of the document is affected. Null for non-file fields.
example: FRONT
reason:
type: string
nullable: true
description: Human-readable explanation. Null when status is MISSING.
example: Document has expired
examples:
individual:
summary: Individual Customer RFI
value:
event:
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
event_reference_id: cust-uuid-1234
type: customer.rfi
created_at: '2026-04-04T10:00:00.000000Z'
sandbox_mode: false
data:
customer_id: cust-uuid-1234
request_for_information:
- section: proof_of_identity
categories:
- document_type: GOVERNMENT_ID
fields:
- field_name: files
data_type: URI
status: EXPIRED
reason: Document has expired
side: FRONT
- field_name: files
data_type: URI
status: INVALID
reason: Back side damaged
side: BACK
- field_name: issue_date
data_type: DATE
status: MISSING
reason: null
- field_name: expiry_date
data_type: DATE
status: MISSING
reason: null
- field_name: text
data_type: TEXT
status: INVALID
reason: Name mismatch
- section: proof_of_address
categories:
- document_type: PROOF_OF_ADDRESS
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
- section: tos_policies_value
categories:
- document_type: TOS
fields:
- field_name: tos_policies_value
data_type: TEXT
status: MISSING
reason: null
businessV1:
summary: Business Customer V1 RFI
value:
event:
id: b2c3d4e5-f6a7-8901-bcde-f12345678901
event_reference_id: biz-uuid-5678
type: customer.rfi
created_at: '2026-04-04T10:00:00.000000Z'
sandbox_mode: false
data:
customer_id: biz-uuid-5678
request_for_information:
- section: company_details
categories:
- document_type: CERT_OF_INCORPORATION
fields:
- field_name: files
data_type: URI
status: INVALID
reason: Document is illegible
side: FRONT
- field_name: text
data_type: TEXT
status: INVALID
reason: Business name mismatch
- section: ownership_structure
categories:
- document_type: SHAREHOLDER_REGISTRY
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
- section: legal_presence
categories:
- document_type: PROOF_OF_ADDRESS
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
- section: proof_of_identity
categories:
- document_type: GOVERNMENT_ID
fields:
- field_name: files
data_type: URI
status: EXPIRED
reason: Document expired
side: FRONT
- field_name: files
data_type: URI
status: INVALID
reason: Back side blurry
side: BACK
- field_name: issue_date
data_type: DATE
status: MISSING
reason: null
- field_name: expiry_date
data_type: DATE
status: MISSING
reason: null
- field_name: text
data_type: TEXT
status: INVALID
reason: Name mismatch
- section: proof_of_address
categories:
- document_type: PROOF_OF_ADDRESS
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
businessV2:
summary: Business Customer V2 RFI
value:
event:
id: c3d4e5f6-a7b8-9012-cdef-123456789012
event_reference_id: biz-uuid-9999
type: customer.rfi
created_at: '2026-04-04T10:00:00.000000Z'
sandbox_mode: false
data:
customer_id: biz-uuid-9999
request_for_information:
- section: formation_documents
categories:
- document_type: CERT_OF_INCORPORATION
fields:
- field_name: files
data_type: URI
status: INVALID
reason: Document illegible
side: FRONT
- field_name: text
data_type: TEXT
status: INVALID
reason: Registration number mismatch
- section: ownership_documents
categories:
- document_type: SHAREHOLDER_REGISTRY
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
- section: supporting_documents
categories:
- document_type: PROOF_OF_ADDRESS
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
- section: identifying_documents
categories:
- document_type: GOVERNMENT_ID
fields:
- field_name: files
data_type: URI
status: EXPIRED
reason: ID expired
side: FRONT
- field_name: files
data_type: URI
status: INVALID
reason: Back side damaged
side: BACK
- field_name: issue_date
data_type: DATE
status: MISSING
reason: null
- field_name: expiry_date
data_type: DATE
status: MISSING
reason: null
- field_name: text
data_type: TEXT
status: INVALID
reason: Name mismatch
- section: tax_info
categories:
- document_type: GOVERNMENT_ID
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
- field_name: text
data_type: TEXT
status: INVALID
reason: Tax ID mismatch
- section: address_documents
categories:
- document_type: PROOF_OF_ADDRESS
fields:
- field_name: files
data_type: URI
status: MISSING
reason: null
responses:
'200':
description: Webhook received successfully
transaction.status:
post:
summary: Transaction Status
description: Triggered when a transaction's status changes.
x-mint:
metadata:
title: transaction.status
content: "Transaction types: `ONRAMP`, `OFFRAMP`, `CRYPTO_DEPOSIT`, `CRYPTO_WITHDRAWAL`\n\nCommon status values: `FUNDS_RECEIVED`, `PROCESSING`, `COMPLETED`, `FAILED`, `REFUNDED`\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
type: object
properties:
id:
type: string
format: uuid
example: ca9a04d8-4e68-4557-b9c6-3881e9d6b26d
status:
type: string
enum:
- FUNDS_RECEIVED
- PROCESSING
- COMPLETED
- FAILED
- CANCELLED
example: FUNDS_RECEIVED
beneficiary_id:
type: string
format: uuid
from_amount:
type: number
example: 6
from_currency:
type: string
example: USDC
payout_amount:
type: number
example: 5.55595028
payout_currency:
type: string
example: CAD
processing_amount:
type: number
example: 4.2164
fx_rate:
type: number
example: 1.3177
developer_fee:
type: number
example: 1.7836
developer_fee_fixed:
type: number
example: 1.75
developer_fee_percentage:
type: number
example: 0.56
hash:
type: string
example: '0x3a282c0d2364632bdf9224eadf06b463190795bce24e46d3235e44d22f953461'
transaction_ref_id:
type: string
transaction_type:
type: string
description: 'Possible values: `ONRAMP`, `OFFRAMP`, `CRYPTO_DEPOSIT`, `CRYPTO_WITHDRAWAL`'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
examples:
fundsReceived:
summary: Funds Received
value:
event:
id: 2632ebb1-55ab-470a-9b24-accdb50aeb75
event_reference_id: ca9a04d8-4e68-4557-b9c6-3881e9d6b26d
type: transaction.status
created_at: '2025-12-01T09:14:34.651913Z'
sandbox_mode: true
data:
beneficiary_id: 47fcb2ca-9ed2-4188-a154-c83a04d9d34d
from_amount: 6
from_currency: USDC
fx_rate: 1.3177
id: ca9a04d8-4e68-4557-b9c6-3881e9d6b26d
payout_amount: 5.55595028
payout_currency: CAD
status: FUNDS_RECEIVED
transaction_type: ONRAMP
responses:
'200':
description: Webhook received successfully
virtual_account.created:
post:
summary: Virtual Account Created V1
description: Triggered when a new virtual account is created for a customer.
x-mint:
metadata:
title: virtual_account.created V1
content: "\n Register this webhook if you are using the **Create Virtual Account V1** endpoint.\n\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
$ref: '#/components/schemas/VirtualAccountWebhookData'
examples:
created:
summary: Virtual Account Created
value:
event:
id: 3fb02b56-911e-42c0-843c-c08785bdde56
event_reference_id: 900f750d-6868-457e-a777-1a35566a6b5f
type: virtual_account.created
created_at: '2025-12-10T08:11:25.269644Z'
sandbox_mode: true
data:
id: 900f750d-6868-457e-a777-1a35566a6b5f
customer_id: a41a6d76-4545-47ab-93d1-696a3221d39c
status: ACTIVE
developer_fee_percent: 0.5
responses:
'200':
description: Webhook received successfully
virtual_account.created.v2:
post:
summary: Virtual Account Created V2
description: Triggered when a new V2 virtual account is created for a customer.
x-mint:
metadata:
title: virtual_account.created V2
content: "The account starts in `PROCESSING` status. `deposit_instructions` will be null until the account becomes active.\n\n\n Register this webhook if you are using the **Create Virtual Account V2** endpoint.\n\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/VirtualAccountV2StatusWebhookData'
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
examples:
created:
summary: Virtual Account Created
value:
data:
id: 86b7730c-1a8b-43f9-83f6-60a60dfcb513
rfi: null
status: PROCESSING
created_at: '2026-04-03T16:46:22.089047Z'
updated_at: '2026-04-03T16:46:22.089047Z'
customer_id: b22667c0-3e75-467f-9dc6-9739c348bc1a
destination:
address: '0x6e41e83d406185b358bd72111ab1206cb82eb67f'
currency: USDC
destination_chain: POLYGON
developer_fee_fixed: 0.1
deposit_instructions: null
developer_fee_percent: 0.1
event:
id: 7b86dec8-34eb-4c48-9780-6a69037d4c05
type: virtual_account.created.v2
created_at: '2026-04-03T16:46:22.117583Z'
sandbox_mode: true
event_reference_id: 86b7730c-1a8b-43f9-83f6-60a60dfcb513
responses:
'200':
description: Webhook received successfully
virtual_account.status:
post:
summary: Virtual Account Status V1
description: Triggered when a virtual account's status changes.
x-mint:
metadata:
title: virtual_account.status V1
content: "Common status values: `ACTIVE`, `INACTIVE`, `SUSPENDED`\n\n\n Register this webhook if you are using the **Create Virtual Account V1** endpoint.\n\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
$ref: '#/components/schemas/VirtualAccountWebhookData'
responses:
'200':
description: Webhook received successfully
virtual_account.status.v2:
post:
summary: Virtual Account Status V2
description: Triggered when a V2 virtual account’s status changes.
x-mint:
metadata:
title: virtual_account.status V2
content: "Possible status values: `PROCESSING`, `IN_COMPLIANCE`, `REQUEST_FOR_INFORMATION`, `ACTIVE`, `INACTIVE`, `DECLINED`\n\n\n Register this webhook if you are using the **Create Virtual Account V2** endpoint.\n\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/VirtualAccountV2StatusWebhookData'
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
examples:
statusChanged:
summary: Virtual Account Status Changed
value:
data:
id: ed96d65a-5fb1-49f2-8715-0c6aa32220ca
rfi: null
status: ACTIVE
created_at: '2026-03-17T14:27:49.073891Z'
updated_at: '2026-03-17T14:42:55.788231316Z'
customer_id: c3088a8d-50de-48cf-a137-8d46815394f8
destination:
address: '0x7f1568190e318da16a9ef5a46cba19d5b97d9b29'
currency: USDC
destination_chain: POLYGON
developer_fee_fixed: 0.22
deposit_instructions:
currency: USD
bank_code:
code: SSBAUS32
type: SWIFT
bank_name: SSB Bank
account_type: BankSwift
bank_address: null
bank_country: USA
payment_rails:
- ACH
bank_account_number: '235464829825'
bank_routing_number: ''
developer_fee_percent: 0
event:
id: 8c236a87-4ab2-49af-b22f-02d1d8e12cfa
type: virtual_account.status.v2
created_at: '2026-03-17T14:42:55.813225Z'
sandbox_mode: true
event_reference_id: ed96d65a-5fb1-49f2-8715-0c6aa32220ca
responses:
'200':
description: Webhook received successfully
beneficiary.created:
post:
summary: Beneficiary Created
description: Triggered when a new beneficiary is created in the system.
x-mint:
metadata:
title: beneficiary.created
content: "\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
$ref: '#/components/schemas/BeneficiaryWebhookData'
examples:
individualCreated:
summary: Individual Beneficiary Created
value:
event:
id: 85804b3a-bf18-4d87-94f3-f7c45e66868e
event_reference_id: 4d715f20-f704-45e0-af56-19ade318e852
type: beneficiary.created
created_at: '2025-12-10T10:36:18.279837Z'
sandbox_mode: true
data:
active: true
beneficiary_id: 4d715f20-f704-45e0-af56-19ade318e852
customer_id: efb54adf-b7f4-4716-80e3-806e11f20b7b
type: INDIVIDUAL
responses:
'200':
description: Webhook received successfully
beneficiary.status:
post:
summary: Beneficiary Status
description: Triggered when a beneficiary's status changes.
x-mint:
metadata:
title: beneficiary.status
content: "### Beneficiary Status Values\n- **PROCESSING**: Beneficiary creation is in progress\n- **ACTIVE**: Beneficiary is verified and ready to receive payments\n- **INACTIVE**: Beneficiary has been deactivated\n- **REJECTED**: Beneficiary was rejected during verification\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
$ref: '#/components/schemas/BeneficiaryWebhookData'
examples:
processing:
summary: Beneficiary Processing
value:
event:
id: 40061557-f125-4b39-97d6-c16a0f1230c1
event_reference_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
type: beneficiary.status
created_at: '2026-04-04T17:38:26.843132Z'
sandbox_mode: true
data:
type: INDIVIDUAL
active: false
status: PROCESSING
customer_id: ecbd3a73-3bcb-40ae-be06-0e71f9b27c2f
beneficiary_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
active:
summary: Beneficiary Active
value:
event:
id: 50072668-a236-5c40-08e7-d27b1g2341d2
event_reference_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
type: beneficiary.status
created_at: '2026-04-04T17:39:10.123456Z'
sandbox_mode: true
data:
type: INDIVIDUAL
active: true
status: ACTIVE
customer_id: ecbd3a73-3bcb-40ae-be06-0e71f9b27c2f
beneficiary_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
inactive:
summary: Beneficiary Inactive
value:
event:
id: 60083779-b347-6d51-19f8-e38c2h3452e3
event_reference_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
type: beneficiary.status
created_at: '2026-04-05T08:00:00.000000Z'
sandbox_mode: false
data:
type: INDIVIDUAL
active: false
status: INACTIVE
customer_id: ecbd3a73-3bcb-40ae-be06-0e71f9b27c2f
beneficiary_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
rejected:
summary: Beneficiary Rejected
value:
event:
id: 70094880-c458-7e62-20g9-f49d3i4563f4
event_reference_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
type: beneficiary.status
created_at: '2026-04-05T09:00:00.000000Z'
sandbox_mode: false
data:
type: INDIVIDUAL
active: false
status: REJECTED
customer_id: ecbd3a73-3bcb-40ae-be06-0e71f9b27c2f
beneficiary_id: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
responses:
'200':
description: Webhook received successfully
beneficiary.liquidation.deposit:
post:
summary: Beneficiary Liquidation Deposit
description: Triggered when any transfer hits a beneficiary's liquidation address.
x-mint:
metadata:
title: beneficiary.liquidation.deposit
content: "\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
type: object
properties:
active:
type: boolean
example: true
amount:
type: number
example: 3
beneficiary_id:
type: string
format: uuid
example: 5b4ea7ee-9d40-44b3-b857-dd5a890b9313
customer_id:
type: string
format: uuid
example: bea5a6c1-0611-44c6-8c29-a6608e76916c
liquidation_address:
type: string
example: '0xade8141fd1aef58dc0a5365a32a6cfe95904c08f'
txn_hash:
type: string
example: '0x7808238a69057600f0c8e291ffbfde87a74fb81b32fc583231352147770e2751'
type:
type: string
enum:
- INDIVIDUAL
- BUSINESS
example: INDIVIDUAL
responses:
'200':
description: Webhook received successfully
batch.transaction.item.status:
post:
summary: Batch Transaction Item Status
description: Triggered when a batch transaction item's status changes after committing a batch.
x-mint:
metadata:
title: batch.transaction.item.status
content: "Currently fired only when a transaction item reaches `PENDING` status.\n\n\n All webhook requests include HMAC signatures for verification.\n\n"
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
event:
$ref: '#/components/schemas/WebhookEventEnvelope'
data:
type: object
properties:
batch_id:
type: string
format: uuid
batch_item_id:
type: string
format: uuid
status:
type: string
enum:
- PENDING
transaction_id:
type: string
format: uuid
examples:
pending:
summary: Batch Transaction Item Pending
value:
event:
id: b576fcfd-981f-4abd-81d8-14b2a0a8cb39
event_reference_id: ea8184e5-4250-486e-8a45-7718896c82b0
type: batch.transaction.item.status
created_at: '2026-01-08T16:57:20.266158Z'
sandbox_mode: true
data:
batch_id: 8f23036c-3dc8-445a-aad9-61564e028e56
batch_item_id: 05ed90f4-da44-4a56-bbd9-c65a42f925e6
status: PENDING
transaction_id: ea8184e5-4250-486e-8a45-7718896c82b0
responses:
'200':
description: Webhook received successfully
components:
schemas:
IndividualCustomerData:
type: object
properties:
customer_id:
type: string
format: uuid
example: c3309534-1517-4d15-b244-be8f943c3823
type:
type: string
enum:
- INDIVIDUAL
customer_status:
type: string
description: 'V1 statuses: INCOMPLETE, QUEUED, REVIEWING, APPROVED, ON_HOLD, REINITIATE, REJECTED. V2 statuses: INCOMPLETE, PROCESSING, REVIEWING, APPROVED, ACTION_REQUIRED, REJECTED. QUEUED (V1) → PROCESSING (V2). ON_HOLD (V1) → IN_COMPLIANCE (V2). REINITIATE (V1) → ACTION_REQUIRED (V2).'
enum:
- INCOMPLETE
- QUEUED
- PROCESSING
- REVIEWING
- APPROVED
- ON_HOLD
- IN_COMPLIANCE
- REINITIATE
- ACTION_REQUIRED
- REJECTED
example: INCOMPLETE
email:
type: string
format: email
example: john.doe@email.com
first_name:
type: string
example: John
last_name:
type: string
example: Doe
phone:
type: string
example: '+12597751234'
country_of_residence:
type: string
example: USA
verification_type:
type: string
enum:
- RELIANCE
- STANDARD
example: STANDARD
tos_policies_url:
type: string
example: 25764ef6-0f4f-4846-b7c6-9df0598358e9
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
BeneficiaryWebhookData:
type: object
properties:
beneficiary_id:
type: string
format: uuid
example: e8fccaeb-fb9d-4fae-846e-ea7c97c70b31
customer_id:
type: string
format: uuid
example: ecbd3a73-3bcb-40ae-be06-0e71f9b27c2f
type:
type: string
enum:
- INDIVIDUAL
- BUSINESS
example: INDIVIDUAL
active:
type: boolean
example: true
status:
type: string
enum:
- PROCESSING
- ACTIVE
- INACTIVE
- REJECTED
example: ACTIVE
VirtualAccountWebhookData:
type: object
properties:
id:
type: string
format: uuid
example: 900f750d-6868-457e-a777-1a35566a6b5f
customer_id:
type: string
format: uuid
example: a41a6d76-4545-47ab-93d1-696a3221d39c
status:
type: string
enum:
- ACTIVE
- INACTIVE
- SUSPENDED
example: ACTIVE
deposit_instructions:
type: object
properties:
bank_account_number:
type: string
example: '900937198167'
bank_routing_number:
type: string
example: '101019644'
bank_name:
type: string
example: Bank of Nowhere
bank_address:
type: string
example: 1800 North Pole St., Orlando, FL 32801
bank_beneficiary_name:
type: string
example: Fin.com
bank_beneficiary_address:
type: string
example: 250 Innovation Way, Houston, TX 77002, US
currency:
type: string
example: USD
payment_rails:
type: array
items:
type: string
enum:
- ACH
- FEDWIRE
- WIRE
example:
- ACH
- FEDWIRE
destination:
type: object
properties:
address:
type: string
example: '0x1d1f9801d6d98e49438cda3a3b8e0c9f5e6f8c44'
currency:
type: string
example: USDC
destination_chain:
type: string
example: POLYGON
developer_fee_percent:
type: number
example: 0.5
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
BusinessCustomerData:
type: object
properties:
customer_id:
type: string
format: uuid
example: ed54db74-7dbe-47d2-8ea0-c2bf2a9dda06
type:
type: string
enum:
- BUSINESS
customer_status:
type: string
description: 'V1 statuses: INCOMPLETE, QUEUED, REVIEWING, APPROVED, ASSOCIATED_PARTIES_REMAINING, ON_HOLD, REINITIATE, REJECTED. V2 statuses: INCOMPLETE, PROCESSING, REVIEWING, APPROVED, ASSOCIATED_PARTIES_REMAINING, IN_COMPLIANCE, ACTION_REQUIRED, REJECTED. QUEUED (V1) → PROCESSING (V2). ON_HOLD (V1) → IN_COMPLIANCE (V2). REINITIATE (V1) → ACTION_REQUIRED (V2).'
enum:
- INCOMPLETE
- QUEUED
- PROCESSING
- REVIEWING
- APPROVED
- ASSOCIATED_PARTIES_REMAINING
- ON_HOLD
- IN_COMPLIANCE
- REINITIATE
- ACTION_REQUIRED
- REJECTED
example: INCOMPLETE
business_name:
type: string
example: Fin.com
email:
type: string
format: email
example: m@tech.com
phone:
type: string
example: '+8801529876543'
country_of_incorporation:
type: string
example: BGD
verification_type:
type: string
enum:
- RELIANCE
- STANDARD
example: RELIANCE
tos_policies_url:
type: string
associated_parties:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
email:
type: string
format: email
type:
type: string
enum:
- INDIVIDUAL
ownership_percent:
type: number
example: 52
verification:
type: object
properties:
status:
type: string
enum:
- INITIATED
- REVIEWING
- APPROVED
- REJECTED
updated_at:
type: string
format: date-time
reason:
type: object
properties:
for_customer:
type: string
nullable: true
for_developer:
type: string
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
WebhookEventEnvelope:
type: object
required:
- id
- event_reference_id
- type
- created_at
- sandbox_mode
properties:
id:
type: string
format: uuid
example: 60bef15c-4e30-4eb4-bc4d-aa697a7e0857
event_reference_id:
type: string
format: uuid
example: c3309534-1517-4d15-b244-be8f943c3823
type:
type: string
enum:
- customer.created
- customer.status
- customer.rfi
- transaction.status
- virtual_account.created
- virtual_account.created.v2
- virtual_account.status
- virtual_account.status.v2
- beneficiary.created
- beneficiary.status
- beneficiary.liquidation.deposit
- batch.transaction.item.status
example: customer.created
created_at:
type: string
format: date-time
example: '2025-11-30T07:40:06.853938Z'
sandbox_mode:
type: boolean
example: true
VirtualAccountV2StatusWebhookData:
type: object
properties:
id:
type: string
format: uuid
example: ed96d65a-5fb1-49f2-8715-0c6aa32220ca
rfi:
type: object
nullable: true
example: null
status:
type: string
enum:
- PROCESSING
- IN_COMPLIANCE
- REQUEST_FOR_INFORMATION
- ACTIVE
- INACTIVE
- DECLINED
example: ACTIVE
created_at:
type: string
format: date-time
example: '2026-03-17T14:27:49.073891Z'
updated_at:
type: string
format: date-time
example: '2026-03-17T14:42:55.788231316Z'
customer_id:
type: string
format: uuid
example: c3088a8d-50de-48cf-a137-8d46815394f8
destination:
type: object
properties:
address:
type: string
example: '0x7f1568190e318da16a9ef5a46cba19d5b97d9b29'
currency:
type: string
example: USDC
destination_chain:
type: string
example: POLYGON
developer_fee_fixed:
type: number
example: 0.22
deposit_instructions:
type: object
nullable: true
properties:
currency:
type: string
example: USD
bank_code:
type: object
properties:
code:
type: string
example: SSBAUS32
type:
type: string
example: SWIFT
bank_name:
type: string
example: SSB Bank
account_type:
type: string
example: BankSwift
bank_address:
type: string
nullable: true
example: null
bank_country:
type: string
example: USA
payment_rails:
type: array
items:
type: string
example:
- ACH
bank_account_number:
type: string
example: '235464829825'
bank_routing_number:
type: string
example: ''
developer_fee_percent:
type: number
example: 0
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: Bearer token authentication. Obtain token from [Issue a Token](https://developer.fin.com/api-reference/authentication/issue-a-token) endpoint