API Reference

The GetQrivo REST API lets you create, manage, and track dynamic QR codes programmatically. All endpoints return JSON and use standard HTTP methods.

Base URL

https://api.qrivo.app

Authentication

Bearer <JWT>

Rate Limit

60 req/min (API) · 120 req/min (redirect)

Quick Start

Register, authenticate, and create your first QR code in three requests:

Copy# 1. Register
curl -X POST https://api.qrivo.app/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"s3cret!","name":"You"}'

# 2. Login (returns JWT)
curl -X POST https://api.qrivo.app/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"s3cret!"}'

# 3. Create a QR code
curl -X POST https://api.qrivo.app/v1/qr-codes \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"destinationUrl":"https://example.com","title":"My first QR","type":"url"}'

All Endpoints (19)

Complete list of available API endpoints. Click any row to expand the example payload.

POST/v1/auth/register

Create a new user account

Copy{ "email": "user@example.com", "password": "secret", "name": "Jane" }
POST/v1/auth/login

Authenticate and receive a JWT token

Copy{ "email": "user@example.com", "password": "secret" }
GET/v1/auth/meAuth

Get the current authenticated user profile

Requires Authorization: Bearer <token> header

No request body required.

GET/v1/qr-codesAuth

List all QR codes (paginated, ?page=1&limit=20)

Requires Authorization: Bearer <token> header

No request body required.

POST/v1/qr-codesAuth

Create a new dynamic QR code

Requires Authorization: Bearer <token> header

Copy{ "destinationUrl": "https://example.com", "title": "My QR", "type": "url" }
POST/v1/qr-codes/batchAuth

Create multiple QR codes in a single request

Requires Authorization: Bearer <token> header

Copy{ "items": [{ "destinationUrl": "https://a.com", "title": "A" }, { "destinationUrl": "https://b.com", "title": "B" }] }
GET/v1/qr-codes/:idAuth

Get a single QR code by ID

Requires Authorization: Bearer <token> header

No request body required.

PATCH/v1/qr-codes/:idAuth

Update QR code destination, settings, or status

Requires Authorization: Bearer <token> header

Copy{ "destinationUrl": "https://new-url.com", "isActive": true }
DELETE/v1/qr-codes/:idAuth

Delete a QR code permanently

Requires Authorization: Bearer <token> header

No request body required.

GET/v1/qr-codes/:id/scansAuth

Get scan analytics (by day, country, device)

Requires Authorization: Bearer <token> header

No request body required.

GET/r/:shortCode

Public redirect — records scan and redirects to destination

No request body required.

POST/v1/filesAuth

Upload a file (PDF, image, audio, video — 20 MB max)

Requires Authorization: Bearer <token> header

Copymultipart/form-data with "file" field
GET/files/:filename

Serve an uploaded file by filename

No request body required.

GET/v1/webhooksAuth

List all webhook configurations

Requires Authorization: Bearer <token> header

No request body required.

POST/v1/webhooksAuth

Create a webhook (events: scan, create, update, delete)

Requires Authorization: Bearer <token> header

Copy{ "url": "https://example.com/hook", "events": ["scan", "create"] }
DELETE/v1/webhooks/:idAuth

Delete a webhook configuration

Requires Authorization: Bearer <token> header

No request body required.

GET/v1/api-keysAuth

List all API keys for the current user

Requires Authorization: Bearer <token> header

No request body required.

POST/v1/api-keysAuth

Generate a new API key with a name prefix

Requires Authorization: Bearer <token> header

Copy{ "name": "production-key" }
DELETE/v1/api-keys/:idAuth

Revoke an API key

Requires Authorization: Bearer <token> header

No request body required.

Response Format

All successful responses return JSON. Errors include a descriptive message:

Success (200 / 201)

Copy{
  "id": "abc123",
  "shortCode": "xK9mQ",
  "destinationUrl": "https://example.com",
  "title": "My QR",
  "isActive": true,
  "totalScans": 0,
  "createdAt": "2026-03-23T12:00:00Z"
}

Error (4xx / 5xx)

Copy{
  "error": "Validation failed",
  "details": {
    "destinationUrl": "Must be a valid URL"
  }
}