# Introducing team-1

By Keshav Rao, 2026-11-13T12:00:00. Source: https://atris.ai/blog/introducing-team-1

<div className="max-w-2xl">

Announcement · Developers

team-1 is a new model name on the Atris chat completions API. A fast member
answers first, and its words stream right away. A reviewer on a stronger model
then checks that answer and either passes it or sends a correction. An app that
already uses the OpenAI client changes the base URL and sets the model to
`team-1`.

<div className="not-prose my-8 grid grid-cols-2 md:grid-cols-4 gap-6">
  <div>
    <div className="text-xl font-light text-[var(--brand-text)]">About 0.7 to 1.2 s</div>
    <div className="mt-1 text-sm text-[var(--brand-text-tertiary)]">First visible word, measured from the caller's side</div>
  </div>
  <div>
    <div className="text-xl font-light text-[var(--brand-text)]">About 4.3 to 5.8 s</div>
    <div className="mt-1 text-sm text-[var(--brand-text-tertiary)]">Reviewed answer, start to finish</div>
  </div>
  <div>
    <div className="text-xl font-light text-[var(--brand-text)]">About 1.5 to 3 s</div>
    <div className="mt-1 text-sm text-[var(--brand-text-tertiary)]">Time the review adds</div>
  </div>
  <div>
    <div className="text-xl font-light text-[var(--brand-text)]">$0.75 / $3.50</div>
    <div className="mt-1 text-sm text-[var(--brand-text-tertiary)]">Price per million input / output tokens</div>
  </div>
</div>

These times come from two small tests with real models. More on that below.

## How it works

<figure className="not-prose my-8">
  <svg viewBox="0 0 760 160" className="w-full h-auto" role="img" aria-label="A request goes to a fast member, which answers first. A reviewer on a stronger model checks the answer. The final answer is passed or corrected.">
    <rect x="24" y="42" width="140" height="76" rx="8" fill="none" stroke="currentColor" strokeWidth="1.5" className="text-[var(--brand-border)]" />
    <text x="94" y="76" textAnchor="middle" fill="currentColor" fontSize="17" className="text-[var(--brand-text)]">Request</text>
    <text x="94" y="98" textAnchor="middle" fill="currentColor" fontSize="12" fontFamily="ui-monospace, monospace" className="text-[var(--brand-text-tertiary)]">model: team-1</text>
    <path d="M172 80 H206" stroke="currentColor" strokeWidth="1.5" className="text-[var(--brand-text-tertiary)]" />
    <polygon points="214,80 204,74 204,86" fill="currentColor" className="text-[var(--brand-text-tertiary)]" />
    <rect x="222" y="42" width="140" height="76" rx="8" fill="none" stroke="currentColor" strokeWidth="1.5" className="text-[var(--brand-border)]" />
    <text x="292" y="76" textAnchor="middle" fill="currentColor" fontSize="17" className="text-[var(--brand-text)]">Answers first</text>
    <text x="292" y="98" textAnchor="middle" fill="currentColor" fontSize="12" fontFamily="ui-monospace, monospace" className="text-[var(--brand-text-tertiary)]">fast · working</text>
    <path d="M370 80 H404" stroke="currentColor" strokeWidth="1.5" className="text-[var(--brand-text-tertiary)]" />
    <polygon points="412,80 402,74 402,86" fill="currentColor" className="text-[var(--brand-text-tertiary)]" />
    <rect x="420" y="42" width="140" height="76" rx="8" fill="none" stroke="currentColor" strokeWidth="1.5" className="text-amber-500" />
    <text x="490" y="76" textAnchor="middle" fill="currentColor" fontSize="17" className="text-[var(--brand-text)]">Checks it</text>
    <text x="490" y="98" textAnchor="middle" fill="currentColor" fontSize="12" fontFamily="ui-monospace, monospace" className="text-[var(--brand-text-tertiary)]">reviewer · working</text>
    <path d="M568 80 H602" stroke="currentColor" strokeWidth="1.5" className="text-[var(--brand-text-tertiary)]" />
    <polygon points="610,80 600,74 600,86" fill="currentColor" className="text-[var(--brand-text-tertiary)]" />
    <rect x="618" y="42" width="118" height="76" rx="8" fill="none" stroke="currentColor" strokeWidth="1.5" className="text-[var(--brand-border)]" />
    <text x="677" y="76" textAnchor="middle" fill="currentColor" fontSize="17" className="text-[var(--brand-text)]">Final answer</text>
    <text x="677" y="98" textAnchor="middle" fill="currentColor" fontSize="12" fontFamily="ui-monospace, monospace" className="text-[var(--brand-text-tertiary)]">passed or corrected</text>
    <text x="292" y="144" textAnchor="middle" fill="currentColor" fontSize="13" className="text-[var(--brand-text-secondary)]">words stream right away</text>
    <text x="490" y="144" textAnchor="middle" fill="currentColor" fontSize="13" className="text-[var(--brand-text-secondary)]">a stronger model</text>
  </svg>
