---
title: "SVG animation"
method: POST
path: "/v1/svgs/animations"
tags: ["Animate SVG"]
---

# SVG animation

`POST /v1/svgs/animations`

## Request

- Base URL: `https://api.quiver.ai`
- URL: `https://api.quiver.ai/v1/svgs/animations`
- Auth: HTTP bearer

Animates an input SVG from a remote or base64-encoded SVG source.

## Headers

- `x-trace-id` string: Optional client-supplied trace identifier. The API echoes this value in `X-Trace-ID` and includes it in request logs for client-side correlation.

## Request body

- AnimateSVGRequest
  - `max_output_tokens` integer: Upper bound for output token count.
  - `model` string, required: Model identifier to use for animation.
  - `reasoning_effort` 'low' | 'medium' | 'high' | 'xhigh': Reasoning effort applied to this animation. When omitted, Arrow uses its default.
  - `stream` boolean: When true, emits a Server-Sent Events stream.
  - `temperature` number: Animation sampling temperature.
  - `prompt` string: Optional animation prompt. If omitted, the model chooses a suitable animation.
  - `svg_source` union, required: Remote or base64-encoded SVG source to animate.
    - SvgInputReferenceUrl
      - `url` string, uri, required: Network SVG URL. Only http/https URLs are allowed.
    - SvgInputReferenceBase64
      - `base64` string, required: Base64-encoded SVG payload.

## Response `200`

When `stream` is false, returns `application/json` with the full animated SVG response. When `stream` is true, returns `text/event-stream` with Server-Sent Events. Each SSE message contains an `event:` line (`generating`, `reasoning`, `draft`, or `content`) and a `data:` line with a JSON payload. Token-priced models report measured totals in `usage` and omit `credits`. Fixed-credit models retain compatibility token totals of `0` and report `credits`; for streaming, fixed credits are emitted on completed `content` events. The stream terminates with `data: [DONE]`.

- object
  - `created` integer, required
  - `credits` integer: Credit cost for fixed-credit models. Omitted for token-priced models, whose measured totals are returned in `usage`.
  - `data` SvgDocument[], required: The complete returned SVG documents. The array length is the authoritative output count.
    - `mime_type` 'image/svg+xml', required
    - `svg` string, required: Raw SVG markup.
  - `id` string, required
  - `usage` object, nullable: Token totals for token-priced models. Fixed-credit models use `credits` for billing and may report compatibility zeros here.
    - `input_tokens` integer, required: Measured token count for token-priced models. Fixed-credit models retain this field for compatibility and may report zero.
    - `output_tokens` integer, required: Measured token count for token-priced models. Fixed-credit models retain this field for compatibility and may report zero.
    - `total_tokens` integer, required: Measured token count for token-priced models. Fixed-credit models retain this field for compatibility and may report zero.
  - `svg_score` number, nullable

## Other responses

- `400`: Bad request – malformed body, missing required fields, or invalid parameter values.
- `401`: Unauthorized – missing, malformed, revoked, otherwise invalid API credentials, or an organization that could not be resolved for billing.
- `402`: Payment required – the organization has insufficient credits, or a funding payment has not settled.
- `403`: Forbidden – the account is frozen, the request is not allowed, or content policy rejected the request.
- `404`: Not found – the requested model does not exist, or the endpoint path and method are not served.
- `408`: Request timeout – the request exceeded an allowed client-facing deadline.
- `413`: Payload too large – the submitted prompt, image, or SVG input is too large.
- `415`: Unsupported media type – the request body arrived without a JSON `Content-Type`, so it could not be read.
- `429`: Rate limit exceeded – request throughput or measured input/output token usage exhausted a binding ceiling. `operation_rate_limit_exceeded` identifies operation throughput; `rate_limit_exceeded` covers overall request and token rates. `X-RateLimit-Dimension` names the exact dimension. When `Retry-After` is present, retry after the indicated period.
- `500`: The request could not be completed. Please retry.
- `502`: Bad gateway – model execution returned an invalid or failed response.
- `503`: Service unavailable – model execution is temporarily unavailable.
- `504`: Gateway timeout – model execution exceeded the server deadline.

## Changes

- **2026-10-25** `7733c6a9d212`: 1 breaking, 1 info
  - added `subschema #2, subschema #3, subschema #4, subschema #5` to the response body `oneOf` list for the response status `200` (media type: text/event-stream)
  - removed `subschema #2, subschema #3, subschema #4, subschema #5` from the response body `oneOf` list for the response status `200` (media type: text/event-stream)
- **2026-10-16** `150a31df1adb`: 1 warning
  - the `prompt` request property's maxLength was set to `10000`
- **2026-09-30** `b2283e5339fe`: 14 warning
  - the optional response header `x-quiver-zero-data-retention` removed for the status `200`
  - the optional response header `x-quiver-zero-data-retention` removed for the status `400`
  - the optional response header `x-quiver-zero-data-retention` removed for the status `401`
  - the optional response header `x-quiver-zero-data-retention` removed for the status `402`
  - …10 more
- **2026-09-25** `4d02d06a13b8`: 1 info
  - added the non-success response with the status `415`
- …earlier changes not shown

[Operation history](https://skmtc.dev/quiver/apis/quiverai-api/changes/v1/svgs/animations/post.md)

---

[API](https://skmtc.dev/quiver/apis/quiverai-api.md) - [All operations](https://skmtc.dev/quiver/apis/quiverai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/quiver/apis/quiverai-api/revisions/5db9b140be5c?raw)
