The Vectenza API.
Turn logos, icons and illustrations into clean SVG from your own code. The same results as the Studio, with one request.
Free while we're in beta.
Vectenza Free Beta
$0 /month
Free during beta
Daily allowance
— credits
Shared across Studio and API
Developer bonus
100 credits
One-time, for approved beta testers
1 credit = 1 new image conversion. Converting the same image again on the same day is free. Daily credits are used first, then bonus credits. No credit card required. Failed jobs don't use credits. Want the bonus? Ask to join the developer beta.
API keys and credits.
Loading…
From PNG to SVG in two requests.
- Create a key above and keep it in an environment variable,
VECTENZA_API_KEY. POST /v1/vectorizationswith the image. The job comes back finished.- Download the file from
result.url.
# 1. Convert (the response is the job, with a link to its result)
curl https://vectenza.com/v1/vectorizations \
-H "Authorization: Bearer $VECTENZA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-F image=@logo.png
# 2. Download the SVG, using the "id" from step 1
curl https://vectenza.com/v1/vectorizations/vec_…/result \
-H "Authorization: Bearer $VECTENZA_API_KEY" -o logo.svgAPI reference.
Base URL https://vectenza.com. Send your key in every request as Authorization: Bearer vz_…. The full contract is in the OpenAPI document. Within v1, fields may be added but are never renamed or removed.
Endpoints
| POST | /v1/vectorizations | Convert an image. Returns the finished job (201). |
| GET | /v1/vectorizations/{id} | Get a job you created. |
| GET | /v1/vectorizations/{id}/result | Download its SVG (or PNG). |
| GET | /v1/credits | Credits left today, and bonus credits. |
Request
multipart/form-data with an image file (PNG, JPEG, GIF, WebP or BMP). Optional fields:
output.file_format:svg(default) orpng.processing.max_colors: limit the palette; 0 means no limit.- Any other setting the Studio uses. /config/fields lists them all with their defaults.
Retries and idempotency
Send an Idempotency-Key header (any unique string, such as a UUID) with each POST. If the connection drops, retry with the same key: you get the first job back (header Idempotent-Replayed: true) and aren't charged twice. A failed request can be retried with the same key.
Response
{
"id": "vec_3f2a…",
"object": "vectorization",
"status": "succeeded",
"created_at": "2026-11-02T10:15:03.120Z",
"completed_at": "2026-11-02T10:15:04.870Z",
"credits_charged": 1,
"result": {
"format": "svg",
"content_type": "image/svg+xml",
"bytes": 18234,
"url": "/v1/vectorizations/vec_3f2a…/result"
}
}Errors
Every error is JSON: {"error": {"status", "type", "message"}}. Check type.
| 400 | invalid_request | The image or a field is invalid. Fix the request; don’t retry as is. |
| 401 | unauthorized | Missing, invalid or revoked API key. |
| 402 | insufficient_credits | No credits left. Daily credits reset at 00:00 UTC. |
| 409 | conflict | Idempotency-Key reused for a different request, or that request is still running. |
| 413 | payload_too_large | The upload is too large. |
| 429 | rate_limited | Too many requests or jobs at once. Wait for Retry-After. |
| 500 | internal_error | Something went wrong on our side. Nothing was charged; retry. |
| 503 | server_busy | All workers are busy. Wait for Retry-After, then retry. |
Limits during beta
- Up to 2 jobs at once per account, and a per-key limit on requests per minute.
- Uploads up to 30 MB and 50 megapixels.
- Download results soon after they're made.
- Keep keys on your server. Never put them in browser or mobile app code.