{"openapi":"3.1.0","info":{"title":"MPPScan","description":"Query MPP (Machine Payments Protocol) ecosystem data — services, transactions, volume, and protocol stats on the Tempo network.","version":"1.0.0","x-guidance":"MPPScan API provides read-only access to indexed MPP ecosystem data on the Tempo blockchain.\n\n## Endpoints\n\n### Services\n- GET /api/mpp/services — Paginated list of registered MPP services. Supports search via ?q= and sorting via ?sort=tx_count|total_amount|latest_block_timestamp|unique_buyers&order=desc|asc.\n- GET /api/mpp/services/recent — Services registered in the last 24 hours.\n- GET /api/mpp/services/{id} — Full detail for a single service including its resources and stats.\n- GET /api/mpp/services/{id}/resources — List of active API endpoints registered under a service.\n- GET /api/mpp/services/{id}/timeseries — Transaction volume time series for a service.\n\n### Activity\n- GET /api/mpp/activity — All memo-server-hash activity including unregistered services.\n\n### Protocol Stats\n- GET /api/mpp/stats — Protocol-wide aggregate stats (total transactions, volume, unique participants).\n- GET /api/mpp/stats/timeseries — Protocol-wide time series buckets.\n\n### Search\n- POST /api/mpp/search — Semantic search for MPP/x402 endpoints: natural-language intent (for example enrichment) returns matching service domains (for example stableenrich.dev). Body: { query: string, protocol?: 'mpp' | 'x402' } (protocol defaults to mpp).\n\n### Registry\n- POST /api/mpp/register — SIWX-protected origin registration and refresh. Accepts a URL or bare domain, discovers MPP endpoints, updates origin metadata, and replaces stale resources.\n- POST /api/mpp/registry/register — Alias of the register flow for clients expecting the registry-prefixed path.\n\n## Common Parameters\n- timeframe: 0 (all-time), 1, 7, 15, or 30 (days). Default varies by endpoint.\n- page: 0-indexed page number (default 0).\n- page_size: 1-100 items per page (default 10).\n- q: Search query string for /services and /activity.\n- sort: For /services, one of tx_count, total_amount, latest_block_timestamp, unique_buyers. Default tx_count.\n- order: For /services, asc or desc. Default desc.\n- service ids are returned by /services, /activity, /register, and /registry/register; treat them as opaque ids rather than constructing them manually.\n\n## Composition\n- Start broad with /api/mpp/stats or /api/mpp/activity.\n- Use /api/mpp/services to find a registered service id.\n- Use /api/mpp/services/{id} for the canonical service view.\n- Use /api/mpp/services/{id}/resources when only endpoint metadata is needed.\n- Use /api/mpp/services/{id}/timeseries for charts, trends, or monitoring.\n- Use /api/mpp/search to semantically discover which x402/MPP origins fit your task (domains and capabilities).\n- Use /api/mpp/register when activity exists but the service is not yet registered.\n- Use /api/mpp/registry/register when activity exists but the service is not yet registered.\n- Treat unknown {id} values as missing services; service subroutes return 404.\n\n## Response Format\nCollection endpoints (/services, /activity) return: { data: [...], pagination: { page, page_size, has_next_page } }\nResources and timeseries endpoints return: { data: [...] }\nRegister returns: { success, origin, resourceCount }\nDetail and stats endpoints return the object directly.","guidance":"MPPScan API provides read-only access to indexed MPP ecosystem data on the Tempo blockchain.\n\n## Endpoints\n\n### Services\n- GET /api/mpp/services — Paginated list of registered MPP services. Supports search via ?q= and sorting via ?sort=tx_count|total_amount|latest_block_timestamp|unique_buyers&order=desc|asc.\n- GET /api/mpp/services/recent — Services registered in the last 24 hours.\n- GET /api/mpp/services/{id} — Full detail for a single service including its resources and stats.\n- GET /api/mpp/services/{id}/resources — List of active API endpoints registered under a service.\n- GET /api/mpp/services/{id}/timeseries — Transaction volume time series for a service.\n\n### Activity\n- GET /api/mpp/activity — All memo-server-hash activity including unregistered services.\n\n### Protocol Stats\n- GET /api/mpp/stats — Protocol-wide aggregate stats (total transactions, volume, unique participants).\n- GET /api/mpp/stats/timeseries — Protocol-wide time series buckets.\n\n### Search\n- POST /api/mpp/search — Semantic search for MPP/x402 endpoints: natural-language intent (for example enrichment) returns matching service domains (for example stableenrich.dev). Body: { query: string, protocol?: 'mpp' | 'x402' } (protocol defaults to mpp).\n\n### Registry\n- POST /api/mpp/register — SIWX-protected origin registration and refresh. Accepts a URL or bare domain, discovers MPP endpoints, updates origin metadata, and replaces stale resources.\n- POST /api/mpp/registry/register — Alias of the register flow for clients expecting the registry-prefixed path.\n\n## Common Parameters\n- timeframe: 0 (all-time), 1, 7, 15, or 30 (days). Default varies by endpoint.\n- page: 0-indexed page number (default 0).\n- page_size: 1-100 items per page (default 10).\n- q: Search query string for /services and /activity.\n- sort: For /services, one of tx_count, total_amount, latest_block_timestamp, unique_buyers. Default tx_count.\n- order: For /services, asc or desc. Default desc.\n- service ids are returned by /services, /activity, /register, and /registry/register; treat them as opaque ids rather than constructing them manually.\n\n## Composition\n- Start broad with /api/mpp/stats or /api/mpp/activity.\n- Use /api/mpp/services to find a registered service id.\n- Use /api/mpp/services/{id} for the canonical service view.\n- Use /api/mpp/services/{id}/resources when only endpoint metadata is needed.\n- Use /api/mpp/services/{id}/timeseries for charts, trends, or monitoring.\n- Use /api/mpp/search to semantically discover which x402/MPP origins fit your task (domains and capabilities).\n- Use /api/mpp/register when activity exists but the service is not yet registered.\n- Use /api/mpp/registry/register when activity exists but the service is not yet registered.\n- Treat unknown {id} values as missing services; service subroutes return 404.\n\n## Response Format\nCollection endpoints (/services, /activity) return: { data: [...], pagination: { page, page_size, has_next_page } }\nResources and timeseries endpoints return: { data: [...] }\nRegister returns: { success, origin, resourceCount }\nDetail and stats endpoints return the object directly.","contact":{"name":"Merit Systems","url":"https://merit.systems"}},"servers":[{"url":"https://mppscan.com"}],"tags":[{"name":"Mpp"}],"paths":{"/api/mpp/services":{"get":{"operationId":"mpp_services","summary":"Paginated list of registered MPP services. Supports search via ?q= and sorting via ?sort=tx_count|total_amount|latest_block_timestamp|unique_buyers&order=desc|asc.","tags":["Mpp"],"security":[{"siwx":[]}],"parameters":[{"in":"query","name":"page","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991}},{"in":"query","name":"page_size","schema":{"default":10,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"timeframe","schema":{"default":7,"type":"number"}},{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"sort","schema":{"default":"tx_count","type":"string","enum":["tx_count","total_amount","latest_block_timestamp","unique_buyers"]}},{"in":"query","name":"order","schema":{"default":"desc","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/services/recent":{"get":{"operationId":"mpp_services_recent","summary":"Services registered in the last 24 hours.","tags":["Mpp"],"security":[{"siwx":[]}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/services/{id}":{"get":{"operationId":"mpp_services_detail","summary":"Full detail for a single MPP service including resources, stats, and rank.","tags":["Mpp"],"security":[{"siwx":[]}],"parameters":[{"in":"query","name":"timeframe","schema":{"default":7,"type":"number"}}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/services/{id}/resources":{"get":{"operationId":"mpp_services_resources","summary":"List the active API endpoints registered under an MPP service. Returns 404 if the service id is unknown.","tags":["Mpp"],"security":[{"siwx":[]}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/services/{id}/timeseries":{"get":{"operationId":"mpp_services_timeseries","summary":"Transaction volume time series for a single MPP service. Returns 404 if the service id is unknown.","tags":["Mpp"],"security":[{"siwx":[]}],"parameters":[{"in":"query","name":"timeframe","schema":{"default":7,"type":"number"}}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/activity":{"get":{"operationId":"mpp_activity","summary":"All memo-server-hash activity including unregistered services. Shows raw on-chain activity.","tags":["Mpp"],"security":[{"siwx":[]}],"parameters":[{"in":"query","name":"page","schema":{"default":0,"type":"integer","minimum":0,"maximum":9007199254740991}},{"in":"query","name":"page_size","schema":{"default":10,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"timeframe","schema":{"default":7,"type":"number"}},{"in":"query","name":"q","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/stats":{"get":{"operationId":"mpp_stats","summary":"Protocol-wide aggregate stats: total transactions, volume, unique senders and recipients.","tags":["Mpp"],"security":[{"siwx":[]}],"parameters":[{"in":"query","name":"timeframe","schema":{"default":7,"type":"number"}}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/stats/timeseries":{"get":{"operationId":"mpp_stats_timeseries","summary":"Protocol-wide time series buckets for transaction volume and participants.","tags":["Mpp"],"security":[{"siwx":[]}],"parameters":[{"in":"query","name":"timeframe","schema":{"default":7,"type":"number"}}],"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/search":{"post":{"operationId":"mpp_search","summary":"Semantic search over the x402/MPP service index: describe what you need (for example enrichment or web research) in natural language and get back matching service origins (for example stableenrich.dev).","tags":["Mpp"],"security":[{"siwx":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":500},"protocol":{"default":"mpp","type":"string","enum":["mpp","x402"]}},"required":["query"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}},"/api/mpp/registry/register":{"post":{"operationId":"mpp_registry_register","summary":"Register or refresh an MPP origin by URL. Accepts bare domains, discovers endpoints, updates metadata, and replaces stale resources.","tags":["Mpp"],"security":[{"siwx":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]}}}},"responses":{"200":{"description":"Successful response"},"402":{"description":"Authentication Required"}}}}},"components":{"securitySchemes":{"siwx":{"type":"apiKey","in":"header","name":"SIGN-IN-WITH-X"}}}}