---
title: "Create up to 200 dynamic codes at once"
method: POST
path: "/v1/dynamic/bulk"
---

# Create up to 200 dynamic codes at once

`POST /v1/dynamic/bulk`

Each code consumes one unit of the rolling code-creation rate limit (20/hour, per user). If the number of codes in the request exceeds the remaining budget the whole request is rejected with 429 (nothing is created); otherwise the 201 response carries `X-RateLimit-*` headers reflecting the consumed budget.

## Request body

- object
  - `codes` object[], required
    - `destination` string, uri, required
    - `label` string
  - `theme` string — A saved theme id or name applied to every code created.

## Response `201`

Created.

- object
  - `created` DynamicCode[]
    - `id` string
    - `slug` string
    - `short_url` string, uri
    - `destination` string, uri

## Other responses

- `400` — Invalid request — malformed JSON, a missing/invalid required field, or a disallowed dynamic-code destination (destinations must be public http(s) URLs; private/internal hosts and oqr.to self-loops are rejected).
- `401` — The `Authorization: Bearer oqr_…` header is missing or the API key is invalid or revoked.
- `429` — Dynamic-code creation rate limit hit — 20 codes per hour, per user. Bulk requests consume one unit per code and are rejected up-front (nothing created) when they exceed the remaining budget.
- `500` — An unexpected server-side error.

---

[API](https://skmtc.net/openqr/apis/openqr-api.md) · [All operations](https://skmtc.net/openqr/apis/openqr-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openqr/openqr-api/versions/f1b3796cd1f6/schema)
