{"openapi":"3.1.0","info":{"title":"TDC Agent-Ready Cloud API","description":"Let your AI assistant recommend, order, pay, provision and deploy on Thai Data Cloud within a customer mandate. MCP endpoint: https://mcp.thaidata.cloud/mcp (streamable HTTP, Authorization: Bearer <token>). Sandbox tokens (tdc_sbx_) never charge money.","version":"0.4.0"},"servers":[{"url":"https://mcp.thaidata.cloud"}],"paths":{"/health":{"get":{"tags":["ops"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/llms.txt":{"get":{"tags":["discovery"],"summary":"Llms","operationId":"llms_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/.well-known/tdc-agent.json":{"get":{"tags":["discovery"],"summary":"Agent Card","operationId":"agent_card__well_known_tdc_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Agent Card  Well Known Tdc Agent Json Get"}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["discovery"],"summary":"Prm Rest","description":"RFC 9728 for the REST resource. CORS is wide open on the two metadata documents ONLY: a\nbrowser-based MCP client has to read them cross-origin before it holds any credential.","operationId":"prm_rest__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Prm Rest  Well Known Oauth Protected Resource Get"}}}}}}},"/.well-known/oauth-protected-resource/mcp":{"get":{"tags":["discovery"],"summary":"Prm Mcp","description":"RFC 9728 for the MCP endpoint — its own resource indicator, so a token minted for /mcp is not\nreplayable against the REST twin.","operationId":"prm_mcp__well_known_oauth_protected_resource_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Prm Mcp  Well Known Oauth Protected Resource Mcp Get"}}}}}}},"/products":{"get":{"tags":["catalog"],"summary":"Products","operationId":"products_products_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Products Products Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/products/{sku}":{"get":{"tags":["catalog"],"summary":"Pricing","operationId":"pricing_products__sku__get","parameters":[{"name":"sku","in":"path","required":true,"schema":{"type":"string","title":"Sku"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pricing Products  Sku  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/recommend":{"post":{"tags":["catalog"],"summary":"Recommend","operationId":"recommend_recommend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecommendIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Recommend Recommend Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/domains/{domain}":{"get":{"tags":["catalog"],"summary":"Domain","operationId":"domain_domains__domain__get","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Domain Domains  Domain  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/quotes":{"post":{"tags":["orders"],"summary":"Quote","operationId":"quote_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Quote Quotes Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders":{"post":{"tags":["orders"],"summary":"Order","operationId":"order_orders_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Order Orders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/pay":{"post":{"tags":["orders"],"summary":"Pay","operationId":"pay_orders__order_id__pay_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Pay Orders  Order Id  Pay Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}/sandbox-confirm-payment":{"post":{"tags":["orders"],"summary":"Sandbox Confirm","operationId":"sandbox_confirm_orders__order_id__sandbox_confirm_payment_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Sandbox Confirm Orders  Order Id  Sandbox Confirm Payment Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/orders/{order_id}":{"get":{"tags":["orders"],"summary":"Order Status","operationId":"order_status_orders__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Order Status Orders  Order Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/services":{"get":{"tags":["services"],"summary":"Services","operationId":"services_services_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Services Services Get"}}}}}}},"/services/{service_id}":{"get":{"tags":["services"],"summary":"Service","operationId":"service_services__service_id__get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Service Services  Service Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["services"],"summary":"Delete","operationId":"delete_services__service_id__delete","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"confirm_token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirm Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Services  Service Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/services/{service_id}/deploy":{"post":{"tags":["services"],"summary":"Deploy","operationId":"deploy_services__service_id__deploy_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Services  Service Id  Deploy Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/services/{service_id}/scale/{new_sku}":{"post":{"tags":["services"],"summary":"Scale","operationId":"scale_services__service_id__scale__new_sku__post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"new_sku","in":"path","required":true,"schema":{"type":"string","title":"New Sku"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scale Services  Service Id  Scale  New Sku  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/services/{service_id}/ssl/{domain}":{"post":{"tags":["services"],"summary":"Ssl","operationId":"ssl_services__service_id__ssl__domain__post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ssl Services  Service Id  Ssl  Domain  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dns":{"post":{"tags":["services"],"summary":"Dns","operationId":"dns_dns_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dns Dns Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tickets":{"post":{"tags":["support"],"summary":"Ticket","operationId":"ticket_tickets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ticket Tickets Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/account":{"get":{"tags":["account"],"summary":"Account","operationId":"account_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Account Account Get"}}}}}}},"/audit":{"get":{"tags":["account"],"summary":"Audit Trail","description":"Everything this customer's agents did and were refused — reads, denials, 401s, 404s and 429s\nincluded, which `agent_history` (business events only) never showed.\n\nThere is no `customer_id` parameter and there will not be one: the tenant comes from the verified\nmandate, so a token can only ever page through its own customer's rows. Paging is a cursor on the\nappend id, oldest first, which stays exact while new rows are being appended underneath.","operationId":"audit_trail_audit_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"next_cursor from the previous page","title":"Cursor"},"description":"next_cursor from the previous page"},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"\"call\" (one per request) or \"event\"","title":"Kind"},"description":"\"call\" (one per request) or \"event\""},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"allowed | denied | rate_limited | error","title":"Outcome"},"description":"allowed | denied | rate_limited | error"},{"name":"transport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"rest | mcp | stdio | cli","title":"Transport"},"description":"rest | mcp | stdio | cli"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO-8601 UTC lower bound on ts","title":"Since"},"description":"ISO-8601 UTC lower bound on ts"},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Until"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit Trail Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mandates":{"post":{"tags":["account"],"summary":"Issue Mandate","operationId":"issue_mandate_mandates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MandateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Issue Mandate Mandates Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mandates/me":{"delete":{"tags":["account"],"summary":"Revoke Own Mandate","description":"An agent retires its own credential. Soft revoke: the row stays, so the customer's history\nstill points at a real mandate and a replay of the token is reported as revoked, not unknown.","operationId":"revoke_own_mandate_mandates_me_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Revoke Own Mandate Mandates Me Delete"}}}}}}}},"components":{"schemas":{"DeployIn":{"properties":{"source":{"type":"string","title":"Source","description":"git URL (https://github.com/org/repo#main) or container image"},"env":{"additionalProperties":{"type":"string"},"type":"object","title":"Env"}},"type":"object","required":["source"],"title":"DeployIn"},"DnsIn":{"properties":{"domain":{"type":"string","title":"Domain"},"record_type":{"type":"string","title":"Record Type"},"name":{"type":"string","title":"Name"},"value":{"type":"string","title":"Value"}},"type":"object","required":["domain","record_type","name","value"],"title":"DnsIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MandateIn":{"properties":{"agent_name":{"type":"string","title":"Agent Name","default":"my-agent"},"customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Id","description":"Ignored in the sandbox — a private SBX-… customer is created for each token"},"scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scopes"},"monthly_limit_thb":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Monthly Limit Thb","default":20000},"auto_pay_limit_thb":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Auto Pay Limit Thb","default":5000},"sandbox":{"type":"boolean","title":"Sandbox","default":true}},"type":"object","title":"MandateIn"},"OrderIn":{"properties":{"quote_id":{"type":"string","title":"Quote Id"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"type":"object","required":["quote_id","idempotency_key"],"title":"OrderIn"},"QuoteIn":{"properties":{"skus":{"items":{"type":"string"},"type":"array","title":"Skus"}},"type":"object","required":["skus"],"title":"QuoteIn"},"RecommendIn":{"properties":{"workload":{"type":"string","title":"Workload"},"expected_users":{"type":"integer","title":"Expected Users","default":1000},"monthly_budget_thb":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Budget Thb"}},"type":"object","required":["workload"],"title":"RecommendIn"},"TicketIn":{"properties":{"subject":{"type":"string","title":"Subject"},"body":{"type":"string","title":"Body"}},"type":"object","required":["subject","body"],"title":"TicketIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}