Webhooks
Send CRM events to your systems, and receive them from others.
List outbound endpoints
GET/api/v1/webhooks/vivre/endpoints/
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
[
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"url": "",
"scope": "org",
"is_active": true,
"circuit_state": "closed",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
]
Create outbound endpoint
POST/api/v1/webhooks/vivre/endpoints/
Body
urlstring (uri)Required- Must be https:// and resolve only to public internet addresses.
labelstringRequired
Response fields 9
idstring (uuid)labelstringurlstring- The full URL for owners and admins. Members and viewers get only the origin, for example "https://hooks.example.com/…", or "…" when the URL has no scheme or host.
scopeenumvivrefor the CRM's endpoints, the only ones an API key reaches.is_activebooleancircuit_stateenum- Delivery health, set by the server:
closeddelivers normally,openholds deliveries after repeated failures, andhalf_openis trying the endpoint again. created_atstring (date-time)updated_atstring (date-time)secretstring- 64 hex characters.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "label": ""}'
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"url": "https://example.com",
"label": ""
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"url": "https://example.com",
"label": ""
}),
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"url": "",
"scope": "org",
"is_active": true,
"circuit_state": "closed",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30",
"secret": ""
}
Endpoint detail
GET/api/v1/webhooks/vivre/endpoints/{endpoint_id}/
Parameters
endpoint_idpath, stringRequired
Response fields 8
idstring (uuid)labelstringurlstring- The full URL for owners and admins. Members and viewers get only the origin, for example "https://hooks.example.com/…", or "…" when the URL has no scheme or host.
scopeenumvivrefor the CRM's endpoints, the only ones an API key reaches.is_activebooleancircuit_stateenum- Delivery health, set by the server:
closeddelivers normally,openholds deliveries after repeated failures, andhalf_openis trying the endpoint again. created_atstring (date-time)updated_atstring (date-time)
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"url": "",
"scope": "org",
"is_active": true,
"circuit_state": "closed",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Update endpoint
PATCH/api/v1/webhooks/vivre/endpoints/{endpoint_id}/
Parameters
endpoint_idpath, stringRequired
Body
labelstringurlstring (uri)- Must be https:// unless it equals the saved URL.
is_activeboolean- true is refused (400) while the endpoint is billing-paused.
Response fields 8
idstring (uuid)labelstringurlstring- The full URL for owners and admins. Members and viewers get only the origin, for example "https://hooks.example.com/…", or "…" when the URL has no scheme or host.
scopeenumvivrefor the CRM's endpoints, the only ones an API key reaches.is_activebooleancircuit_stateenum- Delivery health, set by the server:
closeddelivers normally,openholds deliveries after repeated failures, andhalf_openis trying the endpoint again. created_atstring (date-time)updated_atstring (date-time)
curl -X PATCH "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.patch(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "PATCH",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"url": "",
"scope": "org",
"is_active": true,
"circuit_state": "closed",
"created_at": "2026-10-17T09:30:00+05:30",
"updated_at": "2026-10-17T09:30:00+05:30"
}
Delete endpoint
DELETE/api/v1/webhooks/vivre/endpoints/{endpoint_id}/
Parameters
endpoint_idpath, stringRequired
curl -X DELETE "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.delete(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.status_code)
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "DELETE",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(resp.status);
Event catalog
GET/api/v1/webhooks/vivre/events/
Response fields 1
eventsarray of string- The event type names an endpoint may subscribe to, for example
lead.created.v1.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/events/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/events/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/events/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"events": [
""
]
}
List inbound tokens
GET/api/v1/webhooks/vivre/inbound/tokens/
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
[
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"is_active": true,
"status": "active",
"state": "active",
"billing_paused": true,
"allowed_ip_ranges": [
""
],
"scope": "org",
"source_label": "",
"field_mapping": {},
"mapping_confirmed": true,
"_ignored": [
""
],
"created_at": "2026-10-17T09:30:00+05:30",
"signing_enabled": true,
"token": "",
"secret": ""
}
]
Create inbound token
POST/api/v1/webhooks/vivre/inbound/tokens/
Body
labelstringsource_labelenum- The record type the token makes:
leadorcontact. Any other non-empty value is a 400. One oflead,contact. statusenum- When sent, sets
is_activetoo (inactive -> false). Wins overis_active. One ofactive,paused,inactive. is_activeboolean- Used only when status is not sent; sets status to active or inactive.
allowed_ip_rangesarray of string- CIDR ranges; an invalid one is a 400.
secretstring- Caller-chosen signing secret. When absent, one is generated unless
require_signatureis false. require_signatureboolean- false (also "false", "False", 0, "0") creates the token with no secret, so payloads are not signature-checked. Ignored when secret is sent.
Response fields 16
idstring (uuid)- The token's
token_id. labelstringis_activebooleanstatusenumactive,pausedorinactive.stateenum- What the token does now, from
is_activeandstatus:activeprocesses payloads,pausedholds them, andoffrefuses them. billing_pausedbooleanallowed_ip_rangesarray of string- CIDR ranges; empty accepts every address.
scopeenumsource_labelstring- The record type it makes (lead or contact), or empty when not set.
field_mappingobject- Keyed by CRM field key (standard key, or a custom field key such as cf_lead_<id>).
mapping_confirmedboolean_ignoredarray of string- Payload keys an admin chose to discard (the stored
ignored_fields). created_atstring (date-time)signing_enabledboolean- Whether the token has a signing secret, i.e. requires a signature.
tokenstring- The secret part of the inbound URL
/webhooks/vivre/{org_id}/{token}/. Left out for members and viewers on reads, and always for API keys. secretstring- The signing secret. Present only on create and rotate-secret, and only when the token has one.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "active"}'
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"status": "active"
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"status": "active"
}),
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"is_active": true,
"status": "active",
"state": "active",
"billing_paused": true,
"allowed_ip_ranges": [
""
],
"scope": "org",
"source_label": "",
"field_mapping": {},
"mapping_confirmed": true,
"_ignored": [
""
],
"created_at": "2026-10-17T09:30:00+05:30",
"signing_enabled": true,
"token": "",
"secret": ""
}
Set the field mapping (formula + value_map); a required field needs a payload field, formula or non-blank default
PATCH/api/v1/webhooks/vivre/inbound/tokens/{token_id}/mapping/
Parameters
token_idpath, stringRequired
Body
field_mappingobject- Keyed by CRM field key (standard key, or a custom field key such as cf_lead_<id>).
source_labelenum- When sent, name-keyed custom field keys are upgraded to id keys, and the mapping must cover every mandatory field with a source, formula or non-blank default. When absent the mandatory check is skipped. One of
lead,contact. _ignoredarray of string- Payload keys to discard. Replaces the stored list; absent clears it.
Response fields 3
mapping_confirmedenumwarningsarray of string- Present when a field has both formula and source.
upgraded_keysobject- Present when custom field keys were rewritten: {old key: new key}. What was stored is not what was sent.
Can also return 400.
curl -X PATCH "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/mapping/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.patch(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/mapping/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/mapping/", {
method: "PATCH",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"mapping_confirmed": true,
"warnings": [
""
],
"upgraded_keys": {}
}
An endpoint's deliveries, paginated and filterable
GET/api/v1/webhooks/vivre/endpoints/{endpoint_id}/deliveries/
Parameters
endpoint_idpath, stringRequired
Response fields 11
idstring (uuid)event_typestringstatusenumpending(queued, or held while the endpoint is failing),processing(being sent),success,failed(will be tried again),dead(no more tries) orcancelled.attempt_countintegercreated_atstring (date-time)resolved_atstring (date-time)next_attempt_atstring (date-time)last_attempted_atstring (date-time)response_logarray of objectpayloadobject- Owners and admins only. The body that was sent, as it was at sending: the event envelope
{id, type, occurred_at, organisation_id, data, previous?}. Free-form. request_headersobject- Owners and admins only. The headers each try sends, except
X-Vivre-Signature, which is not kept: Content-Type, X-Vivre-Event, X-Vivre-Version and X-Vivre-Delivery.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/deliveries/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/deliveries/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/deliveries/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"event_type": "",
"status": "pending",
"attempt_count": 1,
"created_at": "2026-10-17T09:30:00+05:30",
"resolved_at": "2026-10-17T09:30:00+05:30",
"next_attempt_at": "2026-10-17T09:30:00+05:30",
"last_attempted_at": "2026-10-17T09:30:00+05:30",
"response_log": [],
"payload": {},
"request_headers": {}
}
]
}
Send a failed delivery again
POST/api/v1/webhooks/vivre/endpoints/{endpoint_id}/deliveries/{delivery_id}/retry/
Parameters
endpoint_idpath, stringRequireddelivery_idpath, stringRequired
Response fields 11
idstring (uuid)event_typestringstatusenumpending(queued, or held while the endpoint is failing),processing(being sent),success,failed(will be tried again),dead(no more tries) orcancelled.attempt_countintegercreated_atstring (date-time)resolved_atstring (date-time)next_attempt_atstring (date-time)last_attempted_atstring (date-time)response_logarray of objectpayloadobject- Owners and admins only. The body that was sent, as it was at sending: the event envelope
{id, type, occurred_at, organisation_id, data, previous?}. Free-form. request_headersobject- Owners and admins only. The headers each try sends, except
X-Vivre-Signature, which is not kept: Content-Type, X-Vivre-Event, X-Vivre-Version and X-Vivre-Delivery.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/deliveries/7c9e6679-7425-40de-944b-e07fc1f90ae7/retry/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/deliveries/7c9e6679-7425-40de-944b-e07fc1f90ae7/retry/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/deliveries/7c9e6679-7425-40de-944b-e07fc1f90ae7/retry/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"event_type": "",
"status": "pending",
"attempt_count": 1,
"created_at": "2026-10-17T09:30:00+05:30",
"resolved_at": "2026-10-17T09:30:00+05:30",
"next_attempt_at": "2026-10-17T09:30:00+05:30",
"last_attempted_at": "2026-10-17T09:30:00+05:30",
"response_log": [
{
"attempt": 1,
"status_code": 1,
"response_body": "",
"attempted_at": "2026-10-17T09:30:00+05:30",
"duration_ms": 1
}
],
"payload": {},
"request_headers": {}
}
Issue a new signing secret
POST/api/v1/webhooks/vivre/endpoints/{endpoint_id}/rotate-secret/
Parameters
endpoint_idpath, stringRequired
Response fields 1
secretstring- The new signing secret, 64 hex characters. The previous one stops working at once.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/rotate-secret/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/rotate-secret/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/rotate-secret/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"secret": ""
}
An endpoint's event subscriptions
GET/api/v1/webhooks/vivre/endpoints/{endpoint_id}/subscriptions/
Parameters
endpoint_idpath, stringRequired
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
[
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"event_type": "",
"created_at": "2026-10-17T09:30:00+05:30"
}
]
Subscribe an endpoint to events
POST/api/v1/webhooks/vivre/endpoints/{endpoint_id}/subscriptions/
Parameters
endpoint_idpath, stringRequired
Body
event_typestringRequired- Must be one of the events in
GET /api/v1/webhooks/vivre/events/, for examplelead.created.v1.
Response fields 2
idstring (uuid)event_typestring
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_type": ""}'
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"event_type": ""
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"event_type": ""
}),
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"event_type": ""
}
Unsubscribe an endpoint from events
DELETE/api/v1/webhooks/vivre/endpoints/{endpoint_id}/subscriptions/
Parameters
endpoint_idpath, stringRequired
Body
event_typestringRequired- Must be one of the events in
GET /api/v1/webhooks/vivre/events/, for examplelead.created.v1.
curl -X DELETE "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"event_type": ""}'
import os, requests
resp = requests.delete(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"event_type": ""
},
)
print(resp.status_code)
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/subscriptions/", {
method: "DELETE",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"event_type": ""
}),
});
console.log(resp.status);
Send a signed test event
POST/api/v1/webhooks/vivre/endpoints/{endpoint_id}/test/
Parameters
endpoint_idpath, stringRequired
Response fields 2
status_codeinteger- The receiver's HTTP status. Any status, 2xx or not, is a 200 here.
bodystring- First 500 characters of the receiver's reply.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/test/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/test/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/endpoints/7c9e6679-7425-40de-944b-e07fc1f90ae7/test/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"status_code": 1,
"body": "Called, wants a demo on Friday."
}
An entity's fields, standard and custom, for mapping in Zapier, Pabbly or n8n
GET/api/v1/webhooks/vivre/fields/{entity}/
Parameters
entitypath, stringRequired
Response fields 2
entityenumfieldsarray of object- Standard fields, then active custom fields. A lead lists both Lead and Contact custom fields.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/fields/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/fields/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/fields/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"entity": "lead",
"fields": [
{
"key": "",
"label": "",
"type": "",
"entity_type": "",
"group": "",
"required": true,
"options": [],
"note": "",
"mapper_hidden": true,
"is_member": true,
"is_custom": true,
"legacy_key": ""
}
]
}
Retrieve an inbound token
GET/api/v1/webhooks/vivre/inbound/tokens/{token_id}/
Parameters
token_idpath, stringRequired
Response fields 16
idstring (uuid)- The token's
token_id. labelstringis_activebooleanstatusenumactive,pausedorinactive.stateenum- What the token does now, from
is_activeandstatus:activeprocesses payloads,pausedholds them, andoffrefuses them. billing_pausedbooleanallowed_ip_rangesarray of string- CIDR ranges; empty accepts every address.
scopeenumsource_labelstring- The record type it makes (lead or contact), or empty when not set.
field_mappingobject- Keyed by CRM field key (standard key, or a custom field key such as cf_lead_<id>).
mapping_confirmedboolean_ignoredarray of string- Payload keys an admin chose to discard (the stored
ignored_fields). created_atstring (date-time)signing_enabledboolean- Whether the token has a signing secret, i.e. requires a signature.
tokenstring- The secret part of the inbound URL
/webhooks/vivre/{org_id}/{token}/. Left out for members and viewers on reads, and always for API keys. secretstring- The signing secret. Present only on create and rotate-secret, and only when the token has one.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"is_active": true,
"status": "active",
"state": "active",
"billing_paused": true,
"allowed_ip_ranges": [
""
],
"scope": "org",
"source_label": "",
"field_mapping": {},
"mapping_confirmed": true,
"_ignored": [
""
],
"created_at": "2026-10-17T09:30:00+05:30",
"signing_enabled": true,
"token": "",
"secret": ""
}
Update an inbound token (state, mapping, label)
PATCH/api/v1/webhooks/vivre/inbound/tokens/{token_id}/
Parameters
token_idpath, stringRequired
Body
labelstringstatusenum- Sets
is_activetoo. Wins overis_active. One ofactive,paused,inactive. is_activeboolean- Sets status to active or inactive when status is not sent.
allowed_ip_rangesarray of string- CIDR ranges; an invalid one is a 400.
source_labelenum- One of
lead,contact.
Response fields 16
idstring (uuid)- The token's
token_id. labelstringis_activebooleanstatusenumactive,pausedorinactive.stateenum- What the token does now, from
is_activeandstatus:activeprocesses payloads,pausedholds them, andoffrefuses them. billing_pausedbooleanallowed_ip_rangesarray of string- CIDR ranges; empty accepts every address.
scopeenumsource_labelstring- The record type it makes (lead or contact), or empty when not set.
field_mappingobject- Keyed by CRM field key (standard key, or a custom field key such as cf_lead_<id>).
mapping_confirmedboolean_ignoredarray of string- Payload keys an admin chose to discard (the stored
ignored_fields). created_atstring (date-time)signing_enabledboolean- Whether the token has a signing secret, i.e. requires a signature.
tokenstring- The secret part of the inbound URL
/webhooks/vivre/{org_id}/{token}/. Left out for members and viewers on reads, and always for API keys. secretstring- The signing secret. Present only on create and rotate-secret, and only when the token has one.
curl -X PATCH "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "active"}'
import os, requests
resp = requests.patch(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
json={
"status": "active"
},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "PATCH",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"status": "active"
}),
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"is_active": true,
"status": "active",
"state": "active",
"billing_paused": true,
"allowed_ip_ranges": [
""
],
"scope": "org",
"source_label": "",
"field_mapping": {},
"mapping_confirmed": true,
"_ignored": [
""
],
"created_at": "2026-10-17T09:30:00+05:30",
"signing_enabled": true,
"token": "",
"secret": ""
}
Delete an inbound token
DELETE/api/v1/webhooks/vivre/inbound/tokens/{token_id}/
Deletes the token. Not available to API keys (403): do this in the app.
Parameters
token_idpath, stringRequired
curl -X DELETE "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.delete(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.status_code)
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "DELETE",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(resp.status);
A token's received payloads
GET/api/v1/webhooks/vivre/inbound/tokens/{token_id}/logs/
Parameters
token_idpath, stringRequired
Response fields 13
idstring (uuid)statusenumsuccess(record made, all fields mapped),partial(record made, some optional fields missed),failed(can be tried again),held(waiting for the token's mapping),skipped(nothing to make),rejected(a required field was missing),processing(a try is running or due) orsuperseded(the same payload was already processed).entity_typestring- lead, contact, or empty.
entity_idstring- The record it created, when it did.
mapping_resultobject- {CRM field: value} that was mapped. Free-form; values read "[hidden]" for members and viewers under "Assigned only".
mapping_missesarray of string- Field keys with no value, or sentences naming a value that was not saved.
received_atstring (date-time)processed_atstring (date-time)attempt_countintegersuperseded_bystring (uuid)repeat_ofstring (uuid)- The payload this one repeated: same token, same mapped values, within 24 hours.
miss_labelsobject- {field key: display name} for keys named in
mapping_misses. reasonstring- The last try's error. Always null for members and viewers.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "success",
"entity_type": "",
"entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"mapping_result": {},
"mapping_misses": [],
"received_at": "2026-10-17T09:30:00+05:30",
"processed_at": "2026-10-17T09:30:00+05:30",
"attempt_count": 1,
"superseded_by": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"repeat_of": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"miss_labels": {},
"reason": ""
}
]
}
One received payload, its tries and the record made
GET/api/v1/webhooks/vivre/inbound/tokens/{token_id}/logs/{log_id}/
Parameters
token_idpath, stringRequiredlog_idpath, stringRequired
Response fields 13
idstring (uuid)statusenumsuccess(record made, all fields mapped),partial(record made, some optional fields missed),failed(can be tried again),held(waiting for the token's mapping),skipped(nothing to make),rejected(a required field was missing),processing(a try is running or due) orsuperseded(the same payload was already processed).entity_typestringentity_idstringraw_payloadobject- The payload as received. Free-form; values read "[hidden]" for members and viewers under "Assigned only".
mapping_resultobject- Free-form; hidden as
raw_payloadis. mapping_missesarray of stringreceived_atstring (date-time)processed_atstring (date-time)superseded_bystring (uuid)repeat_ofstring (uuid)- The payload this one repeated: same token, same mapped values, within 24 hours.
attemptsarray of objectmiss_labelsobject
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": "success",
"entity_type": "",
"entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"raw_payload": {},
"mapping_result": {},
"mapping_misses": [
""
],
"received_at": "2026-10-17T09:30:00+05:30",
"processed_at": "2026-10-17T09:30:00+05:30",
"superseded_by": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"repeat_of": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"attempts": [
{
"number": 1,
"trigger": "received",
"status": "success",
"started_at": "2026-10-17T09:30:00+05:30",
"finished_at": "2026-10-17T09:30:00+05:30",
"error": "",
"mapping_misses": [],
"entity_type": "",
"entity_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"requested_by_name": "",
"replay_batch": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
],
"miss_labels": {}
}
Process one held or failed payload again
POST/api/v1/webhooks/vivre/inbound/tokens/{token_id}/logs/{log_id}/replay/
Parameters
token_idpath, stringRequiredlog_idpath, stringRequired
Response fields 2
replayedinteger- How many payloads were claimed and queued.
batch_idstring (uuid)- Poll GET .../replay/{
batch_id}/ for progress.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/logs/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"replayed": 1,
"batch_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
Process held or failed payloads again, as a batch
POST/api/v1/webhooks/vivre/inbound/tokens/{token_id}/replay/
Parameters
token_idpath, stringRequired
Response fields 2
replayedinteger- How many payloads were claimed and queued.
batch_idstring (uuid)- Poll GET .../replay/{
batch_id}/ for progress.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"replayed": 1,
"batch_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7"
}
A replay batch's progress
GET/api/v1/webhooks/vivre/inbound/tokens/{token_id}/replay/{batch_id}/
Parameters
token_idpath, stringRequiredbatch_idpath, stringRequired
Response fields 13
batch_idstring (uuid)totalintegerprocessingintegersuccessintegerpartialintegerfailedintegerheldintegerskippedintegerrejectedintegerfinishedbooleanoutcomestring- Once finished, a summary such as "2 succeeded, 1 failed" or "nothing processed"; null before.
finished_atstring (date-time)created_atstring (date-time)
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/7c9e6679-7425-40de-944b-e07fc1f90ae7/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/7c9e6679-7425-40de-944b-e07fc1f90ae7/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/replay/7c9e6679-7425-40de-944b-e07fc1f90ae7/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"batch_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"total": 1,
"processing": 1,
"success": 1,
"partial": 1,
"failed": 1,
"held": 1,
"skipped": 1,
"rejected": 1,
"finished": true,
"outcome": "",
"finished_at": "2026-10-17T09:30:00+05:30",
"created_at": "2026-10-17T09:30:00+05:30"
}
Issue a new signing secret for a token
POST/api/v1/webhooks/vivre/inbound/tokens/{token_id}/rotate-secret/
Parameters
token_idpath, stringRequired
Response fields 16
idstring (uuid)- The token's
token_id. labelstringis_activebooleanstatusenumactive,pausedorinactive.stateenum- What the token does now, from
is_activeandstatus:activeprocesses payloads,pausedholds them, andoffrefuses them. billing_pausedbooleanallowed_ip_rangesarray of string- CIDR ranges; empty accepts every address.
scopeenumsource_labelstring- The record type it makes (lead or contact), or empty when not set.
field_mappingobject- Keyed by CRM field key (standard key, or a custom field key such as cf_lead_<id>).
mapping_confirmedboolean_ignoredarray of string- Payload keys an admin chose to discard (the stored
ignored_fields). created_atstring (date-time)signing_enabledboolean- Whether the token has a signing secret, i.e. requires a signature.
tokenstring- The secret part of the inbound URL
/webhooks/vivre/{org_id}/{token}/. Left out for members and viewers on reads, and always for API keys. secretstring- The signing secret. Present only on create and rotate-secret, and only when the token has one.
curl -X POST "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/rotate-secret/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.post(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/rotate-secret/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/rotate-secret/", {
method: "POST",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"is_active": true,
"status": "active",
"state": "active",
"billing_paused": true,
"allowed_ip_ranges": [
""
],
"scope": "org",
"source_label": "",
"field_mapping": {},
"mapping_confirmed": true,
"_ignored": [
""
],
"created_at": "2026-10-17T09:30:00+05:30",
"signing_enabled": true,
"token": "",
"secret": ""
}
The latest payload, for mapping
GET/api/v1/webhooks/vivre/inbound/tokens/{token_id}/sample/
Parameters
token_idpath, stringRequired
Response fields 9
token_idstring (uuid)raw_payloadobject- The latest payload as received. Free-form.
detected_fieldsobject- The latest payload flattened, {"address__city": "Mumbai"}. Passed through as stored.
all_fieldsobject- Every flattened key the last 50 payloads carried, with the newest value as the example.
suggested_mappingobject{payload key: CRM field}for payload keys whose name is a known alias of a CRM field.source_headersobject- Request headers of the latest payload, with Authorization and Cookie removed. For members, viewers and API keys, headers naming a signature, secret, token, auth, cookie or key are removed as well.
captured_atstring (date-time)replaced_countintegernew_unknown_fieldsarray of string- Payload keys that are neither mapped nor ignored.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/sample/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/sample/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/sample/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"token_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"raw_payload": {},
"detected_fields": {},
"all_fields": {},
"suggested_mapping": {},
"source_headers": {},
"captured_at": "2026-10-17T09:30:00+05:30",
"replaced_count": 1,
"new_unknown_fields": [
""
]
}
Stop requiring a signature on a token
DELETE/api/v1/webhooks/vivre/inbound/tokens/{token_id}/secret/
Parameters
token_idpath, stringRequired
Response fields 16
idstring (uuid)- The token's
token_id. labelstringis_activebooleanstatusenumactive,pausedorinactive.stateenum- What the token does now, from
is_activeandstatus:activeprocesses payloads,pausedholds them, andoffrefuses them. billing_pausedbooleanallowed_ip_rangesarray of string- CIDR ranges; empty accepts every address.
scopeenumsource_labelstring- The record type it makes (lead or contact), or empty when not set.
field_mappingobject- Keyed by CRM field key (standard key, or a custom field key such as cf_lead_<id>).
mapping_confirmedboolean_ignoredarray of string- Payload keys an admin chose to discard (the stored
ignored_fields). created_atstring (date-time)signing_enabledboolean- Whether the token has a signing secret, i.e. requires a signature.
tokenstring- The secret part of the inbound URL
/webhooks/vivre/{org_id}/{token}/. Left out for members and viewers on reads, and always for API keys. secretstring- The signing secret. Present only on create and rotate-secret, and only when the token has one.
curl -X DELETE "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/secret/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.delete(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/secret/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.status_code)
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/secret/", {
method: "DELETE",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(resp.status);
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"label": "",
"is_active": true,
"status": "active",
"state": "active",
"billing_paused": true,
"allowed_ip_ranges": [
""
],
"scope": "org",
"source_label": "",
"field_mapping": {},
"mapping_confirmed": true,
"_ignored": [
""
],
"created_at": "2026-10-17T09:30:00+05:30",
"signing_enabled": true,
"token": "",
"secret": ""
}
A token's received, processed and failed counts
GET/api/v1/webhooks/vivre/inbound/tokens/{token_id}/stats/
Parameters
token_idpath, stringRequired
Response fields 10
successintegerpartialintegerfailedintegerheldintegerskippedintegerrejectedintegerprocessingintegersupersededintegertotalintegerrepeatsinteger- How many payloads were repeats (created and flagged), counted within the statuses above.
curl "https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/stats/" \
-H "X-Api-Key: $VIVRE_API_KEY"
import os, requests
resp = requests.get(
"https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/stats/",
headers={"X-Api-Key": os.environ["VIVRE_API_KEY"]},
)
print(resp.json())
const resp = await fetch("https://api.vivrecrm.com/api/v1/webhooks/vivre/inbound/tokens/7c9e6679-7425-40de-944b-e07fc1f90ae7/stats/", {
method: "GET",
headers: {
"X-Api-Key": process.env.VIVRE_API_KEY,
},
});
console.log(await resp.json());
{
"success": 1,
"partial": 1,
"failed": 1,
"held": 1,
"skipped": 1,
"rejected": 1,
"processing": 1,
"superseded": 1,
"total": 1,
"repeats": 1
}