API and MCP
One request, one SVG. The REST API needs an API key, which uses your credits and includes the commercial licence. Anonymous use works on the website and over MCP, with the same small free allowance; the website is protected by a browser bot check that command-line tools cannot pass.
Generate an SVG
Create a key on your account page after buying credits, then send it as a Bearer token with a JSON body.
curl -s https://inspyry.com/v1/vectors \
-H 'authorization: Bearer ik_your_key' \
-H 'content-type: application/json' \
-d '{"prompt":"a laser-cut mushroom","style":"stencil","colours":1}'The response contains the SVG text and a permanent link to the file.
{
"id": "gen_...",
"svg": "<svg ...>",
"svg_url": "https://inspyry.com/v1/vectors/gen_.../svg",
"credits_used": 0,
"free_left": 2,
"license": "personal"
}MCP server
The server speaks MCP over streamable HTTP at https://inspyry.com/mcp. Any client that supports remote HTTP servers can use it, including Claude Code, Claude Desktop, Cursor and your own agents.
With your API key
Your credits pay for each SVG and include the commercial licence. Create a key on your account page. In Claude Code, run:
claude mcp add --transport http inspyry https://inspyry.com/mcp \ --header "Authorization: Bearer ik_your_key"
In other clients, add this to the MCP servers section of the client configuration:
{
"mcpServers": {
"inspyry": {
"url": "https://inspyry.com/mcp",
"headers": { "Authorization": "Bearer ik_your_key" }
}
}
}Without a key
Leave out the header to try it with the small free allowance, shared by everyone on the same network. Results are personal use only.
{
"mcpServers": {
"inspyry": { "url": "https://inspyry.com/mcp" }
}
}Tools
generate_vector takes a prompt and any control below, and returns the SVG as text. Failed or filtered generations are not charged. get_balance returns your credits and the free uses left today. Failures come back as tool errors with the same codes as the REST API; a wrong key is rejected with HTTP 401.
{
"name": "generate_vector",
"arguments": {
"prompt": "a sitting fox",
"style": "flat-sticker",
"colours": 4,
"palette": "earthy"
}
}Once connected, ask your agent in plain words, for example: make a one-colour stencil of a mountain range and save it as mountains.svg.
Controls
- style
- flat-sticker, stencil, line-art, graffiti, tattoo, comic, manga, cartoon, esports-mascot, retro, art-deco, art-nouveau, vaporwave, cyberpunk, woodcut, engraving, stained-glass, papercut, halftone, doodle, ukiyoe, folk-art, tribal, celtic, filigree, pixel, low-poly, isometric, minimal-icon, monoline, geometric, kawaii, nautical, western, tiki
- shape
- free, circle, rounded-square, shield, die-cut, wreath, hexagon, cameo, banner, speech-bubble, mandala
- composition
- single, set, pattern, border
- detail
- low, medium, high
- colours
- 1 to 16. One colour makes a stencil.
- palette
- pastel, neon, earthy, duotone, retro-cmyk, monochrome, sunset, ocean, or a list of #rrggbb colours
- background, outline, aspect, margin, flip
- See the OpenAPI spec for every field.
Errors
Errors are { "error": string, "code": string }.
| 400 | invalid_request | A control value or the prompt is invalid. Nothing is charged. |
| 401 | invalid_api_key | The key is wrong or was replaced. |
| 402 | payment_required | No credits left. |
| 422 | quality_failed / blocked_prompt | The result failed the quality check, or the image service filtered the prompt. Nothing is charged. |
| 429 | quota_exceeded / attempt_limit / rate_limited | The free allowance for your network, or its daily attempt limit (failed attempts count), is used up for now. |
| 502 | generation_failed | A temporary problem. Nothing is charged; retry. |
| 503 | capacity_reached / free_capacity_reached | Today's generation capacity, or the part reserved for free use, is used up. |