{"openapi":"3.1.0","info":{"title":"BankMCP API","version":"1.0.0","description":"Read-only bank history for agents. PAT scopes and account grants apply to REST and MCP. Amounts are decimal strings."},"servers":[{"url":"https://bankmcp.pl"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"User Supabase access JWT for owner operations or a bm_live_ API key for agents."}}},"paths":{"/v1/me":{"get":{"summary":"Current owner/workspace","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/accounts":{"get":{"summary":"Granted accounts","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/accounts/{id}/transactions":{"get":{"summary":"Paginated transactions","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"date_from","in":"query","schema":{"type":"string"}},{"name":"date_to","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/accounts/{id}/sync-status":{"get":{"summary":"Recent synchronization jobs","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/accounts/{id}/sync":{"post":{"summary":"Queue refresh (scope sync:request)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"202":{"description":"Queued"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/institutions":{"get":{"summary":"Supported banks (owner)","security":[{"bearerAuth":[]}],"parameters":[{"name":"country","in":"query","schema":{"type":"string","default":"PL"}}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/bank-connections":{"get":{"summary":"Bank connections (owner)","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}},"post":{"summary":"Create bank consent link (owner)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["institution_id"],"properties":{"institution_id":{"type":"string"},"country":{"type":"string","default":"PL"}}}}}},"responses":{"200":{"description":"Success"},"201":{"description":"Authorization link"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/bank-connections/{id}":{"delete":{"summary":"Disconnect bank (owner)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}},"patch":{"summary":"Pause/resume synchronization (owner)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sync_enabled"],"properties":{"sync_enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/api-keys":{"get":{"summary":"List key metadata (owner)","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}},"post":{"summary":"Create key; secret returned once (owner)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","account_ids","scopes"],"properties":{"name":{"type":"string"},"account_ids":{"type":"array","items":{"type":"string","format":"uuid"}},"scopes":{"type":"array","items":{"type":"string","enum":["accounts:read","transactions:read","sync:request"]}},"valid_days":{"type":"integer","minimum":1,"maximum":365,"default":90}}}}}},"responses":{"200":{"description":"Success"},"201":{"description":"New secret; not retrievable later"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/api-keys/{id}":{"patch":{"summary":"Enable/disable sync:request for an existing key (owner)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sync_enabled"],"properties":{"sync_enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}},"delete":{"summary":"Revoke key (owner)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/v1/access-events":{"get":{"summary":"Recent access events (owner)","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}},"/mcp":{"post":{"summary":"MCP Streamable HTTP (stateless); bearer-capable clients","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"404":{"description":"Resource not found"},"429":{"description":"Rate limit or bank cooldown"}}}}}}