Skip to main content

Pull End-of-Day takings with the Reporting API

Use a Basecamp developer API key to list historical End-of-Day (EOD) takings for a site. You do not need a Cognito / Basecamp user login for API calls.

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

Prerequisites

  • Access to Basecamp for your merchant
  • Permission to manage API keys (Developer → API keys)
  • The site ID of the site you want to query (see Find your site ID)

If you don’t see Developer → API keys, ask a Company Owner to enable Developer user on your Basecamp user (Users → edit user).

Create a developer API key in Basecamp

  1. Log in to Basecamp and select the correct merchant/company.
  2. In the left menu, open Developer → API keys.
  3. Click Create key.
  4. Enter a Description (for example EOD reporting – production).
  5. Under Select roles, choose ExternalApiReportingUser.
    • Prefer this role alone for read-only EOD access (least privilege).
    • Add other External API roles only if the same key also needs ecommerce or refund access — usually better as a separate key.
  6. Click Create.
  7. Copy the key immediately. Basecamp shows it once: “You will only see this key once.”
  8. Click Done.

Store the key in a secrets manager or server environment variable. Never put it in a browser, mobile app, or public repository.

To revise roles later: open the key → Edit API key → update Select roles.

Find your site ID

EOD listing is per site. In Basecamp:

  1. Go to Sites.
  2. Open the site you care about (Edit / site detail).
  3. Copy the site ID from the URL: /sites/{siteId}.

Example: https://basecamp.yetipay.me/sites/11111111-1111-1111-1111-111111111111 → site ID is 11111111-1111-1111-1111-111111111111.

The site must belong to the same merchant as the API key.

Authenticate

Send the key as a Bearer token on every request:

Authorization: Bearer YOUR_API_KEY

List EOD reports

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

Returns paginated historical EOD aggregates for that site. Nightly automatic runs have runType: "auto"; manual Basecamp or device runs have runType: "manual".

Query parameters

ParamRequiredDescription
datesNofrom,to as ISO date-times. Filters on the report’s end (to) timestamp.
lastKeyNoOpaque cursor from a previous response for the next page.

Page size is 50. When you paginate, the cursor keeps any dates filter — you don’t need to resend dates. If you do send both, dates must match the cursor.

First page (with date range)

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

Next page

curl -X GET \
'https://api.yeti.host/v1/reporting/site/YOUR_SITE_ID/eod?lastKey=OPAQUE_CURSOR_FROM_PREVIOUS_RESPONSE' \
-H 'Authorization: Bearer YOUR_API_KEY'

Example 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: 125000 = £1,250.00).

If lastKey is missing, there are no further pages.

Common errors

StatusCodeMeaning
401yp_1001Missing, invalid, or expired API key
403yp_1002Key is valid but lacks ExternalApiReportingUser
400yp_2002Invalid dates / lastKey (must be valid from,to, not inverted; dates must match cursor if both sent)
404yp_3003siteId not found for this merchant

Security checklist

  • Keep the key on the server only
  • Prefer a dedicated key with only ExternalApiReportingUser
  • Rotate keys: create a new one → switch your integration → disable the old one in Basecamp
  • Don’t commit keys to source control