Memo Bank · OpenAPI Overlay 1.0.0
API Evangelist enhancements for Memo Bank Premium Bank API
22 actions
22 updates
security
Generated by API Evangelist
Written by API Evangelist tooling for Memo Bank's API. It is a proposal applied on top of the contract, not a document Memo Bank publishes.
What the actions change
x-agentic-accessx-api-evangelist-notex-source-docx-idempotentx-idempotency-headerx-mcp-toolx-api-evangelist-rationalex-sandbox-only
Targets 20 · first 16 shown; the file carries all of them
$.info
$.components
$
$.paths['/v2/transfers'].post
$.paths['/v2/transfers/bulks'].post
$.paths['/v2/wire_transfers'].post
$.paths['/v2/collections'].post
$.paths['/v2/collections/bulks'].post
$.paths['/v2/ibans'].post
$.paths['/v2/account_assessments'].post
$.paths['/v2/webhooks'].post
$.paths['/v2/accounts'].get
$.paths['/v2/transactions'].get
$.paths['/v2/ibans'].get
$.paths['/v2/attachments'].get
$.paths['/v2/attachments'].post
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for Memo Bank Premium Bank API
version: 1.0.0
x-generated: '2026-08-17'
x-method: generated
x-source: openapi/memo-bank-premium-bank-api-openapi.yml
x-note: >-
Non-destructive enhancements over the spec Memo Bank publishes at https://docs.api.memo.bank/source.yaml.
The original is preserved byte-for-byte in openapi/_original/. Every action below documents something Memo
Bank states in its own prose documentation but omitted from the machine-readable contract - most
importantly the JWT security scheme that all 43 operations reference but which is never defined, and the
Idempotency-Key header that makes retrying a payment safe. Nothing here invents behaviour: each action's
x-source-doc names the Memo Bank page it came from.
actions:
- target: $.info
update:
x-apievangelist-profile: https://apis.io/provider/memo-bank/
x-apievangelist-reviewed: '2026-08-17'
x-api-evangelist-note: >-
Enhanced by API Evangelist. Original published by Memo Bank at
https://docs.api.memo.bank/source.yaml.
- target: $.info
update:
contact:
name: Memo Bank API support
url: https://aide.memo.bank/category/349-api
x-source-doc: https://aide.memo.bank/category/349-api
x-source-note: >-
The published spec has no info.contact block. Populated from Memo Bank's own API help centre category.
- target: $.components
update:
securitySchemes:
JWT:
type: http
scheme: bearer
bearerFormat: JWT
description: >-
Per-request RS256-signed JWT (RFC 7519 / RFC 7515) sent as Authorization: Bearer <token>. The JWT
header carries alg (RS256), typ (JWT) and x5t#S256 (the SHA-256 thumbprint of the certificate). The
payload carries sub (the request method, a space, then the full path including query parameters),
aud (the target domain, e.g. api.memo.bank), iat (creation timestamp, tolerating only 5 seconds of
clock skew), jti (a unique UUID per request), sec (the secret code from setup) and, when the request
has a body, dig#S256 (base64url(sha256(body))). Signed with the RSA private key generated during
setup. Because sub and dig#S256 bind the token to one exact request, tokens are not reusable.
x-source-doc: https://docs.api.memo.bank/authentication
x-api-evangelist-rationale: >-
THE most important action in this overlay. All 43 operations declare security: [{JWT: []}] but the
published document has no components.securitySchemes at all, so the requirement dangles - any
generated client, validator or scanner sees an undefined scheme and concludes the API is
unauthenticated. This definition is transcribed from Memo Bank's own authentication page.
- target: $
update:
security:
- JWT: []
x-source-doc: https://docs.api.memo.bank/authentication
x-api-evangelist-rationale: >-
Adds the top-level default so the requirement holds even for operations added later without an explicit
security block.
- target: $.components
update:
parameters:
IdempotencyKey:
name: Idempotency-Key
in: header
required: false
description: >-
Idempotency key for safely retrying a mutating request. Memo Bank recommends a V4 UUID. Retry with
the SAME key on a network error or a 5XX, 409 or 429 response; do not retry on other 4XX codes, as
the same result is always returned. A replayed response carries the Idempotent-Replayed: true
header. Reusing a key while the original request is still in flight returns 409 Conflict (itself
safe to retry); reusing a key with a different body returns 422 Unprocessable Entity. Not supported
on GET or DELETE, which are inherently idempotent.
schema:
type: string
format: uuid
example: 19b390d1-e7d4-4e27-abe2-49cac9b41ba1
x-source-doc: https://docs.api.memo.bank/topic/topic-idempotent-requests
RateLimitLimit:
name: RateLimit-Limit
in: header
description: Total number of available requests between two quota resets.
schema:
type: integer
x-source-doc: https://docs.api.memo.bank/topic/topic-rate-limiting
schemas:
Error:
type: object
description: >-
Memo Bank's unified error envelope. Errors are distinguished by the code key; message is a plain
English explanation. Note this is NOT RFC 9457 problem+json.
required:
- code
- message
properties:
code:
type: string
description: Machine-readable error code.
example: not_found
message:
type: string
description: Plain English explanation of the problem.
example: Not found.
x-source-doc: https://docs.api.memo.bank/topic/topic-errors
responses:
TooManyRequests:
description: >-
Rate limit exhausted. RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset are returned on every
response, so a client can anticipate this. Safe to retry with the same Idempotency-Key after
RateLimit-Reset seconds.
headers:
RateLimit-Limit:
description: Total number of available requests between two quota resets.
schema:
type: integer
RateLimit-Remaining:
description: Number of available requests until the quota is reset.
schema:
type: integer
RateLimit-Reset:
description: Time remaining in seconds until the quota is reset.
schema:
type: integer
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-source-doc: https://docs.api.memo.bank/topic/topic-rate-limiting
Unauthorized:
description: >-
Missing, malformed, expired or replayed request JWT. Common causes are client clock drift beyond the
5-second iat window, a sub claim that does not exactly match the method and full path including
query string, or a missing dig#S256 on a request with a body.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-source-doc: https://docs.api.memo.bank/authentication
Conflict:
description: >-
An Idempotency-Key was reused while the original request is still being processed. Safe to retry
with the same key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-source-doc: https://docs.api.memo.bank/topic/topic-idempotent-requests
UnprocessableEntity:
description: >-
An Idempotency-Key was reused with a request body that differs from the original. Do not retry;
use a new key or send the original payload.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-source-doc: https://docs.api.memo.bank/topic/topic-idempotent-requests
x-api-evangelist-rationale: >-
The published spec declares only 200, 201 and 204 across all 43 operations - there is no error schema
and no 4xx/5xx response anywhere in it, despite Memo Bank documenting an error envelope, an
idempotency contract with specific 409/422 semantics, and a 429 rate-limit response. These reusable
components make that documented contract addressable.
- target: $.paths['/v2/transfers'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: physical
audit: required
purpose-required: true
x-api-evangelist-note: >-
Initiates a real SEPA credit transfer - irreversible once confirmed. Memo Bank's idempotency guidance
names transfer creation as its own worked example, and its MCP connector deliberately excludes payment
initiation.
x-source-doc: https://docs.api.memo.bank/topic/topic-idempotent-requests
- target: $.paths['/v2/transfers/bulks'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: physical
audit: required
purpose-required: true
x-api-evangelist-note: >-
Bulk payment initiation. Per-item failures surface asynchronously as TransferV2.failure_code rather than
as HTTP errors - see errors/memo-bank-decline-codes.yml for the bulk-versus-single divergence.
- target: $.paths['/v2/wire_transfers'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: physical
audit: required
purpose-required: true
x-api-evangelist-note: >-
Cross-border SWIFT/RTGS transfer. May enter pending_attachment_required, a compliance hold resolved via
createWireTransferAttachment and signalled by the wire_transfer_attachment_required event.
- target: $.paths['/v2/collections'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: physical
audit: required
purpose-required: true
x-api-evangelist-note: >-
Schedules a SEPA Direct Debit collection - debits a third party under a signed mandate. Requires a
SEPA creditor identifier provisioned by a banker and an IBAN with allow_collections true.
- target: $.paths['/v2/collections/bulks'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: physical
audit: required
purpose-required: true
- target: $.paths['/v2/ibans'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: write
audit: required
x-api-evangelist-note: Creates a virtual IBAN - the reconciliation primitive of the platform.
- target: $.paths['/v2/account_assessments'].post
update:
x-idempotent: true
x-idempotency-header: Idempotency-Key
x-agentic-access:
action-class: acting
consequence: write
x-api-evangelist-note: >-
IBAN and account-holder verification. Worth calling BEFORE initiating a transfer to pre-empt the
invalid_beneficiary_iban and beneficiary_bank_invalid_bank_details failure codes.
- target: $.paths['/v2/webhooks'].post
update:
x-agentic-access:
action-class: acting
consequence: write
audit: required
x-api-evangelist-note: >-
The response contains bearer_token, the shared secret Memo Bank sends on every delivery to this
endpoint. Treat the response as a secret. There is no update operation - changing a URL means delete
and re-create, which rotates the token.
- target: $.paths['/v2/accounts'].get
update:
x-agentic-access:
action-class: connected
consequence: read
x-mcp-tool: list_accounts
x-source-doc: https://memo.bank/en/product/mcp/
- target: $.paths['/v2/transactions'].get
update:
x-agentic-access:
action-class: connected
consequence: read
x-mcp-tool: list_transactions
x-api-evangelist-note: >-
Pagination migrated to page_token on 2026-05-13; the page parameter is deprecated but still present and
carries no published sunset date.
x-source-doc: https://docs.api.memo.bank/changes
- target: $.paths['/v2/ibans'].get
update:
x-agentic-access:
action-class: connected
consequence: read
x-mcp-tool: list_ibans
- target: $.paths['/v2/attachments'].get
update:
x-agentic-access:
action-class: connected
consequence: read
x-mcp-tool: list_attachments
- target: $.paths['/v2/attachments'].post
update:
x-agentic-access:
action-class: acting
consequence: write
audit: required
x-mcp-tool: create_attachment
x-api-evangelist-note: >-
The only write operation Memo Bank exposes through its MCP connector.
- target: $.paths['/v2/sandbox/incoming_transfers'].post
update:
x-sandbox-only: true
x-agentic-access:
action-class: acting
consequence: write
x-api-evangelist-note: >-
Sandbox host only (https://api.sandbox.memo.bank). Behaviour against production is not documented.
x-source-doc: https://docs.api.memo.bank/topic/topic-sandbox
- target: $.paths['/v2/sandbox/incoming_collections'].post
update:
x-sandbox-only: true
x-agentic-access:
action-class: acting
consequence: write
x-api-evangelist-note: Sandbox host only (https://api.sandbox.memo.bank).
x-source-doc: https://docs.api.memo.bank/topic/topic-sandbox
- target: $.components.schemas.WireTransfer.properties.failure_code
update:
x-api-evangelist-gap: >-
28 enum values with no per-code documentation, unlike the TransferV2 and Collection failure_code
properties which document every code inline. See errors/memo-bank-decline-codes.yml.
- target: $.webhooks.event.post
update:
x-api-evangelist-note: >-
Deliveries are authenticated with the static bearer_token from the Webhook resource, sent in the
Authorization header. There is no HMAC body signature and no timestamp header, so replay cannot be
detected. Event.id is the deduplication key. See asyncapi/memo-bank-webhooks.yml.
x-source-doc: https://docs.api.memo.bank/group/webhook-webhook