Developer docs

Voqli API

Generate professional quote images programmatically. One endpoint, Bearer token auth, JSON or binary response.

Start building — $49/mo

Authentication

All API requests require a Bearer token in the Authorization header. Tokens are scoped to your account and carry the api:generate ability only.

Header
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

POST 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:

ValueDimensionsBest for
1080x10801 080 × 1 080 pxInstagram square, default
1080x19201 080 × 1 920 pxInstagram / TikTok story
1600x900 1 600 × 900 px Twitter / LinkedIn banner
1200x630 1 200 × 630 px Facebook / OG image

Rate limits & quota

LimitValue
Per-minute burst60 requests / minute per token
Monthly quota2 000 renders / calendar month
Quota reset1st 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)

201 Created
{
  "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

HTTPMeaning
401Missing or invalid Bearer token.
403Token valid but no active API subscription. See upgrade_url in response.
422Validation failed. errors object lists each field.
429Rate limit (60/min) or monthly quota (2 000) exceeded.
500Render error. Retry. If persistent, contact support.

Examples

cURL — JSON response

Shell
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

Shell
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

Response · 201
{
  "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

Response · 403
{
  "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