</figure>

You send one request. The fast member starts answering, and you see its words
as they arrive.

When the fast member finishes, the reviewer reads the answer. If the answer
holds up, the reviewer passes it and the call ends. If it finds a mistake, it
sends a corrected answer. The correction streams after a separator, so your
app can tell the two apart.

Very short exchanges skip review. You can also turn review off for a single
request.

If the reviewer fails or times out, you still get the fast answer. It is
marked `unproven`, so you know nobody checked it.

## Try it

team-1 works with the OpenAI client you already have. Change the base URL and
the model name.

```python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.atris.ai/v1",
    api_key="YOUR_ATRIS_KEY",
)

stream = client.chat.completions.create(
    model="team-1",
    messages=[{"role": "user", "content": "What is a leap year?"}],
    stream=True,
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
```

To turn review off for one request, add `extra_body={"atris": {"review": False}}`
to the call.

The full reference is at [atris.ai/developers](https://atris.ai/developers#team-1).

## What the stream tells you

Every piece of the stream carries one small extra field named `atris`. It says
which member is working and whether the answer has been checked. The statuses
include `working`, `passed`, `corrected`, `skipped` and `unproven`.

Standard clients ignore the field. In our test, the official `openai` Python
package read every chunk without changes.

The last piece includes a summary of the call: tokens per member, time to
first word, total time, the verdict and the price.

## Seat your own agent

You can seat a published Atris agent as the fast member or as the reviewer:

```json
{"atris": {"members": {"fast": "<agent name>"}}}
```

The agent answers under its own name. If the agent has its own fee, the fee
appears as a separate line. It is never mixed into the token price.

## What we have measured so far

We ran a first test on the live API: six calls with real models, after an
earlier round of eleven before launch. That is a small test, and there is no
benchmark yet.

With the built-in fast member, the first visible word arrived in about 0.7 to
1.2 seconds, measured from the caller's side. A reviewed answer finished in
about 4.3 to 5 seconds.

With a published agent in the fast seat, the first word arrived in about 0.9
to 1.3 seconds once the agent was warm, about the same as the built-in fast
member. The first call after a quiet minute can take about a second longer,
while the agent's identity is reread.

In the earlier round, on one question, the fast member answered that a range of years contained 49
leap years. The reviewer corrected it to 51, which is right.

## Pricing

team-1 costs $0.75 per million input tokens and $3.50 per million output
tokens, counted across all members. Each call costs at least one cent, so for short calls the cent is the price.

## What we store

Atris stores a record of each request: the members, timing, tokens, verdict
and cost. That record holds no question text and no answer text.

## What it does not do yet

Tool calls through team-1 are not supported yet.

Long multi-step jobs are not supported through team-1. Atris has a separate
team runs API for long work on a business computer. It is not part of this
launch.

The review takes time. In our tests it added about 1.5 to 3 seconds to a call.

There is no benchmark yet. The numbers on this page come from two small tests.

## Availability

team-1 is available today on the Atris API to anyone with an Atris account.
Create a key at [atris.ai/dashboard/developer](https://atris.ai/dashboard/developer)
and add credits at [atris.ai/credits](https://atris.ai/credits). One credit is
one cent.

</div>
