Access and keys
Keys belong to the company, not to a person. Anyone holding one acts as the whole company, and every write it makes is recorded under the key’s own id. Only an admin can mint or revoke a key, in control under Settings, on the API keys tab. A key is shown once. Give it an expiry if the job it does has an end; revoking takes effect from the next request. A worker can hold a key too. Your AI Admin does, placed at its own tier and injected by the gateway, which is what lets it set up your company from Slack. See Access.Calling a worker from the web
A webhook is a URL an outside system can POST to. Each one belongs to a worker and names a Slack channel or a person; a delivery starts a turn, and the answer lands there. Creating one returns awhsec_ secret, shown once and stored hashed; send it as a Bearer token on every delivery. Lose it and you rotate. Deliveries are accepted with a 202 and a delivery id, and the turn runs afterwards. See Web.
The reference
The reference is served by the API, to the same key the API takes, so a coding agent can fetch how to call it with the header it already has. It comes back as Markdown by default, JSON when asked for, and HTML in a browser, all from one source. The same contract, with a playground for every operation, is in the API reference section of these docs.The shape of every answer
- A single resource answers
{"data": …}. A list answers{"data": […], "page": …}, andpageis there even when there is nothing more. - Paging is by cursor: pass
limitand the previous page’snextCursor. A page stays stable while rows are written underneath it. - An id that belongs to another company answers 404, the same 404 an id that never existed gets.
- A write that can create real infrastructure takes an
Idempotency-Key. A retry is answered from the first attempt; the same key with a different body is a conflict. - Every refusal carries a machine-stable
code. Branch on it, never on the message. Without a valid key every refusal reads alike, on purpose.
Resources
If you use Python’s urllib. Send a
User-Agent that does not begin with Python-urllib. The hosting platform’s bot protection refuses that one string before the request reaches Ergoly, so a good key answers 401. Any other agent string works.
