API

Put a coworker inside your product.

One call hands the coworker a job. It works in your workspace, then answers with the documents it used.

  • Streams over server-sent events
  • One key, scoped to what it needs, revoked any time
  • The same key opens an MCP endpoint
RequestPOSThttps://api.alfera.ai/v1/answers
{
  "input": "When does Northwind renew, and what notice do we owe?",
  "conversation_id": "northwind-renewal",
  "include": ["sources"],
  "stream": false
}
Response202 Accepted
{
  "data": {
    "answer_id": "event_01k9m4rx7te2v8b0qz5cd3ny4f",
    "status": "queued"
  }
}
ThenGET/v1/answers/event_01k9m4rx7te2v8b0qz5cd3ny4f200 OK
{
  "data": {
    "status": "completed",
    "output_text": "Northwind renews on 30 September 2026.",
    "sources": [{ "subject": "Northwind", "fact_text": "60 days' notice" }]
  }
}

Streaming

Watch a job as it runs

Some jobs finish in a second. Some take minutes. Keep the connection open and read every frame, or take an id and come back later.

POST/v1/answerstext/event-streamOpen
  1. 0.0s

    answer.created

    { "answer_id": "event_01k9m4rx7te2v8b0qz5cd3ny4f", "conversation_id": "northwind-renewal" }

  2. 14.2s

    answer.delta

    { "text": "Northwind renews on 30 " }

    Those fourteen seconds are the work. It read the drive and checked the record before it wrote a word.

  3. 14.3s

    answer.delta

    { "text": "September 2026. Notice is due by " }

  4. 15.4s

    answer.completed

    { "status": "completed", "sources": [{ "subject": "Northwind" }] }

    Ask for sources and the last frame carries the facts it used. Each one names the subject it came from.

  5. 15.4s

    done

    { "ok": true }

Send an Idempotency-Key and a retry reads the same run back instead of paying for a second one.

The same rules

Your setup carries over

The API is the same workspace, not a second product with its own settings. Every control you already set is on before the first call lands.

The same permissions

A key carries scopes. The workspace carries tool grants, and reading a tool is not the same grant as acting in it. A call has to clear both.

ToolReadAct
Customer inbox
HubSpot
Stripe
Payroll

403{ "code": "scope_missing" }

The same credit usage

Review workspace usage alongside the jobs your product starts.

Spend against cap

Support68%
Sales100%

{ "code": "out_of_credits" }

Your own model keys

Point the workspace at your Anthropic, OpenAI or Google key. The model bill goes to you.

Anthropicsk-ant-••••4f21yours
OpenAIsk-••••9c07yours
GoogleBilled through usours

Every run in one list

A run your product started sits beside one somebody started in Slack, in the same list.

09:14Asked about NorthwindAPI
09:22Asked about renewalsSlack
09:31Taught it a new priceAPI

Auth

API keys

The API is in early access, so we issue keys ourselves: ask for one and a founder answers. You see the secret once, it carries only the scopes you need, and revoking it fails the next call.

The same key opens the MCP endpoint, so Claude or Cursor reaches the same coworker.

Renewals botak_live_x7f4••••••••••••
Scopesanswers.writememory.read
Sent asAuthorization: Bearer ak_live_x7f4…
Rate120 requests a minute429 rate_limited
RevokeAny time401 api_key_revoked

Add an AI Coworker to your product.

Tell us what you want to build and we hand you a key ourselves.