Integrations / n8n
Vectorize images in n8n
Send a PNG or JPG from any n8n workflow and get back a clean SVG, plus a DXF for laser and CNC machines or PDF and EPS files for print, in the same call. It works today with the built-in HTTP Request node: nothing to install.
1. Get an API key
- Create a free account on vectosolve.com, then a key on the API keys page. It starts with
vs_. - New accounts include 10 free API calls, enough to build and test the workflow. After that, each call uses credits from your account.
- In n8n, create a credential of type Header Auth: Name
Authorization, ValueBearer vs_your_key.
2. Configure the HTTP Request node
Place it after the node that provides the image as binary data (Google Drive download, Gmail attachment, Read/Write Files, Form Trigger with a file field). The binary field is usually named data.
| Field | Value |
|---|---|
| Method | POST |
| URL | https://vectosolve.com/api/v1/vectorize |
| Authentication | Generic Credential Type, then Header Auth, then your VectoSolve credential |
| Send Body | On. Body Content Type: Form-Data |
| Body parameter 1 | Type n8n Binary File, Name file, Input Data Field Name data |
| Body parameter 2 | Type Form Data, Name mode, Value standard, laser, cricut, embroidery or centerline |
| Body parameter 3 (optional) | Name output_format, Value dxf to also get a DXF file (default svg) |
| Body parameter 4 (optional) | Name exports, Value pdf,eps (any of pdf, eps, ai, png) |
| Header (recommended) | Idempotency-Key = {{ $execution.id }}-{{ $itemIndex }} |
| Settings | Retry On Fail on, Wait Between Tries 5000 ms |
Already have a public link to the image? Replace the file parameter with a Form Data parameter image_url: VectoSolve downloads the image itself.
The Idempotency-Key header makes retries safe: if a call succeeded but the answer was lost, the retry returns the stored result instead of converting and charging a second time.
The same request from a terminal, to check your key before building the workflow:
curl -X POST https://vectosolve.com/api/v1/vectorize \
-H "Authorization: Bearer vs_your_key" \
-F "file=@logo.png" \
-F "mode=laser" \
-F "output_format=dxf"3. Turn the response into files
The node returns JSON. Each file sits in its own field; a Convert to File node turns it into a real file for the next steps (Google Drive, Dropbox, email, FTP).
| Field | Content | Next node |
|---|---|---|
| data.svg | The SVG markup | Convert to File, Convert to Text File, File Name logo.svg |
| data.dxf | The DXF, when output_format=dxf | Convert to File, Convert to Text File, File Name logo.dxf |
| data.files.pdf.content_base64 | The PDF, when exports includes pdf | Convert to File, Move Base64 String to File, MIME type application/pdf |
| data.files.png.content_base64 | A high-resolution PNG, when exports includes png | Convert to File, Move Base64 String to File, MIME type image/png |
| data.files.eps.content | The EPS (text), when exports includes eps | Convert to File, Convert to Text File, File Name logo.eps |
| data.files.ai.content | The AI file (text), when exports includes ai | Convert to File, Convert to Text File, File Name logo.ai |
| data.source_quality | A report on the source image: flags files a person should check before production | IF node, to route doubtful files to a human |
| credits.used, credits.remaining | What the call used and what is left | IF node, to alert you before the balance runs out |
Each print file is billed on its own. If one fails, it is refunded and its entry carries an error field instead of content; the SVG is still returned.
Workflows people build with it
Artwork intake for a print or sign shop
Gmail Trigger on new attachments, HTTP Request to VectoSolve with exports=pdf,eps, Google Drive upload into the job folder, Slack message to production.
Laser and CNC files from online orders
Webhook from your shop with the customer upload link, HTTP Request with image_url, mode laser and output_format dxf, then email the DXF to the workshop.
Cut files for a Cricut or sticker store
Google Drive Trigger on a folder of designs, HTTP Request in cricut mode, upload the SVG next to the original.
Errors
| HTTP | Meaning | Charged |
|---|---|---|
| 400 | A field is missing or invalid (no file or image_url, an output_format other than svg or dxf, a file over the limit). The message names the problem. | No |
| 401 | The API key is missing or wrong. Check the Header Auth value: Bearer, a space, then the key. | No |
| 402 | No credits left, or the free trial calls are used up. The response carries top_up_url. | No |
| 409 | The same Idempotency-Key is already being processed. Retry a few seconds later. | No |
| 422 | The image produced an empty result. refunded: true confirms the refund. | No, refunded |
| 429 | Rate limit. Retry On Fail handles it. | No |
Every error body has the same shape: { "success": false, "error": "..." }. In the HTTP Request node, turn on Include Response Headers and Status or Never Error if you want to branch on the status code instead of stopping the workflow.
Limits
- Input: PNG, JPG, WebP or GIF. Uploaded files up to 10 MB; image links up to 25 MB, public http(s) only.
- 60 requests per minute per key by default.
GET https://vectosolve.com/api/v1/creditsreturns your balance and your key's limits, free of charge. - A vectorization usually takes a few seconds. Set the node timeout to at least 120 seconds for large images with print files.
More
Full reference for every endpoint and parameter: API documentation and the OpenAPI spec. Using Make instead? See the Make guide. Questions: support@vectosolve.com.