Developer docs
Voqli API
Generate professional quote images programmatically. One endpoint, Bearer token auth, JSON or binary response.
Start building — $49/moAuthentication
All API requests require a Bearer token in the
Authorization header. Tokens are scoped to your account
and carry the api:generate ability only.
Authorization: Bearer voqli_YOUR_API_KEY
Generate tokens on the API Keys page. A token is shown once on creation and never stored in plaintext. Revoke and re-create if compromised.
Endpoint
https://voqli.com/api/v1/generate
Content-Type: application/json
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
text |
string | yes | The quote text. Max 1 000 characters. |
author |
string | no | Author attribution. Max 255 characters. |
template_slug |
string | no | Slug of an active Voqli template. Falls back to default style if omitted or not found. |
format |
string | no | png (default) or jpg. |
resolution |
string | no | One of the values in the whitelist below. Default 1080x1080. |
raw |
boolean | no | Pass true (or ?raw=1 as query param) to receive the binary image directly instead of a JSON envelope. |
Resolution whitelist
Arbitrary dimensions are rejected to prevent resource abuse. Use one of these preset values:
| Value | Dimensions | Best for |
|---|---|---|
1080x1080 | 1 080 × 1 080 px | Instagram square, default |
1080x1920 | 1 080 × 1 920 px | Instagram / TikTok story |
1600x900 | 1 600 × 900 px | Twitter / LinkedIn banner |
1200x630 | 1 200 × 630 px | Facebook / OG image |
Rate limits & quota
| Limit | Value |
|---|---|
| Per-minute burst | 60 requests / minute per token |
| Monthly quota | 2 000 renders / calendar month |
| Quota reset | 1st of each month (UTC) |
Current usage and reset date are returned in every JSON response
as data.quota_used and visible on your
API Keys page.
Response (JSON)
{
"success": true,
"data": {
"export_id": 42,
"image_url": "https://voqli.com/storage/api/Xk9mJqRtPzBv2nYw.png",
"format": "png",
"resolution": "1080x1080",
"quota_used": 137,
"quota_limit": 2000
}
}
With raw=true, the response body is the raw image binary
with Content-Type: image/png (or image/jpeg).
Quota metadata is returned in the headers
X-Quota-Used and X-Quota-Limit.
Errors
| HTTP | Meaning |
|---|---|
| 401 | Missing or invalid Bearer token. |
| 403 | Token valid but no active API subscription. See upgrade_url in response. |
| 422 | Validation failed. errors object lists each field. |
| 429 | Rate limit (60/min) or monthly quota (2 000) exceeded. |
| 500 | Render error. Retry. If persistent, contact support. |
Examples
cURL — JSON response
curl -s -X POST https://voqli.com/api/v1/generate \
-H "Authorization: Bearer voqli_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "The only way to do great work is to love what you do.",
"author": "Steve Jobs",
"template_slug": "minimal-dark",
"format": "png",
"resolution": "1080x1080"
}'
cURL — stream binary directly to file
curl -s -X POST "https://voqli.com/api/v1/generate?raw=1" \
-H "Authorization: Bearer voqli_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Be the change.","format":"jpg","resolution":"1200x630"}' \
--output quote.jpg
JSON response example
{
"success": true,
"data": {
"export_id": 1,
"image_url": "https://voqli.com/storage/api/Xk9mJqRtPzBv2nYw.png",
"format": "png",
"resolution": "1080x1080",
"quota_used": 1,
"quota_limit": 2000
}
}
403 — no active plan
{
"success": false,
"error": "Active API plan required.",
"upgrade_url": "https://voqli.com/subscription/checkout/api_monthly"
}
Ready to build?
The API plan is $49/month for 2 000 renders. No watermark. Cancel anytime.
Sign Up & Subscribe