---
title: "Introduction"
description: "Authentication, base URL, endpoints, and error behavior for the QuiverAI API."
icon: "book-open"
---

This section covers the API at `api.quiver.ai`.

:::note
If you are using the app at `app.quiver.ai`, start with the [App docs](/app).
:::

## Authentication

The QuiverAI API uses API keys with bearer authentication.

- Create and manage keys in the Developer Platform under [API Keys](https://platform.quiver.ai/settings/api-keys).
- Follow the [Quickstart](/api) to run your first call.
- Keep keys server-side and load them from environment variables or secret managers.

```http
Authorization: Bearer <QUIVERAI_API_KEY>
```

## Base URL and headers

Send API requests to:

`https://api.quiver.ai/v1`

Use these headers on JSON requests:

```http
Authorization: Bearer <QUIVERAI_API_KEY>
Content-Type: application/json
```

When `stream` is `false`, SVG endpoints return JSON with `id`, `created`, `data`, and `credits`.
Deprecated `usage` token fields may still appear for compatibility. When `stream` is `true`, the
endpoints return `text/event-stream` with `reasoning`, `draft`, and `content` events, followed by
`data: [DONE]`.

## Core endpoints

- `GET /v1/models`
- `GET /v1/models/{model}`
- `POST /v1/svgs/generations`
- `POST /v1/svgs/vectorizations`

## Billing and usage records

- Current released models include Arrow 1.0, Arrow 1.1, and Arrow 1.1 Max. Arrow 1.1 is the
  default recommendation for most API use cases; Arrow 1.1 Max trades more runtime and credits for
  higher output fidelity.
- Usage is billed in **pricing credits**. Each model lists **`pricing_credits`** (`svg_generate`,
  `svg_vectorize`) from **`GET /v1/models`** (and **`GET /v1/models/{model}`**).
- Successful generations debit **`n × svg_generate`** credits (`n` defaults to **1**).
- Successful vectorizations debit **`svg_vectorize`** credits once per request.
- Monthly app subscription credits are not API balance and cannot be spent through `api.quiver.ai`.
- For purchase limits, defaults, and legacy `model.pricing` fields, see [API pricing](/api/pricing).
- In [Usage](https://app.quiver.ai/settings/usage), API calls appear with a **request ID**.

## Errors and rate limits

The API returns standard HTTP status codes and a JSON error payload.

Current public API rate limit for SVG endpoints:

- `20` requests per `60` seconds
- Scoped per organization
- Applied to `POST /v1/svgs/generations` and `POST /v1/svgs/vectorizations`
- Exposed through `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset`

```json
{
  "status": 429,
  "code": "rate_limit_exceeded",
  "message": "Rate limit exceeded",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}
```

- `400 Bad Request`: malformed body, missing required fields, or invalid parameter values.
- `401 Unauthorized`: API key missing, malformed, revoked, otherwise invalid, or the
  organization could not be resolved for billing. Machine-readable codes include
  `invalid_api_key` and `unauthorized`.
- `402 Payment Required`: insufficient credits. Purchase more at [Billing](https://app.quiver.ai/settings/billing).
- `403 Forbidden`: frozen accounts return the `account_frozen` code.
- `404 Not Found`: the requested model does not exist.
- `429 Too Many Requests`: rate limit exceeded. Retry after the period in the `Retry-After` header.
- `500 Internal Server Error`: unexpected server error.
- `502 Bad Gateway`: server error while processing the request.
- `503 Service Unavailable`: server error while processing the request.

Use exponential backoff for retries and respect `Retry-After` when present.

## SDKs

QuiverAI provides an official [Node.js SDK](https://github.com/quiverai/quiverai-node):

```bash
npm install @quiverai/sdk
```

For other languages, call the REST API directly.
