---
title: "Webhook event: paykey.created.v1"
method: POST
path: "paykey.created.v1"
---

# Webhook event: paykey.created.v1

`POST paykey.created.v1` (webhook)

Fired when a new Paykey is generated linking a customer to their bank account. The event includes tokenized bank account details, verification status, and initial fraud screening results.

## Payload

- object
  - `event_type` string, required — Type of the event
  - `event_id` string, uuid, required — UUID of the event
  - `account_id` string, uuid, required — UUID of the account associated with this event
  - `data` PaykeyEventV1, required
    - `id` string, uuid, required — Unique identifier for the paykey.
    - `customer_id` string, uuid, nullable — Unique identifier of the related customer object.
    - `label` string, required — Human-readable label used to represent this paykey in a UI.
    - `source` 'bank_account' | 'straddle' | 'mx' | 'plaid' | 'tan' | 'quiltt', required
    - `institution_name` string, nullable — Name of the financial institution.
    - `status` 'pending' | 'active' | 'inactive' | 'rejected' | 'review' | 'blocked', required
    - `status_details` StatusDetailsEventV1
      - `message` string, required — A human-readable description of the current status.
      - `reason` 'insufficient_funds' | 'closed_bank_account' | 'invalid_bank_account' | 'invalid_routing' | 'disputed' | 'payment_stopped' | 'owner_deceased' | 'frozen_bank_account' | 'risk_review' | 'fraudulent' | 'duplicate_entry' | 'invalid_paykey' | 'payment_blocked' | 'amount_too_large' | 'too_many_attempts' | 'internal_system_error' | 'user_request' | 'ok' | 'other_network_return' | 'payout_refused' | 'validating' | 'auto_hold', required
      - `source` 'watchtower' | 'bank_decline' | 'customer_dispute' | 'user_action' | 'system', required
      - `code` string, nullable, required — The status code if applicable.
      - `changed_at` string, date-time, required — The time the status change occurred.
    - `expires_at` string, date-time, nullable — Expiration date and time of the paykey, if applicable.
    - `created_at` string, date-time, required — Timestamp of when the paykey was created.
    - `updated_at` string, date-time, required — Timestamp of the most recent update to the paykey.
    - `paykey` string, required — The tokenized paykey value. This value is used to create payments and should be stored securely.
    - `bank_data` PaykeyBankDetailsEventV1
      - `routing_number` string, required — Bank routing number.
      - `account_number` string, required — Bank account number. This value is masked by default for security reasons. Use the /unmask endpoint to access the unmasked value.
      - `account_type` 'checking' | 'savings', required
    - `metadata` object, nullable — Up to 20 additional user-defined key-value pairs. Useful for storing additional information about the paykey in a structured format.
    - `balance` PaykeyBalanceDetailsEventV1
      - `account_balance` number, double, nullable — Account Balance when last retrieved
      - `updated_at` string, date-time, nullable — Last time account balance was updated.
      - `status` 'pending' | 'completed' | 'failed', required

## Acknowledgement `200`

Webhook processed successfully

---

[API](https://skmtc.net/straddleio/apis/straddle-api.md) · [All operations](https://skmtc.net/straddleio/apis/straddle-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/straddleio/straddle-api/revisions/6e13cd88cda9/schema)
