> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kettio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Kettio for developers

> Score and rank ad creative against a simulated audience before you spend media budget.

Kettio scores ad creative against a simulated audience and returns a ranking. You send image
URLs and optional ad copy, you name the audience you are buying, and you get back an ordered
list with a rationale for each asset.

The intended use is pre-flight triage: deciding which creatives are worth putting spend behind,
and which pairs are close enough that they need a direct comparison.

<Note>
  Kettio scores are **relative within the batch you submit**. They are not conversion
  probabilities, and they are not forecasts of CPA, ROAS, or causal lift. Treat them as a
  prioritization signal, not a prediction.
</Note>

## Two surfaces

<CardGroup cols={2}>
  <Card title="MCP server" icon="plug" href="/quickstart/agent-setup">
    Install into Claude Code, Codex, or Claude Desktop and rank creative straight from local
    files. Two commands and a key.
  </Card>

  <Card title="REST API" icon="server" href="/quickstart/authentication">
    Batch scoring over HTTP. Use this for volume: pipelines, scheduled jobs, and anything that
    runs without a client attached.
  </Card>
</CardGroup>

Both reach the same scoring pipeline. The difference is where your files live: `rank_assets`
over MCP takes **local paths** and uploads them for you, while the REST API expects assets
already published at fetchable URLs. See [Agent loop](/guides/agent-loop) for choosing between
them.

## Endpoints

| Endpoint                                | What it does                                     |
| --------------------------------------- | ------------------------------------------------ |
| [`POST /api/v1/rank`](/guides/rank-api) | Score and rank 1–20 assets against one audience. |

\| [`POST /api/v1/pairwise`](/guides/pairwise-api) | Run a five-voter blinded panel on explicit head-to-head matchups. |

Base URL is `https://kettio.com` for every endpoint. Authentication is a bearer token on every
request — see [Authentication](/quickstart/authentication).

## What the score means

Every asset is scored by Kettio's SSR pipeline against a persona built from the audience you
supply. Each scoring evaluation runs three independent repetitions and averages them, so a
single score already carries a spread you can inspect through `confidence_details`.

When you include `copy_context`, Kettio scores the full ad package **and** runs an image-only
ablation, so the response also tells you what the copy contributed (`copy_lift`).

<CardGroup cols={2}>
  <Card title="How scoring works" icon="chart-simple" href="/concepts/scoring">
    Repetitions, evaluations, copy lift, and the image-only ablation.
  </Card>

  <Card title="Reading confidence" icon="scale-balanced" href="/concepts/confidence">
    When a gap is real and when two assets are effectively tied.
  </Card>
</CardGroup>

## Start here

<Steps>
  <Step title="Create an API key">
    Open [Dashboard → API Keys](https://kettio.com/dashboard?section=api-keys). The raw key is
    shown once.
  </Step>

  <Step title="Pick your path">
    Using a coding agent? [Set up your agent](/quickstart/agent-setup) — install, rank local
    files, done. Calling over HTTP? [First ranking](/quickstart/first-ranking) walks through a
    working request and its response.
  </Step>

  <Step title="Wire it into your loop">
    Read [Limits and billing](/concepts/limits-and-billing) before you scale up — billing is
    counted in scoring evaluations, not assets.
  </Step>
</Steps>
