For developers
API reference
Create codes and repoint them from your own server. The printed code never changes — only where it goes.
The basics
- Base URL
- https://blueagency-eg.com/api/v1
- Auth
- Authorization: Bearer bq_live_…
- Rate limit
- 120 requests a minute, per key
- Plan
- Agency
Keys
From your dashboard → API. A key is shown once and once only — we store a hash, not the key, so there is no way to show it again.
Two scopes: read lists codes and their scans; write can change where any printed code points. Pick read unless you need to write.
Endpoints
/api/v1/codesreadList codes. Cursor paginated — pass next_cursor for the following page.
?limit=25&cursor=…&q=menu
/api/v1/codeswriteCreate a dynamic code.
{
"name": "Zamalek menu",
"destination": "https://example.com/menu",
"custom_code": "ZAMALEK",
"tags": ["menu", "cairo"]
}/api/v1/codes/{id}readOne code.
/api/v1/codes/{id}writeChange the destination or the status. The printed payload is untouched.
{ "destination": "https://example.com/new-menu" }
{ "status": "paused" } // active · paused · archivedResponses
Every success is wrapped in data. Every error carries a stable code — rely on that, not on the message text, which is written for people and may change.
{ "data": { "code": { "id": "…", "short_code": "BLUE01",
"payload": "HTTPS://BLUEAGENCY-EG.COM/Q/BLUE01",
"destination": "https://example.com/menu", "scans": 412 } } }
{ "error": { "code": "PLAN_LIMIT_REACHED",
"message": "Dynamic QR code limit reached" } }A full example
# Repoint every code tagged "menu" at the new PDF
curl https://blueagency-eg.com/api/v1/codes?q=menu \
-H "Authorization: Bearer $BQ_KEY" \
| jq -r '.data.codes[].id' \
| while read id; do
curl -X PATCH https://blueagency-eg.com/api/v1/codes/$id \
-H "Authorization: Bearer $BQ_KEY" \
-H "Content-Type: application/json" \
-d '{"destination":"https://example.com/menu-autumn.pdf"}'
doneNote that no endpoint changes payload. There isn't one, and there never will be — that is what keeps everything already printed working.