← Back to QuickQR

QuickQR API

Free REST API for generating QR codes. No signup required.

Quick Start

Generate a QR code with a simple POST request:

curl -X POST https://qr.aahub.es/api.php \
  -H "Content-Type: application/json" \
  -d '{"type": "url", "data": "https://example.com"}' \
  --output qr.png

Endpoint

POST https://qr.aahub.es/api.php

Content-Type: application/json

Response: Image (PNG or SVG) or JSON error

Rate Limit: 100 requests per minute per IP

Common Parameters

Parameter Type Default Description
type string "text" QR code type (see types below)
format string "png" "png" or "svg"
size integer 300 Size in pixels (100-1000)
color string "000000" Hex color (without #)
logo string null Base64-encoded logo image (PNG, JPEG, GIF, WebP). Max 2MB. Logo will be 25% of QR size.

Supported QR Types

Basic

text / url

Simple text or URL QR code

{"type": "url", "data": "https://example.com"}

Contact

vcard

Contact card with name, phone, email, etc.

{
  "type": "vcard",
  "name": "John Doe",
  "phone": "+1234567890",
  "email": "john@example.com",
  "company": "Acme Inc",
  "title": "Developer",
  "url": "https://johndoe.com"
}

email

Compose email with recipient, subject, body

{
  "type": "email",
  "to": "hello@example.com",
  "subject": "Hello!",
  "body": "I saw your QR code..."
}

sms

Send SMS with pre-filled message

{"type": "sms", "phone": "+1234567890", "message": "Hello!"}

phone

Initiate phone call

{"type": "phone", "phone": "+1234567890"}

Messaging

whatsapp

WhatsApp chat link with optional message

{"type": "whatsapp", "phone": "1234567890", "message": "Hi!"}

telegram

Telegram chat link

{"type": "telegram", "username": "johndoe"}

signal

Signal chat link

{"type": "signal", "phone": "1234567890"}

Network

wifi

WiFi network credentials

{
  "type": "wifi",
  "ssid": "MyNetwork",
  "password": "secret123",
  "encryption": "WPA",
  "hidden": false
}

Location & Events

geo / location

GPS coordinates for maps

{"type": "geo", "lat": 40.7128, "lng": -74.0060, "label": "NYC"}

event / calendar

Calendar event (iCalendar format)

{
  "type": "event",
  "title": "Team Meeting",
  "start": "2024-03-15T10:00:00",
  "end": "2024-03-15T11:00:00",
  "location": "Conference Room A",
  "description": "Weekly sync",
  "allDay": false
}

Payments

paypal

PayPal.me payment link

{"type": "paypal", "username": "johndoe", "amount": 10.00, "currency": "USD"}

venmo

Venmo payment link

{"type": "venmo", "username": "johndoe", "amount": 10.00, "note": "Thanks!"}

cashapp

Cash App payment link

{"type": "cashapp", "cashtag": "johndoe", "amount": 10.00}

Cryptocurrency

bitcoin

Bitcoin payment URI (BIP-21)

{
  "type": "bitcoin",
  "address": "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2",
  "amount": 0.001,
  "label": "Donation",
  "message": "Thanks!"
}

ethereum

Ethereum payment URI (EIP-681)

{
  "type": "ethereum",
  "address": "0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7",
  "amount": 0.01
}

litecoin

Litecoin payment URI

{
  "type": "litecoin",
  "address": "LaMT348PWRnrqeeWArpwQPbuanpXDZGEUz",
  "amount": 0.5,
  "label": "Payment"
}

dogecoin

Dogecoin payment URI

{
  "type": "dogecoin",
  "address": "D7Y55K3d3KBhMtJz5EEtzqDyqTY3sdPtPV",
  "amount": 100,
  "label": "Much thanks!",
  "message": "To the moon!"
}

monero

Monero payment URI (privacy-focused cryptocurrency)

{
  "type": "monero",
  "address": "4AdUndXHHZ6cfufTMvppY6JwXNouMBzSkbLYfpAV5Usx3skxNgYeYTRj5UzqtReoS44qo9mtmXCqY45DJ852K5Jv2684Rge",
  "amount": 0.5,
  "recipient_name": "Your Name",
  "tx_description": "Payment for services"
}

solana

Solana Pay compatible URI (works with Phantom, Solflare, etc.)

{
  "type": "solana",
  "address": "DemoKMZWkk483hX4mUrcJoo3zVvsKhm8XXs28TuwZw9H",
  "amount": 1.5,
  "label": "Your Business",
  "message": "Thanks for your purchase!",
  "memo": "Order #12345"
}

xrp / ripple

XRP URI compatible with XUMM, Trust Wallet, and other XRP wallets

{
  "type": "xrp",
  "address": "rN7n3473SaZBCG4dFL83w7a1RXtXtbk2D9",
  "amount": 25.5,
  "destination_tag": 123456789,
  "label": "Your Business"
}

Note: destination_tag (or dt) is required by some exchanges. Use type "ripple" as an alias.

cardano / ada

CIP-13 compliant Cardano URI for Daedalus, Yoroi, and other ADA wallets

{
  "type": "cardano",
  "address": "addr1qy8ac7qqy0vtulyl7wntmsxc6wex80gvcyjy33qffrhm7sh927ysx5sftuw0dlft05dz3c7revpf7jx0xnlcjz3g69mq4afdhv",
  "amount": 50.0
}

Uses web+cardano: URI scheme per CIP-13 standard. Use type "ada" as an alias.

bitcoincash / bch

BIP-21 style URI for Bitcoin.com, Electron Cash, and other BCH wallets

{
  "type": "bitcoincash",
  "address": "qze75dks3vtgr3ezeg0jgkmezl2ttvpylyrk26dlsq",
  "amount": 0.05,
  "label": "Your Business",
  "message": "Payment for order #123"
}

Uses bitcoincash: URI scheme per Bitcoin Cash standards. Use type "bch" as an alias. Addresses start with 'q' (P2PKH) or 'p' (P2SH).

polkadot / dot

Polkadot URI for Polkadot.js, Talisman, SubWallet, and other DOT wallets

{
  "type": "polkadot",
  "address": "1FRMM8PEiWXYax7rpS6X4XZX1aAAxSWx1CrKTyrVYhV24fg",
  "amount": 10.0,
  "label": "Your Business",
  "message": "Payment for services"
}

Uses polkadot: URI scheme. Use type "dot" as an alias. Addresses are SS58-encoded and typically start with '1' for Polkadot mainnet.

tezos / xtz

Tezos URI for Temple, Kukai, Galleon, and other XTZ wallets

{
  "type": "tezos",
  "address": "tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb",
  "amount": 50.0,
  "label": "Your Business",
  "message": "Payment for services"
}

Uses tezos: URI scheme. Use type "xtz" as an alias. Addresses start with tz1, tz2, tz3 (implicit accounts) or KT1 (smart contracts).

stellar / xlm

Stellar SEP-7 URI for Lobstr, StellarX, Solar, and other XLM wallets

{
  "type": "stellar",
  "address": "GCKFBEIYV2U22IO2BJ4KVJOIP7XPWQGQFKKWXR6DOSJBV7STMAQSMTGG",
  "amount": 100.0,
  "memo": "Payment reference"
}

Uses web+stellar:pay URI scheme (SEP-7 standard). Use type "xlm" as an alias. Addresses are 56 characters starting with G or federation addresses (name*domain.com).

Batch Generation

Generate multiple QR codes at once. Returns a ZIP file containing all QR codes.

POST https://qr.aahub.es/api.php

Content-Type: application/json | Response: application/zip

Batch Parameters

Parameter Type Description
batch boolean Set to true to enable batch mode
batch_type string "text" (default), "wifi", "vcard", "email", "sms", "paypal", "venmo", "cashapp", "bitcoin", "ethereum", "litecoin", "dogecoin", "monero", "solana", "xrp", "cardano", "bitcoincash", "polkadot", "tezos", or "stellar"
items array Array of items to generate (max 50)

Batch URL/Text QR Codes

{
  "batch": true,
  "batch_type": "text",
  "items": [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://example.com/page3"
  ],
  "size": 300,
  "format": "png"
}

Batch WiFi QR Codes

Each item: "SSID,Password,Security" (Security: WPA, WPA2, WEP, or blank)

{
  "batch": true,
  "batch_type": "wifi",
  "items": [
    "GuestWiFi,password123,WPA2",
    "CafeNetwork,cafepass,WPA",
    "OpenNetwork,,"
  ]
}

Batch Contact QR Codes (vCard)

Each item: "Name,Phone,Email,Company"

{
  "batch": true,
  "batch_type": "vcard",
  "items": [
    "John Doe,+1234567890,john@example.com,Acme Inc",
    "Jane Smith,+1987654321,jane@example.com,Tech Corp",
    "Bob Wilson,+1555123456,,"
  ]
}

Batch Email QR Codes

Each item: "Email,Subject,Body"

{
  "batch": true,
  "batch_type": "email",
  "items": [
    "support@company.com,Question about service,Hello I need help...",
    "sales@company.com,Product inquiry,I'm interested in...",
    "info@company.com,,"
  ]
}

Batch SMS QR Codes

Each item: "Phone,Message"

{
  "batch": true,
  "batch_type": "sms",
  "items": [
    "+1234567890,Hello from our company!",
    "+1987654321,Thank you for your purchase!",
    "+1555123456,"
  ]
}

Batch PayPal QR Codes

Each item: "Username,Amount,Currency"

{
  "batch": true,
  "batch_type": "paypal",
  "items": [
    "johndoe,25.00,USD",
    "janesmith,50.00,EUR",
    "merchant,,"
  ]
}

Batch Venmo QR Codes

Each item: "Username,Amount,Note"

{
  "batch": true,
  "batch_type": "venmo",
  "items": [
    "johndoe,25.00,Coffee",
    "janesmith,10.00,Lunch",
    "friend,,Thanks!"
  ]
}

Batch Cash App QR Codes

Each item: "$Cashtag,Amount"

{
  "batch": true,
  "batch_type": "cashapp",
  "items": [
    "$johndoe,25.00",
    "$janesmith,10.00",
    "merchant,"
  ]
}

Batch Bitcoin QR Codes

Each item: "Address,Amount,Label" (BIP-21 format)

{
  "batch": true,
  "batch_type": "bitcoin",
  "items": [
    "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa,0.001,Donation",
    "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy,0.05,Product",
    "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq,,"
  ]
}

Batch Ethereum QR Codes

Each item: "Address,Amount" (EIP-681 format, amount in ETH)

{
  "batch": true,
  "batch_type": "ethereum",
  "items": [
    "0x742d35Cc6634C0532925a3b844Bc454e4438f44e,0.5",
    "0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe,1.0",
    "0x71C7656EC7ab88b098defB751B7401B5f6d8976F,"
  ]
}

Batch Litecoin QR Codes

Each item: "Address,Amount,Label"

{
  "batch": true,
  "batch_type": "litecoin",
  "items": [
    "LZ7tYccN7Wn9L1V2xFFXvnFGxHMYgEqhpG,0.5,Payment",
    "LTdsVS8VDw6sXuVzXRRe1BWgSHwRjHpRNj,1.0,Order 123",
    "MBfpRQPQQg9dLqU2HXBv1rQ4vRZzxqFTcL,,"
  ]
}

Batch Dogecoin QR Codes

Each item: "Address,Amount,Label"

{
  "batch": true,
  "batch_type": "dogecoin",
  "items": [
    "D7Y55K3d3KBhMtJz5EEtzqDyqTY3sdPtPV,100,Much thanks!",
    "DHkFPq3cL3LwPQVkAMPBxXs9K4tVn7Ldvf,50,To the moon!",
    "D5AHRgjyBvdPpTQH8rM4cQwzN7hqPvQ9,,"
  ]
}

Batch Monero QR Codes

Each item: "Address,Amount,RecipientName"

{
  "batch": true,
  "batch_type": "monero",
  "items": [
    "4AdUndXHHZ6cfufTMvppY6JwXNouMBzSkbLYfpAV5Usx...,0.5,Your Name",
    "888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANs...,1.0,",
    "47sghzufGhJJDQEbScMCwVBimTuq6L5JiRixD8VeGbpj...,,"
  ]
}

Batch Solana QR Codes

Each item: "Address,Amount,Label" (Solana Pay compatible)

{
  "batch": true,
  "batch_type": "solana",
  "items": [
    "DemoKMZWkk483hX4mUrcJoo3zVvsKhm8XXs28TuwZw9H,1.5,Payment",
    "7fUAJdStEuGbc3sM84cKRL6yYaaSstyLSU4ve5oovLS7,2.0,Order 123",
    "9noXzpXnkyEcKF3DZRq1oLrjHRBBBBX4VPAhb2mXW7yd,,"
  ]
}

Batch XRP QR Codes

Each item: "Address,Amount,DestinationTag"

{
  "batch": true,
  "batch_type": "xrp",
  "items": [
    "rN7n3473SaZBCG4dFL83w7a1RXtXtbk2D9,25.5,123456789",
    "rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh,50.0,",
    "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW,10.0,987654321"
  ]
}

Note: Destination tag is required by some exchanges.

Batch Cardano QR Codes

Each item: "Address,Amount" (CIP-13 compliant)

{
  "batch": true,
  "batch_type": "cardano",
  "items": [
    "addr1qy8ac7qqy0vtulyl7wntmsxc6wex80gvcyjy33qffrhm7sh927ysx5sftuw0dlft05dz3c7revpf7jx0xnlcjz3g69mq4afdhv,50.0",
    "addr1q9d66zzs27kppmx8qc8h43q7m4w2g5jxewjyxqyjcxzpqxeesm...,25.0",
    "addr1qxhxg5rkwg5sk2kj9k6kkfxhh9vrgml9jvw4nj7r5qm8zp8t4s6..."
  ]
}

Batch Bitcoin Cash QR Codes

Each item: "Address,Amount,Label" (CashAddr format)

{
  "batch": true,
  "batch_type": "bitcoincash",
  "items": [
    "qze75dks3vtgr3ezeg0jgkmezl2ttvpylyrk26dlsq,0.05,Payment",
    "qr4nue8t2wrq8j0tvyq4l9r4r7sj9yj80gzwc8r7h6,0.1,Order 123",
    "pq2xk6gxunl7x7l4v65klxzyl6v8r8mvau4y7xfpj5,,"
  ]
}

Batch Polkadot QR Codes

Each item: "Address,Amount,Label" (SS58 format)

{
  "batch": true,
  "batch_type": "polkadot",
  "items": [
    "1FRMM8PEiWXYax7rpS6X4XZX1aAAxSWx1CrKTyrVYhV24fg,10.0,Payment",
    "15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5,5.0,Order 123",
    "14ShUZUYUR35RBZW6uVVt1zXDxmSQddkeDdXf1JkMA6P721N,,"
  ]
}

Batch Tezos QR Codes

Each item: "Address,Amount,Label" (tz1/tz2/tz3/KT1 format)

{
  "batch": true,
  "batch_type": "tezos",
  "items": [
    "tz1VSUr8wwNhLAzempoch5d6hLRiTh8Cjcjb,50.0,Payment",
    "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU,25.0,Order 123",
    "tz1aZoFH2pd3V9UEq5psqVokVBYkt7YSi1ow,,"
  ]
}

Batch Stellar QR Codes

Each item: "Address,Amount,Memo" (56-char addresses starting with G)

{
  "batch": true,
  "batch_type": "stellar",
  "items": [
    "GCKFBEIYV2U22IO2BJ4KVJOIP7XPWQGQFKKWXR6DOSJBV7STMAQSMTGG,100.0,Payment",
    "GA2XP4KMY4KWNPW4KUCUKYUF2J7Y6HO5HLPUEA3VPVGP2QC2GDAEVMEM,50.0,Order 456",
    "GCEZWKCA5VLDNRLN3RPRJMRZOX3Z6G5CHCGSNFHEYVXM3XOJMDS674JZ,,"
  ]
}

Example: Download Batch ZIP with curl

curl -X POST https://qr.aahub.es/api.php \
  -H "Content-Type: application/json" \
  -d '{
    "batch": true,
    "batch_type": "wifi",
    "items": ["GuestWiFi,pass123,WPA2", "LobbyWiFi,lobby456,WPA"]
  }' \
  --output qrcodes.zip

