SVG animation
Animates an input SVG from a remote or base64-encoded SVG source.
POST
/v1/svgs/animationsAuthorization
AuthorizationBearer token · headerrequiredAuthentication via Bearer token API key
Header parameters
x-trace-idstringOptional client-supplied trace identifier. The API echoes this value in `X-Trace-ID` and includes it in request logs for client-side correlation.
min length 1 · max length 256
Request body
requiredapplication/jsonmax_output_tokensintegerUpper bound for output token count.
min 1 · max 65536
modelstringrequiredModel identifier to use for animation.
min length 1
reasoning_effortstringReasoning effort applied to this animation. When omitted, Arrow uses its default.
Allowed:
lowmediumhighxhighstreambooleanWhen true, emits a Server-Sent Events stream.
default: false
temperaturenumberAnimation sampling temperature.
min 0 · max 2 · default: 1
promptstringOptional animation prompt. If omitted, the model chooses a suitable animation.
min length 1
svg_sourceSvgInputReferencerequiredRemote or base64-encoded SVG source to animate.
Show propertiesHide properties
Any of:
SvgInputReferenceUrl
urlstring<uri>requiredNetwork SVG URL. Only http/https URLs are allowed.
SvgInputReferenceBase64
base64stringrequiredBase64-encoded SVG payload.
min length 1 · max length 1066668
Responses
200When `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]`.
createdintegerrequiredmin 0
creditsintegerCredit cost for fixed-credit models. Omitted for token-priced models, whose measured totals are returned in `usage`.
min 0
dataany[]requiredidstringrequiredmin length 1
usageobjectShow propertiesHide properties
input_tokensintegerrequiredMeasured token count for token-priced models. Fixed-credit models retain this field for compatibility and may report zero.
min 0
output_tokensintegerrequiredMeasured token count for token-priced models. Fixed-credit models retain this field for compatibility and may report zero.
min 0
total_tokensintegerrequiredMeasured token count for token-priced models. Fixed-credit models retain this field for compatibility and may report zero.
min 0
svg_scorenumber | null400Bad request – malformed body, missing required fields, or invalid parameter values.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
401Unauthorized – missing, malformed, revoked, otherwise invalid API credentials, or an organization that could not be resolved for billing.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
402Payment required – the organization has insufficient credits.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
403Forbidden – the account is frozen, the request is not allowed, or content policy rejected the request.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
404Not found – the requested model does not exist.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
408Request timeout – the request exceeded an allowed client-facing deadline.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
413Payload too large – the submitted prompt, image, or SVG input is too large.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
429Rate 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.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
500The request could not be completed. Please retry.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
502Bad gateway – model execution returned an invalid or failed response.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
503Service unavailable – model execution is temporarily unavailable.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
504Gateway timeout – model execution exceeded the server deadline.
codestringrequiredAllowed:
invalid_requestinvalid_api_keyunauthorizedfunding_payment_failedfunding_payment_method_requiredfunding_payment_action_requiredfunding_pendinginsufficient_creditsaccount_frozencontent_policy_violationmodel_not_foundpayload_too_largerequest_timeoutrate_limit_exceededoperation_rate_limit_exceededweekly_limit_exceededserver_errormodel_errormodel_unavailablemessagestringrequiredmin length 1
request_idstringrequiredmin length 1
retry_afterintegermin 0 · max 86400
statusintegerrequiredmin 400 · max 599
Try it
Server
Authorization
Parameters
Bodyapplication/json
Request
curl -X POST "https://api.quiver.ai/v1/svgs/animations" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"max_output_tokens": 4096,
"model": "arrow-1.1",
"reasoning_effort": "medium",
"stream": false,
"temperature": 0.4,
"prompt": "Make the logo pulse gently",
"svg_source": {
"url": "https://example.com/uploads/source.svg"
}
}'const response = await fetch("https://api.quiver.ai/v1/svgs/animations", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"max_output_tokens": 4096,
"model": "arrow-1.1",
"reasoning_effort": "medium",
"stream": false,
"temperature": 0.4,
"prompt": "Make the logo pulse gently",
"svg_source": {
"url": "https://example.com/uploads/source.svg"
}
})
});import requests
response = requests.post(
"https://api.quiver.ai/v1/svgs/animations",
headers={
"Authorization": "Bearer YOUR_TOKEN",
"Content-Type": "application/json"
},
json={
"max_output_tokens": 4096,
"model": "arrow-1.1",
"reasoning_effort": "medium",
"stream": False,
"temperature": 0.4,
"prompt": "Make the logo pulse gently",
"svg_source": {
"url": "https://example.com/uploads/source.svg"
}
},
)Response
{
"created": 1704067200,
"credits": 1,
"data": [
{
"mime_type": "image/svg+xml",
"svg": "string",
"loop_period_ms": 1200,
"opening_animation_ms": 500
}
],
"id": "resp_01J9AZ3XJ7D5S9ZV2Q5Z8E1A4N",
"usage": {
"input_tokens": 0,
"output_tokens": 0,
"total_tokens": 0
},
"svg_score": 0
}{
"code": "invalid_request",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 400
}{
"code": "unauthorized",
"message": "Unauthorized",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 401
}{
"code": "insufficient_credits",
"message": "Insufficient credits",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 402
}{
"code": "account_frozen",
"message": "Account is frozen",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 403
}{
"code": "model_not_found",
"message": "Model not found",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 404
}{
"code": "request_timeout",
"message": "Request timed out",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 408
}{
"code": "payload_too_large",
"message": "Payload too large",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 413
}{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please try again later.",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 429
}{
"code": "server_error",
"message": "The request could not be completed. Please retry.",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 500
}{
"code": "model_error",
"message": "The request could not be completed. Please retry.",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 502
}{
"code": "model_unavailable",
"message": "The request could not be completed. Please retry.",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 503
}{
"code": "request_timeout",
"message": "The request could not be completed. Please retry.",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"status": 504
}