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://lmayqrxmxkxmaztaxvxu.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://lmayqrxmxkxmaztaxvxu.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://lmayqrxmxkxmaztaxvxu.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.