Introdução
GeoSVG é uma API REST que gera SVG de geometria sagrada sob demanda. Roda na borda da Cloudflare Workers — latência média de 10ms.
Base URL: https://geosvg.pages.dev
Autenticação
O plano Free usa rate limit por IP (10 req/dia). O plano Pro usa uma chave de API enviada no header Authorization: Bearer <api_key>.
Endpoints
GET /api/generate
GETGera um SVG de geometria sagrada.
Parâmetros
| Nome | Tipo | Padrão | Descrição |
|---|---|---|---|
| pattern | string | flower-of-life | Nome do pattern |
| size | number | 400 | Tamanho do viewBox (px) |
| color | string | currentColor | Cor do stroke (hex ou nome) |
| format | string | svg | svg (raw) ou json |
Exemplo
curl "https://geosvg.pages.dev/api/generate?pattern=flower-of-life&size=600&color=%2300e5ff"
Resposta (formato svg)
Content-Type: image/svg+xml
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600">
<rect width="600" height="600" fill="#0a0a0f"/>
<circle cx="300" cy="300" r="108" ... />
...
</svg>
Resposta (formato json)
{
"pattern": "flower-of-life",
"size": 600,
"svg": "<svg ...>...</svg>",
"color": "#00e5ff",
"rateLimit": {
"remaining": 9,
"reset": 1711234567
}
}
GET /api/patterns
GETLista todos os patterns disponíveis.
curl "https://geosvg.pages.dev/api/patterns"
{
"patterns": ["flower-of-life", "metatrons-cube", "sri-yantra", ...],
"count": 12
}
GET /api/health
GETVerifica o status da API.
POST /api/checkout
POSTCria uma sessão de checkout Stripe para o plano Pro.
curl -X POST "https://geosvg.pages.dev/api/checkout" \
-H "Content-Type: application/json" \
-d '{"plan": "pro"}'
{
"url": "https://checkout.stripe.com/...",
"sessionId": "cs_test_..."
}
Preços
| Plano | Preço | Limite |
|---|---|---|
| Free | Grátis | 10 req/dia |
| Pro | US$ 5/mês | 500 req/mês |
Exemplos
JavaScript (Fetch)
const response = await fetch(
"https://geosvg.pages.dev/api/generate?pattern=metatrons-cube&size=400&format=json"
);
const data = await response.json();
document.getElementById("target").innerHTML = data.svg;
Python
import requests
resp = requests.get(
"https://geosvg.pages.dev/api/generate",
params={"pattern": "sri-yantra", "size": 500, "format": "svg"}
)
with open("sri-yantra.svg", "wb") as f:
f.write(resp.content)
React
function SacredGeometry({ pattern, size }) {
const [svg, setSvg] = useState(null);
useEffect(() => {
fetch(`/api/generate?pattern=${pattern}&size=${size}&format=json`)
.then(r => r.json())
.then(d => setSvg(d.svg));
}, [pattern, size]);
if (!svg) return <div>Carregando...</div>;
return <div dangerouslySetInnerHTML={{ __html: svg }} />;
}
HTML (img tag com cache)
<img src="https://geosvg.pages.dev/api/generate?pattern=mandala&size=300" alt="Mandala SVG" loading="lazy" />
SDK / Clients
Não há SDK oficial. A API é REST pura — qualquer HTTP client resolve. O cache público (3600s) permite usar a URL diretamente em tags <img> sem se preocupar com rate limit para assets estáticos.
Erros
| Código | Significado |
|---|---|
| 400 | Pattern inválido ou parâmetro incorreto |
| 429 | Rate limit excedido |
| 500 | Erro interno do servidor |