API overview
urlu QR (/api/qr) and shorten (/api/shorten) endpoints need no API key, and responses include CORS headers. Call them from servers, browsers, or edge functions alike.
The QR API is stateless: each request returns PNG or SVG bytes—use `<img src>` or curl --output. Only the shorten API persists link records.
Recommended: shorten, then QR
1) POST /api/shorten with {"url":"…","slug":"optional"}. 2) Put shortUrl in GET /api/qr?data=…&size=512 to download PNG.
This keeps QR payloads small and aligns click stats with the short link. Parameter tables and curl samples live on /docs.
Batch generation
Loop a URL list in your script and call /api/qr for each row. There is no hard rate limit, but spacing bursts is courteous.
Use response=json to receive a data-URL JSON payload—handy for previews in bots or mobile apps.
Errors and limits
QR payload max is 2,953 bytes (413 if exceeded). Document-sized content rarely hits this for URL QR codes.
Errors look like {"error":{"code","message","details?"}}; 422 validation_failed includes field reasons in details.
If you proxy urlu from your own server, validate that user-supplied targets are http/https only.