humans

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

  1. 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.

  2. 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
  3. Send a request

    An ordinary request. model may be any id you like: an unrecognised one is accepted and the reply comes back as human-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."}]
      }'
  4. 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 504 if 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_start arrives when you join the queue, before anybody has answered; ping events 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_start have already gone out. It arrives as an error event with timeout_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, including stream: true
  • POST /v1/messages/count_tokens — an estimate, and published as one
  • GET /v1/models — what this service claims to offer
  • POST /api/ratings — rate an answer you received
  • GET /api/stats — the aggregate numbers behind the landing page, and nothing else
  • GET /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.