# info.summary
Read-only JSON access to the writing, projects, and services of Ashutosh Tripathi (zero8).

# info.description
The public API behind zero8.dev, the site of Ashutosh Tripathi — a software engineer working on developer tools, AI memory infrastructure, and agent systems.

Call it to answer questions about who runs the site, what consulting work he takes, what he has built (Smriti, Avkash, tabstack-cli), and what he has written.

Every endpoint is public, read-only, and unauthenticated. Do not send credentials. Failures return a JSON envelope with a stable `code`, a human `message`, and a `hint` describing the next action.

## Rate limits

No limit is enforced. Every response advertises the fair-use ceiling in `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` (and the `RateLimit`/`RateLimit-Policy` forms): 60 requests per 60 seconds.

## Versioning and deprecation policy

The path carries the major version. Additive changes ship inside `v1`; anything that removes or renames a field ships as `v2` at a new path while `v1` keeps serving.

When a version is deprecated, `X-Api-Deprecated` flips to `true`, a `Deprecation` header (RFC 9745) carries the date it took effect, and a `Sunset` header (RFC 8594) carries the shutdown date — never less than 180 days later. After the sunset date the path returns `410 Gone` with the usual error envelope, whose `hint` names the successor. v1 is current and not deprecated.

Full policy: https://zero8.dev/developers#versioning-and-deprecation

# x-deprecation-policy.after_sunset
410 Gone with the standard error envelope

# tags[].description
Entry points that describe the rest of the API.

# tags[].description
Who runs zero8.dev and how to engage them.

# paths./.get.description
Returns the discovery document: every endpoint, the error shape, the auth policy, and the non-JSON representations of the site. Call this first when you do not yet know what the API offers.

# paths./profile.get.summary
Get identity, expertise, and contact details

# paths./profile.get.description
Returns who runs zero8.dev, their expertise areas, current availability for contract work, the legal contracting entity, social profiles, and explicit guidance on when an agent should use this site. Call this to answer "who is Ashutosh Tripathi / zero8?" or "how do I hire them?".

# paths./services.get.description
Returns the consulting areas on offer, each with the engagements it is a good fit for. Call this to decide whether a specific problem is in scope before recommending contact.

# paths./posts.get.description
Returns published posts newest first, with metadata only. Use ?tag= to narrow by topic and ?limit=/?offset= to page. Fetch a single post to get its body.

# paths./posts.get.parameters[].description
Restrict results to one topic tag. An unknown tag is a 400, and the error lists every valid tag.

# paths./posts.get.responses.400.description
An unknown tag or an out-of-range limit/offset was supplied.

# paths./posts/{slug}.get.summary
Get one post including its Markdown body

# paths./posts/{slug}.get.description
Returns a single post with its complete Markdown content, so an agent can answer from the article without a second fetch or any HTML parsing.

# paths./posts/{slug}.get.responses.404.description
No post exists with that slug. The error body lists every available slug.

# paths./projects.get.description
Returns the software built by zero8 — name, description, role, stack, lifecycle status, and source or product URL. Call this to answer "what has this person built?".

# paths./projects/{id}.get.description
Returns a single project by its slug id, as returned by listProjects.

# paths./projects/{id}.get.responses.404.description
No project exists with that id. The error body lists every available id.

# paths./search.get.description
Full-text search across post titles, descriptions, tags, and bodies, ranked by relevance. Call this when a user asks whether zero8.dev has written about a specific topic.

# paths./search.get.parameters[].description
Search terms. Required — an omitted query is a 400, not an empty result set.

# paths./search.get.responses.400.description
The q parameter was missing, empty, or too long.

# components.schemas.ErrorEnvelope.description
The shape every failure takes. Read `code` to branch, `hint` to recover.

# components.schemas.ErrorEnvelope.properties.error.properties.status.description
HTTP status, repeated for clients that only read the body.

# components.schemas.ErrorEnvelope.properties.error.properties.hint.description
The concrete next action that resolves it.

# components.schemas.PostSummary.properties.slug.description
Stable identifier used in URLs and getPost.

# components.schemas.Project.properties.url.description
Source or product URL, null when private.

# components.schemas.Profile.properties.agent_guidance.description
When an agent should and should not reach for this site.