Developers

Developers

The Overcode API, its error codes, and every machine-readable file this site publishes for agents.

What there is, and what there is not

Overcode is an engineering practice, not a software product. There is no account to create, no dashboard, no API key, and no data API. The public HTTP surface is one endpoint — the contact form — plus the machine-readable files that describe this site.

That is stated plainly because the alternative is worse. An agent that trusts an invented API and calls a route which does not exist has been actively misled, and a specification padded out to look substantial is how that happens.

Authentication

There is none. The contact endpoint is open, and abuse is bounded rather than authenticated: a honeypot field, length and link limits, a Cloudflare Turnstile challenge, and a per-address rate limit at the edge.

The rate limit is two requests per ten seconds per IP. Exceed it and Cloudflare answers with its own block page before the request reaches the endpoint, so the response will not be in the JSON shape documented below.

One outcome, three representations

The endpoint answers in whichever form the caller can use, decided by the request headers. Send Accept: application/json, or no preference at all, and both success and failure come back as JSON. A browser posting the form natively is sent the whole failure page, because that response is the entire page the visitor is looking at. The form on the site sends X-Requested-With: fetch and gets one line of plain text plus a 204 on success, because the page it came from renders its own confirmation.

Reading the site itself

Every page serves Markdown at its own URL when the request sends Accept: text/markdown, and responds with Vary: Accept. If you would rather be explicit, append .md to the path without its trailing slash — /about.md, /work/manufacturing-erp.md.

A path that does not exist returns a real 404, not a 200 carrying the site shell, so a miss can be trusted. Ask for a type nothing here can produce and you get a 406 rather than a guess.

The endpoint

POST https://overcode.io/api/contact

Form-encoded, as application/x-www-form-urlencoded ormultipart/form-data. A JSON body is rejected withmalformed_body.

FieldRequiredNotes
nameYesWho is writing. Up to 200 characters.
emailYesWhere the reply goes. An acknowledgement is sent here immediately. Up to 320 characters.
messageYesThe operational problem, not the feature you think you need. Between 25 and 5000 characters, at most 2 links.
cf-turnstile-responseNoCloudflare Turnstile token from the widget on the page. Required whenever the challenge is configured. An automated client cannot produce one.
company_websiteNoHoneypot. Leave it out. A non-empty value is answered as if it succeeded and nothing is sent.

Example

curl -X POST https://overcode.io/api/contact \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "name=Aisha Rahman" \
  --data-urlencode "email=aisha@example.com" \
  --data-urlencode "message=Our sales team re-keys every WhatsApp order into the ERP by hand, roughly 60 a day, and the two disagree by the end of every week."

A successful send returns 200 with:

{
  "ok": true,
  "message": "Enquiry received. A reply will come to the address you gave."
}

Errors

Every error carries a stable error code, a human message, a hint saying what to do about it, and a documentation_url. Branch on the code, never on the message — the wording may be improved at any time and the code will not change.

{
  "error": "message_too_short",
  "message": "Please say a little more about the problem (at least 25 characters).",
  "hint": "Describe the problem in at least 25 characters. \"hi\" and \"test\" are rejected.",
  "status": 400,
  "documentation_url": "https://overcode.io/openapi.json"
}
CodeStatusWhat to do
field_too_long400name is capped at 200 characters, email at 320.
human_verification_failed400Solve the Cloudflare Turnstile challenge on the page and send the cf-turnstile-response token with the form.
invalid_email400Send a syntactically valid address; the reply goes to it.
malformed_body400Post multipart/form-data or application/x-www-form-urlencoded. JSON bodies are not read.
message_too_long400Trim the message to 5000 characters or fewer.
message_too_short400Describe the problem in at least 25 characters. "hi" and "test" are rejected.
missing_fields400Send all three fields with non-empty values.
too_many_links400At most 2 links per message.
method_not_allowed405The contact endpoint accepts POST only.
not_acceptable406Send Accept: application/json, text/plain or text/html.
mail_send_failed502Nothing was delivered. Retry once, then email cheefi.ng@overcode.io instead.
mail_backend_unconfigured503Nothing was sent and retrying will not help until this is fixed. Email cheefi.ng@overcode.io instead.

Machine-readable files

PathWhat it is
/llms.txtIndex of this site for language models, including when to use Overcode and every machine-readable file below.
/agent-instructions.mdWhen an agent should reach for Overcode, what we are a fit for, what we are not, and how to hand a lead over.
/openapi.jsonThe complete public API surface: the contact endpoint, its request shape, and every error code it returns.
/developers/The contact endpoint, its request shape, every error code, and the machine-readable files this site publishes. Written for a person; /openapi.json is the same surface for a machine.
/work/Every published case study, not just the four the home page leads with — client, problem, what was built and the outcome, for each one.
/.well-known/api-catalogThe standard discovery document for what APIs this host publishes, as an RFC 9264 linkset.
/sitemap.xmlEvery published page, including every published case study.
/index.mdWhat Overcode does, the engagement models, and the case-study index, without markup.
/about.mdWho runs the company, where it operates, and how the work is actually done.
/contact.mdEmail, phone, WhatsApp, vCard, and the contact endpoint an agent should post to.
/developers.mdThe API reference and the error-code table, without markup.
/work.mdEvery published case study, with client, year and outcomes, without markup.
/privacy.mdWhat the contact form collects, who processes it, and how long it is kept.
/.well-known/api-catalogRFC 9727 API catalog, as an RFC 9264 linkset. The standard place to discover what APIs this host publishes.