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.
Channels
receiveTellerWebhookMessages
Servers
{webhook_endpoint}
AsyncAPI Specification
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.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/asyncapis/teller-webhooks-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.