A simple REST API over HTTPS/JSON. Read your developments, inventory and leads, or push leads in from anywhere — this is how DoeAsk and any third-party tool plug into a Galovu account.
Every request (except the index) needs an API key sent as a Bearer token. Create one in your Galovu dashboard under Connect → API keys. One key maps to exactly one account, so a key only ever sees that account's data.
Authorization: Bearer glv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
| Method & path | Returns |
|---|---|
| GET/api/v1 | Self-describing index (no key required). |
| GET/me | The account this key belongs to + usage counts. |
| GET/projects | Your developments, each with a selling-status summary. |
| GET/projects/{id|slug} | One development: presentation + full inventory. |
| GET/projects/{id|slug}/units | Just the inventory/availability (for stock syncs). |
| GET/projects/{id|slug}/leads | Leads for one development. |
| GET/leads | Leads across the whole account (for polling). |
| POST/projects/{id|slug}/leads | Push a lead into Galovu from an outside app. |
Query params on /leads: after={id} (cursor — pass the last nextAfter you saw), since={iso}, kind=lead|viewing|share, project={id}, limit={n} (max 500, default 100). Leads come back newest-first with an id and a nextAfter cursor.
curl -s https://galovu.com/api/v1/projects \
-H "Authorization: Bearer $GALOVU_KEY"
# First call: newest 100 leads
curl -s "https://galovu.com/api/v1/leads?limit=100" \
-H "Authorization: Bearer $GALOVU_KEY"
# Later calls: only what's new since the last nextAfter cursor
curl -s "https://galovu.com/api/v1/leads?after=4821" \
-H "Authorization: Bearer $GALOVU_KEY"
{
"leads": [
{ "id": 4822, "ts": "2026-10-09T10:14:03-07:00", "kind": "viewing",
"name": "Lara Chen", "email": "lara@example.com", "phone": "012 345",
"unit": "07C", "source": "Galovu", "channel": "api",
"project": { "id": "p_284a…", "slug": "citadel-manor", "name": "Citadel Manor" } }
],
"count": 1,
"nextAfter": 4822
}
curl -s -X POST https://galovu.com/api/v1/projects/citadel-manor/leads \
-H "Authorization: Bearer $GALOVU_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Sok Dara","email":"dara@example.com","unit":"12B","message":"Price?","source":"doeask"}'
Two ways to get leads into DoeAsk — use either or both; both are labelled source: "Galovu":
1. Pull (polling). DoeAsk calls GET /api/v1/leads?after={cursor} on a schedule and advances its stored cursor by the nextAfter it gets back. Unit-aware fields (unit, type, price) ride along.
2. Push (webhook). In each development's settings, set the enquiry webhook to a DoeAsk URL; Galovu POSTs every new lead there in real time ({event:"lead", source:"Galovu", lead:{…, unit, unitType, unitPrice, kind, when}}).
600 requests / 10 minutes per account (429 if exceeded). Errors are JSON: { "error": "unauthorized", "message": "…" } with the matching HTTP status (401 no/bad key, 403 not your development, 404 unknown, 400 bad input). CORS is open, so browser clients work too (mind the key-exposure note above).
Need a key? Sign in at galovu.com/dashboard → Connect. The same key also works with Galovu's MCP endpoint for AI tools.