{
  "item": [
    {
      "name": "Tickets",
      "description": {
        "content": "The order or visit being tracked",
        "type": "text/plain"
      },
      "item": [
        {
          "name": "List tickets",
          "request": {
            "name": "List tickets",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "queue",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "branch",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "<string>,<string>"
                },
                {
                  "disabled": false,
                  "key": "external_ref",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "since",
                  "value": "<dateTime>"
                },
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "50"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Create a ticket (call it when the order is paid)",
          "request": {
            "name": "Create a ticket (call it when the order is paid)",
            "description": {
              "content": "Returns the ticket with its public `url` to print as a QR and the `display_number` to show on the receipt.\nIf `number` is omitted the queue assigns the next one. Send `Idempotency-Key` (your POS order id) so retries never\ncreate a second ticket. A second call with the same key returns the original `201` body for 24 hours.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "tickets"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "disabled": false,
                "description": "Unique per logical request (use your POS order id). Replays return the stored response for 24 h.",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"queue\": \"<string>\",\n  \"number\": \"<string>\",\n  \"external_ref\": \"<string>\",\n  \"language\": \"<string>\",\n  \"table\": \"<string>\",\n  \"phone\": \"<string>\",\n  \"first_name\": \"<string>\",\n  \"appointment_at\": \"<dateTime>\",\n  \"room\": \"<string>\",\n  \"expected_prep_sec\": \"<integer>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Get a ticket with its events",
          "request": {
            "name": "Get a ticket with its events",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "expand",
                  "value": "<string>,<string>"
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Update table, note, language or fallback phone",
          "request": {
            "name": "Update table, note, language or fallback phone",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"table\": \"<string>\",\n  \"language\": \"<string>\",\n  \"phone\": \"<string>\",\n  \"note\": \"<string>\",\n  \"room\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Receipt printer bytes for the ticket's QR",
          "request": {
            "name": "Receipt printer bytes for the ticket's QR",
            "description": {
              "content": "ESC/POS (`epson`: Epson TM, Xprinter and most 58/80 mm clones) or Star Line Mode (`star`) commands that print the\nticket number, a one-line caption in the ticket's language and a model-2 QR code to the ticket page. Send the bytes\nto the printer as they are, or append them to your own receipt. Arabic captions are a bitmap, so any printer prints them.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "receipt"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "printer",
                  "value": "epson"
                },
                {
                  "disabled": false,
                  "key": "size",
                  "value": "6",
                  "description": "QR module size in dots"
                },
                {
                  "disabled": false,
                  "key": "cut",
                  "value": "false",
                  "description": "Finish with a partial cut"
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/octet-stream"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Mark ready and ring",
          "request": {
            "name": "Mark ready and ring",
            "description": {
              "content": "Rings the phone (or sends the fallback message) and schedules re-rings per the queue policy. Idempotent; a second call while already `ready` returns `200` and does not ring again.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "ready"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "disabled": false,
                "description": "Unique per logical request (use your POS order id). Replays return the stored response for 24 h.",
                "key": "Idempotency-Key",
                "value": "<string>"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Undo ready (within the undo window, default 5 s)",
          "request": {
            "name": "Undo ready (within the undo window, default 5 s)",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "undo"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Ring again now",
          "request": {
            "name": "Ring again now",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "ring"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Hold (pause re-rings for a few minutes)",
          "request": {
            "name": "Hold (pause re-rings for a few minutes)",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "hold"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"minutes\": 5\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Close as picked up",
          "request": {
            "name": "Close as picked up",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "picked-up"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Mark as not collected",
          "request": {
            "name": "Mark as not collected",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "no-show"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cancel (POS void or refund). Never rings.",
          "request": {
            "name": "Cancel (POS void or refund). Never rings.",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "cancel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"reason\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Send the fallback message now (SMS or WhatsApp)",
          "request": {
            "name": "Send the fallback message now (SMS or WhatsApp)",
            "description": {},
            "url": {
              "path": [
                "v1",
                "tickets",
                ":ticketId",
                "message"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "ticketId",
                  "description": "(Required) Ticket id (`tk_…`)"
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"channel\": \"<string>\",\n  \"phone\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "name": "Queues",
      "description": {
        "content": "Prefixes, numbering and re-ring policy",
        "type": "text/plain"
      },
      "item": [
        {
          "name": "List queues",
          "request": {
            "name": "List queues",
            "description": {},
            "url": {
              "path": [
                "v1",
                "queues"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "branch",
                  "value": "<string>",
                  "description": "Branch id or slug"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Create a queue",
          "request": {
            "name": "Create a queue",
            "description": {},
            "url": {
              "path": [
                "v1",
                "queues"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"branch\": \"<string>\",\n  \"name\": \"<string>\",\n  \"prefix\": \"<string>\",\n  \"mode\": \"<string>\",\n  \"reset_daily\": \"<boolean>\",\n  \"rering_after_sec\": \"<integer>\",\n  \"rering_max\": \"<integer>\",\n  \"hold_minutes\": \"<integer>\",\n  \"no_show_after_sec\": \"<integer>\",\n  \"sms_default\": \"<boolean>\",\n  \"show_names_on_tv\": \"<boolean>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Get a queue with live counts",
          "request": {
            "name": "Get a queue with live counts",
            "description": {},
            "url": {
              "path": [
                "v1",
                "queues",
                ":queueId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "queueId",
                  "description": "(Required) Queue id or slug"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Update policy or naming",
          "request": {
            "name": "Update policy or naming",
            "description": {},
            "url": {
              "path": [
                "v1",
                "queues",
                ":queueId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "queueId",
                  "description": "(Required) Queue id or slug"
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"branch\": \"<string>\",\n  \"name\": \"<string>\",\n  \"prefix\": \"<string>\",\n  \"mode\": \"<string>\",\n  \"reset_daily\": \"<boolean>\",\n  \"rering_after_sec\": \"<integer>\",\n  \"rering_max\": \"<integer>\",\n  \"hold_minutes\": \"<integer>\",\n  \"no_show_after_sec\": \"<integer>\",\n  \"sms_default\": \"<boolean>\",\n  \"show_names_on_tv\": \"<boolean>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Live stream of ticket changes (server-sent events)",
          "request": {
            "name": "Live stream of ticket changes (server-sent events)",
            "description": {
              "content": "`text/event-stream`. Each event is `event: ticket` with a `Ticket` JSON body, plus `event: heartbeat` every 25 s.\nReconnect with `Last-Event-ID` to resume. Used by the staff page, the tablet and the TV.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "queues",
                ":queueId",
                "events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "queueId",
                  "description": "(Required) Queue id or slug"
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "text/event-stream"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "name": "Branches",
      "description": {
        "content": "Locations of a shop with their own queues, staff and devices",
        "type": "text/plain"
      },
      "item": [
        {
          "name": "List branches visible to this key",
          "request": {
            "name": "List branches visible to this key",
            "description": {},
            "url": {
              "path": [
                "v1",
                "branches"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "name": "Webhooks",
      "description": {
        "content": "Endpoints, deliveries, replay and test events",
        "type": "text/plain"
      },
      "item": [
        {
          "name": "List endpoints",
          "request": {
            "name": "List endpoints",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Add an endpoint",
          "request": {
            "name": "Add an endpoint",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"<uri>\",\n  \"events\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"active\": \"<boolean>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Update events, url or active flag",
          "request": {
            "name": "Update events, url or active flag",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks",
                ":endpointId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "endpointId",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PATCH",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"<uri>\",\n  \"events\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"active\": \"<boolean>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Remove an endpoint",
          "request": {
            "name": "Remove an endpoint",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks",
                ":endpointId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "endpointId",
                  "description": "(Required) "
                }
              ]
            },
            "method": "DELETE",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Send a synthetic event to this endpoint",
          "request": {
            "name": "Send a synthetic event to this endpoint",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks",
                ":endpointId",
                "test"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "endpointId",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Recent deliveries across endpoints",
          "request": {
            "name": "Recent deliveries across endpoints",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks",
                "deliveries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "endpoint",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "status",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "cursor",
                  "value": "<string>"
                },
                {
                  "disabled": false,
                  "key": "limit",
                  "value": "50"
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Replay a delivery (same event id, new attempt, `replayed_at` set)",
          "request": {
            "name": "Replay a delivery (same event id, new attempt, `replayed_at` set)",
            "description": {},
            "url": {
              "path": [
                "v1",
                "webhooks",
                "deliveries",
                ":deliveryId",
                "replay"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "deliveryId",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "name": "Account",
      "description": {
        "content": "The shop behind the API key and its plan",
        "type": "text/plain"
      },
      "item": [
        {
          "name": "Who am I",
          "request": {
            "name": "Who am I",
            "description": {},
            "url": {
              "path": [
                "v1",
                "me"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    },
    {
      "name": "Customer page",
      "description": {
        "content": "Called by the customer's browser with the ticket token",
        "type": "text/plain"
      },
      "item": [
        {
          "name": "Ticket page data",
          "request": {
            "name": "Ticket page data",
            "description": {
              "content": "Branded, minimal payload for the customer page. Marks `created → waiting` on first open. Language picked from `Accept-Language` unless the ticket already has one; `lang` persists the switcher choice so messages follow it. Companion tokens (from `/share`) get the same payload with `role: companion`.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "p",
                "t",
                ":token"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "key": "lang",
                  "value": "<string>",
                  "description": "Persist the customer language choice on the ticket"
                }
              ],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Save the Web Push subscription and send the test buzz",
          "request": {
            "name": "Save the Web Push subscription and send the test buzz",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "alerts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"endpoint\": \"<uri>\",\n  \"keys\": {\n    \"p256dh\": \"<string>\",\n    \"auth\": \"<string>\"\n  },\n  \"platform\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Customer declined or removed alerts",
          "request": {
            "name": "Customer declined or removed alerts",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "alerts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "method": "DELETE",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Confirm or deny the test buzz",
          "request": {
            "name": "Confirm or deny the test buzz",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "test-buzz"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"felt\": \"<boolean>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Choose SMS or WhatsApp with a phone number",
          "request": {
            "name": "Choose SMS or WhatsApp with a phone number",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "fallback"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"channel\": \"<string>\",\n  \"phone\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Set the table number",
          "request": {
            "name": "Set the table number",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "table"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "PUT",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"table\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Customer tapped \"Got it\" (stops re-rings)",
          "request": {
            "name": "Customer tapped \"Got it\" (stops re-rings)",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "ack"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Customer asked for a few more minutes",
          "request": {
            "name": "Customer asked for a few more minutes",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "hold"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cancel the hold",
          "request": {
            "name": "Cancel the hold",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "hold"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Create a companion link (a second phone that also rings)",
          "request": {
            "name": "Create a companion link (a second phone that also rings)",
            "description": {
              "content": "Creates a companion token for a second phone. Companions receive the same rings and can turn on alerts, but cannot acknowledge, hold, rate or share again.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "share"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Rate after pickup",
          "request": {
            "name": "Rate after pickup",
            "description": {},
            "url": {
              "path": [
                "p",
                "t",
                ":token",
                "rating"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "token",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{\n  \"stars\": \"<integer>\",\n  \"comment\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Claim a number from the counter card or the TV QR (abuse-resistant path)",
          "request": {
            "name": "Claim a number from the counter card or the TV QR (abuse-resistant path)",
            "description": {
              "content": "The counter card QR carries a `card` token per queue, not a ticket. The TV QR carries a `tv` token instead:\nbound to one queue and one minute, signed by the server, and refused two minutes after it was shown, so a\nphoto of the screen stops working. Send exactly one of `card` or `tv`.\nThe customer types the receipt number; if it exists, is unclaimed and was created in the last\n`unclaimed_ttl_sec`, the ticket token is returned. Without a receipt number the request creates a\n`pending_confirmation` row that staff confirm from their page.\nRate limit: 5 attempts per IP per 10 minutes; numbers can be claimed once.\n",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "p",
                "claim"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "auth": null,
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Poll a pending counter-card claim",
          "request": {
            "name": "Poll a pending counter-card claim",
            "description": {
              "content": "The customer page polls this until staff confirm or reject the claim; confirmed claims return the ticket URL.",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "p",
                "claim",
                ":pendingId"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "disabled": false,
                  "type": "any",
                  "value": "<string>",
                  "key": "pendingId",
                  "description": "(Required) "
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "auth": null
          },
          "response": [],
          "event": [],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ],
      "event": []
    }
  ],
  "event": [],
  "variable": [
    {
      "type": "string",
      "value": "https://api.useringup.com",
      "key": "baseUrl"
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{bearerToken}}"
      }
    ]
  },
  "info": {
    "name": "RingUp API",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": {
      "content": "REST over HTTPS, JSON in and out. Two families of endpoints share this document:\n\n* **Partner API** (`/v1/...`): for POS systems and integrations. Bearer API keys. Idempotent writes.\n* **Public customer page API** (`/p/...`): what the customer's browser calls. No API key; access is the ticket's\n  128-bit `token` in the path. Rate-limited per IP and per token.\n\nWebhooks are listed under `webhooks`. Every delivery is signed with `RingUp-Signature`.\n\n\nContact Support:\n Name: RingUp developers",
      "type": "text/plain"
    }
  }
}
