Pipevale API and integrations
Bearer-key auth, RESTful endpoints, webhooks in both directions — and native connections to Zapier, Make and ApiX-Drive.
Authentication
Every API request needs an API key. Create one under Settings → API keys and send it in the header:
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx
Rate limit: up to 120 requests per minute per workspace. Above that the API answers 429 with a Retry-After header — wait that many seconds and retry.
REST API — endpoints
Base URL: https://<your-domain>/api/v1
| Method | Path | Description | Parameters |
|---|---|---|---|
| GET | /api/v1/records | List records in a folder | folderId, search, page, pageSize |
| GET | /api/v1/records/:id | One record by ID | — |
| POST | /api/v1/records | Create a record | folderId, title, email, phone, data{} |
| PATCH | /api/v1/records/:id | Update a record | title?, email?, phone?, data{} |
| DELETE | /api/v1/records/:id | Delete a record (moves to Trash) | — |
| GET | /api/v1/records/:id/comments | Comments on a record | — |
| POST | /api/v1/records/:id/comments | Add a comment | text |
| GET | /api/v1/records/:id/calls | Call logs for a record | — |
| POST | /api/v1/records/:id/calls | Log a call | direction?, outcome?, duration?, phone?, notes?, calledAt? |
| GET | /api/v1/folders | List folders with their fields | — |
| GET | /api/v1/pipelines | List pipelines (with stages) | — |
| GET | /api/v1/pipelines/:id | One pipeline by ID | — |
| GET | /api/v1/deals | Deals in a pipeline | pipelineId (required) |
| POST | /api/v1/deals | Create a deal | pipelineId, stageId?, title?, amount?, closeDate?, data{} |
| PATCH | /api/v1/deals/:id | Update a deal | stageId?, title?, amount?, closeDate?, data{} |
| DELETE | /api/v1/deals/:id | Delete a deal | — |
| GET | /api/v1/tasks | List tasks | recordId?, status? (OPEN|DONE) |
| POST | /api/v1/tasks | Create a task | title, dueAt?, assigneeId?, recordId?, priority?, type?, recurrence? |
| PATCH | /api/v1/tasks/:id | Update a task | title?, dueAt?, assigneeId?, status?, priority?, type? |
| DELETE | /api/v1/tasks/:id | Delete a task | — |
Examples: request and response
curl -H "Authorization: Bearer sk_live_xxx" \ "https://pipevale.com/api/v1/records?folderId=fld_123&q=київ"
{
"data": [
{
"id": "rec_abc",
"folderId": "fld_123",
"title": "ТОВ «Ромашка»",
"email": "ceo@romashka.ua",
"phone": "+380671234567",
"data": { "city": "Київ", "status": "Активний" },
"createdAt": "2026-07-09T08:15:00.000Z"
}
]
}curl -H "Authorization: Bearer sk_live_xxx" \ "https://pipevale.com/api/v1/records/rec_abc"
{
"data": {
"id": "rec_abc",
"folderId": "fld_123",
"title": "ТОВ «Ромашка»",
"email": "ceo@romashka.ua",
"data": { "city": "Київ" }
}
}curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"folderId":"fld_123","title":"Нова компанія","email":"hi@acme.ua"}' \
"https://pipevale.com/api/v1/records"HTTP/1.1 201 Created
{
"data": {
"id": "rec_new",
"folderId": "fld_123",
"title": "Нова компанія",
"email": "hi@acme.ua"
}
}curl -H "Authorization: Bearer sk_live_xxx" \ "https://pipevale.com/api/v1/folders"
{
"data": [
{
"id": "fld_123",
"name": "Компанії",
"type": "CUSTOM",
"fields": [
{ "key": "city", "label": "Місто", "type": "TEXT" },
{ "key": "status", "label": "Статус", "type": "SELECT" }
]
}
]
}curl -H "Authorization: Bearer sk_live_xxx" \ "https://pipevale.com/api/v1/records/rec_abc/comments"
{
"data": [
{
"id": "note_1",
"text": "Передзвонити у вівторок",
"author": "Олег",
"createdAt": "2026-07-09T09:00:00.000Z"
}
]
}curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"text":"Оплатили рахунок №42"}' \
"https://pipevale.com/api/v1/records/rec_abc/comments"HTTP/1.1 201 Created
{
"data": {
"id": "note_2",
"text": "Оплатили рахунок №42",
"createdAt": "2026-07-09T10:30:00.000Z"
}
}curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"direction":"OUTBOUND","duration":5,"phone":"+380671234567","notes":"Погодили ціну"}' \
"https://pipevale.com/api/v1/records/rec_abc/calls"HTTP/1.1 201 Created
{
"data": {
"id": "call_1",
"direction": "OUTBOUND",
"outcome": "CONNECTED",
"duration": 5,
"calledAt": "2026-07-09T11:00:00.000Z"
}
}curl -H "Authorization: Bearer sk_live_xxx" \ "https://pipevale.com/api/v1/pipelines"
{
"data": [
{
"id": "pl_1",
"name": "Продажі",
"stages": [
{ "id": "st_1", "name": "Новий" },
{ "id": "st_2", "name": "Переговори" }
]
}
]
}curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"pipelineId":"pl_1","title":"Угода з ACME","amount":15000}' \
"https://pipevale.com/api/v1/deals"HTTP/1.1 201 Created
{
"data": {
"id": "deal_1",
"pipelineId": "pl_1",
"stageId": "st_1",
"title": "Угода з ACME",
"amount": 15000
}
}curl -X POST \
-H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"title":"Підготувати КП","dueAt":"2026-07-12T12:00:00Z","recordId":"rec_abc"}' \
"https://pipevale.com/api/v1/tasks"HTTP/1.1 201 Created
{
"data": {
"id": "task_1",
"title": "Підготувати КП",
"dueAt": "2026-07-12T12:00:00.000Z",
"status": "OPEN"
}
}Outgoing webhooks
Subscribe to events under Settings → Webhooks. Pipevale POSTs to your URL on every matching event.
Payload format:
{
"event": "record.created",
"recordId": "rec_xxx",
"folderId": "fld_xxx",
"workspaceId": "ws_xxx",
"occurredAt": "2026-06-18T10:00:00Z",
"record": {
"id": "rec_xxx",
"folderId": "fld_xxx",
"title": "New company",
"email": "ceo@example.com",
"phone": "+380...",
"data": { ... }
}
}The record field is a snapshot taken at the moment of the event, so you do not need a second request; it is null if the record is no longer available. The X-Pipevale-Signature: sha256=… header carries an HMAC of the body signed with the webhook secret — verify it on your side.
Incoming webhooks
An external system can start an automation inside Pipevale by POSTing to a unique URL. This is what makes the integration two-way: events flow out of Pipevale and into it.
- 1Pick the trigger. Open Automations → New automation and choose the “Incoming webhook” trigger.
- 2Copy the URL. Copy the generated URL, of the form /api/webhooks/trigger/{workflowId}.
- 3Send a request. POST any JSON body to it. Optionally include recordId — the scenario then runs in the context of that record.
- 4The automation runs. It performs the actions you configured: assign an owner, change a stage, call an API, and so on.
Example call:
curl -X POST \
-H "Content-Type: application/json" \
-d '{"recordId":"rec_xxx","source":"my-crm","event":"payment.received"}' \
"https://pipevale.com/api/webhooks/trigger/<workflowId>"Response: { "ok": true, "workflowId": "..." }. The automation itself runs asynchronously on a queue.
No-code platforms
Zapier, Make and ApiX-Drive all work through the same two mechanisms, so there is nothing special to install:
Pipevale → the platform
Use a “Catch Hook” / “Custom Webhook” module on their side, copy the URL it gives you, and add it as an outgoing webhook under Settings → Webhooks. Every subscribed event then arrives there.
The platform → Pipevale
Use their generic HTTP module: either call the REST API with your Authorization: Bearer key, or POST to an incoming-webhook URL to start an automation.
There is no Pipevale app in their marketplaces — we would rather say so than imply an integration that does not exist. The generic HTTP and webhook modules cover the same ground.
Need a hand?
Stuck on an endpoint, or missing something you need? Write to hello@pipevale.com — a person who wrote the code answers. See also the help centre.