Introduction
NiceQR.me public API for programmatic access and server-to-server integrations with API Keys.
Overview
This documentation only covers programmatic access with API Keys for server-to-server integrations.
JWT-based website and dashboard flows are intentionally excluded from this docs set, including:
- user registration and login
- Google login and token refresh
- dashboard-only QR management
- dynamic QR management
- analytics, teams, and other app-internal flows
Base URL
https://api.niceqr.me/v1Current Public Surface
The currently documented public API surface is:
POST /v1/qr/generate
Response Format
Successful responses return a consistent JSON envelope:
{
"success": true,
"data": { ... }
}On error:
{
"success": false,
"error": {
"message": "Description of what went wrong",
"code": "BAD_REQUEST"
}
}Most validation and server errors also use the same envelope:
{
"success": false,
"error": {
"message": "Description of what went wrong",
"code": "VALIDATION_ERROR"
}
}Common Error Codes
| Code | Description |
|---|---|
BAD_REQUEST | Invalid input or parameters |
PREMIUM_REQUIRED | The account lacks the required plan access for the requested QR option |
VALIDATION_ERROR | Data validation failed |
SERVER_ERROR | Internal server error |
Authentication
All documented public endpoints use an API key from Dashboard > API Keys in the X-Api-Key header:
X-Api-Key: nq_live_your_api_keySee API Key Authentication for setup details and failure behavior.
For API-key-protected routes, missing or invalid credentials may intentionally return 404 Not Found with an empty body instead of a JSON error envelope.
Rate Limits
POST /v1/qr/generate: 60 req/min route-level protection- Each API key also enforces its own dashboard-configured per-minute limit.
Quick Start
# Generate a QR code via the public API key endpoint
curl -X POST https://api.niceqr.me/v1/qr/generate \
-H "X-Api-Key: nq_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"data": "https://example.com",
"bodyStyle": "square",
"bodyBrush": { "type": "Solid", "color": "#000000" }
}'
# Response: { "success": true, "data": { "svg": "<svg>...</svg>" } }