Teller · AsyncAPI Specification

Teller Webhooks

Version 2020-10-12

AsyncAPI specification describing Teller's outbound webhook surface. Teller sends signed HTTPS POST callbacks to a developer-configured endpoint when notable events occur on enrollments and accounts (connection state changes, new categorized transactions, micro-deposit verification results, and configurable test deliveries). Each delivery is signed with HMAC-SHA256 using a signing secret and carries a Teller-Signature header that includes a timestamp and one or more signature values to allow seamless secret rotation.

View Spec View on GitHub BankingFinancial DataFintechOpen BankingTransactionUnified APIAsyncAPIEventsWebhooks

Channels

webhooks
publish receiveTellerWebhook
Receive a Teller webhook event.
Single inbound channel on the developer's HTTPS endpoint. Teller POSTs a JSON body whose `type` field discriminates between event payloads.

Messages

✉
EnrollmentDisconnected
Enrollment Disconnected
An enrollment has lost connection to its financial institution.
✉
TransactionsProcessed
Transactions Processed
Teller has discovered and categorized new transactions for an enrollment.
✉
AccountNumberVerificationProcessed
Account Number Verification Processed
A micro-deposit account number verification has completed or expired.
✉
WebhookTest
Webhook Test
A test event dispatched from Application Settings to validate the endpoint.

Servers

https
production {webhook_endpoint}
Developer-hosted HTTPS endpoint registered in the Teller dashboard that receives webhook deliveries from Teller.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
info:
  title: Teller Webhooks
  version: '2020-10-12'
  description: >-
    AsyncAPI specification describing Teller's outbound webhook surface. Teller
    sends signed HTTPS POST callbacks to a developer-configured endpoint when
    notable events occur on enrollments and accounts (connection state changes,
    new categorized transactions, micro-deposit verification results, and
    configurable test deliveries). Each delivery is signed with HMAC-SHA256
    using a signing secret and carries a Teller-Signature header that includes
    a timestamp and one or more signature values to allow seamless secret
    rotation.
  contact:
    name: Teller Developer Support
    url: https://teller.io/docs
  termsOfService: https://teller.io/legal/terms-of-service
defaultContentType: application/json
servers:
  production:
    url: '{webhook_endpoint}'
    protocol: https
    description: >-
      Developer-hosted HTTPS endpoint registered in the Teller dashboard that
      receives webhook deliveries from Teller.
    variables:
      webhook_endpoint:
        default: https://example.com/webhooks/teller
        description: The fully qualified HTTPS URL configured in Teller Application Settings.
channels:
  webhooks:
    description: >-
      Single inbound channel on the developer's HTTPS endpoint. Teller POSTs a
      JSON body whose `type` field discriminates between event payloads.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receiveTellerWebhook
      summary: Receive a Teller webhook event.
      description: >-
        Teller publishes webhook events to the configured HTTPS endpoint. The
        `Teller-Signature` header MUST be verified before trusting the payload.
        Events older than 3 minutes (per the signature timestamp) SHOULD be
        rejected to prevent replay.
      message:
        oneOf:
          - $ref: '#/components/messages/EnrollmentDisconnected'
          - $ref: '#/components/messages/TransactionsProcessed'
          - $ref: '#/components/messages/AccountNumberVerificationProcessed'
          - $ref: '#/components/messages/WebhookTest'
