canonical: https://jentic.com/apis/qrflow.codes/qrflow

# QRFLOW.codes API

The QRFLOW.codes API does from code what the QRFLOW.codes dashboard does: it creates QR codes for URLs, text, WiFi, vcard contacts, email, phone, SMS, and locations, renders them as a plain PNG or a print-ready SVG with frame and colours, and returns scan analytics grouped by day, device, country, city, browser, OS, or referrer. Dynamic codes can be re-pointed, paused, or given an expiry after printing, and their printed link uses the account's own connected domain. It also creates dynamic URL codes in bulk and sends signed webhooks on scans and code changes.

## For AI agents

Create, restyle, re-point, pause, and render QRFLOW.codes QR codes, pull scan analytics by device, country, or referrer, bulk-create URL codes, and subscribe to scan webhooks.

## Scope

Does not print materials, shorten links outside QR codes, or run ad campaigns. Use for creating, rendering, re-pointing, and tracking QRFLOW.codes QR codes only.

## Capabilities

- Create a QR code of type url, text, wifi, vcard, email, phone, sms, or location from destination_data
- Re-point a dynamic code's destination after printing, pause it, or set expires_at with a single PATCH
- Render a code as a plain PNG or a print-ready SVG with frame_style, frame_caption, fg_color, and bg_color
- Read scan analytics between from and to dates, grouped by day, device, country, city, browser, os, or referrer
- Bulk-create dynamic URL codes from a list of rows with destination and label
- Subscribe to signed webhooks for scan, code.created, code.updated, and code.deleted events
- Convert a static code to a dynamic one and serve it on a connected link domain

## Use cases

### Agent-managed QR codes through Jentic

A marketing agent creates and maintains a shop's QR codes: it creates a dynamic url code, later re-points it when a page moves, and reports scans. Through Jentic the qrf_live_ key is injected by the developer's own Jentic One instance, and a rule can pin the agent to the one code id it manages.

Example prompt: POST /codes with type 'url', destination_data {'url': 'https://example.com/menu'}, and label 'Table menu', then GET `/codes/{id}/image.svg` for printing

### Re-pointing printed codes

When a campaign ends or a page moves, PATCH `/codes/{id}` changes only the fields sent, such as destination_data, paused, or expires_at, so printed dynamic codes keep working without reprinting.

Example prompt: PATCH `/codes/{id}` with destination_data {'url': 'https://example.com/winter-menu'}

### Scan analytics by audience

GET `/codes/{id}/scans` returns scan analytics for up to 92 days per request, grouped by day, device, country, city, browser, os, or referrer, so an agent can tell which locations or devices drive scans.

Example prompt: GET `/codes/{id}/scans` with from '2026-11-01', to '2026-11-30', and group 'country', then list the top five countries

### Bulk product QR codes

Catalogues and packaging runs need a code per item. POST `/codes/bulk` creates up to 2,000 dynamic URL codes in one request from rows of destination and optional label, with shared fg_color and bg_color.

Example prompt: POST `/codes/bulk` with rows of destination product URLs and SKU labels, and fg_color '#0F172A'

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/codes` | Create a code |
| PATCH | `/codes/{id}` | Change a code |
| GET | `/codes/{id}/image.svg` | Print-ready SVG |
| GET | `/codes/{id}/scans` | Scan analytics |
| POST | `/codes/bulk` | Bulk-create dynamic URL codes |
| POST | `/webhooks` | Create a webhook |
| GET | `/catalog` | Code kinds and required fields |

## Key resources

- **Codes** — Create, list, update, re-point, pause, make dynamic, and delete QR codes
- **Images** — Plain PNG and print-ready SVG renders of a code
- **Scans** — Scan analytics grouped by time, device, location, browser, OS, or referrer
- **Webhooks** — Signed event subscriptions with test pings
- **Domains** — Connected link domains and the default
- **Catalog and frames** — Code kinds with their required fields, and frame templates

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 63 / 100
- **Maturity:** AI-Aware
- **Dimensions:**
  - Foundational Compliance: 93 / 100
  - Developer Experience & Jentic Compatibility: 59 / 100
  - AI-Readiness & Agent Experience: 43 / 100
  - Agent Usability: 94 / 100
  - Security: 75 / 100
  - AI Discoverability: 59 / 100
- **View full report:** https://jentic.com/apis/qrflow.codes/qrflow/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring QRFLOW.codes by hand means choosing between a qrf_live_ bearer key and an OAuth authorization-code flow with scopes, looking up the fields each code kind needs, and handling PNG and SVG responses yourself. Through Jentic you install once, import QRFLOW.codes from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** QRFLOW.codes puts the code id in the URL path (`/codes/{id}`), so a rule can pin your agent to one QR code: it can read and re-point that code and nothing else. You choose the operations it may call, so destructive ones like code deletion or webhook removal are not included unless you add them.
- **Credential handling:** Your QRFLOW.codes key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a QR code' or 'get QR scans by country', and Jentic returns the matching QRFLOW.codes operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **QR Code Generator API** — QR code generation service
- **OpenQR.io** — QR code generation API
- **Bitly API** — Link shortening with click analytics

## FAQ

### What authentication does the QRFLOW.codes API use?

The QRFLOW.codes API declares an HTTP bearer scheme (bearerAuth) that accepts a Business API key prefixed qrf_live_ or an OAuth access token, and an oauth2 authorization-code scheme with scopes such as codes:read, codes:write, and analytics:read. The code-kind and frame lookups need no credential. Through Jentic the key or token is stored encrypted by your own Jentic One instance and injected at execution time.

### Can I change where a printed QRFLOW code points?

Yes, for dynamic codes. PATCH `/codes/{id}` accepts destination_data along with fields such as paused and expires_at, sending only what changes. A static code can be converted with POST `/codes/{id}/dynamic`, after which the image should be re-rendered.

### What are the rate limits for the QRFLOW.codes API?

The OpenAPI spec does not state a request rate limit. GET /me returns your plan with its feature flags and limits, and the spec caps a scans request at 92 days and a bulk create at 2,000 rows. Check https://qrflow.codes for current plan limits.

### How do I create a QR code with QRFLOW.codes through Jentic?

Install Jentic One, import the QRFLOW.codes API from the Jentic API Directory, and store your qrf_live_ key. Your agent searches for 'create a QR code', Jentic returns POST /codes with its schema, and the agent calls it with type and destination_data. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Is there a QRFLOW.codes MCP server?

Yes - QRFLOW.codes states in its API description that it offers an MCP server. You can also connect the QRFLOW.codes API directly through Jentic: your agent gets the full 18-endpoint surface without loading another server's tool definitions into its context, your credential is injected at call time by your self-hosted instance instead of living in an MCP config, and your rules decide which operations the agent may call.

### Can I limit what my agent is allowed to do with the QRFLOW.codes API?

Yes. For a reporting agent, write a rule that allows only GET `/codes/{id}` and GET `/codes/{id}/scans` for one code id, so it can read that code and its scans while re-pointing, deleting, or bulk-creating codes stays out of reach. Every call it makes is logged.
