Memo Bank · AsyncAPI Specification

Memo Bank Webhooks

Version

View Spec View on GitHub CompanyFintech InsurtechBankingBusiness BankingPaymentsSEPASEPA Direct DebitVirtual IBANWire TransfersOpen BankingPSD2Berlin GroupWebhookMCPFranceAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-17'
method: searched
source:
- openapi/memo-bank-premium-bank-api-openapi.yml
- https://docs.api.memo.bank/group/webhook-webhook
- https://docs-marketplace.api.memo.bank/topic/topic-webhooks
- https://memo.bank/en/product/api/
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: >-
  Memo Bank publishes NO AsyncAPI document. Probed https://docs.api.memo.bank/asyncapi.yaml,
  /asyncapi.json and https://api.memo.bank/asyncapi.yaml on 2026-08-17 - all 404. The event surface is
  real and well specified, but it is expressed through the OpenAPI 3.1 top-level `webhooks` object rather
  than AsyncAPI. This catalogue is therefore captured from that webhooks block plus the prose docs; no
  AsyncAPI has been fabricated.
transport:
  protocol: HTTPS webhook POST
  direction: Memo Bank -> subscriber
  delivery_url_requirement: Must use HTTPS (stated on the CreateWebhook schema).
  content_types:
  - application/json
  - application/vnd.memo-bank.v1+json
  content_type_note: >-
    The versioned vendor media type carries the same Event schema, giving subscribers a media-type
    versioning lever independent of the /v2/ path version.
  authentication:
    mechanism: bearer token issued by Memo Bank per webhook
    header: Authorization
    detail: >-
      Creating a webhook returns a bearer_token which Memo Bank includes in the Authorization header of every
      delivery to that endpoint. The subscriber verifies it to authenticate the sender.
    signature: none
    signature_note: >-
      There is no HMAC request signature and no timestamp header, so deliveries are authenticated by a
      shared bearer secret rather than a per-payload signature. That means a subscriber cannot detect
      replay, and the secret is exposed to anyone who can read the webhook resource. An HMAC signature over
      the body with a timestamp would be the standard hardening here.
  retry_policy: >-
    Memo Bank states a retry policy exists and that an event with the same id may be sent multiple times on
    error, but the backoff schedule and maximum attempt count are not published.
  ordering: not guaranteed / not published
management:
  api_managed: true
  operations:
  - listWebhooks
  - createWebhook
  - getWebhook
  - deleteWebhook
  introduced: '2026-03-18'
  fields:
    id: uuid
    name: human label for the webhook
    url: HTTPS delivery target
    bearer_token: token Memo Bank sends in the Authorization header
  update_supported: false
  update_note: >-
    There is no update operation - a webhook is created and deleted, so changing a delivery URL means
    tearing down and re-registering, and the bearer token rotates with it.
idempotency:
  contract: >-
    Event.id is a UUID and Memo Bank documents it explicitly as the deduplication key: an event with the
    same id can be sent multiple times in case of error but should only be processed once.
  key_field: id
message:
  name: Event
  schema_ref: openapi/memo-bank-premium-bank-api-openapi.yml#/components/schemas/Event
  operation_id: handleEvent
  required:
  - id
  - date
  - event_type
  - resource_id
  - resource_type
  fields:
    id: UUID of the event; the idempotency key.
    date: Event creation date, ISO 8601 date-time.
    event_type: One of 34 enumerated event types.
    resource_type: One of 11 enumerated resource types.
    resource_id: UUID of the resource the event refers to.
  payload_style: >-
    Thin/reference payload. The event carries only identifiers and a type - not the changed resource - so a
    subscriber must call the corresponding GET operation to fetch state. This is the safer pattern for
    banking data but doubles the round trips.
  extensibility_contract: >-
    Memo Bank reserves the right to add EventType and ResourceType members without a version bump, and
    states subscribers must handle additions gracefully.
marketplace_extension:
  header: X-Memo-Connection-Id
  purpose: >-
    Identifies which marketplace connection an event belongs to, so a multi-tenant application can route the
    event to the right customer context.
  webhook_scoping: >-
    Webhooks created with a marketplace OAuth access token are tied to that connection, allowing a distinct
    URL per connected customer. Memo Bank can alternatively configure one global webhook for the whole
    application.
  source: https://docs-marketplace.api.memo.bank/topic/topic-webhooks