components:
  messages:
    EnrollmentDisconnected:
      name: enrollment.disconnected
      title: Enrollment Disconnected
      summary: An enrollment has lost connection to its financial institution.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/EnrollmentDisconnectedEvent'
    TransactionsProcessed:
      name: transactions.processed
      title: Transactions Processed
      summary: Teller has discovered and categorized new transactions for an enrollment.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/TransactionsProcessedEvent'
    AccountNumberVerificationProcessed:
      name: account.number_verification.processed
      title: Account Number Verification Processed
      summary: A micro-deposit account number verification has completed or expired.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/AccountNumberVerificationProcessedEvent'
    WebhookTest:
      name: webhook.test
      title: Webhook Test
      summary: A test event dispatched from Application Settings to validate the endpoint.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/WebhookTestEvent'
  schemas:
    WebhookHeaders:
      type: object
      description: HTTP headers attached to every Teller webhook delivery.
      properties:
        Teller-Signature:
          type: string
          description: >-
            Signature header in the form
            `t=signature_timestamp,v1=signature_1,v1=signature_2,...`.
            `t` is the Unix timestamp the signature was generated. Each `v1`
            value is an HMAC-SHA256 of `"{t}.{raw_request_body}"` using a
            signing secret. Multiple `v1` values are emitted during signing-
            secret rotation so consumers can accept either secret.
          example: t=1717000000,v1=8b5f1c3c0d4e2a6f9e8d7c6b5a4938271605f4e3d2c1b0a9988776655443322
      required:
        - Teller-Signature
    WebhookEventBase:
      type: object
      description: Common envelope shared by every Teller webhook event.
      properties:
        id:
          type: string
          description: Unique webhook event identifier.
        type:
          type: string
          description: Event type discriminator.
        timestamp:
          type: string
          format: date-time
          description: ISO 8601 timestamp the event was generated.
        payload:
          type: object
          description: Event-specific payload object.
      required:
        - id
        - type
        - timestamp
        - payload
    EnrollmentDisconnectedEvent:
      allOf:
        - $ref: '#/components/schemas/WebhookEventBase'
        - type: object
          properties:
            type:
              type: string
              enum:
                - enrollment.disconnected
            payload:
              $ref: '#/components/schemas/EnrollmentDisconnectedPayload'
    EnrollmentDisconnectedPayload:
      type: object
      description: Payload for `enrollment.disconnected` events.
      properties:
        enrollment_id:
          type: string
          description: Identifier of the affected enrollment.
        reason:
          type: string
          description: Machine-readable disconnection reason.
          enum:
            - disconnected
            - disconnected.account_locked
            - disconnected.credentials_invalid
            - disconnected.enrollment_inactive
            - disconnected.user_action.captcha_required
            - disconnected.user_action.contact_information_required
            - disconnected.user_action.insufficient_permissions
            - disconnected.user_action.mfa_required
            - disconnected.user_action.web_login_required
      required:
        - enrollment_id
        - reason
    TransactionsProcessedEvent:
      allOf:
        - $ref: '#/components/schemas/WebhookEventBase'
        - type: object
          properties:
            type:
              type: string
              enum:
                - transactions.processed
            payload:
              $ref: '#/components/schemas/TransactionsProcessedPayload'
    TransactionsProcessedPayload:
      type: object
      description: Payload for `transactions.processed` events.
      properties:
        enrollment_id:
          type: string
          description: Identifier of the enrollment whose transactions were processed.
        transactions:
          type: array
          description: Array of transaction objects following the Teller Transactions API schema.
          items:
            $ref: '#/components/schemas/Transaction'
      required:
        - enrollment_id
        - transactions
    AccountNumberVerificationProcessedEvent:
      allOf:
        - $ref: '#/components/schemas/WebhookEventBase'
        - type: object
          properties:
            type:
              type: string
              enum:
                - account.number_verification.processed
            payload:
              $ref: '#/components/schemas/AccountNumberVerificationProcessedPayload'
    AccountNumberVerificationProcessedPayload:
      type: object
      description: Payload for `account.number_verification.processed` events.
      properties:
        enrollment_id:
          type: string
          description: Identifier of the enrollment the account belongs to.
        account_id:
          type: string
          description: Identifier of the account whose verification completed or expired.
        status:
          type: string
          description: Outcome of the micro-deposit verification.
          enum:
            - completed
            - expired
      required:
        - enrollment_id
        - account_id
        - status
    WebhookTestEvent:
      allOf:
        - $ref: '#/components/schemas/WebhookEventBase'
        - type: object
          properties:
            type:
              type: string
              enum:
                - webhook.test
            payload:
              type: object
              description: Empty payload object for test deliveries.
              additionalProperties: false
    Transaction:
      type: object
      description: A financial transaction on a bank account, as defined by the Teller Transactions API.
      properties:
        id:
          type: string
          description: Teller transaction identifier.
        account_id:
          type: string
          description: Account this transaction belongs to.
        amount:
          type: string
          description: Transaction amount as a signed decimal string (negative = debit).
        date:
          type: string
          format: date
          description: ISO 8601 transaction date.
        description:
          type: string
          description: Bank statement text.
        status:
          type: string
          enum:
            - posted
            - pending
          description: Whether the transaction has settled.
        type:
          type: string
          description: Transaction type.
          enum:
            - card_payment
            - transfer
            - atm
            - deposit
            - withdrawal
            - digital_payment
            - wire
            - check
            - interest
            - fee
            - other
        running_balance:
          type: string
          description: Running account balance after this transaction (posted only).
        details:
          $ref: '#/components/schemas/TransactionDetails'
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
            account:
              type: string
              format: uri
    TransactionDetails:
      type: object
      properties:
        processing_status:
          type: string
          enum:
            - pending
            - complete
        category:
          type: string
          description: Transaction category (e.g. dining, groceries, utilities, travel, entertainment).
        counterparty:
          type: object
          properties:
            name:
              type: string
              description: Name of the merchant or counterparty.
            type:
              type: string
              enum:
                - person
                - organization

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/teller-webhooks-asyncapi"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.