Every QR code API in 2026 does the same thing: generate a square, track a scan, redirect a URL. None of them talk. Until now.
This guide shows you exactly how to wire it up in under 10 minutes.
What Is BYOK and Why Does It Matter for Voice QR Codes?
BYOK — Bring Your Own Key — means you authenticate with ElevenLabs directly using your own API key, rather than routing through a shared pool. For developers building at scale, this matters for three reasons:
- Cost transparency: You pay ElevenLabs directly at your tier's rate. No middleman markup.
- Rate limits: Your account's limits apply — not a shared pool that throttles under load.
- Voice access: Your cloned voices, your premium voices, your full ElevenLabs library — all available.
ElevenLabs is also deprecating their default voice library on December 31, 2026. If you have cloned a custom voice or built campaigns around specific voice IDs, BYOK ensures those voices stay available through your own account indefinitely.
Prerequisites
- A free ElevenLabs account — get your API key at elevenlabs.io. Your key starts with
sk_. - A free AiTalkQR developer key — get one at api.aitalkqr.com. Free tier includes 100 generations per month.
- Node.js 18+ or PHP 8.1+ — examples below cover both.
Step 1 — Get Your ElevenLabs API Key
Log into your ElevenLabs account, navigate to Profile → API Key, and copy your key. It looks like this:
sk_abc123def456ghi789...
Never commit this key to a public repository. Store it in an environment variable:
# .env
ELEVENLABS_KEY=sk_abc123def456ghi789
AITALKQR_KEY=tqr_yourdevkeyhere
Step 2 — Install the AiTalkQR SDK
npm install aitalkqr
Or via PHP Composer:
composer require aitalkqr/sdk
Step 3 — Create Your First BYOK Talking QR Campaign
Pass your ElevenLabs key at the client level (applies globally) or per-request (overrides per call):
JavaScript
import { AiTalkQR } from 'aitalkqr'
import 'dotenv/config'
const client = new AiTalkQR({
apiKey: process.env.AITALKQR_KEY,
elevenLabsKey: process.env.ELEVENLABS_KEY // BYOK
})
const campaign = await client.campaigns.create({
label: 'Front Window — Car Lot',
script: 'You are looking at a 2022 Honda Accord Sport.
28,000 miles, one owner, priced at 24,995.
Tap the link below to text us directly.',
voice: 'arnold',
link: 'https://yourdealership.com/accord',
whatsapp: '+19561234567'
})
console.log(campaign.qr_url) // PNG download URL
console.log(campaign.player_url) // aitalkqr.com/a1b2c3
console.log(campaign.scan_count) // live analytics from day one
PHP
<?php
require 'vendor/autoload.php';
use AiTalkQR\Client;
$client = new Client([
'api_key' => $_ENV['AITALKQR_KEY'],
'elevenlabs_key' => $_ENV['ELEVENLABS_KEY'], // BYOK
]);
$campaign = $client->campaigns->create([
'label' => 'Table Tent — Daily Special',
'script' => 'Welcome to Rosa\'s Kitchen! Today\'s special
is our famous street tacos — $2 each until 4pm.
Tap below to see our full menu.',
'voice' => 'sarah',
'link' => 'https://rosastacos.com/menu',
]);
echo $campaign['player_url']; // live in under 60 seconds
Step 4 — Update the Voice Script Without Reprinting
// Yesterday: daily special was tacos
// Today: daily special is enchiladas
// The QR on the table tent never changes
await client.campaigns.update(campaign.id, {
script: 'Today\'s special is our green enchiladas —
three for $9.99 until 6pm.'
})
No reprinting. No new QR codes. No IT ticket. Just one API call.
Available Voices
AiTalkQR includes 25 ElevenLabs voices across all plans. With BYOK, you can also pass any voice ID from your ElevenLabs library — including custom cloned voices:
// Use a built-in voice by name
voice: 'arnold' // Mature Male · DJ Voice
voice: 'sarah' // Warm Female · American
voice: 'george' // Warm Storyteller · British
voice: 'liam' // Young Energetic · American
// OR pass any ElevenLabs voice ID directly (BYOK required)
voice_id: 'VR6AewLTigWG4xSOukaG' // your cloned voice
Webhook Events on Every Scan
Register a webhook endpoint and receive a POST on every scan event — timestamp, device type, and WhatsApp tap conversion:
await client.webhooks.register({
url: 'https://yourapp.com/webhooks/qr-scan',
events: ['scan', 'whatsapp_tap', 'link_click']
})
// Payload on scan:
{
event: 'scan',
campaign_id: 'a1b2c3d4',
scanned_at: '2026-06-15T14:23:11Z',
device: 'iOS',
scan_count: 47
}
Pricing — Pay for What You Generate
Every plan includes full API access, hosted player, and scan tracking. The Developer tier is free forever with no credit card required.
- Developer — $0 forever: 100 generations/mo · 7 voices · Full API access
- Business — $29/mo: 2,000 generations · 15 voices · BYOK ElevenLabs support
- Enterprise — $99/mo: Unlimited · All 25 voices · BYOK + White-label widget + Webhooks
With BYOK on Business or Enterprise, your ElevenLabs generation costs route directly to your account. AiTalkQR charges only for the platform — QR generation, player hosting, scan tracking, and webhooks.
No-Code Version Available
Building for your own business rather than for clients? The no-code version at TalkingQRCodes.com gives you the same AI voice QR campaigns through a dashboard — no API required. Plans start at $20/month with a free 7-day trial.
Get Your Free API Key
The Developer tier is free forever — 100 generations per month, 7 voices, full API access, player and scan tracking included. No credit card required.