◈ ZQUOTE

Telegram-style Quote Generator — v1.1 · DEV ZIKKY TECH
♦ v1.1 ♦
📸 Live Preview
D
DEV ZIKKY
Hello! This quote was generated by ZQUOTE ❤️
⏳ Generating quote
⏳ Loading image...
Generated Quote
✓ Quote generated successfully! Expires in 60s
↗ OPEN IN TAB
📚 API Documentation

⚡ Quick Start

Send a POST request to /api/quote with a username, message, and optional avatar to generate a Telegram-style quote image.

🔗 Endpoint

POST /api/quote

📋 Parameters

Parameter Type Required Description
username string Yes Display name shown on the quote
text string Yes Quote message content
avatar string No Avatar URL or Base64 data URI. Defaults to initials.

🖼️ Avatar Formats

URL: Public image URL

"avatar": "https://example.com/avatar.jpg"

Base64: Data URI format

"avatar": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."

Default: If omitted, the first letter of the username is used.

📡 cURL Examples

With URL avatar:

curl -X POST "https://zquote-tau.vercel.app/api/quote" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "DEV ZIKKY",
    "text": "Peak anime updates.",
    "avatar": "https://example.com/avatar.jpg"
  }'

With Base64 avatar:

curl -X POST "https://zquote-tau.vercel.app/api/quote" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "DEV ZIKKY",
    "text": "Hello from ZQuote!",
    "avatar": "data:image/jpeg;base64,BASE64_DATA_HERE"
  }'

⚠️ Replace BASE64_DATA_HERE with your actual Base64-encoded image data.

🟨 JavaScript (fetch)

const response = await fetch('https://zquote-tau.vercel.app/api/quote', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    username: 'DEV ZIKKY',
    text: 'Hello from ZQuote!',
    avatar: 'https://example.com/avatar.jpg'
  })
});

const data = await response.json();

if (data.success) {
  console.log('Image URL:', data.data.image.url);
  console.log('Expires in:', data.data.image.expiresIn, 'seconds');
} else {
  console.error('Error:', data.error);
}

🐍 Python (requests)

import requests

url = 'https://zquote-tau.vercel.app/api/quote'
payload = {
    "username": "DEV ZIKKY",
    "text": "Hello from ZQuote!",
    "avatar": "https://example.com/avatar.jpg"
}

response = requests.post(url, json=payload)
data = response.json()

if data.get("success"):
    print("Image URL:", data["data"]["image"]["url"])
    print("Expires in:", data["data"]["image"]["expiresIn"], "seconds")
else:
    print("Error:", data.get("error"))

📦 Response Structure

Success:

{
  "success": true,
  "data": {
    "image": {
      "url": "https://...",
      "expiresIn": 60
    }
  }
}

Error:

{
  "success": false,
  "error": "Error message describing what went wrong"
}

⚠️ Error Responses

  • 400 — Invalid request (missing parameters, invalid data)
  • 500 — Server error (rendering failed, ImgBB upload failed)

🔄 API Workflow

┌─────────────┐
│ 1. Request  │  POST /api/quote with username, text, avatar
└──────┬──────┘
       ▼
┌─────────────┐
│ 2. Render   │  Generate quote image using Satori
└──────┬──────┘
       ▼
┌─────────────┐
│ 3. Upload   │  Upload to ImgBB for hosting
└──────┬──────┘
       ▼
┌─────────────┐
│ 4. Response │  Return image URL with 60s expiry
└─────────────┘

💡 Integration Ideas

  • Chat bots: Generate quote images for Telegram, Discord, or Slack
  • Social media: Create shareable quote images automatically
  • APIs: Use as a microservice for image generation
  • Websites: Add dynamic quote generation to your site
📖 Open Source & Deployment

📦 Open Source

♥ ZQuote v1.1 is fully open source.

The complete source code is publicly available on GitHub. You can inspect the code, learn from the implementation, modify it, deploy your own instance, and contribute improvements.

Source Code:
github.com/zikky0001-droid/zquote

The repository contains the API server, quote renderer, frontend, storage implementation, fonts, configuration, and project documentation.

🔐 Vercel Environment Setup

⚠️ Important: If you deploy your own copy of ZQuote to Vercel, you need to configure your own ImgBB API key.

The ImgBB key must not be placed inside index.html or exposed to the browser. It belongs on the server side as an environment variable. The repository itself also recommends keeping the key private and using a server-side environment variable for production deployments.

Add IMGBB_API_KEY to Vercel

  1. Open your Vercel project.
  2. Go to Settings.
  3. Open Environment Variables.
  4. Add:
    Name: IMGBB_API_KEY
    Value: YOUR_IMGBB_API_KEY
  5. Select the environment(s) where you want it available.
  6. Save the variable.
  7. Redeploy the project so the new environment variable is available to the deployment.
🛑 Never put the actual API key in the frontend or commit it to GitHub.

If you're deploying from your own fork, use your own ImgBB API key rather than sharing the key from another deployment.