> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scanova.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get QR Code List

> Retrieves a paginated list of QR Codes in your account with full metadata, advanced configuration flags, and analytics fields. Supports filtering, sorting, and search. Authentication required.

## Query Parameters

| Name            | Type                  | Required | Default   | Description                                                                                                                                                                                              |
| :-------------- | :-------------------- | :------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `page`          | `integer`             | No       | `1`       | Page number (1-based).                                                                                                                                                                                   |
| `ordering`      | `string`              | No       | `created` | Sort order. Prefix with `-` for descending. Allowed: `created`, `-created`, `name`, `-name`, `category__name`, `-category__name`, `dynamic_url_object__visit_count`, `-dynamic_url_object__visit_count`. |
| `created_from`  | `date` (`YYYY-MM-DD`) | No       | —         | Only return QR codes created on/after this date.                                                                                                                                                         |
| `created_till`  | `date` (`YYYY-MM-DD`) | No       | —         | Only return QR codes created on/before this date.                                                                                                                                                        |
| `qrid`          | `string`              | No       | —         | Filter by specific QR code ID(s). Must be a comma-separated list of QR IDs. Example: `Q349...,Qf9...,Qf94...`.                                                                                           |
| `tags`          | `string`              | No       | —         | Comma-separated tags (URL-encoded). Example: `marketing,summer-campaign`.                                                                                                                                |
| `category`      | `string`              | No       | —         | Comma-separated category slugs. Example: `url,product`.                                                                                                                                                  |
| `type`          | `string`              | No       | —         | Filter by QR type: `st` (static), `dy` (dynamic).                                                                                                                                                        |
| `status`        | `string`              | No       | —         | Filter by status: `active`, `inactive`.                                                                                                                                                                  |
| `users`         | `string`              | No       | —         | Comma-separated user IDs (URL-encoded).                                                                                                                                                                  |
| `scan_type`     | `string`              | No       | —         | Scan-count comparison mode: `less_than`, `between`, `greater_than`, `equal_to`. Must be used with `scan_count1`.                                                                                         |
| `scan_count1`   | `integer`             | No       | —         | Primary scan-count value (required with `scan_type`).                                                                                                                                                    |
| `scan_count2`   | `integer`             | No       | —         | Secondary scan-count value (required when `scan_type=between`).                                                                                                                                          |
| `search`        | `string`              | No       | —         | Free-text search value.                                                                                                                                                                                  |
| `search_fields` | `string`              | No       | —         | Comma-separated fields to search in: `qrid`, `dynamic_url_object__url_hash`, `name`. If omitted, default search fields are used.                                                                         |

## Usage Notes (query params)

* `ordering` example: `?ordering=-dynamic_url_object__visit_count` returns most-scanned QR codes first.
* Date filters accept `YYYY-MM-DD` (server timezone aware). To filter by exact datetime, use server-side date range with `created_from`/`created_till`.
* The `qrid` parameter accepts a single QR ID or multiple QR IDs as a comma-separated string (e.g., `qrid=Q349...,Qf94...`). **Note:** Use comma-separated values in a single parameter, not repeated query parameters. For example, use `?qrid=Q1,Q2,Q3` instead of `?qrid=Q1&qrid=Q2&qrid=Q3`.
* For `scan_type=between`, supply both `scan_count1` and `scan_count2` (e.g., `scan_count1=10&scan_count2=100`).
* When filtering by `tags`, `category`, or `qrid`, URL-encode commas (or use repeated parameters depending on your client).

## Examples

### Get All QR Codes

```bash theme={null}
curl -X GET "https://management.scanova.io/qr/" \
  -H "Authorization: YOUR_API_KEY"
```

### Pagination

```bash theme={null}
# Get page 2
curl -X GET "https://management.scanova.io/qr/?page=2" \
  -H "Authorization: YOUR_API_KEY"
```

### Sorting

```bash theme={null}
# Sort by creation date (newest first)
curl -X GET "https://management.scanova.io/qr/?ordering=-created" \
  -H "Authorization: YOUR_API_KEY"

# Sort by name (alphabetical)
curl -X GET "https://management.scanova.io/qr/?ordering=name" \
  -H "Authorization: YOUR_API_KEY"

# Sort by visit count (most visited first)
curl -X GET "https://management.scanova.io/qr/?ordering=-dynamic_url_object__visit_count" \
  -H "Authorization: YOUR_API_KEY"
```

### Date Filtering

```bash theme={null}
# QR codes created between specific dates
curl -X GET "https://management.scanova.io/qr/?created_from=2025-10-06&created_till=2025-10-24" \
  -H "Authorization: YOUR_API_KEY"

# QR codes created from a specific date
curl -X GET "https://management.scanova.io/qr/?created_from=2025-10-01" \
  -H "Authorization: YOUR_API_KEY"
```

### Category and Type Filtering

