Skip to content
BusinessPrintable displays

Business

Printable displays

Generate printable join QR displays.

Pilotv1

Printable displays (Table tent, Counter stand, Door sticker, Wall poster) with a branch's join QR, drawn on the server as PNG or PDF. A file lives 24 hours.

Paths are relative to https://app.revisit.cards/v1/developer.

List the printable display designs

GET/displays/designs

Scopedisplays:read

Requires displays:read. The four designs the app's Displays screen draws: Table tent, Counter stand, Door sticker and Wall poster, each with its sheet size in millimetres, the placement tag its QR carries (?p=table, counter, door, poster), whether it has room for the reward line, and the preset words it starts with.

Returns 200

itemsobject[]Required
items[].designenumRequired
One of table-tent, counter-stand, door-sticker, wall-poster.
items[].labelstringRequired
items[].blurbstringRequired
items[].placementstringRequired
items[].rewardbooleanRequired
items[].headlinestringRequired
items[].sublinestringRequired
items[].widthMmnumberRequired
items[].heightMmnumberRequired
Request
curl "https://app.revisit.cards/v1/developer/displays/designs" \
  -H "Authorization: Bearer $DEVELOPER_API_KEY"
Response
{
  "data": {
    "items": [
      {
        "blurb": "Collect 10, get 1 free",
        "design": "table-tent",
        "headline": "Collect 10, get 1 free",
        "heightMm": 297,
        "label": "Morning menu",
        "placement": "table",
        "reward": false,
        "subline": "Scan to join",
        "widthMm": 210
      }
    ]
  },
  "requestId": "fee17fd0-7682-40f2-93a9-dc141b98cc3a",
  "success": true
}

List the displays this application generated

GET/displays

Scopedisplays:read

Requires displays:read. The newest 20 of this application and environment, limited to the branches and cards the key may use. Another application's, business's or environment's display is never listed.

Returns 200

itemsobject[]Required
items[].displayIduuidRequired
items[].designenumRequired
One of table-tent, counter-stand, door-sticker, wall-poster.
items[].formatenumRequired
One of png, pdf.
items[].contentTypeenumRequired
One of image/png, application/pdf.
items[].statusenumRequired
One of ready, expired.
items[].downloadPathstring or nullRequired
Set only while the file can be downloaded.
items[].branchIduuidRequired
items[].programIduuidRequired
items[].placementstringRequired
The QR's ?p= tag.
items[].dpiintegerRequired
items[].widthMmnumberRequired
items[].heightMmnumberRequired
items[].widthPxintegerRequired
items[].heightPxintegerRequired
items[].sizeBytesintegerRequired
Zero once the file is gone.
items[].createdAtdate-timeRequired
items[].expiresAtdate-timeRequired
Request
curl "https://app.revisit.cards/v1/developer/displays" \
  -H "Authorization: Bearer $DEVELOPER_API_KEY"
Response
{
  "data": {
    "items": [
      {
        "branchId": "5eff65d7-d01c-4bd3-b26a-3d06b21fd005",
        "contentType": "image/png",
        "createdAt": "2026-11-03T08:41:12.000Z",
        "design": "table-tent",
        "displayId": "8f2189ec-e58a-427f-9844-4cd8d3a7c957",
        "downloadPath": "/v1/developer/displays/download",
        "dpi": 300,
        "expiresAt": "2026-11-03T08:41:12.000Z",
        "format": "png",
        "heightMm": 297,
        "heightPx": 3508,
        "placement": "table",
        "programId": "d7595bbd-4342-41b4-9037-2e61a9f8403f",
        "sizeBytes": 48213,
        "status": "ready",
        "widthMm": 210,
        "widthPx": 2480
      }
    ]
  },
  "requestId": "94fb98b9-66e7-4e41-9ac0-7b961c952c3c",
  "success": true
}

Generate a printable display as a PNG or PDF

POST/displays

Scopedisplays:write

Requires displays:write (in Full access, not in Read-only). Draws one of the app's display designs for a branch and card on the server and keeps the file for 24 hours. The art, preset words, reward line and join-link rules are the app's own: the QR holds the branch's public join link (with ?card= once the branch honours several cards) and the design's placement tag, so a sign-up is traced to where it was scanned. Without branchId and programId it is the default branch and the main card. The logo is only ever the business's own stored logo (nothing is fetched from a link), and the file holds no customer data. A PNG is 300 dpi by default (A4 is 2480 x 3508 pixels); dpi may be 72 to 300. A PDF is one page of exactly the sheet's size.

It is bounded work: the request counts as 8 units against the shared budget, at most two sheets are drawn at once per process and a drawing is abandoned after 15 seconds, answering 429 DISPLAY_BUSY (nothing was stored and the Idempotency-Key is free: retry with the same key). 429 DISPLAY_BACKLOG when the business already holds 20 ready displays. 422 DISPLAY_NO_LINK when the card has no active branch with a join link. A retried Idempotency-Key answers the first display (201 again with Idempotent-Replay: true) and never makes a second; the same key with other content is 409 OPERATION_KEY_CONFLICT. A test key draws the test workspace's own shop and join link.

Send an Idempotency-Key header. Safe to retry.

Body

designenumRequired
One of table-tent, counter-stand, door-sticker, wall-poster.
formatenumRequired
One of png, pdf.
branchIduuid
Another branch than the default; a key limited to branches must name one it may use.
programIduuid
Another card than the main one.
dpiinteger
72 to 300. Default 300.
headlinestring
Wrap words in *stars* to highlight them. Default is the design's preset words. 1 to 80 characters.
sublinestring
logoboolean
Draw the business's own stored logo; ignored when it has none. Never a link. Default true.
nameboolean
Default true.
rewardboolean
Ignored where the design (Door sticker) or the card has no reward line. Default true.

