{"openapi":"3.1.0","info":{"title":"Checker MPP FX gateway","version":"1.0.0","description":"Payment-gated indicative FX and stablecoin cross prices sourced from Checker. Responses are sanitized and are not executable quotes.","x-guidance":"Use GET /v1/prices with pair and size query parameters for a paid FX quote. Use POST /mcp for the paid get_fx_quote MCP tool. MPP requests are paid in PathUSD on Tempo Moderato. Base clients can use GET /v1/x402/prices with the x402 payment flow.","license":{"name":"Proprietary"},"contact":{"url":"https://checker-mpp-fx-gateway.replit.app"}},"servers":[{"url":"https://checker-mpp-fx-gateway.replit.app"}],"paths":{"/v1/prices":{"get":{"operationId":"getFxPrices","summary":"Get a paid indicative FX quote","description":"Returns sanitized indicative buy and sell quotes for a currency pair and notional size. The request costs $0.001 through Tempo MPP sessions.","tags":["FX quotes"],"x-compatibility-aliases":["/api/v1/prices"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"mpp":{"method":"tempo","intent":"session","currency":"PathUSD"}}]},"parameters":[{"name":"pair","in":"query","required":true,"description":"Currency pair in BASE-QUOTE format, for example MXN-USD.","schema":{"type":"string","pattern":"^[A-Za-z0-9]+-[A-Za-z0-9]+$","examples":["MXN-USD"]}},{"name":"size","in":"query","required":true,"description":"Notional size for the requested quote.","schema":{"type":"string","minLength":1,"examples":["1000"]}}],"requestBody":{"required":false,"description":"Optional discovery-friendly representation of the query input. The live endpoint reads pair and size from the URL query string.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FxQuoteInput"},"example":{"pair":"MXN-USD","size":"1000"}}}},"responses":{"200":{"description":"Sanitized indicative FX quotes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"402":{"description":"Payment Required. The response includes a MPP WWW-Authenticate challenge.","headers":{"WWW-Authenticate":{"description":"MPP payment challenge. Preserve this header and use it to create the signed payment credential.","schema":{"type":"string"}}}},"502":{"description":"The upstream market-data service failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/mcp":{"post":{"operationId":"checkerMcp","summary":"Use the paid FX quote MCP endpoint","description":"Streamable HTTP MCP endpoint exposing the get_fx_quote(pair, size) tool. Each paid tool request costs $0.001 through Tempo MPP sessions.","tags":["MCP"],"x-compatibility-aliases":["/api/mcp"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"mpp":{"method":"tempo","intent":"session","currency":"PathUSD"}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpRequest"},"examples":{"initialize":{"value":{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"agent","version":"1.0.0"}}}},"getFxQuote":{"value":{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_fx_quote","arguments":{"pair":"MXN-USD","size":"1000"}}}}}}}},"responses":{"200":{"description":"MCP JSON-RPC response or stream.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpResponse"}},"text/event-stream":{"schema":{"type":"string"}}}},"402":{"description":"Payment Required. The response includes a MPP WWW-Authenticate challenge.","headers":{"WWW-Authenticate":{"description":"MPP payment challenge. Preserve this header and use it to create the signed payment credential.","schema":{"type":"string"}}}}}}},"/v1/x402/prices":{"get":{"operationId":"getFxPricesX402","summary":"Get a paid indicative FX quote over x402","description":"Base Sepolia x402 alternative to the Tempo MPP quote endpoint. The request costs $0.001 in USDC.","tags":["FX quotes","x402"],"x-compatibility-aliases":["/api/v1/x402/prices"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"parameters":[{"name":"pair","in":"query","required":true,"description":"Currency pair in BASE-QUOTE format, for example MXN-USD.","schema":{"type":"string","pattern":"^[A-Za-z0-9]+-[A-Za-z0-9]+$","examples":["MXN-USD"]}},{"name":"size","in":"query","required":true,"description":"Notional size for the requested quote.","schema":{"type":"string","minLength":1,"examples":["1000"]}}],"requestBody":{"required":false,"description":"Optional discovery-friendly representation of the query input. The live endpoint reads pair and size from the URL query string.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FxQuoteInput"},"example":{"pair":"MXN-USD","size":"1000"}}}},"responses":{"200":{"description":"Sanitized indicative FX quotes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"402":{"description":"Payment Required. The response includes the x402 PAYMENT-REQUIRED challenge.","headers":{"PAYMENT-REQUIRED":{"description":"Base Sepolia x402 payment requirements, encoded by the x402 server.","schema":{"type":"string"}}}},"502":{"description":"The upstream market-data service failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/healthz":{"get":{"operationId":"healthCheck","summary":"Health check","description":"Free service health check.","security":[],"responses":{"200":{"description":"The service is healthy.","content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","const":"ok"}}}}}}}}}},"components":{"schemas":{"FxQuoteInput":{"type":"object","description":"Input for a quote request.","required":["pair","size"],"properties":{"pair":{"type":"string","description":"Currency pair in BASE-QUOTE format.","examples":["MXN-USD"]},"size":{"type":"string","description":"Notional size.","examples":["1000"]}},"additionalProperties":false},"Quote":{"type":"object","required":["pair","side","price","size","timestamp","valid_for_seconds","class","venue"],"properties":{"pair":{"type":"string"},"side":{"type":"string","enum":["buy","sell"]},"price":{"type":"string"},"size":{"type":"string"},"timestamp":{"type":"string"},"valid_for_seconds":{"type":"number","minimum":1},"class":{"type":"string","enum":["network","public_venue"]},"venue":{"type":"string","description":"A public venue name or sanitized VENUE-N alias."}},"additionalProperties":false},"QuoteResponse":{"type":"object","required":["quotes"],"properties":{"quotes":{"type":"array","items":{"$ref":"#/components/schemas/Quote"}}},"additionalProperties":false},"McpRequest":{"type":"object","description":"Streamable HTTP MCP JSON-RPC request. Use tools/call with name get_fx_quote to request a quote.","required":["jsonrpc","method","id"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["initialize","tools/list","tools/call"]},"params":{"type":"object","description":"For tools/call, use { name: \"get_fx_quote\", arguments: { pair, size } }.","additionalProperties":true}},"additionalProperties":true},"McpResponse":{"type":"object","description":"MCP JSON-RPC response. The tools/call result contains sanitized quotes in structuredContent.","additionalProperties":true},"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}},"additionalProperties":true}},"additionalProperties":true}}}}