API Documentation

Complete REST API reference for qrius.io. Build integrations, automate QR code creation, and track analytics programmatically.

Getting Started

The qrius.io API uses JWT (JSON Web Tokens) for authentication. Include your access token in the Authorization header for all authenticated requests.

// Example request with authentication
curl
-X GET https://qrius.io/api/qr \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"

Base URL

https://qrius.io/api

Rate Limits

  • FREE plan: 10 requests/minute
  • PRO plan: 100 requests/minute
  • BUSINESS plan: Unlimited

Rate limit headers are included in all responses: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

Error Responses

{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human readable error"
}
}

Authentication

POST/api/auth/register

Register a new user account

Authentication
None
Rate Limit
5 requests / 15 minutes
Request Body
{
"email": string (required),
"password": string (min 8 chars, required),
"firstName": string (optional),
"lastName": string (optional),
}
Response
{
  "success": true,
  "data": {
    "user": {
      "id": "uuid",
      "email": "string",
      "plan": "FREE"
    },
    "accessToken": "jwt-token",
    "refreshToken": "jwt-token"
  }
}
POST/api/auth/login

Authenticate and get access tokens

Authentication
None
Rate Limit
5 requests / 15 minutes
Request Body
{
"email": string (required),
"password": string (required),
}
Response
{
  "success": true,
  "data": {
    "user": {
      "id": "uuid",
      "email": "string",
      "plan": "FREE"
    },
    "accessToken": "jwt-token",
    "refreshToken": "jwt-token"
  }
}
POST/api/auth/refresh

Refresh access token using refresh token

Authentication
None
Rate Limit
None
Request Body
{
"refreshToken": string (required),
}
Response
{
  "success": true,
  "data": {
    "accessToken": "jwt-token"
  }
}

QR Codes

POST/api/qr

Create a new dynamic QR code

Authentication
Bearer token (required)
Rate Limit
Plan-based (FREE: 10/min, PRO: 100/min, BUSINESS: unlimited)
Request Body
{
"name": string (1-100 chars, required),
"slug": string (3-50 chars, a-z0-9-, optional),
"destinationUrl": string (valid URL, required),
"description": string (max 500 chars, optional),
"tags": string[] (max 10, optional),
}
Response
{
  "success": true,
  "data": {
    "id": "uuid",
    "slug": "string",
    "shortUrl": "https://qrius.io/slug",
    "destinationUrl": "string",
    "createdAt": "ISO date"
  }
}
GET/api/qr

List all QR codes for authenticated user

Authentication
Bearer token (required)
Rate Limit
Plan-based
Query Parameters
page: number (default: 1)
limit: number (default: 20)
search: string (optional)
tags: string[] (optional)
Response
{
  "success": true,
  "data": "[ QR code objects ]",
  "meta": {
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 5
    }
  }
}
GET/api/qr/:id

Get a specific QR code by ID

Authentication
Bearer token (required)
Rate Limit
Plan-based
Response
{
  "success": true,
  "data": {
    "id": "uuid",
    "name": "string"
  }
}
PATCH/api/qr/:id

Update a QR code

Authentication
Bearer token (required)
Rate Limit
Plan-based
Request Body
{
"name": string (optional),
"destinationUrl": string (optional),
"description": string (optional),
"tags": string[] (optional),
"isPaused": boolean (optional),
}
Response
{
  "success": true,
  "data": {}
}
DELETE/api/qr/:id

Delete a QR code

Authentication
Bearer token (required)
Rate Limit
Plan-based
Response
{
  "success": true,
  "data": {
    "message": "QR code deleted successfully"
  }
}

User

GET/api/users/me

Get current user profile

Authentication
Bearer token (required)
Rate Limit
None
Response
{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "string",
    "plan": "FREE"
  }
}
GET/api/users/me/usage

Get current user plan usage statistics

Authentication
Bearer token (required)
Rate Limit
None
Response
{
  "success": true,
  "data": {
    "plan": "FREE",
    "limits": {
      "qrCodes": 2,
      "scansPerMonth": 1000
    },
    "usage": {
      "qrCodes": 1,
      "scansThisMonth": 500
    },
    "percentUsed": {
      "qrCodes": 50,
      "scans": 50
    }
  }
}
PATCH/api/users/me

Update current user profile

Authentication
Bearer token (required)
Rate Limit
None
Request Body
{
"firstName": string (optional),
"lastName": string (optional),
"company": string (optional),
}
Response
{
  "success": true,
  "data": {}
}
DELETE/api/users/me

Delete current user account

Authentication
Bearer token (required)
Rate Limit
None
Response
{
  "success": true,
  "data": {
    "message": "Account deleted successfully"
  }
}

Analytics

GET/api/stats/overview

Get overview statistics for all QR codes

Authentication
Bearer token (required)
Rate Limit
Plan-based
Query Parameters
from: ISO date (optional)
to: ISO date (optional)
Response
{
  "success": true,
  "data": {
    "totalScans": 1234,
    "totalQRCodes": 5,
    "scansToday": 42,
    "topQRCode": {}
  }
}

Need Help?

Having trouble with the API? Check out our examples or contact support.