{"openapi":"3.1.1","jsonSchemaDialect":"https://json-schema.org/draft/2020-12/schema","info":{"title":"Vikka Agent Resources API","version":"1.0.0","description":"Vikka diseña y desarrolla sitios web a medida para negocios y organizaciones de LATAM, con estrategia, diseño, desarrollo y trato directo. This public, read-oriented API exposes Vikka services and selected work, and can prepare a contact draft without sending it.","contact":{"name":"Vikka","url":"https://www.vikka.studio/contact"},"license":{"name":"Proprietary - all rights reserved","identifier":"LicenseRef-Vikka-Proprietary"}},"servers":[{"url":"https://www.vikka.studio","description":"Canonical Vikka website"}],"externalDocs":{"description":"Vikka developer and agent resources","url":"https://www.vikka.studio/developers"},"tags":[{"name":"Discovery","description":"Machine-readable API and capability discovery."},{"name":"Vikka","description":"Public Vikka services, work, and project brief preparation."}],"security":[],"x-vikka-versioning":{"strategy":"Major versions in the URL path","current":"v1","status":"active","policy":"https://www.vikka.studio/api-versioning.md"},"paths":{"/api":{"get":{"tags":["Discovery"],"operationId":"getVikkaApiIndex","summary":"Get the Vikka API index","description":"Returns the canonical links for the OpenAPI contract, developer guide, MCP endpoint, and versioned JSON resources.","parameters":[{"name":"lang","in":"query","required":false,"description":"Response language. Defaults to English when omitted.","schema":{"type":"string","enum":["en","es","pt"],"default":"en"}}],"responses":{"200":{"description":"The public Vikka API index.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}},"400":{"description":"The requested response language is not supported.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this endpoint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The public request quota has been exceeded.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"A structured JSON error with a recovery hint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1":{"get":{"tags":["Discovery"],"operationId":"getVikkaApiV1Index","summary":"Get the Vikka API version 1 index","description":"Returns the stable version 1 resource links and explains that these public operations do not require authentication.","parameters":[{"name":"lang","in":"query","required":false,"description":"Response language. Defaults to English when omitted.","schema":{"type":"string","enum":["en","es","pt"],"default":"en"}}],"responses":{"200":{"description":"The Vikka API version 1 index.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}},"400":{"description":"The requested response language is not supported.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this endpoint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The public request quota has been exceeded.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"A structured JSON error with a recovery hint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/services":{"get":{"tags":["Vikka"],"operationId":"listVikkaServices","summary":"List Vikka services","description":"Lists the three website project types Vikka offers and the situation in which each type is a useful fit.","parameters":[{"name":"lang","in":"query","required":false,"description":"Response language. Defaults to English when omitted.","schema":{"type":"string","enum":["en","es","pt"],"default":"en"}}],"responses":{"200":{"description":"The current public Vikka service catalogue.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicesResponse"}}}},"400":{"description":"The requested response language is not supported.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this endpoint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The public request quota has been exceeded.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"A structured JSON error with a recovery hint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/projects":{"get":{"tags":["Vikka"],"operationId":"listVikkaSelectedProjects","summary":"List selected Vikka work","description":"Returns the public project names and live URLs that Vikka is allowed to present as completed selected work.","parameters":[{"name":"lang","in":"query","required":false,"description":"Response language. Defaults to English when omitted.","schema":{"type":"string","enum":["en","es","pt"],"default":"en"}}],"responses":{"200":{"description":"Public projects presented by Vikka.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectsResponse"}}}},"400":{"description":"The requested response language is not supported.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"405":{"description":"The HTTP method is not supported for this endpoint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The public request quota has been exceeded.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"A structured JSON error with a recovery hint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/project-brief":{"post":{"tags":["Vikka"],"operationId":"prepareVikkaProjectBrief","summary":"Prepare a Vikka project brief","description":"Validates project context and creates reviewable email and WhatsApp drafts. It never sends a message, requests a quote, or reserves availability.","requestBody":{"required":true,"description":"The minimum business context needed to prepare an accurate enquiry draft.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectBriefRequest"}}}},"responses":{"200":{"description":"A non-sending project brief and contact draft links.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectBriefResponse"}}}},"400":{"description":"The request body is not valid JSON.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"The request body is not JSON.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request body fails schema validation.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The public request quota has been exceeded.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"default":{"description":"A structured JSON error with a recovery hint.","headers":{"RateLimit-Policy":{"description":"The named quota policy and its request and time-window limits.","schema":{"type":"string","example":"\"public\";q=60;w=60"}},"RateLimit":{"description":"The remaining requests and seconds until the current quota resets.","schema":{"type":"string","example":"\"public\";r=59;t=60"}},"RateLimit-Limit":{"description":"Compatibility field containing the request limit for the current window.","schema":{"type":"integer","minimum":1}},"RateLimit-Remaining":{"description":"Compatibility field containing the requests left in the current window.","schema":{"type":"integer","minimum":0}},"RateLimit-Reset":{"description":"Compatibility field containing seconds until the current window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"schemas":{"ApiIndex":{"type":"object","additionalProperties":false,"required":["name","description","version","language","openapi","documentation","versioningPolicy","mcp","authentication","endpoints"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"version":{"type":"string"},"language":{"type":"string","enum":["en","es","pt"]},"openapi":{"type":"string","format":"uri"},"documentation":{"type":"string","format":"uri"},"versioningPolicy":{"type":"string","format":"uri"},"mcp":{"type":"string","format":"uri"},"authentication":{"type":"string"},"endpoints":{"type":"object","additionalProperties":{"type":"string","format":"uri"}}}},"Service":{"type":"object","additionalProperties":false,"required":["id","name","useWhen"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9-]+$"},"name":{"type":"string"},"useWhen":{"type":"string"}}},"ServicesResponse":{"type":"object","additionalProperties":false,"required":["version","language","services"],"properties":{"version":{"type":"string"},"language":{"type":"string","enum":["en","es","pt"]},"services":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}}},"Project":{"type":"object","additionalProperties":false,"required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"}}},"ProjectsResponse":{"type":"object","additionalProperties":false,"required":["version","language","projects"],"properties":{"version":{"type":"string"},"language":{"type":"string","enum":["en","es","pt"]},"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}},"ProjectBriefRequest":{"type":"object","additionalProperties":false,"required":["business","currentPresence","problem","desiredAction"],"properties":{"business":{"type":"string","minLength":1,"maxLength":160},"currentPresence":{"type":"string","minLength":1,"maxLength":500},"problem":{"type":"string","minLength":1,"maxLength":800},"desiredAction":{"type":"string","minLength":1,"maxLength":300},"requiredFeatures":{"type":"array","maxItems":12,"items":{"type":"string","minLength":1,"maxLength":160}}}},"ProjectBrief":{"allOf":[{"$ref":"#/components/schemas/ProjectBriefRequest"}]},"ContactDrafts":{"type":"object","additionalProperties":false,"required":["whatsappUrl","emailUrl"],"properties":{"whatsappUrl":{"type":"string","format":"uri"},"emailUrl":{"type":"string","format":"uri"}}},"ProjectBriefResponse":{"type":"object","additionalProperties":false,"required":["brief","contact","sent","notice","serviceDetails"],"properties":{"brief":{"$ref":"#/components/schemas/ProjectBrief"},"contact":{"$ref":"#/components/schemas/ContactDrafts"},"sent":{"type":"boolean","const":false},"notice":{"type":"string"},"serviceDetails":{"type":"string","format":"uri"}}},"ValidationIssue":{"type":"object","additionalProperties":false,"required":["path","message","code"],"properties":{"path":{"type":"string"},"message":{"type":"string"},"code":{"type":"string"}}},"ErrorDetail":{"type":"object","additionalProperties":false,"required":["code","message","hint","docs"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"},"docs":{"type":"string","format":"uri"},"details":{"type":"array","items":{"$ref":"#/components/schemas/ValidationIssue"}}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}}}}}}