Skip to main content

Quickstart

1. Create an API key​

In the planner, open Einstellungen → API-Schlüssel and create a key. Give it the scopes your integration needs, e.g. read:projects and write:customers. Copy the key right away: it is shown only once. Keys start with mds_live_.

2. Read your projects​

curl https://sdgctoqabgledxcjnpsl.supabase.co/functions/v1/api/v1/projects \
-H "Authorization: Bearer mds_live_your_key"
{
"data": [
{
"id": "41",
"name": "PV Müller Satteldach",
"customerId": "77",
"customerFullName": "Anna Müller",
"state": "DETAIL_PHASE",
"offersCount": 2,
"activeOffersCount": 1,
"createdAt": "2026-07-01T10:25:00+00:00"
}
],
"total": 1,
"limit": 50,
"offset": 0
}

A list returns 50 records unless you ask for more (limit, up to 200). total tells you how many there are in all; page with offset.

3. Filter, sort and page​

The ten most expensive accepted offers:

curl "https://sdgctoqabgledxcjnpsl.supabase.co/functions/v1/api/v1/offers?state=ACCEPTED&sort=offerPrice.desc&limit=10" \
-H "Authorization: Bearer mds_live_your_key"

Which filters and sort fields a list takes is listed with each endpoint in the API reference.

4. Create a customer​

curl -X POST https://sdgctoqabgledxcjnpsl.supabase.co/functions/v1/api/v1/customers \
-H "Authorization: Bearer mds_live_your_key" \
-H "Content-Type: application/json" \
-d '{ "firstName": "Anna", "lastName": "Müller", "email": "anna.mueller@example.com" }'

The answer is the new customer, with the id you need to create a project for them (POST /v1/projects), and then an offer (POST /v1/offers). Both also take the team member responsible for them: GET /v1/company/members lists your team with their ids, and GET /v1/company/sites your sites.

5. When something goes wrong​

Errors come with an HTTP status and a code to branch on:

{ "error": "validation_error", "message": "firstName: Required" }

The overview lists what each status means. Next: Authentication & scopes.