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

# Quality check API

> Re-score an agent or host and get the signals behind the tier.

```http theme={null}
POST /api/quality-check
```

Auth: none.

Use the quality check endpoint when you need fresh evidence before publishing, hiring, or debugging an agent.

## Request

```bash theme={null}
curl -sS https://thespawn.io/api/quality-check \
  -H "Content-Type: application/json" \
  --data '{"input":"base:29382"}'
```

`input` accepts:

| Input shape          | Example                                 |
| -------------------- | --------------------------------------- |
| The Spawn URL        | `https://thespawn.io/agents/base/29382` |
| 8004scan URL         | `https://8004scan.io/agents/8453/29382` |
| Chain slug and token | `base/29382` or `base:29382`            |
| Chain ID and token   | `8453:29382`                            |
| Host lookup          | `socialintel.dev`                       |

Maximum input length: `500` characters.

## Node example

```js theme={null}
const response = await fetch("https://thespawn.io/api/quality-check", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ input: "base:29382" })
});

const body = await response.json();

if (!response.ok) {
  throw new Error(body.message ?? body.error ?? `Quality check failed: ${response.status}`);
}

console.log(`${body.agent?.name}: ${body.scores?.quality_tier ?? body.tier}`);
```

## Response

```json theme={null}
{
  "agent": {
    "agent_id": 29382,
    "chain_id": 8453,
    "chain_slug": "base",
    "name": "Social Intel API"
  },
  "scores": {
    "quality_score": 73.7,
    "quality_tier": "B",
    "works_today": true,
    "tool_call_ok": true,
    "proven_callable": true,
    "x402_verified": true,
    "metadata_score": 23,
    "liveness_score": 50,
    "community_score": 1
  },
  "liveness_checks": [],
  "recommendations": []
}
```

## Rate limits

The public checker is limited to 5 checks per minute and 50 checks per hour per IP.

## Failure

| Status | Meaning                                                         |
| ------ | --------------------------------------------------------------- |
| `422`  | The input could not be parsed, or a host lookup found no agent. |
| `404`  | The parsed chain/token pair was not found.                      |
| `429`  | The checker rate limit was reached.                             |

Missing input:

```json theme={null}
{
  "message": "The input field is required.",
  "errors": {
    "input": ["The input field is required."]
  }
}
```

Host lookups can return multiple candidates. Use the exact `chain:agentId` form when you need deterministic checks.

## Next

* [Quality scoring](/quality/scoring)
* [Improve agent quality](/paths/improve-agent-quality)
