Memo Bank · OpenAPI Overlay 1.0.0
API Evangelist enhancements for Memo Bank Marketplace API
6 actions
6 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-source-docx-api-evangelist-rationalex-apievangelist-profilex-apievangelist-reviewedcontactx-source-notesecuritySchemesx-token-lifetimes
Targets 5
$.info
$.components
$.paths['/oauth2/token'].post
$.components.schemas.OAuth2Token.properties.connection_id
$
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for Memo Bank Marketplace API
version: 1.0.0
x-generated: '2026-08-17'
x-method: generated
x-source: openapi/memo-bank-marketplace-api-openapi.yml
x-note: >-
Non-destructive enhancements over the spec Memo Bank publishes at
https://docs-marketplace.api.memo.bank/source.yaml. The original is preserved in openapi/_original/. This
document carries a single operation (the OAuth 2.0 token endpoint) but the surrounding contract - the
authorization endpoint, token lifetimes, the dual-credential X-Memo-Signature scheme and the connection
lifecycle - is documented only in prose. These actions bring that into the machine-readable contract.
actions:
- target: $.info
update:
x-apievangelist-profile: https://apis.io/provider/memo-bank/
x-apievangelist-reviewed: '2026-08-17'
contact:
name: Memo Bank open banking team
email: openbanking@memo.bank
x-source-doc: https://docs-marketplace.api.memo.bank/topic/topic-getting-started
x-source-note: >-
openbanking@memo.bank is the address Memo Bank publishes for marketplace application registration. The
spec had no info.contact block.
- target: $.components
update:
securitySchemes:
JWT:
type: apiKey
in: header
name: X-Memo-Signature
description: >-
The application's RS256-signed JWT. NOTE the difference from the Premium Bank API: for marketplace
requests the JWT travels in X-Memo-Signature while the Authorization header carries the OAuth 2.0
access token. The payload adds an oat#S256 claim holding base64url(sha256(access_token)), binding
the signature to that specific access token. Modelled as apiKey rather than http bearer because it
is a custom header, not an Authorization scheme.
x-source-doc: https://docs-marketplace.api.memo.bank/authentication
OAuth2:
type: oauth2
description: >-
Authorization code flow with per-workspace and per-account user consent. Access tokens live 2 hours;
refresh tokens live 14 days and are single-use, so each refresh rotates them; authorization codes
live 5 minutes and are single-use.
flows:
authorizationCode:
authorizationUrl: https://client.memo.bank/authorize
tokenUrl: https://api.memo.bank/oauth2/token
refreshUrl: https://api.memo.bank/oauth2/token
scopes: {}
x-scopes-note: >-
Left empty deliberately. Memo Bank requires applicants to declare the scopes they need at
registration and returns a granted scope string in the token response, but publishes NO scope names
anywhere. Populating this map would be fabrication. See scopes/memo-bank-scopes.yml.
x-source-doc: https://docs-marketplace.api.memo.bank/topic/topic-authorization-flow
x-api-evangelist-rationale: >-
The published document references a `JWT` security scheme on its only operation but defines no
securitySchemes at all, and never expresses the OAuth 2.0 flow it exists to serve as a scheme.
- target: $.paths['/oauth2/token'].post
update:
x-token-lifetimes:
access_token: 2 hours
refresh_token: 14 days, single use
authorization_code: 5 minutes, single use
x-refresh-rotation: true
x-dual-credential: >-
This endpoint is itself JWT-protected - an application must sign the token request with X-Memo-Signature
in addition to supplying client_id and client_secret in the body.
x-agentic-access:
action-class: acting
consequence: write
audit: required
x-source-doc: https://docs-marketplace.api.memo.bank/topic/topic-authorization-flow
- target: $.components.schemas.OAuth2Token.properties.connection_id
update:
x-api-evangelist-note: >-
The join key for multi-tenant integrations. The same value arrives on webhook deliveries in the
X-Memo-Connection-Id header, so an application routes events to the right customer by it. One connection
exists per user/workspace pair; once a user deactivates it, API calls fail with inactive_connection.
x-source-doc: https://docs-marketplace.api.memo.bank/topic/topic-connection-lifecycle
- target: $.components
update:
schemas:
Error:
type: object
description: Memo Bank's unified error envelope. Not RFC 9457 problem+json.
required:
- code
- message
properties:
code:
type: string
example: inactive_connection
message:
type: string
example: The connection has been deactivated by the user.
x-source-doc: https://docs-marketplace.api.memo.bank/topic/topic-connection-lifecycle
x-api-evangelist-rationale: >-
The token operation declares only a 200 response. No error schema exists, yet the documentation names a
marketplace-specific inactive_connection code and an OAuth error/error_description redirect contract.
- target: $
update:
x-authorization-endpoint: https://client.memo.bank/authorize
x-authorization-params:
- client_id
- redirect_uri
- scope
- state
x-pkce: not documented
x-api-evangelist-gap: >-
The authorization endpoint lives on client.memo.bank, a different host from the api.memo.bank server
declared in servers[], and is not represented in the document at all. No PKCE (RFC 7636) is documented,
and no RFC 8414 authorization-server metadata is served, so none of this is machine-discoverable.
x-source-doc: https://docs-marketplace.api.memo.bank/topic/topic-authorization-flow