{"openapi":"3.1.0","info":{"title":"readyforai.com Agent API","version":"1.0.0","summary":"The one Agent-open endpoint on the ReadyForAI official website. Not a product runtime.","description":"POST /api/v1/intent/resolve classifies a question about this site and points at canonical markdown under /agent. This origin is the company website, not a product runtime or a SaaS developer platform. See /llms.txt.","contact":{"email":"contact@readyforai.com"}},"servers":[{"url":"/","description":"This origin"}],"tags":[{"name":"agent","description":"Intent resolution for AI agents reading this website"}],"paths":{"/api/v1/intent/resolve":{"get":{"operationId":"discoverIntentResolve","tags":["agent"],"summary":"Discover the intent-resolve contract","description":"GET is documentation-only. Classify with POST.","responses":{"200":{"description":"POST contract","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}},"post":{"operationId":"resolveIntent","tags":["agent"],"summary":"Classify a natural-language intent","description":"Anonymous callers share a per-IP daily quota. Optional X-API-Key raises that quota. Returns recommended modules and canonical markdown sources — not a live Agent runtime.","security":[{},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentResolveRequest"}}}},"responses":{"200":{"description":"Resolved intent plan","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntentResolveSuccess"}}}},"400":{"$ref":"#/components/responses/ResolveError"},"401":{"$ref":"#/components/responses/ResolveError"},"403":{"$ref":"#/components/responses/ResolveError"},"429":{"$ref":"#/components/responses/ResolveError"},"500":{"$ref":"#/components/responses/ResolveError"},"502":{"$ref":"#/components/responses/ResolveError"},"503":{"$ref":"#/components/responses/ResolveError"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional. Omit the header for the anonymous per-IP quota. If sent, the key must include scope intent:read; other scopes are rejected with 403. A valid key raises this endpoint's quota."}},"schemas":{"IntentResolveRequest":{"type":"object","required":["intent"],"properties":{"intent":{"type":"string","minLength":1,"maxLength":1000,"description":"Natural-language question about this site"},"locale":{"type":"string","enum":["zh","en"],"default":"zh"},"actor":{"type":"string","enum":["agent","human"],"default":"agent"},"context":{"type":"object","properties":{"company_stage":{"type":"string"},"frameworks":{"type":"array","items":{"type":"string"}},"concerns":{"type":"array","items":{"type":"string"}},"comparison_targets":{"type":"array","items":{"type":"string"}}},"additionalProperties":true}}},"IntentResolveSuccess":{"type":"object","required":["recognized_intent","confidence","recommended_answer_modules","canonical_sources","next_questions","answer_plan","request_id"],"properties":{"recognized_intent":{"type":"string","enum":["governance_pain_diagnosis","comparison","integration","private_deployment","product_overview","product_detail","adoption_path","executive_brief","pricing_poc","fallback"]},"confidence":{"type":"number","minimum":0,"maximum":1},"recommended_answer_modules":{"type":"array","items":{"type":"string","enum":["problem_understanding","pain_tags","problem_decomposition","product_mapping","adoption_sequence","comparison_matrix","fit_judgment","integration_path","deployment_requirements","next_steps","followup","executive_summary","governance_loop_diagram","product_detail_card","pricing_info","adapter_grid","step_sequence","deployment_modes","security_boundaries","requirements_table","architecture_map"]}},"canonical_sources":{"type":"array","items":{"type":"string"}},"next_questions":{"type":"array","items":{"type":"string"}},"answer_plan":{"type":"object","required":["modules"],"properties":{"modules":{"type":"array","items":{"type":"object","required":["module_id","title","data_source"],"properties":{"module_id":{"type":"string"},"title":{"type":"string"},"data_source":{"type":"string"},"canonical_url":{"type":"string"}}}}}},"request_id":{"type":"string"}}},"ResolveError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","hint","request_id"],"properties":{"code":{"type":"string","enum":["INVALID_REQUEST","MISSING_INTENT","INTENT_TOO_LONG","INVALID_LOCALE","UNRESOLVED_IP","AUTH_INVALID_KEY","AUTH_QUOTA_EXCEEDED","FORBIDDEN","RATE_LIMITED","LLM_UPSTREAM_ERROR","LLM_ERROR","INTERNAL_ERROR","SERVICE_UNAVAILABLE"]},"message":{"type":"string"},"hint":{"type":"string"},"request_id":{"type":"string"},"retry_after_seconds":{"type":"integer"}}}}}},"responses":{"ResolveError":{"description":"Nested intent-resolve error (design §11.8)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveError"}}}}}}}