Skip to main content
Jason Sonderman, UXMC, CPACCJason Sonderman

Guides

Errors, limits and holds

Every error is a small JSON problem document. Read the status first, then the code, and report what happened without turning it into a claim about me.

HTTP errors and safe absence

Response Interpretation and client action
Platform 401 / sign-in redirect or HTML A protected deployment (such as the preview) intercepted the request before the API, or the origin does not serve the API. Stop. Do not assume a Problem body, bearer challenge or a missing professional fact.
API 400 Unsupported query/body or invalid ID/request. Correct it; do not silently add hidden filtering.
API 404 Resource unavailable at that address. Unknown and withheld IDs share the same safe response; no existence reason is disclosed. Empty media is expected now.
API 405 Unsupported method; application Allow is GET, HEAD, OPTIONS.
API 406 Requested success representation not supported. Check Accept.
API 414 Request target too long. Do not retry the same request unchanged.
API 500 / 503 Internal failure or unavailable/current-state uncertainty. Report retrieval unavailable, not absence of experience. Avoid indefinite retries or stale fallback.
API 429 Current endpoint rate limiter allows 300 requests per address per 15-minute fixed window when configured. Respect Retry-After; do not loop. Missing salt or backing-store errors fail open, so this is not a hard global quota/SLA. Platform/edge interception can differ.

Application Problem fields are type, title, status, detail, code. Example 404 is complete:

JSON
{"type":"about:blank","title":"Not Found","status":404,"detail":"No resource is available at this address.","code":"not_found"}

The handler checks address/size, method/request shape, OpenAPI, then hold/existence and representation in its documented source order. Platform, edge ingress or the endpoint rate limiter may respond earlier; avoid requests with multiple faults rather than assuming one universal precedence. No-store responses are not an instant recall guarantee. Comparing current revisions helps detect mixed retrieval; it is not authenticated approval custody or proof of global withdrawal across restored/deployed copies.

Error examples

Each body below is an explanatory fixture, not a live capture. The 429 is derived from the handler’s shape; the others are checked against it.

400 Bad Request
Response 400
{
  "type": "about:blank",
  "title": "Bad Request",
  "status": 400,
  "code": "invalid_request",
  "detail": "This minimum API does not support query parameters."
}
404 Not Found
Response 404
{
  "type": "about:blank",
  "title": "Not Found",
  "status": 404,
  "code": "not_found",
  "detail": "No resource is available at this address."
}
405 Method Not Allowed
Response 405
{
  "type": "about:blank",
  "title": "Method Not Allowed",
  "status": 405,
  "code": "method_not_allowed",
  "detail": "Only GET, HEAD and OPTIONS are supported."
}
406 Not Acceptable
Response 406
{
  "type": "about:blank",
  "title": "Not Acceptable",
  "status": 406,
  "code": "not_acceptable",
  "detail": "The requested representation is not available."
}
414 URI Too Long
Response 414
{
  "type": "about:blank",
  "title": "URI Too Long",
  "status": 414,
  "code": "invalid_request",
  "detail": "The request target is too long."
}
429 Too Many Requests
Response 429
{
  "type": "about:blank",
  "title": "Too Many Requests",
  "status": 429,
  "code": "rate_limited",
  "detail": "Too many requests from this address. Retry after the Retry-After delay."
}
503 Service Unavailable
Response 503
{
  "type": "about:blank",
  "title": "Service Unavailable",
  "status": 503,
  "code": "temporarily_unavailable",
  "detail": "The requested information is temporarily unavailable."
}

Current revision, browser and hold behavior

Successful business JSON GET/HEAD responses carry X-Knowledge-Revision, equal to meta.revision on GET. Raw OpenAPI and Problems do not carry a data revision. The current CORS exposure is Retry-After, X-Knowledge-Revision; ordinary API success/error responses use wildcard allow-origin, no-store and nosniff, without credential opt-in. OPTIONS permits GET/HEAD/OPTIONS and Accept. Same-origin docs need no cross-origin access; an external browser application can make credential-free reads from an origin that serves the API. A CLI/server agent is not governed by browser CORS, and CORS does not bypass a protected deployment’s sign-in. Local development middleware, platform access and edge responses can run before the handler.

M4’s endpoint limiter is a per-address, fixed-window 300-request/15-minute allowance shared in mechanism with MCP, with separate API keys in its backing store. It uses hashed address keys, requires configured salt/storage and fails open when salt is absent or storage fails. No exact distributed quota, throughput or uptime guarantee is established. A returned 429 uses Problem JSON and Retry-After; respect the actual delay. Nothing here establishes that limiter enforcement is active on any particular host.

M5 KNOWLEDGE_HOLD is read when the function starts. An unset/empty value serves normally; all holds data reads with 503; a comma-separated valid resource-ID list withholds a matching project detail with generic 404 and holds other otherwise successful data reads with 503. Invalid nonempty configuration fails closed to whole-data hold. The empty media repository still returns generic 404 unless whole hold is active. Valid OpenAPI requests remain available, subject to earlier transport/rate/access checks. Changing the hold configuration means setting it on the deployment and restarting or redeploying, which only the site owner does; editing old runtime control JSON does not control this API.

The existing normal smoke command expects successful data responses and therefore fails while data is held. That is expected during hold and is not, by itself, evidence of completed withdrawal. A hold does not rewrite already built portfolio pages, Markdown/llms/MCP facts, docs examples, historical deployment URLs or downloaded copies.

Corrections and withdrawals are decided by the site owner. The steps are: record the affected IDs/revisions and the controlled consumers privately; review the exact replacement or removal; rebuild and redeploy the affected controlled representations and refresh their instances and caches; then verify the agreed boundary with safe checks, keeping any failures and residual limits. A custodian acts only on the owner’s later explicit instruction and only within those steps. No-store and hashes do not provide instant or global recall, and third-party copies cannot be guaranteed withdrawn. Earlier deployments and caches of this site are outside what this API can withdraw. No new custody platform is implied.

OpenAPI and version limits

Use the existing same-origin /api/docs/ and raw /api/openapi.json; no new discovery, auth or documentation API endpoint is needed. Send Test Request requires JavaScript. The prose, raw links and examples are built into static HTML, subject to access to the origin you are reading; sign-in on a protected preview without JavaScript and full accessibility are not established by source inspection. Accessibility findings and unverified checks are recorded and deferred after Phase 2; this work makes no conformance or audit-pass claim.

Distinguish OpenAPI format 3.1.1, frozen contract document version 0.4.0-19-row-minimum-draft, route major /api/v1, representation meta.revision, and record integer revision. The historical word “draft” is retained in the approved document; it does not revoke later contract approval or authorize editing the file. No unapproved compatibility, deprecation-window or SLA promise is added.

Current collections have no pagination; safety ceilings do not promise additional records. No search, hiring score, employment date/title/contact lookup, complete knowledge graph, database/Vault access, AI reasoning or Professional Guide is provided. All JD Pipeline/Seeker/Tracker information and derivatives, private documents, raw editors and arbitrary repository files are excluded. All individual images remain withheld. Existing MCP remains separate; these REST routes do not expose its nine tools.

Read the professional overview, AI-agent guide or documentation index. The companion is embedded as JSON in the existing documentation page, not served from a new discovery endpoint.