Skip to content
NimbusNexus

QR Codes API

The REST API behind QR Codes: create tracked codes and change where they point after they are printed, route scans by rules, read scan analytics, serve codes from your own domain, import codes in bulk, and receive a webhook on every scan. Every operation below shows its request in the language picked at the top of the page. QR Codes has no SDK yet, so TypeScript, Python and Go use each language's usual HTTP client.

Calls take an API key for QR Codes, created in your account console.

Base URL
https://qr.nimbusnexus.net
Authentication
Authorization: Bearer <API key>
Version
QR Codes 0.2.24 · OpenAPI spec

Before the examples

The examples read your API key from QR_API_KEY.

Shell
export QR_API_KEY="<your-api-key>"

Codes

GET/v1/qr-tracked/codes

List Codes

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/codes

Create

Request body

FieldTypeDescription
name*string—
destination*string—
errorLevel"L" | "M" | "Q" | "H"—
style"square" | "rounded" | "smooth" | "dots"—
eyeShape"square" | "rounded" | "circle" | "leaf"—
frameShape"square" | "round"—
foregroundstring—
backgroundstring—
domain*string—
slugstring | null—

Responses

  • 201Successful Response
  • 401error.code = unauthorized
  • 402error.code = quota_exceeded (one more active code would pass the plan's max_active_codes), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/codes" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example",
    "destination": "https://example.com/webhooks",
    "domain": "example"
  }'
GET/v1/qr-tracked/codes/{code_id}

Get One

Parameters

NameInTypeDescription
code_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>" \
  -H "Authorization: Bearer $QR_API_KEY"
PATCH/v1/qr-tracked/codes/{code_id}

Update

Parameters

NameInTypeDescription
code_id*pathstring—

Request body

FieldTypeDescription
namestring | null—
destinationstring | null—
errorLevel"L" | "M" | "Q" | "H" | null—
style"square" | "rounded" | "smooth" | "dots" | null—
eyeShape"square" | "rounded" | "circle" | "leaf" | null—
frameShape"square" | "round" | null—
foregroundstring | null—
backgroundstring | null—
status"active" | "paused" | "archived" | null—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = quota_exceeded (one more active code would pass the plan's max_active_codes), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X PATCH "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/v1/qr-tracked/codes/{code_id}

Delete

Parameters

NameInTypeDescription
code_id*pathstring—

Responses

  • 204Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X DELETE "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>" \
  -H "Authorization: Bearer $QR_API_KEY"

Revisions

GET/v1/qr-tracked/codes/{code_id}/revisions

List Revisions

GET /codes/{code_id}/revisions — newest first.

Parameters

NameInTypeDescription
code_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/revisions" \
  -H "Authorization: Bearer $QR_API_KEY"

Routing rules

GET/v1/qr-tracked/codes/{code_id}/routing-rules

List Rules

Parameters

NameInTypeDescription
code_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/routing-rules" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/codes/{code_id}/routing-rules

Create Rule

Parameters

NameInTypeDescription
code_id*pathstring—

Request body

FieldTypeDescription
kind*"geo" | "ab" | "scheduled"—
data*object—
enabledboolean—
positioninteger | null—

Responses

  • 201Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/routing-rules" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "geo",
    "data": {
      "id": "ord_123",
      "total": 4200
    }
  }'
PATCH/v1/qr-tracked/codes/{code_id}/routing-rules/{rule_id}

Update Rule

Parameters

NameInTypeDescription
code_id*pathstring—
rule_id*pathstring—

Request body

FieldTypeDescription
dataobject | null—
enabledboolean | null—
positioninteger | null—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X PATCH "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/routing-rules/<rule_id>" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/v1/qr-tracked/codes/{code_id}/routing-rules/{rule_id}

Delete Rule

Parameters

NameInTypeDescription
code_id*pathstring—
rule_id*pathstring—

Responses

  • 204Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X DELETE "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/routing-rules/<rule_id>" \
  -H "Authorization: Bearer $QR_API_KEY"

Analytics

GET/v1/qr-tracked/codes/{code_id}/breakdown

Code Breakdown

One-shot fetch for the per-code dashboard's analytics block: KPI numbers, 30-day daily series, top countries, devices — all within the plan's scan history.

Parameters

NameInTypeDescription
code_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/breakdown" \
  -H "Authorization: Bearer $QR_API_KEY"
