Contents
Create Call - Plugixa CRM
POST /plugixa-crm/v1/calls
Create a call, optionally attached to a contact, account, opportunity or lead.
Any user with access to Plugixa CRM. With Plugixa CRM Pro roles, the user’s role must also allow creating calls.
Request
POST https://your-site.example/wp-json/plugixa-crm/v1/calls
Request body
Content type: application/json
| Field | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Must not be blank. |
status |
string |
No | planned, completed or canceled. Anything else, or nothing, is stored as planned. |
direction |
string |
No | outbound or inbound. Anything else, or nothing, is stored as outbound. |
description |
string |
No | HTML. Tags not allowed in post content are stripped. |
date_start |
string |
No | Start, in the site’s time zone. Reminders count back from it. |
date_end |
string |
No | End, in the site’s time zone. Must not be before date_start. |
is_all_day |
boolean |
No | Defaults to false. |
color |
string |
No | red, pink, purple, indigo, blue, teal, green, lime, amber, orange or grey. Anything else is stored as null. |
parent_type |
string |
No | contact, account, opportunity or lead. Needs parent_id. |
parent_id |
integer |
No | The record it belongs to. Not checked. If either half is missing or invalid, both are stored as null. |
assigned_user_id |
integer |
No | The WordPress user who owns the call. 0 or nothing means none. |
reminders |
array |
No | Seconds before the start, as integers or objects with seconds_before. Replaces the call’s reminders. Needs the Reminders app. |
participants |
array |
No | Objects with type (contact, lead or user) and id. Replaces the whole list. Invalid entries are skipped. |
date_start and date_end are wall-clock times in the site’s time zone, as YYYY-MM-DD HH:MM:SS. You can also send YYYY-MM-DD HH:MM, a bare date, or an ISO 8601 time with an offset or Z, which is converted to the site’s time zone. Anything else is stored as null. account_id is worked out from the parent: an account is its own, a contact or an opportunity gives its account, a lead gives none. completed_at is only set by Complete Call.
{
"name": "Discovery call",
"direction": "outbound",
"date_start": "2026-11-18 14:00:00",
"date_end": "2026-11-18 14:30:00",
"parent_type": "contact",
"parent_id": 31,
"assigned_user_id": 3,
"participants": [
{
"type": "contact",
"id": 31
}
],
"reminders": [
600
]
}
Responses
201 Created. data is the new call.
{
"success": true,
"data": {
"id": 17,
"name": "Discovery call",
"status": "planned",
"direction": "outbound",
"description": "",
"date_start": "2026-11-18 14:00:00",
"date_end": "2026-11-18 14:30:00",
"is_all_day": 0,
"color": null,
"parent_type": "contact",
"parent_id": 31,
"account_id": 12,
"assigned_user_id": 3,
"completed_at": null,
"created_by": "1",
"modified_by": "1",
"created_at": "2026-11-12 09:30:00",
"modified_at": "2026-11-12 09:30:00",
"deleted_at": null,
"parent_name": "Maria Anders",
"assigned_user_name": "Jordan Lee",
"participants": [
{
"id": 21,
"call_id": 17,
"participant_type": "contact",
"participant_id": 31,
"acceptance": "none",
"is_organizer": 0,
"created_at": "2026-11-12 09:30:00",
"participant_name": "Maria Anders"
}
],
"reminders": [
{
"id": 9,
"seconds_before": 3600,
"sent": 0
}
]
}
}
| Field | Type | Meaning |
|---|---|---|
data.id |
integer |
The call’s id |
data.status |
string |
planned, completed or canceled |
data.direction |
string |
outbound or inbound |
data.date_start |
string|null |
Site time zone |
data.date_end |
string|null |
Site time zone |
data.parent_type |
string|null |
contact, account, opportunity or lead |
data.parent_id |
integer|null |
The record the call hangs off |
data.account_id |
integer|null |
The account the parent rolls up to, worked out for you |
data.completed_at |
string|null |
UTC datetime it was completed |
data.parent_name |
string|null |
The parent record’s name |
data.assigned_user_name |
string|null |
The owner’s display name |
data.participants |
array |
Who is on the call: participant_type (contact, lead or user), participant_id, participant_name, acceptance, is_organizer |
data.reminders |
array |
Reminders on the call: seconds_before and whether it was sent. Empty when the Reminders app is off |
Errors
| Status | Code | When |
|---|---|---|
422 |
plugixa_crm_invalid_name |
name is missing or blank. |
422 |
plugixa_crm_invalid_dates |
date_end is before date_start. |
Plus the errors every endpoint can return.
Examples
curl -s -X POST "https://your-site.example/wp-json/plugixa-crm/v1/calls" \
-u "admin:$WP_APP_PASSWORD" \
-H "Content-Type: application/json" \
-d '{"name":"Discovery call","direction":"outbound","date_start":"2026-11-18 14:00:00","date_end":"2026-11-18 14:30:00","parent_type":"contact","parent_id":31,"assigned_user_id":3,"participants":[{"type":"contact","id":31}],"reminders":[600]}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-crm/v1/calls');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERPWD => 'admin:' . getenv('WP_APP_PASSWORD'),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Discovery call',
'direction' => 'outbound',
'date_start' => '2026-11-18 14:00:00',
'date_end' => '2026-11-18 14:30:00',
'parent_type' => 'contact',
'parent_id' => 31,
'assigned_user_id' => 3,
'participants' => [
[
'type' => 'contact',
'id' => 31,
],
],
'reminders' => [600],
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
const auth = 'Basic ' + btoa(`admin:${process.env.WP_APP_PASSWORD}`);
const response = await fetch('https://your-site.example/wp-json/plugixa-crm/v1/calls', {
method: 'POST',
headers: {
'Authorization': auth,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: 'Discovery call',
direction: 'outbound',
date_start: '2026-11-18 14:00:00',
date_end: '2026-11-18 14:30:00',
parent_type: 'contact',
parent_id: 31,
assigned_user_id: 3,
participants: [{ type: 'contact', id: 31 }],
reminders: [600],
}),
});
const { data } = await response.json();
Quick Links
Share