Example: JavaScript Batch Download

const response = await fetch('https://qr.aahub.es/api.php', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    batch: true,
    batch_type: 'vcard',
    items: [
      'John Doe,+1234567890,john@example.com,Acme',
      'Jane Smith,+1987654321,jane@example.com,Tech'
    ]
  })
});
const blob = await response.blob();
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'contacts.zip';
a.click();

Error Handling

Errors return JSON with an error field:

{"error": "Phone number is required"}

HTTP Status Codes

  • 200 - Success (image returned)
  • 400 - Bad request (invalid input)
  • 405 - Method not allowed (use POST)
  • 429 - Rate limit exceeded
  • 500 - Server error

More Examples

JavaScript (fetch)

const response = await fetch('https://qr.aahub.es/api.php', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    type: 'wifi',
    ssid: 'MyNetwork',
    password: 'secret123'
  })
});
const blob = await response.blob();
const url = URL.createObjectURL(blob);
document.getElementById('qr').src = url;

Python (requests)

import requests

response = requests.post('https://qr.aahub.es/api.php', json={
    'type': 'vcard',
    'name': 'John Doe',
    'email': 'john@example.com',
    'phone': '+1234567890'
})

with open('contact.png', 'wb') as f:
    f.write(response.content)

PHP (curl)

