# info.summary
Read-only access to everything published on jarrettstanley.com.

# info.description
Search, list, and read the published content of jarrettstanley.com — articles on AI in mortgage marketing, glossary definitions, AI tool roundups, campaign teardowns, role playbooks, and the speaking and consulting pages.

Public and unauthenticated: no API keys, no OAuth, no scopes, and no write operations. Errors use RFC 9457 problem details. Rate limits are advertised with the RateLimit and RateLimit-Policy headers.

The same content is available over MCP at /mcp, over A2A at /a2a, as NLWeb answers at /ask, and as Markdown from any page URL with `Accept: text/markdown`.

# info.license.name
Content available for citation with attribution

# x-api-lifecycle.versioning
URL path major version. Additive changes within v1; breaking changes ship as /api/v2.

# x-api-lifecycle.deprecationPolicy
A deprecated version is announced with RFC 9745 Deprecation and Sunset response headers, plus a Link header to the migration guide, at least 90 days before removal.

# x-idempotency.rationale
Every operation is a safe, idempotent GET; there is nothing to retry-protect.

# x-async-jobs.rationale
Every response is synchronous and complete; no operation is long-running.

# x-rate-limit.policy
600 requests per 60 seconds per client IP

# tags[].description
Full-text search across published pages.

# tags[].description
API index, versioning, and capabilities.

# paths./.get.description
Endpoints, versioning policy, rate limits, and the other agent interfaces this site exposes.

# paths./content.get.description
Every published page, optionally filtered to one section, with limit/offset pagination.

# paths./content.get.parameters[].description
Restrict to one section. "site" covers the marketing and legal pages.

# paths./content.get.parameters[].description
Opaque cursor from a previous response, used instead of offset.

# paths./content.get.parameters[].description
Batch read: comma-separated list of 1–25 site paths. Returns their Markdown bodies and a per-path errors array instead of a paginated list.

# paths./content.get.responses.400.description
Invalid section, limit, offset, cursor, or paths.

# paths./content/{path}.get.description
The full Markdown body of a single published page.

# paths./content/{path}.get.parameters[].description
Site path without the leading slash, for example "insights/glossary/ai-lead-scoring".

# paths./batch.get.description
Read up to 25 pages in one request, addressed by a comma-separated list of site paths.

# paths./batch.get.parameters[].description
Comma-separated list of 1–25 site paths.

# paths./batch.get.responses.200.description
The requested pages, plus a per-path errors array for any that do not exist.

# paths./batch.post.description
Same as the GET form, with the path list in a JSON body. Safe and idempotent despite the method.

# paths./search.get.description
Ranked full-text search with snippets and canonical URLs.

# paths./search.get.responses.400.description
Missing or invalid query, section, limit, offset, or cursor.

# components.schemas.Problem.description
RFC 9457 problem details. Every error from this API uses this shape.

# components.schemas.Problem.properties.type.description
Link to the documentation for this error.

# components.schemas.Problem.properties.title.description
Short, human-readable summary of the problem type.

# components.schemas.Problem.properties.detail.description
Explanation specific to this occurrence.

# components.schemas.Problem.properties.instance.description
The request URI that produced the problem.

# components.schemas.Pagination.properties.nextCursor.description
Opaque cursor for the next page, or null.

# components.schemas.Pagination.properties.previousCursor.description
Opaque cursor for the previous page, or null.