SVG API
Otimize código SVG com as predefinições do SVGO e codifique qualquer imagem em um data URI limpo e pronto para CSS — em um contrato REST JSON simples.
Dois endpoints, uma tarefa: reduzir código SVG ou transformar qualquer imagem em um URI data: para incorporar inline. Os dois rodam no servidor, então o resultado é determinístico e idêntico em todos os navegadores.
# Optimize an SVG snippet
curl -X POST https://jinero.online/api/v1/svg/optimize \
-H "Content-Type: application/json" \
-d '{"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2L2 22h20z\"/></svg>", "preset": "balanced"}'
const r = await fetch("https://jinero.online/api/v1/svg/optimize", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ svg: source, preset: "balanced" }),
});
const { output, savings_percent } = await r.json();
Todos os endpoints são públicos — sem chave. As operações não guardam estado e são leves, então os limites são generosos.
# Anonymous limits (per IP):
# POST /svg/optimize 30 req/min
# POST /svg/to-datauri 30 req/min
# GET /svg/presets 60 req/min
# Max SVG body: 500,000 chars (~500 KB)
Passa o código SVG pelo SVGO com uma de três predefinições. Remove metadados, simplifica transformações e arredonda os dados dos paths — geralmente 30–60% menor, sem mudanças visuais.
https://jinero.online/api/v1/svg/optimize
| Parâmetro | Tipo | Descrição |
|---|---|---|
svg |
string | Código SVG (com ou sem o prólogo XML). Até 500.000 caracteres. |
preset |
string | safe (limpeza mínima), balanced (padrão — melhor relação entre tamanho e segurança), aggressive (compressão máxima, pode alterar a renderização de SVGs com muitos filtros). |
curl -X POST https://jinero.online/api/v1/svg/optimize \
-H "Content-Type: application/json" \
-d @- <<JSON
{
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/></svg>",
"preset": "aggressive"
}
JSON
const r = await fetch("https://jinero.online/api/v1/svg/optimize", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ svg: source, preset: "aggressive" }),
});
const data = await r.json();
console.log(`-${data.savings_percent}%`);
$res = Http::post("https://jinero.online/api/v1/svg/optimize", [
"svg" => $svgSource,
"preset" => "balanced",
]);
$optimized = $res->json("output");
{
"success": true,
"preset": "aggressive",
"output": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/></svg>",
"original_size": 132,
"optimized_size": 70,
"savings_bytes": 62,
"savings_percent": 46.97
}
Transforma uma imagem em um URI data: pronto para usar em CSS background-image, HTML src ou SVG href. Aceita texto SVG puro, um arquivo enviado (svg/png/jpg/gif/webp) ou uma URL para baixar.
https://jinero.online/api/v1/svg/to-datauri
| Parâmetro | Tipo | Descrição |
|---|---|---|
svg |
string | Texto SVG puro. Não pode ser usado junto com image/url. |
image |
arquivo (multipart) | Envie um arquivo svg/png/jpg/gif/webp. Até 5 MB. |
url |
string | URL pública da imagem a baixar. Até 2048 caracteres. |
options.encoding |
string | utf8 (padrão para SVG, menor no CSS) ou base64 (padrão para imagens rasterizadas). |
options.quotes |
string | single ou double (padrão) — afeta o escape das aspas dos atributos dentro do data URI. |
# Option 1: raw SVG text
curl -X POST https://jinero.online/api/v1/svg/to-datauri \
-H "Content-Type: application/json" \
-d '{"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/></svg>"}'
# Option 2: file upload
curl -X POST https://jinero.online/api/v1/svg/to-datauri \
-F "[email protected]"
# Option 3: URL fetch
curl -X POST https://jinero.online/api/v1/svg/to-datauri \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/icon.png"}'
// Inline SVG → CSS data URI
const r = await fetch("https://jinero.online/api/v1/svg/to-datauri", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
svg: svgSource,
options: { encoding: "utf8", quotes: "double" },
}),
});
const { data_uri, css } = await r.json();
// data_uri → use anywhere
// css → background-image: url("…");
{
"success": true,
"data_uri": "data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"%3E%3Ccircle cx=\"12\" cy=\"12\" r=\"10\" fill=\"red\"/%3E%3C/svg%3E",
"css": "background-image: url(\"data:image/svg+xml,…\")",
"mime": "image/svg+xml",
"encoding": "utf8",
"input_size": 132,
"output_size": 187
}
Retorna as predefinições disponíveis com uma descrição curta e legível — útil para preencher interfaces de configuração.
https://jinero.online/api/v1/svg/presets
curl https://jinero.online/api/v1/svg/presets
const r = await fetch("https://jinero.online/api/v1/svg/presets");
const { presets } = await r.json();
{
"presets": [
{ "key": "safe", "name": "Safe", "description": "Minimal optimization, preserves most attributes" },
{ "key": "balanced", "name": "Balanced", "description": "Good compression with minimal visual changes" },
{ "key": "aggressive", "name": "Aggressive", "description": "Maximum compression, may affect some SVG features" }
]
}
Semântica HTTP padrão. Os erros retornam JSON com o campo "message".
// 422 — validation (oversized SVG, unknown preset, invalid URL)
{ "message": "The preset field must be one of: safe, balanced, aggressive." }
// 422 — input missing on /to-datauri
{ "message": "Provide one of: svg (text), image (file), or url" }
// 422 — SVGO crashed on malformed markup
{ "message": "Invalid SVG: unexpected end of input" }
// 429 — rate limit exceeded
{ "message": "Too Many Attempts." }
Sobre a SVG API do jinero.online
API REST gratuita para otimizar SVG e codificar em data URI — o mesmo motor SVGO que todo mundo usa, além de um endpoint to-datauri unificado que aceita texto, arquivos ou URLs.
SVGO por baixo
O otimizador é o SVGO com três perfis de predefinição cuidadosamente ajustados — o mesmo motor do popular SVGOMG, disponível como API REST.
Três entradas, um endpoint
/svg/to-datauri aceita código puro, um arquivo enviado ou uma URL para baixar — escolha o que combinar com a requisição que você já tem.
Resultado pronto para CSS
As respostas com data URI incluem um trecho de CSS já formatado, para você colocar o resultado direto em uma folha de estilos sem escape.
Sem armazenamento de arquivos
A otimização acontece toda em memória. Os arquivos enviados são excluídos assim que a resposta é gerada — não sobra nada para limpar depois.
Perguntas frequentes
Não. A SVG API é pública e tem limite de uso por IP — 30 requisições/minuto em /optimize e /to-datauri, 60 em /presets.
"balanced" é o padrão certo — remove metadados, reduz a precisão numérica e simplifica transformações, mas nunca altera a renderização. Use "aggressive" só quando você controla o SVG e já comparou o resultado visualmente, porque ele pode remover primitivas de filtro e mesclar paths.
Para SVGs, o utf8 (com URL encoding) é menor e funciona bem no CSS — por isso é o padrão. Para formatos binários como PNG, JPG ou WebP, base64 é a única opção, e nós o aplicamos automaticamente.
Código SVG: 500.000 caracteres (~500 KB). Envio de arquivos (campo image): 5 MB. Download por URL: não há limite fixo para o arquivo remoto, mas interrompemos se a resposta passar de 5 MB.
Com as predefinições "safe" e "balanced", sim — o resultado é renderizado de forma idêntica nos navegadores modernos. "aggressive" pode descartar primitivas de filtro, mesclar paths parecidos e arredondar mais as coordenadas, o que pode afetar a renderização de SVGs baseados em filtros. Sempre confira o resultado depois de trocar de predefinição.