The GREM API gives programmatic access to what the cabinet offers: the tools (valuation, texts, video, photos, PDFs, sites), your listings, leads and events. Every request goes to one address:
https://developers.grem.capital/api/v1
The full machine-readable description is /openapi.json; an interactive one is at /docs.
Create a key
In the cabinet open API → Keys and click Create key. The key is shown once - store it in a secrets manager. A new key gets every scope; you can narrow them when creating it. Details: Authentication.
Check the key
curl https://developers.grem.capital/api/v1/ping \
-H "Authorization: Bearer gsk_live_xxx"
{"ok": true, ...} means the key works. GET /ping is free and needs no scope. GET /me shows what exactly the key may do.
Call a synchronous tool
The express valuation answers right away:
curl -X POST https://developers.grem.capital/api/v1/valuation/express \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6b1f0c2e-6c1e-4a8e-9f5d-3c2a1b0e9d87" \
-d '{"propertyCategory":"apartment","addressText":"Torstraße 12, Berlin","totalArea":64,"rooms":2,"currency":"EUR"}'
{
"estimate": { "pricePoint": <number>, "rangeLow": <number>, "rangeHigh": <number>, "confidence": "<level>", "currency": "EUR" },
"requestId": "req_..."
}
Idempotency-Key makes a retry safe: repeating the request with the same key returns the first result and does not charge again.
Start an async job
Long tools answer 202 with a job. If you want the result by webhook, subscribe first (step 5): a job started before the subscription does not send its event.
curl -X POST https://developers.grem.capital/api/v1/text/generate \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"city":"Berlin","totalArea":64,"rooms":2,"propertyCategory":"apartment","language":"en"}'
{ "jobId": "...", "status": "...", "state": "pending", "requestId": "req_..." }
Poll the status (free) until state is completed, partial or failed:
curl https://developers.grem.capital/api/v1/text/generate/jobs/JOB_ID \
-H "Authorization: Bearer gsk_live_xxx"
How jobs work and how to download the files: Jobs and results.
Get the result by webhook
Instead of polling, subscribe to the event - GREM sends a POST to your URL when the job finishes. Subscribe before starting the job: a job started before the subscription does not send its event.
curl -X POST https://developers.grem.capital/api/v1/webhooks \
-H "Authorization: Bearer gsk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/grem-hook","events":["text.completed","text.failed"]}'
The response contains the signing secret whsec_... - it is shown once. How to verify the signature: Webhooks.
Test without spending: a key prefixed gsk_test (choose the key type Test when you create it) runs in the sandbox: tools answer with sample results, nothing is created or charged.
Next
- Tools via API - every tool and what it does.
- Errors - how to read refusals and what to retry.
- Limits and billing - how many requests and what is charged.
- TypeScript SDK - a ready-made client with no dependencies.