Skip to content
Esc
navigateopen⌘Jpreview
On this page

API

Create an API key, send your first request, and validate your API setup.

Use this guide when integrating with api.quiver.ai.

Before you begin

Create a QuiverAI public beta account at quiver.ai/start, then sign in to app.quiver.ai.

Create an API key

  1. Open API Keys in the Developer Platform.
  2. Click Create API key and give it a name.
  3. Copy the key immediately. It is shown only once and cannot be retrieved later.

In API Keys, you can also verify whether a key is active and see its latest usage timestamp.

The QuiverAI API uses bearer authentication:

Authorization: Bearer <QUIVERAI_API_KEY>

Never commit API keys to source control.

Create new API key

Store the key in your environment

Save the key as QUIVERAI_API_KEY.

export QUIVERAI_API_KEY="<your-key>"
setx QUIVERAI_API_KEY "<your-key>"

Install the SDK

For Node.js, use the official Node.js SDK:

npm install @quiverai/sdk
yarn add @quiverai/sdk
pnpm add @quiverai/sdk

Send your first request

import { QuiverAI } from "@quiverai/sdk";

const client = new QuiverAI({
  bearerAuth: process.env["QUIVERAI_API_KEY"],
});

const logo = await client.createSVGs.generateSVG({
  model: "arrow-1.1",
  prompt: "A logo for the next AI design startup",
  instructions: "Use clean geometry, balanced spacing, and production-ready SVG structure.",
});

process.stdout.write(`${JSON.stringify(logo, null, 2)}\n`);

Use HTTP directly from any language.

curl --request POST \
  --url https://api.quiver.ai/v1/svgs/generations \
  --header 'Authorization: Bearer <QUIVERAI_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "arrow-1.1",
  "prompt": "A logo for the next AI design startup",
  "instructions": "Use clean geometry, balanced spacing, and production-ready SVG structure.",
  "n": 1,
  "stream": false
}
'

A successful non-streaming response returns request metadata, one or more SVG payloads, and the request credit debit:

{
  "id": "resp_01J9AZ3XJ7D5S9ZV2Q5Z8E1A4N",
  "created": 1704067200,
  "data": [
    {
      "svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2l8 20H4z\"/></svg>",
      "mime_type": "image/svg+xml"
    }
  ],
  "credits": 20
}

The deprecated usage token fields may still appear for compatibility. These SVG routes use fixed-credit models, so use credits and pricing_credits for billing behavior. For token-usage models on /v1/responses, read the model’s billing.rates instead.

Failures return a JSON error payload:

{
  "status": 429,
  "code": "rate_limit_exceeded",
  "message": "Rate limit exceeded",
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}
  • 401 Unauthorized: API key missing or invalid, or the organization could not be resolved for billing. Machine-readable codes include invalid_api_key and unauthorized.
  • 402 Payment Required: insufficient credits.
  • 403 Forbidden: frozen accounts use the account_frozen code.
  • 429 Too Many Requests: back off and, when Retry-After is present, retry after the indicated number of seconds. X-RateLimit-Limit and X-RateLimit-Remaining are counts in the current binding window. X-RateLimit-Reset is that window’s Unix reset timestamp in milliseconds when available; rolling token-capacity rejections omit it. Positive token-capacity ceilings report their retry interval through Retry-After, while zero ceilings omit retry timing. X-RateLimit-Scope, optional X-RateLimit-Subject, and X-RateLimit-Dimension (request_rate, operation_throughput, input_token_rate, or output_token_rate) name the binding ceiling.

Billing model:

  • These SVG operations debit pricing credits from your balance; amounts are per fixed-credit model (see that model’s pricing_credits from GET /v1/models).
  • Generations debit n × svg_generate credits on success (n defaults to 1).
  • Vectorizations debit svg_vectorize credits per successful request.
  • Token-usage models on /v1/responses settle measured tokens using the model’s billing.rates; they do not expose pricing_credits.

To choose from models available to your organization, call GET /v1/models. Arrow 1.1 is the default recommendation for most integrations. Use Arrow 1.1 Max when higher output fidelity is worth the additional cost and runtime, especially for dense illustrations, technical diagrams, and other detail-sensitive SVGs.

Next steps

Was this page helpful?