```bash theme={null}
# Filter by specific categories
curl -X GET "https://management.scanova.io/qr/?category=image%2CrealEstate" \
  -H "Authorization: YOUR_API_KEY"

# Filter by QR code type
curl -X GET "https://management.scanova.io/qr/?type=dy" \
  -H "Authorization: YOUR_API_KEY"

# Filter by status
curl -X GET "https://management.scanova.io/qr/?status=active" \
  -H "Authorization: YOUR_API_KEY"
```

### QR ID Filtering

```bash theme={null}
# Filter by a single QR ID
curl -X GET "https://management.scanova.io/qr/?qrid=Q3493df1c0e074ac7" \
  -H "Authorization: YOUR_API_KEY"

# Filter by multiple QR IDs (comma-separated, no spaces)
curl -X GET "https://management.scanova.io/qr/?qrid=Q3493df1c0e074ac7,Qf94b25d768294148,Qf94b25d768294149" \
  -H "Authorization: YOUR_API_KEY"

# Example with URL encoding (if needed)
curl -X GET "https://management.scanova.io/qr/?qrid=Qa9d654f16ff64ea3,Q61afaf3aaa6e4701" \
  -H "Authorization: YOUR_API_KEY"
```

### Tag Filtering

```bash theme={null}
# Filter by tags
curl -X GET "https://management.scanova.io/qr/?tags=new%20batch%2Cdfgh" \
  -H "Authorization: YOUR_API_KEY"
```

### User Filtering

```bash theme={null}
# Filter by specific users
curl -X GET "https://management.scanova.io/qr/?users=412428%2C412427" \
  -H "Authorization: YOUR_API_KEY"
```

### Scan Count Filtering

```bash theme={null}
# QR codes with less than 100 scans
curl -X GET "https://management.scanova.io/qr/?scan_type=less_than&scan_count1=100" \
  -H "Authorization: YOUR_API_KEY"

# QR codes with more than 50 scans
curl -X GET "https://management.scanova.io/qr/?scan_type=greater_than&scan_count1=50" \
  -H "Authorization: YOUR_API_KEY"

# QR codes with exactly 10 scans
curl -X GET "https://management.scanova.io/qr/?scan_type=equal_to&scan_count1=10" \
  -H "Authorization: YOUR_API_KEY"

# QR codes with between 10 and 100 scans
curl -X GET "https://management.scanova.io/qr/?scan_type=between&scan_count1=100&scan_count2=10" \
  -H "Authorization: YOUR_API_KEY"
```

### Search

```bash theme={null}
# Search by QR code name
curl -X GET "https://management.scanova.io/qr/?search=my%20qr%20code&search_fields=name" \
  -H "Authorization: YOUR_API_KEY"

# Search by QR ID
curl -X GET "https://management.scanova.io/qr/?search=Q3493df1c0e074ac7&search_fields=qrid" \
  -H "Authorization: YOUR_API_KEY"

# Search by URL hash
curl -X GET "https://management.scanova.io/qr/?search=9drY&search_fields=dynamic_url_object__url_hash" \
  -H "Authorization: YOUR_API_KEY"

# Search across multiple fields
curl -X GET "https://management.scanova.io/qr/?search=website&search_fields=qrid,dynamic_url_object__url_hash,name" \
  -H "Authorization: YOUR_API_KEY"
```

### Complex Filtering

```bash theme={null}
# Active dynamic QR codes created in October 2025, sorted by visit count
curl -X GET "https://management.scanova.io/qr/?status=active&type=dy&created_from=2025-10-01&created_till=2025-10-31&ordering=-dynamic_url_object__visit_count" \
  -H "Authorization: YOUR_API_KEY"

# Image and real estate QR codes with more than 50 scans, sorted by name
curl -X GET "https://management.scanova.io/qr/?category=image%2CrealEstate&scan_type=greater_than&scan_count1=50&ordering=name" \
  -H "Authorization: YOUR_API_KEY"
```

### Response Example

