Introduction
Authentication, base URL, endpoints, and error behavior for the QuiverAI API.
This section covers the API at api.quiver.ai.
Authentication
The QuiverAI API uses API keys with bearer authentication.
- Create and manage keys in the Developer Platform under API Keys.
- Follow the Quickstart to run your first call.
- Keep keys server-side and load them from environment variables or secret managers.
Authorization: Bearer <QUIVERAI_API_KEY>
Base URL and headers
Send API requests to:
https://api.quiver.ai/v1
Use these headers on JSON requests:
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/modelsGET /v1/models/{model}POST /v1/svgs/generationsPOST /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) fromGET /v1/models(andGET /v1/models/{model}). - Successful generations debit
n × svg_generatecredits (ndefaults to 1). - Successful vectorizations debit
svg_vectorizecredits 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.pricingfields, see API pricing. - In Billing, subscription credit usage is shown against the weekly allowance.
Errors and rate limits
The API returns standard HTTP status codes and a JSON error payload.
Rate limits resolve from the caller’s current organization, Project, operation class, and model-operation capacity. Read the response headers as one binding ceiling:
X-RateLimit-Limit: maximum requests in the current window.X-RateLimit-Remaining: requests remaining in the current window.X-RateLimit-Reset: Unix timestamp in milliseconds when the current window resets.X-RateLimit-Scope:organization,project,operation_class, ormodel_operation.X-RateLimit-Dimension:request_rateoroperation_throughput.X-RateLimit-Subject: customer-safe binding label; omitted for an organization-scoped ceiling.Retry-After: seconds to wait before retrying a429response.
{
"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 includeinvalid_api_keyandunauthorized.402 Payment Required: insufficient credits. Purchase more at Billing.403 Forbidden: frozen accounts return theaccount_frozencode.404 Not Found: the requested model does not exist.429 Too Many Requests: rate limit exceeded. Retry after the number of seconds inRetry-After.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:
npm install @quiverai/sdk
For other languages, call the REST API directly.