# info.description
Public catalog of kwnva.design case studies. Reads are anonymous. Writes accept an optional OAuth bearer token. Versioned in the URL path as /api/v1. Deprecation policy: retired versions send HTTP Deprecation and Sunset headers. Policy page: /deprecation.md and /api/versioning.md.

# externalDocs.description
HTTP API documentation, authentication walkthrough, and deprecation / Sunset policy.

# servers[].description
Sandbox is the /api/v1/sandbox prefix on the same host

# paths./api/v1.get.description
Lists available resources, version policy, and sandbox prefix.

# paths./api/v1/projects.get.description
Cursor-paginated list of published case studies.

# paths./api/v1/projects/{id}.get.description
Returns a single case study by folder id.

# paths./api/v1/search.get.description
Full-text search over title, client, category, role, and description.

# paths./api/v1/inquiries.post.description
Open a project inquiry. Optional bearer token. Send Idempotency-Key on retries.

# paths./api/v1/inquiries.post.parameters[].description
Client-generated key that makes the write safe to retry.

# paths./api/v1/jobs/{id}.get.description
Follow a 202 Location to read job status.

# paths./api/v1/batch.post.description
Run many get or search operations in one request.

# paths./api/v1/sandbox/projects.get.description
Same shape as listPortfolioProjects. Safe for agents to exercise freely.

# paths./api/v1/keys.post.description
Self-serve onboarding. Returns api_key, token_endpoint, and sandbox. Equivalent to POST /oauth/register.

# paths./sandbox.get.description
JSON sandbox surface. Same catalog shape as GET /api/v1/sandbox/projects. Safe to call from CI.

# paths./api/v1/sandbox/inquiries.post.description
Accepts the same body as production inquiries and discards it.

# components.securitySchemes.optionalBearer.description
Optional. Reads work anonymously. Writes may send a bearer from /oauth/token.

# components.responses.Error.description
RFC 9457 problem+json error. Every catalog operation references this response.

# components.responses.RateLimited.description
Slow down. Honor Retry-After and RateLimit.