# info.description
Read-only public API for published posts in Laurent Maxhuni's signal archive. The canonical endpoint is versioned at /api/v1/posts. The unversioned /api/posts URL remains a compatibility alias. Responses use a typed RFC 9457-style application/problem+json error object with a machine-readable code and human-readable message. Rate limits are communicated with RateLimit-Policy, RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, and RateLimit headers; 429 responses also include Retry-After. Future endpoint deprecations use the RFC 9745 Deprecation structured date and RFC 8594 Sunset HTTP-date, with a migration timeline published in the developer API guide.

# externalDocs.description
Human-readable API guide and compatibility policy

# paths./api/v1/posts.get.description
Returns published posts only. Drafts, writes, deletes, and administrative operations are not available through this public contract. Use the typed response schemas and rate-limit headers to integrate without scraping or guessing failure behavior.

# paths./api/v1/posts.get.parameters[].description
Optional compatibility header. It defaults to API version 1; unsupported values return a typed 400 problem response. The canonical URL is versioned as /api/v1/posts.

# paths./api/v1/posts.get.responses.200.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/v1/posts.get.responses.200.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/v1/posts.get.responses.200.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/v1/posts.get.responses.200.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/v1/posts.get.responses.200.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/v1/posts.get.responses.200.headers.API-Version.description
The API version that produced this response.

# paths./api/v1/posts.get.responses.200.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/v1/posts.get.responses.200.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/v1/posts.get.responses.200.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/v1/posts.get.responses.400.description
The request is invalid, including an unsupported API version.

# paths./api/v1/posts.get.responses.400.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/v1/posts.get.responses.400.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/v1/posts.get.responses.400.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/v1/posts.get.responses.400.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/v1/posts.get.responses.400.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/v1/posts.get.responses.400.headers.API-Version.description
The API version that produced this response.

# paths./api/v1/posts.get.responses.400.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/v1/posts.get.responses.400.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/v1/posts.get.responses.400.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/v1/posts.get.responses.404.description
The requested public resource does not exist.

# paths./api/v1/posts.get.responses.404.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/v1/posts.get.responses.404.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/v1/posts.get.responses.404.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/v1/posts.get.responses.404.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/v1/posts.get.responses.404.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/v1/posts.get.responses.404.headers.API-Version.description
The API version that produced this response.

# paths./api/v1/posts.get.responses.404.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/v1/posts.get.responses.404.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/v1/posts.get.responses.404.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/v1/posts.get.responses.429.description
The client exceeded the public API rate limit.

# paths./api/v1/posts.get.responses.429.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/v1/posts.get.responses.429.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/v1/posts.get.responses.429.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/v1/posts.get.responses.429.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/v1/posts.get.responses.429.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/v1/posts.get.responses.429.headers.API-Version.description
The API version that produced this response.

# paths./api/v1/posts.get.responses.429.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/v1/posts.get.responses.429.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/v1/posts.get.responses.429.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/v1/posts.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying after a rate-limit response.

# paths./api/v1/posts.get.responses.500.description
The API or its content service could not complete the request.

# paths./api/v1/posts.get.responses.500.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/v1/posts.get.responses.500.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/v1/posts.get.responses.500.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/v1/posts.get.responses.500.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/v1/posts.get.responses.500.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/v1/posts.get.responses.500.headers.API-Version.description
The API version that produced this response.

# paths./api/v1/posts.get.responses.500.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/v1/posts.get.responses.500.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/v1/posts.get.responses.500.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/posts.get.summary
List published posts (compatibility alias)

# paths./api/posts.get.description
Compatibility alias for /api/v1/posts. New integrations SHOULD use the versioned path. Future deprecations will be announced with the standard Deprecation and Sunset response headers and a documented timeline before removal.

# paths./api/posts.get.parameters[].description
Optional compatibility header. It defaults to API version 1; unsupported values return a typed 400 problem response. The canonical URL is versioned as /api/v1/posts.

# paths./api/posts.get.responses.200.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/posts.get.responses.200.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/posts.get.responses.200.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/posts.get.responses.200.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/posts.get.responses.200.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/posts.get.responses.200.headers.API-Version.description
The API version that produced this response.

# paths./api/posts.get.responses.200.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/posts.get.responses.200.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/posts.get.responses.200.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/posts.get.responses.400.description
The request is invalid, including an unsupported API version.

# paths./api/posts.get.responses.400.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/posts.get.responses.400.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/posts.get.responses.400.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/posts.get.responses.400.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/posts.get.responses.400.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/posts.get.responses.400.headers.API-Version.description
The API version that produced this response.

# paths./api/posts.get.responses.400.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/posts.get.responses.400.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/posts.get.responses.400.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/posts.get.responses.404.description
The requested public resource does not exist.

# paths./api/posts.get.responses.404.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/posts.get.responses.404.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/posts.get.responses.404.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/posts.get.responses.404.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/posts.get.responses.404.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/posts.get.responses.404.headers.API-Version.description
The API version that produced this response.

# paths./api/posts.get.responses.404.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/posts.get.responses.404.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/posts.get.responses.404.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/posts.get.responses.429.description
The client exceeded the public API rate limit.

# paths./api/posts.get.responses.429.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/posts.get.responses.429.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/posts.get.responses.429.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/posts.get.responses.429.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/posts.get.responses.429.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/posts.get.responses.429.headers.API-Version.description
The API version that produced this response.

# paths./api/posts.get.responses.429.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/posts.get.responses.429.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/posts.get.responses.429.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# paths./api/posts.get.responses.429.headers.Retry-After.description
Seconds to wait before retrying after a rate-limit response.

# paths./api/posts.get.responses.500.description
The API or its content service could not complete the request.

# paths./api/posts.get.responses.500.headers.RateLimit-Limit.description
Maximum requests allowed in the current rate-limit window.

# paths./api/posts.get.responses.500.headers.RateLimit-Remaining.description
Requests remaining in the current rate-limit window.

# paths./api/posts.get.responses.500.headers.RateLimit-Reset.description
Number of seconds until the current rate-limit window resets.

# paths./api/posts.get.responses.500.headers.RateLimit.description
Combined IETF RateLimit policy and current quota state.

# paths./api/posts.get.responses.500.headers.RateLimit-Policy.description
IETF quota policy expressed as a structured field: the default policy allows 60 requests in a 60-second window.

# paths./api/posts.get.responses.500.headers.API-Version.description
The API version that produced this response.

# paths./api/posts.get.responses.500.headers.Link.description
Link to the API versioning and deprecation policy using the RFC 9745 deprecation relation.

# paths./api/posts.get.responses.500.headers.Deprecation.description
RFC 9745 structured date indicating when this resource is or will be deprecated. Sent only when scheduled.

# paths./api/posts.get.responses.500.headers.Sunset.description
RFC 8594 HTTP-date indicating when this resource is expected to become unavailable. Sent only when scheduled.

# components.schemas.PostsPage.description
A paginated collection of published posts.

# components.schemas.ProblemDetails.description
Typed public API failure using the RFC 9457 problem-details shape plus a stable machine-readable code and message.

# components.schemas.ProblemDetails.properties.message.description
Human-readable explanation suitable for an agent or developer.

# x-api-versioning.strategy
URL path with optional X-API-Version compatibility header

# x-api-versioning.deprecationPolicy.currentStatus
No endpoint is currently scheduled for deprecation.

# x-api-versioning.deprecationPolicy.notice
A scheduled endpoint will include Deprecation: @<unix-seconds> (RFC 9745), Sunset: <HTTP-date> (RFC 8594), and a Link header with rel=deprecation. The migration timeline is documented in the API versioning policy.