event_count: 34
resource_type_count: 11
resource_types:
- account
- attachment
- collection
- iban
- transaction
- transfer
- wire_transfer
- bulk_transfers
- bulk_collections
- mandate_signature_request
- account_assessment
events:
- group: account
  types:
  - event_type: account_created
    resource_type: account
  - event_type: account_updated
    resource_type: account
  - event_type: account_closed
    resource_type: account
- group: attachment
  types:
  - event_type: attachment_created
    resource_type: attachment
  - event_type: attachment_deleted
    resource_type: attachment
- group: iban
  types:
  - event_type: iban_created
    resource_type: iban
  - event_type: iban_updated
    resource_type: iban
  - event_type: iban_deleted
    resource_type: iban
- group: transaction
  types:
  - event_type: transaction_scheduled
    resource_type: transaction
  - event_type: transaction_authorized
    resource_type: transaction
  - event_type: transaction_confirmed
    resource_type: transaction
  - event_type: transaction_rejected
    resource_type: transaction
  - event_type: transaction_canceled
    resource_type: transaction
- group: transfer (SEPA)
  types:
  - event_type: transfer_confirmed
    resource_type: transfer
  - event_type: transfer_returned
    resource_type: transfer
  - event_type: transfer_canceled
    resource_type: transfer
  - event_type: transfer_failed
    resource_type: transfer
- group: wire transfer (SWIFT/RTGS)
  types:
  - event_type: wire_transfer_confirmed
    resource_type: wire_transfer
  - event_type: wire_transfer_returned
    resource_type: wire_transfer
  - event_type: wire_transfer_canceled
    resource_type: wire_transfer
  - event_type: wire_transfer_failed
    resource_type: wire_transfer
  - event_type: wire_transfer_attachment_required
    resource_type: wire_transfer
    note: >-
      A compliance-driven event - the bank is asking for supporting documentation before the wire proceeds,
      which an integrator can satisfy with createWireTransferAttachment.
- group: collection (SEPA Direct Debit)
  types:
  - event_type: collection_confirmed
    resource_type: collection
  - event_type: collection_returned
    resource_type: collection
  - event_type: collection_canceled
    resource_type: collection
  - event_type: collection_failed
    resource_type: collection
- group: bulk
  types:
  - event_type: bulk_transfers_completed
    resource_type: bulk_transfers
  - event_type: bulk_collections_completed
    resource_type: bulk_collections
- group: mandate signature request
  types:
  - event_type: mandate_signature_request_sent
    resource_type: mandate_signature_request
  - event_type: mandate_signature_request_expired
    resource_type: mandate_signature_request
  - event_type: mandate_signature_request_completed
    resource_type: mandate_signature_request
  - event_type: mandate_signature_request_deleted
    resource_type: mandate_signature_request
- group: account assessment
  types:
  - event_type: account_assessment_completed
    resource_type: account_assessment
  - event_type: account_assessment_failed
    resource_type: account_assessment
lifecycle_coverage:
  assessment: >-
    Every asynchronous state machine in the product emits terminal events in both directions. Transfers,
    wire transfers and collections each publish confirmed / returned / canceled / failed; transactions
    publish the full scheduled -> authorized -> confirmed path plus rejected and canceled; bulk batches
    signal completion; mandates and assessments signal both success and failure. For reconciliation
    purposes this is complete - a subscriber never has to poll to discover a terminal outcome.
gaps:
- No AsyncAPI document, so the event surface is invisible to AsyncAPI tooling and event catalogues.
- >-
  No HMAC payload signature or timestamp header - deliveries are authenticated with a static bearer token
  only, leaving no replay protection.
- No published retry schedule or maximum attempt count.
- No webhook update operation; changing a URL forces re-registration and rotates the bearer token.
- No event-type subscription filter is documented, so a subscriber appears to receive all 34 types.
- No delivery-log or event-replay endpoint for recovering missed events after an outage.