call the model
Point your Anthropic client at a person.
The same wire format, the same response shape, the same SDKs. The difference is on the other end, and it is not hidden: it is the point.
Nothing is charged. There is nothing to upgrade to, no token accounting to watch, and no rate card. What you are spending instead is somebody’s attention, which is worth being careful with.
The whole quickstart
-
Get a caller key
Mint one. It takes a few seconds, there is nobody to ask, and the key is shown once because only its hash is stored.
A key is a handle rather than a ration: it tells us who sent a request and gives us something to revoke, and it buys no compute — what a call spends is somebody’s attention, and this service has exactly one queue.
-
Point a client at it
Anything that speaks the Anthropic API works, including the official SDKs. There is no proxy, no shim, no adapter and nothing to install.
# any Anthropic client will do it export ANTHROPIC_BASE_URL=https://humans.lxg2it.com export ANTHROPIC_API_KEY=sk_... # your caller key -
Send a request
An ordinary request.
modelmay be any id you like: an unrecognised one is accepted and the reply comes back ashuman-1, so a client with a model name baked into it does not need changing. The reply names the model, never the person who answered it.curl https://humans.lxg2it.com/v1/messages \ -H "x-api-key: $HUMANS_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "human-1", "max_tokens": 1024, "messages": [{"role": "user", "content": "Explain the offside rule to someone who has never seen football."}] }' -
Wait for a person
Your request goes into the queue and stays there until somebody picks it up and answers it. Four seconds if someone is at the console, up to ten minutes if not, and a
504if nobody comes. The default timeout is a configuration value, and it is a policy about people rather than a technical constant.
What is different
- Latency
- Seconds to minutes, per call. A person has to read the whole thing first, and there is no way to make that faster without making it worse.
- Determinism
- None on offer. The same prompt sent twice may be answered differently, or better. There is no seed and no temperature to set.
- Streaming
- Supported, and honest about it.
message_startarrives when you join the queue, before anybody has answered;pingevents are sent while you wait, because silence and a dead socket look identical to a client. If the responder is typing, the text streams as it appears. - Timeout
- Ten minutes by default, and a timed-out stream cannot be a status code, because a 200 and a
message_starthave already gone out. It arrives as anerrorevent withtimeout_error, and the message is not closed as though it had been answered. - Tool calls
- Supported. They are JSON written by a person and executed by you. There is no sandbox here and no pretence that there is one: whatever a tool call asks for, your software decides.
- Cost
- Nothing. There is no charge to you at any volume, and no invoice. The person who answered is credited a thank-you in satoshis, which is not a cost you carry and not a wage they are owed.
- Model ids
- Any.
claude-sonnet-4-6,gpt-9,banana: it all routes to a person, and the response says so. The only thing refused is a missing or malformed id, because an unfamiliar model is a routing question and an empty one is a mistake.
Streaming, if you want it
Add "stream": true and the usual events come back. The only thing worth
knowing before you build on it is that partial text cannot be un-sent: if the responder edits what they
typed, the stream already carries the earlier version and the stored reply is what counts.
curl -N https://humans.lxg2it.com/v1/messages \
-H "x-api-key: $HUMANS_KEY" \
-H "content-type: application/json" \
-d '{"model": "human-1", "max_tokens": 1024, "stream": true,
"messages": [{"role": "user", "content": "Why is the sky blue?"}]}'
Endpoints
POST /v1/messages— the request, includingstream: truePOST /v1/messages/count_tokens— an estimate, and published as oneGET /v1/models— what this service claims to offerPOST /api/ratings— rate an answer you receivedGET /api/stats— the aggregate numbers behind the landing page, and nothing elseGET /healthz— whether it is up, and how deep the queue is
The full list, the streaming contract and the refusal shapes are in the repository’s API section.
Before you send anything: a person reads the whole request. Do not put secrets, credentials or other people’s private information in a prompt. This is worth more than a glance — it is what the disclaimer leads with.