GET/v1/qr-tracked/codes/{code_id}/scans

List Scans

Most-recent scans, within the plan's scan history. Caps at 500 per call — the dashboard's tail view fits in 50, batch / API consumers can paginate beyond.

Parameters

NameInTypeDescription
code_id*pathstring—
limitqueryinteger—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/scans" \
  -H "Authorization: Bearer $QR_API_KEY"
GET/v1/qr-tracked/codes/{code_id}/scans/export

Export Code Scans

This code's scans as a CSV download, within the plan's scan history.

Parameters

NameInTypeDescription
code_id*pathstring—

Responses

  • 200The scans as CSV (RFC 4180, UTF-8, header row first), oldest first, streamed. Limited to the plan's scan_history_days, counted in whole UTC days back from today; a canceled workspace exports everything still kept. Scans past the history their plan kept them for are never included. Columns: scanned_at, scan_id, code_id, code_name, code_domain, code_slug, country, device, os, referrer, destination.
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/codes/<code_id>/scans/export" \
  -H "Authorization: Bearer $QR_API_KEY"
GET/v1/qr-tracked/scans/export

Export Workspace Scans

Every scan of every code in this workspace as one CSV download, within the plan's scan history. Deleted codes are not in it: their scans went with them (the FK cascades).

Responses

  • 200The scans as CSV (RFC 4180, UTF-8, header row first), oldest first, streamed. Limited to the plan's scan_history_days, counted in whole UTC days back from today; a canceled workspace exports everything still kept. Scans past the history their plan kept them for are never included. Columns: scanned_at, scan_id, code_id, code_name, code_domain, code_slug, country, device, os, referrer, destination.
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/scans/export" \
  -H "Authorization: Bearer $QR_API_KEY"

Custom domains

GET/v1/qr-tracked/domains

List Domains

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/domains" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/domains

Add Domain

Request body

FieldTypeDescription
hostname*stringFully-qualified hostname, e.g. qr.yourbrand.com

Responses

  • 201Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/domains" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "hostname": "example"
  }'
DELETE/v1/qr-tracked/domains/{domain_id}

Delete Domain

Remove a custom domain. Refused with 409 while any code is linked to it.

Parameters

NameInTypeDescription
domain_id*pathstring—

Responses

  • 204Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X DELETE "https://qr.nimbusnexus.net/v1/qr-tracked/domains/<domain_id>" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/domains/{domain_id}/verify

Verify Domain

Re-check the CNAME and flip status accordingly.

More

Resolves the customer's hostname's CNAME records via DNS and looks for our redirect target. If found → status=verified; otherwise we update last_error so the dashboard can show something actionable, and status stays pending (it does NOT flip to failed on a single miss — DNS propagation takes time, and we don't want one timing race to lock the customer out).

A scheduled re-check job (Phase 2) handles the long tail.

Parameters

NameInTypeDescription
domain_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/domains/<domain_id>/verify" \
  -H "Authorization: Bearer $QR_API_KEY"

Bulk imports

POST/v1/qr-tracked/imports

Create Import

Parameters

NameInTypeDescription
Idempotency-Key*headerstring—

Request body

FieldTypeDescription
domain*string—
errorLevel"L" | "M" | "Q" | "H"—
rows*array of ImportRowIn—

Responses

  • 201Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (the plan does not include bulk_import), quota_exceeded (the file's codes would pass the plan's max_active_codes), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict: idempotency_key_reused (this key was sent with a different body) or domain_not_verified
  • 413error.code = payload_too_large: the body passed NN_QRD_MAX_IMPORT_BYTES (1,000,000 bytes by default), not the 64 KiB every other route takes. 1,000 rows fit only while they average under about 1 KB of JSON each, so a client measures the serialized body before it sends
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/imports" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "example",
    "rows": [
      {
        "destination": "https://example.com/webhooks",
        "name": "Example"
      }
    ]
  }'
GET/v1/qr-tracked/imports/{import_id}

Get Import

Parameters

NameInTypeDescription
import_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/imports/<import_id>" \
  -H "Authorization: Bearer $QR_API_KEY"

Scan webhooks

GET/v1/qr-tracked/webhooks

List Webhooks

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/webhooks

Create Webhook

