Fern Developer Docs
  • Overview
    • Fern overview
    • Earning revenue with Fern
    • Developer dashboard
    • Help & support
  • Coverage
    • Customer types
    • Restricted customer geographies
  • Fiat currency support
  • Cryptocurrency support
  • Guides
    • Core API concepts
    • Create and verify customers
      • Requirements for Individuals
      • Requirements for Businesses
      • Customer statuses
      • Country codes
    • Create Fern wallets
    • First-party onramps
    • First-party offramps
    • Webhooks
      • Events
      • Sample Payloads
      • Verification
      • Retries
  • API reference
    • Customers
    • Payment accounts
    • Quotes
    • Transactions
      • Additional details
  • Advanced
    • Slippage and price impact
    • Rate limits
Powered by GitBook
On this page
  • Customer Created Event:
  • Customer Updated Event:
  • Payment Account Created Event:
  • Payment Account Deleted Event:
  • Transaction Created Event:
  • Transaction Updated Event:
Export as PDF
  1. Guides
  2. Webhooks

Sample Payloads

Below are example webhook payloads for each event type, illustrating the structure and fields you can expect:

Customer Created Event:

{
  "id": "03b7030f-6da1-4d76-9352-cdebd82112c8",
  "apiVersion": "v1",
  "type": "customer.created",
  "createdAt": "2023-01-01T12:00:00Z",
  "resource": {
    "customerId": "03b7030f-6da1-4d76-9352-cdebd82112c8",
    "customerStatus": "CREATED",
    "customerType": "INDIVIDUAL",
    "name": "John Doe",
    "email": "johndoe@example.com",
    "kycLink": "https://kyb.example.com/verify/abc123",
    "updatedAt": "2023-10-01T12:00:00Z",
    "organizationId": "8469411c-48c1-4e26-a032-44688be9cb4b"
  }
}

Customer Updated Event:

{
  "id": "03b7030f-1111-4d76-9352-cdebd82112c8",
  "apiVersion": "v1",
  "type": "customer.updated",
  "createdAt": "2023-01-01T12:00:00Z",
  "resource": {
    "customerId": "03b7030f-6da1-4d76-9352-cdebd82112c8",
    "customerStatus": "ACTIVE",
    "customerType": "INDIVIDUAL",
    "name": "John Doe",
    "email": "johndoe@example.com",
    "kycLink": "https://kyb.example.com/verify/abc123",
    "updatedAt": "2023-10-01T12:00:00Z",
    "organizationId": "8469411c-48c1-4e26-a032-44688be9cb4b"
  }
}

Payment Account Created Event:

{
  "id": "03b7030f-1111-1111-9352-cdebd82112c8",
  "apiVersion": "v1",
  "type": "payment_account.created",
  "createdAt": "2023-01-03T10:15:00Z",
  "resource": {
    "paymentAccountId": "03b7030f-6da1-4d76-9352-cdebd82112c8",
    "paymentAccountType": "EXTERNAL_BANK_ACCOUNT",
    "nickname": "Savings Account",
    "createdAt": "2025-04-30T23:13:57.625Z",
    
    // These objects will only be populated if the account of that type existed:
    "externalBankAccount": {
      "bankAccountType": "CHECKING",
      "bankAccountOwnerName": "John Doe",
      "bankAccountOwnerEmail": "john@example.com",
      "bankName": "Chase Bank",
      "bankAccountCurrency": "USD",
      "bankAccountMask": "***6789",
      "bankAccountPaymentMethod": "ACH"
    },
    "externalCryptoWallet": {
      "cryptoWalletType": "EVM",
      "chain": "base",
      "address": "0x1234567890123456789012345678901234567890"
    },
    "fernCryptoWallet": {
      "cryptoWalletType": "EVM",
      "address": "0x1234567890123456789012345678901234567890"
    },
    "bankAccountFormLink": "https://app.fernhq.com/bank_account/abc"
  }
}

Payment Account Deleted Event:

{
  "id": "03b7030f-1111-1111-1111-cdebd82112c8",
  "api_version": "v1",
  "type": "payment_account.deleted",
  "sequence": 4,
  "created_at": "2023-01-05T16:20:00Z",
  "resource": {
    "paymentAccountId": "03b7030f-6da1-4d76-9352-cdebd82112c8",
    "paymentAccountType": "EXTERNAL_BANK_ACCOUNT",
    "nickname": "Savings Account",
    "createdAt": "2025-04-30T23:13:57.625Z",
    // These objects will only be populated if the account of that type existed:
    "externalBankAccount": { ... },
    "externalCryptoWallet": { ... },
    "fernCryptoWallet": { ... }
  }
}

