PowerPro AI Docs Open the app

Your business

API keys, webhooks and Zapier

Connect Zapier, Make, another tool or your own code: an API key to read and change your CRM, and webhooks that tell another address when something happens.

Making a key

API keys and webhooks
  1. 1A key for Zapier, Make or your code, with only the permissions it needs; shown once.
  2. 2What each key may do: read, change, send texts and emails, webhooks.
  3. 3Webhooks tell another address when something happens; Test sends a sample and shows the answer.
  1. Open Settings → Integrations and click New key under API keys.
  2. Name it (like "Zapier") and give it only what it needs:
    • Read: contacts, opportunities, calendars, tasks, workflows and so on;
    • Change: create and update them;
    • Send texts and emails to your contacts, from your number and email;
    • Webhooks: subscribe to events (Zapier and Make need this).
  3. Copy the key: it's shown once. It starts with vk_. Keep it secret, like a password.

Revoke stops a key at once, along with the webhooks it made. Only the account's owner and admins make and revoke keys, and no key can make another key.

Calling the API

Send the key in the Authorization header to https://builder.powerpro.ai/api/v1/…. Requests and answers are JSON.

curl https://builder.powerpro.ai/api/v1/contacts?q=smith \
  -H "Authorization: Bearer vk_your_key"
WhatCall
Check a key (who it belongs to, what it may do)GET /me
Contacts: list and search, one, create, change, deleteGET /contacts?q=…&tag=…&page=0, GET /contacts/{id}, POST /contacts, PATCH /contacts/{id}, DELETE /contacts/{id}
A note on a contactPOST /contacts/{id}/notes {"body": "…"}
A text or email to a contact (needs "Send texts and emails")POST /contacts/{id}/messages {"channel": "sms" | "email", "subject": "…", "body": "…"}
Pipelines, tags, custom fields, calendarsGET /meta
Opportunities: a pipeline's, by stage; create, change, deleteGET /pipelines/{id}/board, POST /opportunities, PATCH /opportunities/{id}, DELETE /opportunities/{id}
AppointmentsGET /appointments, POST /appointments, PATCH /appointments/{id}, DELETE /appointments/{id}
TasksGET /tasks?contactId=…&open=1, POST /tasks, PATCH /tasks/{id} {"done": true}
Add a contact to a workflow, or take them outPOST /automations/{id}/enroll, POST /automations/{id}/unenroll {"contactId": "…"}
Forms and their answersGET /forms, GET /form-submissions?formId=…&contactId=…&limit=50, or as a spreadsheet GET /forms/{id}/submissions.csv

These are the same calls the app's own screens make, with the same checks: what one screen refuses (a contact without a name, email or phone, say), the API refuses too, with a sentence saying why. Changes show in History as made by an app, and can be undone there. A key works only on its own account, up to 600 calls a minute.

AnswerMeans
401No key, a wrong one, or a revoked one.
403The key doesn't have the permission (the answer says which), or no key can do that.
404Not found, or not this account's.
429Too many calls: wait a little.

Webhooks

A webhook tells another address when something happens. Add one under Webhooks in Settings → Integrations (New webhook: what happens, and the address), or let Zapier or Make add theirs. Each one can be tested with Test, which sends a sample.

The events: a contact is created, a tag is added or removed, a website form is sent, an appointment is booked or cancelled, an opportunity moves to a stage or is won or lost, a payment is received, an invoice is paid, a text or email comes in, a call is missed, a Facebook lead comes in.

Each delivery is a POST with the event and the contact:

{
  "id": "evt_1234",
  "event": "tag_added",
  "occurredAt": "2026-10-27T10:15:00.000Z",
  "contact": { "id": "…", "firstName": "Sam", "lastName": "Rivera", "email": "sam@example.com", "phone": "+15125550142", "tags": ["VIP"], … },
  "data": { "tag": "VIP" }
}

Subscribing through the API (REST hooks)

With a key that has the "Webhooks" permission: GET /hooks/events lists the events, each with a sample; POST /hooks {"event": "contact_created", "targetUrl": "https://…"} subscribes and answers its id and secret; GET /hooks lists the key's own; DELETE /hooks/{id} unsubscribes. This is how Zapier's and Make's "instant" triggers connect.

Zapier and Make

Until our Zapier and Make apps are published, connect with their built-in tools and a key:

For incoming data the other way round (another tool starting one of your workflows), use the workflow trigger Inbound webhook.