```json theme={null}
{
  "count": 185,
  "next": 2,
  "previous": null,
  "results": [
    {
      "id": 2411719,
      "qrid": "Q3493df1c0e074ac7",
      "name": "QR Code",
      "qr_type": "dy",
      "qr_type_display": "Dynamic",
      "category": {
        "id": 1,
        "name": "Website URL",
        "slug": "url",
        "description": "When scanned, redirects user to a website.",
        "preview_image": "https://qcg-media.scanova.io/qr-category/2020/09/url.png",
        "allowed_qr_types": "bt",
        "allowed_qr_types_display": "Both",
        "tags": "internet,website,link,url,webpage",
        "is_active": true,
        "is_new": false,
        "has_landing_page": false,
        "helpdesk_link": "https://support.scanova.io/hc/en-us/articles/36997331177753-Create-Website-URL-QR-Code",
        "created": "2020-09-07T11:37:48.093485+05:30",
        "modified": "2025-10-16T14:50:48.791993+05:30"
      },
      "info": "{\"type\":\"url\",\"data\":{\"url\":\"https://scanova.io\"}}",
      "dynamic_url_object": {
        "url_hash": "9drY",
        "domain": null,
        "custom_domain": 1903,
        "high_accuracy_mode": true,
        "high_accuracy_mode_text": "The QR Code administrator is requesting one-time access to your device's location. You will be redirected to the content regardless of your choice.",
        "high_accuracy_confirmation": true,
        "lead_list": 1106,
        "expire_on_timezone": "Asia/Kolkata",
        "expire_on": "2025-10-31T02:03:00+05:30",
        "expire_on_text": "<div style=\"text-align:center\"><img alt=\"\" src=\"https://qcg-media.scanova.io/assets/landing/qr-placeholder-expired.png\" style=\"height:137px; width:150px\" /></div><p style=\"text-align:center\">This QR Code has been deactivated</p>",
        "minimum_age": 18,
        "visit_count": 0,
        "created": "2025-10-24T18:54:22.752924+05:30",
        "modified": "2025-10-24T18:56:37.833924+05:30",
        "is_custom_hash": false,
        "is_custom_domain": true,
        "is_password_protected": true,
        "complete_url": "https://anuj.sqcg.in/9drY",
        "is_expired": false,
        "is_page": false,
        "has_qr": true,
        "high_accuracy_geo_fencing": true,
        "high_accuracy_geo_fencing_config": {
          "unit": "ft",
          "range": 500,
          "fallback": "message",
          "displayText": "<p style=\"text-align:center\">This QR Code is location-restricted.</p><p style=\"text-align:center\">The content linked to this QR Code is only accessible when scanned from a specific location. Looks like you are either outside the specified area or haven't granted location access.</p><p style=\"text-align:center\">Enable GPS location access and try again.</p>",
          "mapLocation": {
            "placeId": "",
            "latitude": 40.7127753,
            "provider": "google",
            "longitude": -74.0059728,
            "placeName": "New York"
          },
          "redirectUrl": ""
        },
        "qr_url": "https://anuj.sqcg.in/9drY?qr=1"
      },
      "pattern_info": null,
      "svg_code": null,
      "thumbnail": "https://qcg-media.scanova.io/qr/thumbnail/2025/10/cde2550d-2bb1-4a6f-9f94-0e7136154e2b.jpg",
      "is_active": true,
      "version": 1.0,
      "created": "2025-10-24T18:54:22.697338+05:30",
      "modified": "2025-10-24T18:56:37.602122+05:30",
      "tags_list": [],
      "is_password_protected": true,
      "is_age_restricted": true,
      "is_designer": false,
      "pattern_type": null,
      "created_by": {
        "full_name": "Anuj Sharma"
      },
      "password": null,
      "ai_qr_code": null,
      "wallet_pass_info": null,
      "is_qr_scannable": null,
      "custom_form_response_count": 0,
      "rsvp_form_response_count": 0,
      "restaurant_feedback_response_count": 0
    }
  ]
}
```

## Performance & Pagination Best Practices

* **Use sensible page sizes** on the client (server defaults to a safe page size). For large exports, use dedicated export endpoints if available.
* **Cache category metadata** (it changes rarely) instead of refetching per-QR item.
* **Use server-side sorting** (`ordering`) for accurate, paginated results rather than fetching all pages and sorting client-side.
* **Avoid deep paging** with very large offsets; prefer cursor-based or export flows for millions of records.
* **Rate-limit handling**: implement retries with exponential backoff for `429 Too Many Requests`.

***

## UI/UX Tips for Rendering

* Show thumbnail if available; fall back to generated QR preview using `qr_url`.
* Respect `is_active` and `is_visible` flags when listing to end users.
* Use `dynamic_url_object.visit_count` and `qr_type_display` for quick insights.
* For lists with many columns, provide column toggles — hide expensive fields (full `info` JSON) by default.


## OpenAPI

````yaml GET /qr/
openapi: 3.1.0
info:
  title: Scanova Management API (v2)
  description: >-
    The complete Scanova Management API — every endpoint available at
    management.scanova.io (QR codes, folders, tags, leads, forms, analytics,
    plans, shared users & roles), plus the token-creation and usage-stats
    endpoints used to authenticate against it. Every path and request/response
    shape below was verified live against a real API key and the actual running
    backend (Phase 7, 2026-08-16) — not guessed from reading urls.py alone.
  version: 2.0.0
servers:
  - url: https://management.scanova.io
    description: Management API — QR/folder/tag/lead/form/analytics/plans endpoints
security:
  - apiKeyAuth: []
paths:
  /qr/:
    get:
      summary: List QR codes
      operationId: listManagedQrCodes
      responses:
        '200':
          description: List of QR codes
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Send your Management API key as the raw value of the Authorization
        header — no "Bearer " or "Token " prefix, and no other characters.
        Example: `Authorization: 401f7ac837da42b97f613d789819ff93537bee6a`. A
        header containing more than one space-separated part is rejected
        outright. Requests also require the request's Host header to be the
        management API host (e.g. management.scanova.io) — the same key sent to
        the regular API host will not authenticate.

````