> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.asi1.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.asi1.ai/_mcp/server.

# Developer Quickstart

> Get up and running with ASI:One in minutes. This guide will walk you through setting up your first API request.

Make your first ASI:One request, read the response, and know where to go next.

## Prerequisites

* An ASI:One API key
* Basic knowledge of HTTP requests
* Python, or any HTTP client

## Step 1: Get your API key

1. Sign up at [ASI:One](https://asi1.ai)
2. Navigate to the Developer section
3. Click **Create New**
4. Name your API key and save it somewhere safe

![Quick-start demo](/_fern-files/fetchai.docs.buildwithfern.com/ee0a8db63cc79ee0e37b53368426fdb5c01ca6e452dc804cdf0a425b6f33f54f/assets/api_key.gif)

## Step 2: Make your first request

#### cURL

```bash
curl -X POST https://api.asi1.ai/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ASI_ONE_API_KEY" \
  -d '{
    "model": "asi1",
    "messages": [
      {"role": "user", "content": "Hello! How can you help me today?"}
    ]
  }'
```

#### Python

```python
import requests, os, json

url = "https://api.asi1.ai/v1/chat/completions"
headers = {
"Authorization": f"Bearer {os.getenv('ASI_ONE_API_KEY')}",
"Content-Type": "application/json"
}
body = {
"model": "asi1",
"messages": [{"role": "user", "content": "Hello! How can you help me today?"}]
}
print(requests.post(url, headers=headers, json=body).json()["choices"][0]["message"]["content"])

```

## Step 3: Understand the response

Your API call will return a response like this:

```json
{
    "id": "chatcmpl-8b2f6d1e-3c4a-4f7e-9a21-5d0c7e6b9f43",
    "choices": [{
        "finish_reason": "stop",
        "index": 0,
        "message": {
            "content": "Hey there! 👋 ...",
            "role": "assistant",
            "tool_calls": null,
            "reasoning_content": "The user is greeting me and asking what I can help with. ..."
        }
    }],
    "created": 1768409272,
    "model": "asi1",
    "object": "chat.completion",
    "usage": {
        "completion_tokens": 335,
        "prompt_tokens": 231,
        "total_tokens": 566,
        "prompt_tokens_details": {
            "cached_tokens": 0
        },
        "completion_tokens_details": {
            "reasoning_tokens": 141
        }
    }
}
```

The two you will read first:

* `choices[0].message.content` - the assistant's reply.
* `choices[0].finish_reason` - why generation stopped. `stop` is a normal completion.

Every field, including token accounting and reasoning, is described on the [Chat Completions API](/documentation/build-with-asi-one/chat-completions#the-reply)
page.

## Step 4: Pick your endpoint

Everything above used `/v1/chat/completions`. ASI:One also implements OpenAI's
Responses API at `/v1/responses`, which holds state for you: a response gets an
id you can fetch later or chain the next turn onto. Which one to use is mostly a
matter of which OpenAI format your code already speaks. See [Responses API](/documentation/build-with-asi-one/responses).

## Next steps

1. **[Chat Completions API](/documentation/build-with-asi-one/chat-completions)** - The endpoint you just used, in full: streaming, multi-turn, and every response field
2. **[Responses API](/documentation/build-with-asi-one/responses)** - The stateful alternative, with retrieve and chaining
3. **[ASI:One Models](/documentation/models)** - Choosing between `asi1`, `asi1-ultra` and `asi1-mini`
4. **[Tool Calling](/documentation/build-with-asi-one/tool-calling)** - Let the model call your own functions