Developers

Build on your workspace

One key per workspace, one REST API. Read customers, contacts, deals, invoices, products, tickets and events; push customers, leads and tickets in. JSON in, JSON out, scoped to your organisation.

Quickstart
  1. Sign in → Account → API keys → Create key (owner or admin).
  2. Call the API with the key as a bearer token:
curl https://zynkrow.com/api/v1/customers?limit=5 \
  -H "Authorization: Bearer sk_live_…"
Base URL
https://zynkrow.com/api/v1
Auth
Bearer sk_live_…
Scopes
read · write
Rate limit
120 / min / key
Format
JSON, UTF-8, IST-agnostic ISO times
Endpoints

What v1 covers

Small on purpose, and only ever grows. Full details in the reference below.

Guides

By the job, not by the endpoint

Send your website's enquiry form into the CRM

Any website — WordPress, Shopify, a custom site
  1. Make a key with the write scope
    Account → API keys → Create key, tick Allow writes. Copy it once.
  2. Post the form to /contacts
    // on your server (never put the key in browser code)
    await fetch("https://zynkrow.com/api/v1/contacts", {
      method: "POST",
      headers: { "Authorization": "Bearer sk_live_…", "Content-Type": "application/json" },
      body: JSON.stringify({ name, email, phone, company, source: "website", notes: message })
    });
  3. See it in the CRM
    The lead appears in Contacts & Deals with source website, and the event contact.created fires for any webhook you set.

Put your help center or handbook on your own site

Wiki app
  1. Publish a space
    In Wiki, open the space → Share → Public. Zynkrow gives you a link like ${SITE_ORIGIN}/wiki/p/<token>.
  2. Link or embed it
    <a href="https://zynkrow.com/wiki/p/<token>">Help center</a>
    <!-- or inline -->
    <iframe src="https://zynkrow.com/wiki/p/<token>" style="width:100%;height:80vh;border:0"></iframe>
  3. Keep writing in Wiki
    Only pages marked published show; drafts stay internal. No key is needed — the token is the access.

Show your handbook or help center on your site, by API

Wiki app · read scope
  1. Find the space
    curl "https://zynkrow.com/api/v1/wiki/spaces" -H "Authorization: Bearer sk_live_…"
  2. Fetch its pages as a tree
    curl "https://zynkrow.com/api/v1/wiki/spaces/<spaceId>/pages" -H "Authorization: Bearer sk_live_…"
    # top-level pages have parent: null → sections; their children → articles
  3. Render one page
    GET /wiki/pages/<id> returns body (markdown) and html already rendered — drop html into your page. Only published pages come back unless you pass ?status=all. zynkrow.com's own Knowledge Base is built exactly this way.

Pull invoices into your own dashboard

Read scope
  1. List the unpaid ones
    curl "https://zynkrow.com/api/v1/invoices?status=unpaid&limit=50" \
      -H "Authorization: Bearer sk_live_…"
  2. Page through
    Take the last item's createdAt and pass it as ?before= for the next page. Results are newest first.
  3. Get the lines
    curl "https://zynkrow.com/api/v1/invoices/<id>" -H "Authorization: Bearer sk_live_…"

React when something happens

Events and webhooks
  1. Poll the event log
    curl "https://zynkrow.com/api/v1/events?name=invoice.paid" -H "Authorization: Bearer sk_live_…"
  2. Names follow entity.verb
    customer.created, contact.created, invoice.paid, ticket.created … the same names a webhook delivers.
  3. Idempotency
    Every event has an id; store the last one you handled and skip repeats.
Reference

Every endpoint, from the live spec

Rendered from /api/v1/openapi.json — import that URL into Postman, Insomnia or Bruno to get the whole collection.

Rate limits

120 requests a minute per key. Over that you get HTTP 429 — back off for a minute.

Versioning

v1 only adds fields and endpoints. A shipped response shape never changes; a breaking change means /v2.

Keys and safety

Keys are hashed at rest and shown once. Never put a key in browser code — call from your server.

Need an endpoint?

Write to developers@zynkrow.com with what you are building. Small, specific additions ship fast.

Chat with us