Developers
This is the developer portal for edheltzel.codes. It documents the public read surface. There is no hosted product, no account, and no write API.
API keys
No API keys. Every page is public. Do not send an Authorization header. A missing key is not an error, and there is no key to create, rotate, or revoke. If a client sends a bearer token, ignore it. Nothing on this origin checks one.
Documentation
Request the canonical URL with Accept: text/markdown. The response is Markdown, Content-Type: text/markdown, and Vary: Accept. The same URL with Accept: text/html is the terminal page people see. Unknown page paths return HTTP 404, not the homepage. A Markdown 404 points here, to the sitemap, and to llms.txt.
Machine-readable files:
/llms.txttells an agent when to use this site and which page to open./sitemap.xmllists indexable URLs with lastmod dates./robots.txtpoints at the sitemap./openapi.jsonis the OpenAPI 3.1.0 description of the read API.- Each HTML page also has a
.mdsibling, advertised withrel="alternate".
The read API is JSON, not negotiated Markdown:
GET /api/v1/pageslists public pages.cursorandlimitpage the list.next_cursoris present only whenhas_moreis true.GET /api/v1/page?path=/nowreturns one page, including its Markdown body.pathmust be a value from the list.
Quickstart
curl -sS -D - -H 'Accept: text/markdown' https://edheltzel.codes/
curl -sS -D - -H 'Accept: text/html' https://edheltzel.codes/
curl -sS -D - -H 'Accept: text/markdown' https://edheltzel.codes/some-path-that-does-not-exist
curl -sS -D - https://edheltzel.codes/openapi.json
curl -sS -D - https://edheltzel.codes/api/v1/pages
curl -sS -D - 'https://edheltzel.codes/api/v1/page?path=/now'
curl -sS -D - https://edheltzel.codes/api/v1/orank-probe-test
The first response is Markdown with Vary: Accept. The second is HTML. The third is HTTP 404 with a Markdown body. The OpenAPI document is JSON. The page list and page read are JSON. The last URL is not a route, so it is HTTP 404 with Content-Type: application/problem+json.
From a checkout of the site repo, the CLI does the same page read:
bun cli/edheltzel.ts get /now
bun cli/edheltzel.ts ls
Sandbox
The public origin is the sandbox. Reads have no side effects. There is no write API, no stored caller state, and no separate sandbox host. Reset is unnecessary because a GET does not change the site. Do not send personal data, credentials, or private URLs in query strings. Nothing here is stored for you.
Errors
Page paths that are not under /api stay HTML or Markdown, depending on Accept. Paths under /api always return JSON, including when the client sends no Accept header.
An API error is RFC 9457 application/problem+json. The body has a stable code, a message (the same text as detail), and a resolution that says what to do next. status matches the HTTP status. instance is the request URL. documentation_url points here.
Codes:
api_route_not_found(404): the path is not a read API route. Open/openapi.json.page_not_found(404):pathis not a public page. List pages and retry with one of those paths.invalid_path(400):GET /api/v1/pagewas called withoutpath.invalid_cursor(400):cursorwas not anext_cursorfrom this API. Omit it to start over.invalid_limit(400):limitmust be an integer from 1 to 100.method_not_allowed(405): retry with GET. There is no write operation.rate_limit_exceeded(429): wait forRetry-After. The quota is 120 requests per 60 seconds on that edge isolate, not a global account limit.internal_error(500): retry once, or read the page withAccept: text/markdown.
Successful API responses and API errors include the IETF RateLimit-Policy and RateLimit headers.
Versioning and deprecation
The current major is /api/v1. Breaking changes ship under a new /api/vN path. A retired major stays available for at least 180 days. While it is retired, responses send the RFC 9745 Deprecation header and the RFC 8594 Sunset header. Those headers are absent on the current v1 operations. The policy URL is this section.
CLI
The official client is cli/edheltzel.ts in https://github.com/edheltzel/edheltzelCodes3. It fetches Markdown and lists the sitemap. It is not on npm, PyPI, or Homebrew yet. Publishing needs the maintainer’s registry credentials. Until that publish, run it from a checkout with bun. Do not invent an npm package name and treat it as installed.