Skip to content

Quickstart

From nothing to a list of bookings in a few minutes. You need a terminal and one of curl, Python 3 or Node 18 or later.

  1. Ask us for a sandbox.

    Write to Felix, felix@grondia.com, or to Siro, siro@grondia.com, and say in a sentence what you are building. Grondia staff set up the sandbox; there is no sign-up form.

    What you get today is small:

    • A read-only key with the scopes bookings:read, sites:read, invoices:read and customers:read. It cannot create, change or cancel anything, and it cannot register webhooks.
    • A sandbox campground called “Developer Sandbox” on the production API, which other developers may share. It has five pitches, “Pitch 1” to “Pitch 5”, of one site type, “Standard”, at 35.00 a night, and three confirmed bookings of three nights each, arriving 7, 8 and 9 days after the sandbox was set up. The guests are called “Sandbox Guest 1” to “Sandbox Guest 3”, but you will not see those names: the API redacts guest names and email unless a key may see personal data. Setting the sandbox up creates no customers, so GET customers/ most likely answers with an empty list. It writes no invoices itself, but it creates the three bookings as confirmed, which normally makes Grondia write an invoice for each, so GET invoices/ may list three or nothing. Do not build a test on either list.

    So the sandbox does not look like Camping Beispielsee, the example campground in the rest of these docs. If you need to try writes, webhooks or the till endpoints, tell Felix, felix@grondia.com, or Siro, siro@grondia.com, what you need.

  2. Store the key.

    We send the key once. Keep it out of your code and your repository, for example in an environment variable:

    Terminal window
    export GRONDIA_API_KEY=ck_a1b2cXXXXXXXXXXXXXXXXXXXXXXXX

    (That is the placeholder used on this site. Yours is 32 characters too, and starts with ck_.)

  3. Make your first call.

    List the campground’s bookings. The key goes in the Authorization header as a bearer token.

    Terminal window
    curl https://api.campone.ch/api/v1/public/bookings/ \
    -H "Authorization: Bearer $GRONDIA_API_KEY"
  4. Read the answer.

    The lists of bookings, sites, customers, invoices and till products all come in pages of the same shape: the total count, links to the next and previous page (null when there is none) and the results. A page holds 50 items; ask for up to 200 with ?page_size=200. Bookings come newest first. From the sandbox you get something like this, shortened here to the first of the three bookings (your IDs, references and dates differ):

    {
    "count": 3,
    "next": null,
    "previous": null,
    "results": [
    {
    "id": 48213,
    "booking_reference": "7F3A9C21DE",
    "guest_first_name": "",
    "guest_last_name": "",
    "guest_email": "[redacted]",
    "site_id": 9061,
    "site_number": "3",
    "site_category": "Standard",
    "check_in_date": "2026-10-28",
    "check_out_date": "2026-10-31",
    "num_adults": 2,
    "num_youth": 0,
    "num_children": 0,
    "status": "confirmed",
    "total_price": "105.00",
    "created_at": "2026-10-19T09:12:44.104837Z",
    "updated_at": "2026-10-19T09:12:44.104837Z",
    "external_reference": "",
    "channel": ""
    }
    ]
    }

    Empty names and [redacted] are the API protecting the guest, not a bug in your code (what each call returns). external_reference and channel are empty because nobody created these bookings through the API.