同じエンジンを、サーバーサイドで。
どんな画像も、実際のパスと色領域ごとに1つの塗りを持つ、編集可能できれいなベクターアートに変換します。このAPIはブラウザ内コンバーターと同じWebAssemblyエンジンを、お使いの端末ではなく弊社のマシン上で実行するため、返されるSVGはアプリが生成するものと同じです。
curl -X POST "https://vectortrace.app/api/v1/vectorize?format=svg" \ -F image=@logo.png \ -o logo.svg
リクエスト1回でファイル1つが返ります。以下の匿名利用の上限内であればキーは不要です。
認証
匿名リクエストも動作しますが、上限は厳しめです。キーを使うとその上限が引き上げられ、Bearerトークンとして送信します。認識できないキー(失効済みのキーを含む)は、匿名ティアへ静かに切り替えるのではなく401で拒否され、この拒否はIPの予算に計上されます — 静かな降格は、タイプミスを1時間後のレート制限エラーに変えてしまうためです。
Authorization: Bearer $VECTORTRACE_KEY
キーはアカウントページで作成され、一度だけ表示されます。保存されるのはハッシュのみです。キーはProの機能で、月間500枚の画像が含まれ、それを超える画像1枚ごとに€0.02がサブスクリプション経由で請求されます。アカウントページでキーを失効させると、次のリクエストから使用できなくなります。キー管理はセッションCookieで認証されオリジンチェックされるブラウザ向けの機能です — 形状を確認できるようOpenAPIファイルに文書化されていますが、スクリプトから使う想定のものではありません。
GET /api/account/keys → { keys, usage, maxKeys }
POST /api/account/keys { name } → { key, secret } # secret shown once
DELETE /api/account/keys/{id} → { revoked: true, id }POST/api/v1/vectorize
ラスター画像を1枚ベクター化します。マルチパートのファイルパートとして、またはJSON本文内のbase64として送信します。レスポンスはベクターファイルそのもの、またはリクエストに応じてJSON形式のドキュメントです。
PNG · JPG · JPEG · WebP · BMP · GIF
リクエスト
| パート | 場所 | 値 |
|---|---|---|
| image | multipart/form-data | ラスターファイル。 |
| image | application/json 本文 | 同じファイルをbase64エンコードしたもの。data:プレフィックスの有無は問いません。どちらか一方を使用してください。 |
| options | JSON本文、またはフォームフィールド | 以下のオプションの任意の組み合わせ。省略したフィールドには指定したプリセットの値が使われます。 |
| format | クエリ文字列 | 書き出し形式。本文の指定よりクエリが優先されます。 |
| Accept | リクエストヘッダー | application/jsonを指定すると、ファイルの代わりにドキュメントとその統計情報を返します。 |
例
curl -X POST "https://vectortrace.app/api/v1/vectorize?format=svg" \
-H "Authorization: Bearer $VECTORTRACE_KEY" \
-F "image=@logo.png" \
-F 'options={"preset":"logo","colors":8}' \
-o logo.svgimport { readFile, writeFile } from 'node:fs/promises'
const form = new FormData()
form.append('image', new Blob([await readFile('logo.png')]), 'logo.png')
form.append('options', JSON.stringify({ preset: 'logo', colors: 8 }))
const response = await fetch('https://vectortrace.app/api/v1/vectorize?format=svg', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.VECTORTRACE_KEY}` },
body: form,
})
if (!response.ok) throw new Error(await response.text())
await writeFile('logo.svg', Buffer.from(await response.arrayBuffer()))import json, os, requests
with open("logo.png", "rb") as image:
response = requests.post(
"https://vectortrace.app/api/v1/vectorize",
params={"format": "svg"},
headers={"Authorization": f"Bearer {os.environ['VECTORTRACE_KEY']}"},
files={"image": image},
data={"options": json.dumps({"preset": "logo", "colors": 8})},
)
response.raise_for_status()
open("logo.svg", "wb").write(response.content)JSON本文
POST /api/v1/vectorize?format=svg
Content-Type: application/json
Accept: application/json
{
"image": "iVBORw0KGgoAAAANSUhEUgAA…",
"options": { "preset": "logo", "colors": 8 }
}オプション
すべてのフィールドは省略可能です。プリセットが残りを補い、設定したフィールドはプリセットより優先されます。これらはコンバーターのインスペクターと同じコントロールで、Rustエンジンが読み込むのと同じテーブルです。
| フィールド | 値 | デフォルト | 備考 |
|---|---|---|---|
| preset | logo · line-art · photo · embroidery · vinyl · laser | logo | 名前付きのオプションセット。アプリおよびRustエンジンと同じテーブルです。 |
| mode | color · binary | color | 二値モードは単色をトレースし、カラーモードは先にパレットをクラスタリングします。 |
| colors | 2〜64 | 16 | クラスタリング後のパレットサイズ。二値モードでは無視されます。 |
| filterSpeckle | 面積(ピクセル) | 4 | これより小さい領域は除去されます。 |
| cornerThreshold | 0〜180度 | 60 | これより鋭い角は、カーブではなく鋭角のまま保持されます。 |
| pathPrecision | 0〜4 | 2 | パスデータに書き込む小数点以下の桁数。 |
| curveFitting | pixel · polygon · spline | spline | ピクセルは階段状のエッジを保持し、ポリゴンは直線でフィットし、スプラインは3次曲線でフィットします。 |
| hierarchical | stacked · cutout | stacked | 重ね順は領域を重ねて塗り、くり抜きはすべての領域を互いに独立させます。 |
| spliceThreshold | 0〜180度 | 45 | フィットしたカーブを2つに分割する角度。 |
| lengthThreshold | ピクセル | 4 | 単純化前に保持する最短のポリゴン辺の長さ。 |
| maxIterations | 1〜100 | 10 | サブパスごとのカーブフィット精緻化の予算回数。 |
レスポンスとエラー
成功時
| ステータス | Content-Type | 本文 |
|---|---|---|
| 200 | image/svg+xml | 書き出されたSVGファイルをインラインで返し、ファイル名はサーバー側で決定されます。 |
| 200 | application/pdf | 書き出されたPDFファイルをインラインで返し、ファイル名はサーバー側で決定されます。 |
| 200 | application/postscript | 書き出されたEPSファイルをインラインで返し、ファイル名はサーバー側で決定されます。 |
| 200 | image/vnd.dxf | 書き出されたDXFファイルをインラインで返し、ファイル名はサーバー側で決定されます。 |
| 200 | image/png | 書き出されたPNGファイルをインラインで返し、ファイル名はサーバー側で決定されます。 |
| 200 | application/json | Accept: application/jsonを指定した場合のベクタードキュメントとその統計情報。 |
{
"document": {
"version": 1, "width": 512, "height": 512, "unit": "px",
"palette": ["#101114", "#e8491d"],
"elements": [{ "kind": "path", "fill": 0, "stroke": null, "subpaths": [ … ] }]
},
"stats": { "paths": 12, "nodes": 184, "colors": 2, "ms": 41, "estimatedSvgBytes": 3210 }
}拒否の有無にかかわらず、すべてのレスポンスにレート制限ヘッダーが含まれます。 X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
エラーエンベロープ
エンベロープは常に1種類です。コードで分岐し、文言では分岐しないでください — コードは安定していますが、メッセージは変わる可能性があります。
{ "error": { "code": "IMAGE_TOO_LARGE", "message": "…" } }| ステータス | コード | 発生条件 |
|---|---|---|
| 400 | DECODE_FAILED | 対応形式のバイト列ですが、デコードできませんでした。 |
| 400 | VALIDATION_ERROR | 本文またはフィールドが契約と一致しませんでした。 |
| 401 | UNAUTHORIZED | 読み取れないAuthorizationヘッダー、または未知のキーです。 |
| 413 | IMAGE_TOO_LARGE | 画像がこの呼び出し元クラスのピクセル数上限を超えています。 |
| 413 | PAYLOAD_TOO_LARGE | 本文がこの呼び出し元クラスのバイト数上限を超えています。 |
| 415 | UNSUPPORTED_FORMAT | 要求された出力形式には、このビルドでエクスポーターがありません。 |
| 415 | UNSUPPORTED_INPUT_FORMAT | バイト列が対応するラスター形式のいずれでもありません。 |
| 429 | RATE_LIMITED | 1時間あたりの予算を使い切りました。Retry-Afterで再試行可能な時刻を確認してください。 |
| 500 | ENGINE_ERROR | トレーサーは実行されましたが、この画像で失敗しました。 |
| 500 | INTERNAL_ERROR | こちらの問題です。一度再試行のうえ、ご連絡ください。 |
レート制限
| ティア | 最大本文サイズ | 最大ピクセル数 | リクエスト数 | カウント単位 |
|---|---|---|---|---|
| 匿名 | 2 MB | 1 MP | 20 / 時間 | クライアントIP |
| キー利用 | 20 MB | 16 MP | 600 / 時間 | キーの識別子 |
ピクセル数上限を超える画像は縮小されるのではなく拒否されます。ブラウザ内のコンバーターがサイズ超過のアートワークを縮小するのは、代わりに4分の1ギガバイト級のメモリ確保がお使いのタブ内で発生してしまうからです。一方このAPIでは上限は予算であり、送信したアートワークに対応しない座標を返すのはエラーより悪い結果になります。
OpenAPI
上記のリファレンスは、サーバーの検証に使うのと同じzodスキーマから生成されているため、手書きの仕様書が実装から乖離することはありません。クライアントジェネレーターの参照先としてお使いください。
GET https://vectortrace.app/api/openapi.json
llms.txt
製品、各ページ、このエンドポイントについての平文の要約で、言語モデルとエージェント向けに書かれています。フルバージョンにはページ索引とプリセットテーブルも含まれます。
GET https://vectortrace.app/llms.txt GET https://vectortrace.app/llms-full.txt
CLI
第10週エンジンをコマンドとして。プリセットも出力も同じで、サーバーを介しません。
npx @vectortrace/cli in.png -o out.svg --preset laser
MCP
第10週stdioまたはstreamable HTTP経由でエンジンをエージェントに公開するMCPサーバーです。3つのツールがあります。
| ツール | 内容 |
|---|---|
| vectorize_image | 画像をトレースし、ドキュメントハンドルと統計情報を返します。 |
| list_presets | すべてのオプション値を含むプリセットテーブルを返します。 |
| export_document | ハンドルをいずれかの書き出し形式にシリアライズします。 |