Skip to main content

Reporting API

Pull End-of-Day (EOD) takings programmatically with a merchant API key. You do not need a Basecamp Cognito login.

For a Basecamp-first walkthrough (create a key, find your site ID, then call the API), see the Merchant guide.

Hosts

EnvironmentBase URL
Livehttps://api.yeti.host
Testhttps://test.yeti.host

Authentication

Use a Basecamp-created merchant API key with the ExternalApiReportingUser role:

curl -X GET 'https://api.yeti.host/v1/reporting/site/11111111-1111-1111-1111-111111111111/eod' \
-H 'Authorization: Bearer YOUR_API_KEY'

Create or update the key in Basecamp under API keys, and include ExternalApiReportingUser in the key's roles.

List EOD reports

GET /v1/reporting/site/{siteId}/eod

Returns paginated historical EOD aggregates for one site. The site must belong to the merchant on the API key. Reports are produced automatically by the nightly scheduler (runType: auto) and may also include manual Basecamp/device runs (runType: manual).

Path parameters

ParamRequiredDescription
siteIdYesSite to list EOD reports for

Query parameters

ParamRequiredDescription
datesNoComma-separated ISO date-times: from,to. Filters on the report's end (to) timestamp.
lastKeyNoOpaque cursor from a previous response for the next page. The cursor preserves any dates filter from the first page — you do not need to repeat dates when paginating. If you do send dates with lastKey, it must match the cursor.

Example

curl -X GET 'https://api.yeti.host/v1/reporting/site/11111111-1111-1111-1111-111111111111/eod?dates=2026-07-01T00:00:00.000Z,2026-07-08T00:00:00.000Z' \
-H 'Authorization: Bearer YOUR_API_KEY'

Response

{
"data": [
{
"siteId": "11111111-1111-1111-1111-111111111111",
"from": "2026-07-01T00:00:00.000Z",
"to": "2026-07-02T00:00:00.000Z",
"runType": "auto",
"totalTrx": { "value": 125000, "currency": "GBP" },
"totalRefunds": { "value": 2500, "currency": "GBP" },
"totalTips": { "value": 8000, "currency": "GBP" },
"totalMoto": { "value": 0, "currency": "GBP" },
"totalPBL": { "value": 0, "currency": "GBP" },
"totalPaymentMethod": {
"visa": {
"totalTrx": { "value": 125000, "currency": "GBP" },
"totalRefunds": { "value": 2500, "currency": "GBP" },
"totalTips": { "value": 8000, "currency": "GBP" },
"totalMoto": { "value": 0, "currency": "GBP" },
"totalPBL": { "value": 0, "currency": "GBP" },
"trxCount": 42,
"tipsCount": 18,
"refundsCount": 1,
"motoCount": 0,
"pblCount": 0
}
},
"trxCount": 42,
"tipsCount": 18,
"refundsCount": 1,
"motoCount": 0,
"pblCount": 0
}
],
"lastKey": "opaque-cursor"
}

Amounts are in minor units (pence for GBP). Omit lastKey when there are no further pages. Page size is 50. To fetch the next page, pass the returned lastKey as-is (repeating dates is optional).

Common errors

StatusError codeMeaning
401yp_1001Missing, invalid, or expired API key
403yp_1002Key is valid but lacks ExternalApiReportingUser
400yp_2002Invalid dates (must be from,to, valid, and not inverted)
404yp_3003siteId not found for this merchant