Zinevu
Getting started

Quickstart

From no key to a verified call, and then to a sync that keeps itself up to date.

  1. 1
    Mint a key

    In the portal, open Settings → Developers and create a key. Give it only the scopes the integration needs — a key that can read leads and nothing else is a key that can never write a price by accident.

    The secret is shown once. We store a SHA-256 hash of it, so it cannot be produced again; put it straight into your secret store.

  2. 2
    Check what it can do

    GET /me needs no scope. It answers with the account, the key's scopes, and the rate budget actually in force — size your importer against those numbers rather than against the ones on this site.

    curl https://api.zinevu.com/api/public/v1/me \  -H "Authorization: Bearer $ZINEVU_API_KEY"
    Response
    {  "data": {    "account": { "id": 42, "name": "Valk Veranda", "currency": "EUR", "country": "NL", "language": "nl" },    "key": {      "name": "ERP import",      "prefix": "zv_live_8f14",      "scopes": ["leads:read", "prices:read", "prices:write"],      "expires_at": null,      "last_used_at": "2026-09-23T08:11:02+00:00"    },    "limits": {      "tier": "paid",      "per_minute": 60, "per_day": 10000,      "write_per_minute": 10, "write_per_day": 500,      "max_page_size": 100    }  },  "meta": { "message": "OK" }}
  3. 3
    Read something real

    Lists are cursor-paginated and carry no total. Follow meta.next_cursor until it comes back null.

    curl "https://api.zinevu.com/api/public/v1/leads?limit=25&status=requested" \  -H "Authorization: Bearer $ZINEVU_API_KEY"
  4. 4
    Turn it into a sync

    Store the timestamp of the newest record you have seen and pass it back as updated_since. That is the whole incremental sync — no diffing, no full re-read, and an unparseable value is refused rather than ignored.

    # Everything that changed since the last run, page by page.curl "https://api.zinevu.com/api/public/v1/leads?updated_since=2026-09-01T00:00:00Z&limit=100" \  -H "Authorization: Bearer $ZINEVU_API_KEY"
  5. 5
    Stop polling

    Once the read side works, subscribe to the events you care about and let us call you. Webhooks are signed, so verify every delivery before you trust it.

Skip the typing#

Every endpoint on this site is in the Postman collection, generated from the router so it cannot describe something we do not have. Import it, set base_url and api_key, and start with a dry run.

Download the Postman collection

Before you write anything

A price write replaces the grid it addresses, and every write takes ?dry_run=1. Use a code of your own for the first experiment — example_roof, not the code your catalogue already quotes from.

Read on#

  • Authentication — scopes, rotation, and the difference between rotating and revoking.
  • Conventions — the envelope, ids versus codes, timestamps and money.
  • Importing prices — the one guide to read before writing anything.