Returns 201

displayIduuidRequired
designenumRequired
One of table-tent, counter-stand, door-sticker, wall-poster.
formatenumRequired
One of png, pdf.
contentTypeenumRequired
One of image/png, application/pdf.
statusenumRequired
One of ready, expired.
downloadPathstring or nullRequired
Set only while the file can be downloaded.
branchIduuidRequired
programIduuidRequired
placementstringRequired
The QR's ?p= tag.
dpiintegerRequired
widthMmnumberRequired
heightMmnumberRequired
widthPxintegerRequired
heightPxintegerRequired
sizeBytesintegerRequired
Zero once the file is gone.
createdAtdate-timeRequired
expiresAtdate-timeRequired

Errors

  • 429DISPLAY_BUSYthe generator is busy (too many displays being made, or this one took too long). Nothing was stored and the Idempotency-Key is free: retry after the delay.
  • 429DISPLAY_BACKLOGthe business already holds the most ready displays it may; wait for one to expire.
  • 422DISPLAY_NO_LINKthe card or branch has nothing to print (no active branch with a join link).
  • 409OPERATION_KEY_CONFLICTthe same operation key arrived with different content. The key is still bound to the first request.
Request
curl -X POST "https://app.revisit.cards/v1/developer/displays" \
  -H "Authorization: Bearer $DEVELOPER_API_KEY" \
  -H "Idempotency-Key: 5f0c2a8e-7b1d-4c3e-9a6f-0d4b8e2738e4" \
  -H "Content-Type: application/json" \
  -d '{
    "design": "table-tent",
    "format": "png"
  }'
Response
{
  "data": {
    "branchId": "5eff65d7-d01c-4bd3-b26a-3d06b21fd005",
    "contentType": "image/png",
    "createdAt": "2026-11-03T08:41:12.000Z",
    "design": "table-tent",
    "displayId": "8f2189ec-e58a-427f-9844-4cd8d3a7c957",
    "downloadPath": "/v1/developer/displays/download",
    "dpi": 300,
    "expiresAt": "2026-11-03T08:41:12.000Z",
    "format": "png",
    "heightMm": 297,
    "heightPx": 3508,
    "placement": "table",
    "programId": "d7595bbd-4342-41b4-9037-2e61a9f8403f",
    "sizeBytes": 48213,
    "status": "ready",
    "widthMm": 210,
    "widthPx": 2480
  },
  "requestId": "3cf8a8d6-e0e7-425d-80fb-31909baf00d7",
  "success": true
}

Read one display's status

GET/displays/{displayId}

Scopedisplays:read

Requires displays:read. status is ready (with a downloadPath) or expired once its day has passed (no path, sizeBytes 0). Another application's, business's or environment's id is 404.

Path

displayIduuidRequired

Returns 200

displayIduuidRequired
designenumRequired
One of table-tent, counter-stand, door-sticker, wall-poster.
formatenumRequired
One of png, pdf.
contentTypeenumRequired
One of image/png, application/pdf.
statusenumRequired
One of ready, expired.
downloadPathstring or nullRequired
Set only while the file can be downloaded.
branchIduuidRequired
programIduuidRequired
placementstringRequired
The QR's ?p= tag.
dpiintegerRequired
widthMmnumberRequired
heightMmnumberRequired
widthPxintegerRequired
heightPxintegerRequired
sizeBytesintegerRequired
Zero once the file is gone.
createdAtdate-timeRequired
expiresAtdate-timeRequired
Request
curl "https://app.revisit.cards/v1/developer/displays/8f2189ec-e58a-427f-9844-4cd8d3a7c957" \
  -H "Authorization: Bearer $DEVELOPER_API_KEY"
Response
{
  "data": {
    "branchId": "5eff65d7-d01c-4bd3-b26a-3d06b21fd005",
    "contentType": "image/png",
    "createdAt": "2026-11-03T08:41:12.000Z",
    "design": "table-tent",
    "displayId": "8f2189ec-e58a-427f-9844-4cd8d3a7c957",
    "downloadPath": "/v1/developer/displays/download",
    "dpi": 300,
    "expiresAt": "2026-11-03T08:41:12.000Z",
    "format": "png",
    "heightMm": 297,
    "heightPx": 3508,
    "placement": "table",
    "programId": "d7595bbd-4342-41b4-9037-2e61a9f8403f",
    "sizeBytes": 48213,
    "status": "ready",
    "widthMm": 210,
    "widthPx": 2480
  },
  "requestId": "0cd2125f-3081-4e77-8b37-75e31d4128e6",
  "success": true
}

Download the PNG or PDF

GET/displays/{displayId}/download

Scopedisplays:read

Requires displays:read. Sends the file (image/png or application/pdf, Content-Disposition: attachment, Cache-Control: private, no-store, X-Content-Type-Options: nosniff, and X-Display-Sha256 of the body). 410 DISPLAY_EXPIRED once the day has passed. Each download is audited.

Path

displayIduuidRequired

Answers with a file: image/png or application/pdf.

Errors

  • 410DISPLAY_EXPIREDthe display file is gone (its day passed). Generate a new one.
Request
curl "https://app.revisit.cards/v1/developer/displays/8f2189ec-e58a-427f-9844-4cd8d3a7c957/download" \
  -H "Authorization: Bearer $DEVELOPER_API_KEY" \
  -o download
Response
HTTP/1.1 200
Content-Type: image/png or application/pdf

(file)