API Endpoints

Complete reference for all Crumb REST API endpoints. All endpoints use the base URL https://api.crumbpos.com/v1.

Orders

Manage orders across all channels—POS, online, and delivery platforms.

List Orders

GET /orders

Retrieve a list of orders with optional filters.

curl https://api.crumbpos.com/v1/orders?status=open&location_id=loc_abc123 \
  -H "Authorization: Bearer sk_test_..."

Query Parameters

Parameter Type Description
location_id string Filter by location
status string Filter by status: open, fulfilled, cancelled
created_after datetime Orders created after this time
created_before datetime Orders created before this time
page integer Page number (default: 1)
per_page integer Results per page (default: 20, max: 100)

Get Order

GET /orders/:id

Retrieve a single order by ID.

Create Order

POST /orders

curl https://api.crumbpos.com/v1/orders \
  -X POST \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "location_id": "loc_abc123",
    "items": [
      {
        "menu_item_id": "mi_xyz789",
        "quantity": 2,
        "modifiers": ["mod_no_onions"]
      }
    ],
    "customer": {
      "name": "John Doe",
      "phone": "+1234567890"
    }
  }'

Update Order

PATCH /orders/:id

Update an existing order. Only open orders can be modified.


Payments

Process payments, issue refunds, and retrieve transaction history.

Create Payment Intent

POST /payments/intents

Create a payment intent to collect payment for an order.

curl https://api.crumbpos.com/v1/payments/intents \
  -X POST \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "order_id": "ord_abc123",
    "amount": 2500,
    "currency": "usd"
  }'

Capture Payment

POST /payments/intents/:id/capture

Capture a previously authorized payment.

Refund Payment

POST /payments/:id/refunds

curl https://api.crumbpos.com/v1/payments/pay_xyz789/refunds \
  -X POST \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 1000,
    "reason": "customer_request"
  }'

Locations

Manage restaurant locations and their settings.

List Locations

GET /locations

Get Location

GET /locations/:id

Update Location

PATCH /locations/:id


Manage menu items, categories, and modifiers.

List Menu Items

GET /menu/items

curl https://api.crumbpos.com/v1/menu/items?location_id=loc_abc123 \
  -H "Authorization: Bearer sk_test_..."

Create Menu Item

POST /menu/items

curl https://api.crumbpos.com/v1/menu/items \
  -X POST \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Burger Deluxe",
    "price": 1500,
    "category_id": "cat_burgers",
    "description": "Our signature burger with all the fixings",
    "available": true
  }'

Update Menu Item

PATCH /menu/items/:id

Delete Menu Item

DELETE /menu/items/:id

List Categories

GET /menu/categories


Pagination

All list endpoints support pagination using page and per_page parameters.

{
  "data": [...],
  "meta": {
    "total": 150,
    "page": 2,
    "per_page": 20,
    "total_pages": 8
  },
  "links": {
    "first": "https://api.crumbpos.com/v1/orders?page=1",
    "prev": "https://api.crumbpos.com/v1/orders?page=1",
    "next": "https://api.crumbpos.com/v1/orders?page=3",
    "last": "https://api.crumbpos.com/v1/orders?page=8"
  }
}

Error Codes

Code Description
invalid_request The request was malformed or missing required parameters
authentication_failed Invalid or missing API key
not_found The requested resource doesn't exist
rate_limit_exceeded Too many requests
internal_error Something went wrong on our end