GraphQL API
Send GraphQL requests to:
POST /api/graphql
Request body follows standard GraphQL-over-HTTP JSON shape:
{
"query": "query Orders($from: String!, $to: String!) { orders(placedFrom: $from, placedTo: $to) { id } }",
"variables": {
"from": "2026-07-27T00:00:00Z",
"to": "2026-07-28T00:00:00Z"
}
}
Orders
orders(placedFrom:, placedTo:) returns orders belonging to restaurant connected to API key.
Range uses order placedAt and is half-open: placedFrom <= placedAt < placedTo. Both arguments must be RFC 3339 timestamps with at most millisecond precision. Maximum range is 31 days. Unplaced carts are excluded. Placement time is recorded when customer submits order, so carts created before range are still returned if submitted inside range.
For orders placed before placement timestamps were introduced, enyDyne uses order creation time as historical approximation.
At most 1,000 orders can be returned. Use smaller adjacent ranges if response reports more than 1,000 orders.
One request can select orders once. Queries are limited to 100 selected fields and nesting depth 10. Split larger queries into separate requests.
query ReceiptOrders($from: String!, $to: String!) {
restaurant {
slug
display
address
vatId
}
orders(placedFrom: $from, placedTo: $to) {
id
restaurantName
createdAt
placedAt
pickupTime
status
paidAt
paymentMethod
refundStatus
refundUpdatedAt
total
customer {
id
name
displayName
email
}
items {
name
description
notes
unitPrice
quantity
total
taxRateSplits {
taxRateBasisPoints
percentageBasisPoints
}
toppings {
title
description
price
taxRateBasisPoints
}
}
invoice {
lines {
name
description
quantity
notes
taxRateBasisPoints
net
tax
gross
}
taxBuckets {
taxRateBasisPoints
net
tax
gross
}
totalNet
totalTax
totalGross
}
}
}
Example request:
curl "$ENYDYNE_ORIGIN/api/graphql" \
--request POST \
--header "Authorization: Bearer $ENYDYNE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"query": "query ReceiptOrders($from: String!, $to: String!) { restaurant { display address vatId } orders(placedFrom: $from, placedTo: $to) { id createdAt placedAt pickupTime status total items { name unitPrice quantity total } invoice { totalNet totalTax totalGross } } }",
"variables": {
"from": "2026-07-27T00:00:00Z",
"to": "2026-07-28T00:00:00Z"
}
}'
Money and Tax
Money values are integer euro cents. 1299 means EUR 12.99.
Tax rates and percentages use basis points:
700tax basis points means 7%.1900tax basis points means 19%.10000percentage basis points means 100% of item value.
unitPrice already includes selected topping prices. Do not add topping prices again when calculating order total. Toppings remain available for receipt detail.
Use invoice fields for receipt totals and tax breakdown. enyDyne calculates these values with same cent allocation and rounding used by built-in invoice renderer. invoice.lines can contain multiple tax lines for one order item when item uses split tax rates.
Status Values
Order status is one of:
PLACED
PREPARING
READY
DONE
DROPPED
Refund status is one of:
NONE
REQUESTED
SUCCEEDED
FAILED
Errors
Missing, malformed, unknown, or revoked keys return HTTP 401:
{
"errors": [{ "message": "unauthorized" }]
}
Valid GraphQL requests return standard data and errors fields. Validation and resolver errors normally use HTTP 200, following GraphQL response conventions.
Responses use Cache-Control: no-store.