$ch = curl_init('https://qr.aahub.es/api.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'type' => 'url',
    'data' => 'https://example.com',
    'format' => 'svg'
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$svg = curl_exec($ch);
curl_close($ch);
file_put_contents('qr.svg', $svg);

Adding a Logo

Embed a logo in the center of your QR code using base64-encoded image data:

JavaScript

// Read logo file and convert to base64
const logoFile = document.querySelector('input[type="file"]').files[0];
const reader = new FileReader();
reader.onload = async () => {
  const response = await fetch('https://qr.aahub.es/api.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      type: 'url',
      data: 'https://example.com',
      logo: reader.result // data:image/png;base64,...
    })
  });
  const blob = await response.blob();
  document.getElementById('qr').src = URL.createObjectURL(blob);
};
reader.readAsDataURL(logoFile);

Python

import requests
import base64

# Read and encode logo
with open('logo.png', 'rb') as f:
    logo_base64 = base64.b64encode(f.read()).decode('utf-8')

response = requests.post('https://qr.aahub.es/api.php', json={
    'type': 'url',
    'data': 'https://example.com',
    'logo': logo_base64
})

with open('qr-with-logo.png', 'wb') as f:
    f.write(response.content)

curl (with base64)

# Encode logo and generate QR
LOGO=$(base64 -i logo.png)
curl -X POST https://qr.aahub.es/api.php \
  -H "Content-Type: application/json" \
  -d "{\"type\": \"url\", \"data\": \"https://example.com\", \"logo\": \"$LOGO\"}" \
  --output qr-with-logo.png

Note: The logo is automatically sized to 25% of the QR code dimensions and placed in the center with a punchout background for visibility. Max logo size: 2MB. Supported formats: PNG, JPEG, GIF, WebP.