Note: The example above shows that the payload can contain the keys (externalBankAccount, externalCryptoWallet, etc.) if those were relevant to the account.

Transaction Created Event:

{
  "id": "03b7030f-2222-4d76-8888-1111111111aa",
  "apiVersion": "v1",
  "type": "transaction.created",
  "createdAt": "2023-01-07T09:30:00Z",
  "resource": {
    "transactionId": "1d8beb26-b4d1-47ee-8e5d-0d3905f200c7",
    "transactionStatus": "CREATED",
    "correlationId": "03b7030f-6da1-4e76-9352-3debd82112c8",
    "source": {
      "sourcePaymentAccountId": "072a8b7b-38c7-429a-a6cf-35dae7f2fb77",
      "sourceCurrency": "USD",
      "sourcePaymentMethod": "ACH",
      "sourceAmount": "100.00"
    },
    "destination": {
      "destinationPaymentAccountId": "072a8b7b-38c7-429a-a6cf-35dae7f2fb77",
      "destinationPaymentMethod": "ETHEREUM",
      "destinationCurrency": "USDC",
      "exchangeRate": "1.2",
      "destinationAmount": "100",
      "minGuaranteedDestinationAmount": "98"
    },
    "fees": {
      "feeCurrency": "USD",
      "fernFee": {
        "feeAmount": "5.45",
        "feeUSDAmount": "5.45"
      },
      "developerFee": {
        "feeAmount": "5.45",
        "feeUSDAmount": "5.45"
      }
    },
    "transferInstructions": {
      "type": "fiat",
      "transferPaymentMethod": "ACH",
      "transferMessage": "Payment for order #12345",
      "transferBankName": "First National Bank",
      "transferBankAddress": "123 Bank St, Finance City",
      "transferBankAccountNumber": "987654321",
      "transferRoutingNumber": "123456789",
      "transferBankBeneficiaryName": "John Doe"
    },
    "createdAt": "2023-08-01T12:00:00Z",
    "updatedAt": "2023-08-01T12:00:00Z"
  }
}

Transaction Updated Event:

{
  "id": "03b7030f-3333-1111-1111-1111111112c8",
  "apiVersion": "v1",
  "type": "transaction.updated",
  "createdAt": "2023-01-07T09:45:00Z",
  "resource": {
    "transactionId": "1d8beb26-b4d1-47ee-8e5d-0d3905f200c7",
    "transactionStatus": "PROCESSING",
    "correlationId": "03b7030f-6da1-4e76-9352-3debd82112c8",
    "source": {
      "sourcePaymentAccountId": "072a8b7b-38c7-429a-a6cf-35dae7f2fb77",
      "sourceCurrency": "USD",
      "sourcePaymentMethod": "ACH",
      "sourceAmount": "100.00"
    },
    "destination": {
      "destinationPaymentAccountId": "072a8b7b-38c7-429a-a6cf-35dae7f2fb77",
      "destinationPaymentMethod": "ETHEREUM",
      "destinationCurrency": "USDC",
      "exchangeRate": "1.2",
      "destinationAmount": "100",
      "minGuaranteedDestinationAmount": "98"
    },
    "fees": {
      "feeCurrency": "USD",
      "fernFee": {
        "feeAmount": "5.45",
        "feeUSDAmount": "5.45"
      },
      "developerFee": {
        "feeAmount": "5.45",
        "feeUSDAmount": "5.45"
      }
    },
    "transferInstructions": {
      "type": "fiat",
      "transferPaymentMethod": "ACH",
      "transferMessage": "Payment for order #12345",
      "transferBankName": "First National Bank",
      "transferBankAddress": "123 Bank St, Finance City",
      "transferBankAccountNumber": "987654321",
      "transferRoutingNumber": "123456789",
      "transferBankBeneficiaryName": "John Doe"
    },
    "createdAt": "2023-08-01T12:00:00Z",
    "updatedAt": "2023-08-01T12:00:00Z"
  }
}

In the transaction examples above, a transaction.created event is sent when the transaction is first initiated (with status CREATED), and later a transaction.updated event may be sent when the status progresses (in this case, to PROCESSING; additional transaction.updated events would be sent for subsequent status changes like COMPLETED or FAILED).

Last updated 8 days ago