Register an endpoint; the response shows its signing secret once. Every delivery carries X-Webhook-Signature: one or more comma-separated sha256=<hex> tokens, each the HMAC-SHA256 of {X-Webhook-Timestamp}.{raw body} under one secret. Accept it if any token verifies.

Request body

FieldTypeDescription
url*string—
descriptionstring—
enabledboolean—

Responses

  • 201Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (the plan does not include scan_webhooks), quota_exceeded (the workspace holds max_webhook_endpoints already), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/webhooks"
  }'
GET/v1/qr-tracked/webhooks/{webhook_id}

Get Webhook

Parameters

NameInTypeDescription
webhook_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>" \
  -H "Authorization: Bearer $QR_API_KEY"
PATCH/v1/qr-tracked/webhooks/{webhook_id}

Update Webhook

Parameters

NameInTypeDescription
webhook_id*pathstring—

Request body

FieldTypeDescription
urlstring | null—
descriptionstring | null—
enabledboolean | null—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X PATCH "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
DELETE/v1/qr-tracked/webhooks/{webhook_id}

Delete Webhook

Parameters

NameInTypeDescription
webhook_id*pathstring—

Responses

  • 204Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X DELETE "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>" \
  -H "Authorization: Bearer $QR_API_KEY"
GET/v1/qr-tracked/webhooks/{webhook_id}/deliveries

List Webhook Deliveries

Newest first. cursor is the previous page's nextCursor.

Parameters

NameInTypeDescription
webhook_id*pathstring—
statusquery"queued" | "sending" | "sent" | "failed" | "dead" | null—
limitqueryinteger—
cursorquerystring | null—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>/deliveries" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/webhooks/{webhook_id}/deliveries/redeliver

Redeliver Dead Deliveries

Queue every dead delivery made at or after since again, at most 10,000, oldest first.

Parameters

NameInTypeDescription
webhook_id*pathstring—

Request body

FieldTypeDescription
since*string—

Responses

  • 202Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (the plan does not include scan_webhooks), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>/deliveries/redeliver" \
  -H "Authorization: Bearer $QR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "since": "2026-10-19T12:00:00Z"
  }'
POST/v1/qr-tracked/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver

Redeliver Delivery

Queue one dead delivery again, with a fresh attempt budget; 409 unless it is dead.

Parameters

NameInTypeDescription
webhook_id*pathstring—
delivery_id*pathstring—

Responses

  • 202Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (the plan does not include scan_webhooks), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>/deliveries/<delivery_id>/redeliver" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/webhooks/{webhook_id}/rotate-secret

Rotate Webhook Secret

A new secret, shown once. For 24 hours the old one signs beside it, so X-Webhook-Signature is sha256=<new>,sha256=<old>: split on , and accept the request if any token verifies with the secret you hold.

Parameters

NameInTypeDescription
webhook_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>/rotate-secret" \
  -H "Authorization: Bearer $QR_API_KEY"
POST/v1/qr-tracked/webhooks/{webhook_id}/test

Test Webhook

Send a signed qrd.webhook.test event now and report how the endpoint answered.

Parameters

NameInTypeDescription
webhook_id*pathstring—

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = not_entitled (the plan does not include scan_webhooks), workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 429error.code = rate_limited: more than 10 test sends a minute from this workspace; Retry-After says when to try again
  • 500error.code = internal_error

Example

curl -X POST "https://qr.nimbusnexus.net/v1/qr-tracked/webhooks/<webhook_id>/test" \
  -H "Authorization: Bearer $QR_API_KEY"

Plan and usage

GET/v1/plan

Read Plan

The workspace's tracked-QR plan and the ceilings it is held to.

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/plan" \
  -H "Authorization: Bearer $QR_API_KEY"
GET/v1/usage

Read Usage

This period's scans and the workspace's active codes, each beside its plan ceiling.

Responses

  • 200Successful Response
  • 401error.code = unauthorized
  • 402error.code = workspace_suspended (any method but DELETE), workspace_frozen (a write other than DELETE) or not_entitled (an API key on a plan without api_access)
  • 403error.code = forbidden
  • 404error.code = not_found
  • 409error.code = conflict
  • 413error.code = payload_too_large
  • 422error.code = validation_error
  • 500error.code = internal_error

Example

curl -X GET "https://qr.nimbusnexus.net/v1/usage" \
  -H "Authorization: Bearer $QR_API_KEY"