Overview
This describes the resources that make up the official CrazyCall REST API. If you have any problems or requests please
chat with us or send an email at support@crazycall.com
- we’re there for you 24/7.
Errors
Example request:
PUT /api/v1/users/1234567/disable HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 404 Not Found
Content-Type: application/json;charset=UTF-8
Content-Length: 20
[ "USER_NOT_EXIST" ]
CrazyCall uses conventional HTTP response codes to indicate the success or failure of an API request.
In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc.), and codes in the 5xx range indicate an error with our servers (these are rare).
Error Code |
Meaning |
400 |
Bad Request – There was something wrong with your request |
401 |
Unauthorized – Your API key is wrong |
403 |
Forbidden – You don’t have permissions to access this resource |
404 |
Not Found – The specified resource could not be found |
405 |
Method Not Allowed – You tried to access data with an invalid method |
406 |
Not Acceptable – You requested a format that isn’t json |
500 |
Internal Server Error – We had a problem with our server. Try again later. |
503 |
Service Unavailable – We’re temporarily offline for maintenance. Please try again later. |
In addition, in response body we send an array of error codes, which describe what went wrong.
Authentication
Example of authenticated request:
GET /api/v1/path/to/resource HTTP/1.1
x-api-token: your-secret-api-key
Account: abcdef.crazycall.com
Host: api.crazycall.com
When using API, you have to authenticate your requests using an API key.
You can generate one in the developer’s section of our application.
It represents your account, so you should keep it secret!
Also you need to include an Account header in all your requests. You can see your account’s name
in developer’s section.
Header |
Description |
x-api-token |
Your secret api key generated from app.crazycall.com page |
Account |
Your account identifier |
Convention
All request parameters (query string) are optional unless stated otherwise.
Users
Every operation in CrazyCall is performed by users or on behalf of users. User can be assigned different roles, and roles can have various permissions.
Retrieve all users
Example request:
GET /api/v1/users HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 425
[ {
"id" : 77,
"username" : "john.doe@example.com",
"name" : "John",
"surname" : "Doe",
"roleId" : 77,
"role" : "Owner",
"enabled" : true,
"doNotAcceptIncomingCalls" : false,
"missedIncomingCallsNotification" : false,
"state" : "ACTIVE"
}, {
"id" : 5687329249492653509,
"username" : "inviteduser@email.com",
"roleId" : 77,
"role" : "Owner",
"privatePhoneNumber" : null,
"state" : "PENDING"
} ]
You can get all users assigned to your account as list.
Response results
Path |
Type |
Description |
[] |
Array |
All active users |
[].id |
Number |
User’s id |
[].username |
String |
User’s username (typically email) |
[].name |
String |
Name given in registration |
[].surname |
String |
Surname given in registration |
[].roleId |
Number |
Id which identify user’s role |
[].role |
String |
Role name |
[].enabled |
Boolean |
Detect if user is enabled |
[].state |
String |
Current user’s state |
[].doNotAcceptIncomingCalls |
Boolean |
Boolean flag determining whether user is blocking incoming calls |
[].missedIncomingCallsNotification |
Boolean |
If true user will receive email notifications about missed calls |
[].privatePhoneNumber |
Null |
User’s phone number added on account registration |
With this request you will also receive invited users. They will only have username
(email to which you sent invitation), roleId
, role
(name of a given role) and current state
(always PENDING
).
User states
State |
Description |
ACTIVE |
User is enabled (can make calls, counts in plan’s limit) |
INACTIVE |
User disabled (cannot login into your account) |
PENDING |
User was invited via email, but hasn’t registered yet |
Checking user’s existence
Example request:
GET /api/v1/users/exists?email=john.doe%40example.com HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 21
{
"exists" : true
}
You can easily check whether user exists by passing email.
Request parameters
Parameter |
Description |
email |
(required) User’s email to check |
Possible errors
Error key |
Description |
PARAMETER.NOT_PRESENT |
When email was not present |
Disable user
Example request:
PUT /api/v1/users/82/disable HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 159
{
"id" : 82,
"username" : "john.doe@example.com",
"name" : "John",
"surname" : "Doe",
"role" : "Agent",
"enabled" : false,
"state" : "INACTIVE"
}
You can disable other users - they will be unable to login to your account
and to make calls. In addition, they will stop counting towards your plan’s limit.
/api/v1/users/{userId}/disable
Parameter |
Description |
userId |
User’s id to disable |
You cannot disable youreself!
Possible errors
Error key |
Description |
SELF_DISABLE |
When you try to disable yourself |
USER_NOT_EXIST |
User with given id doesn’t exists |
Enable user
Example request:
PUT /api/v1/users/79/enable HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 156
{
"id" : 79,
"username" : "john.doe@example.com",
"name" : "John",
"surname" : "Doe",
"role" : "Agent",
"enabled" : true,
"state" : "ACTIVE"
}
You can enable disabled users - they will be able to login to your account
and to make calls.
/api/v1/users/{userId}/enable
Parameter |
Description |
userId |
User’s id to enable |
Remember that users will be counting towards your plan’s limit. If you reached limit, you will get 400 error
with key
USERS.LIMIT_REACHED
Possible errors
Error key |
Description |
USERS.LIMIT_REACHED |
When your plan doesn’t allow more users |
USER_NOT_EXIST |
User with given id doesn’t exists |
Number of users
Example request:
GET /api/v1/users/stats HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 62
{
"activeCount" : 1,
"limit" : 100,
"pendingCount" : 5
}
You can get number of users and current user limit in your plan. Remember - you can always disable and enable them.
Response results
Path |
Type |
Description |
activeCount |
Number |
Number of active users |
limit |
Number |
All users limit (depends on current plan) |
pendingCount |
Number |
Number of pending users (invited, but not registered) |
Projects
Projects are a way to group your contacts together.
Create new project
When you want to start calling you have to have at least one active project.
Example request:
POST /api/v1/projects HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 201
{
"name" : "CvLHLXDfBpA",
"defaultImportCountry" : "US",
"mainMsisdnId" : 6,
"eeaMsisdnId" : 6,
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : true,
"assignedMsisdns" : [ 6 ]
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 185
{
"id" : 13,
"name" : "CvLHLXDfBpA",
"defaultImportCountry" : "US",
"mainMsisdnId" : 6,
"eeaMsisdnId" : 6,
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : true
}
Request fields
Path |
Type |
Description |
name |
String |
Project name to identify |
mainMsisdnId |
Number |
Id of main callerid (number to be displayed to customers) |
eeaMsisdnId |
Number |
Id of number to be displayed when calling EEA numbers |
callerRestricted |
Boolean |
Show client your number or call anonymously |
defaultImportCountry |
String |
Project’s default import prefix. This prefix will be appended to your imported numbers if they don’t have any |
scriptId |
Number |
Id of script assigned to this project |
photo |
String |
Project’s photo (e.g. 12.jpg) |
assignedMsisdns |
Array |
Array of msisdn IDs to assign to this project |
Possible errors
Error key |
Description |
PROJECT_NAME_EMPTY |
No name was passed |
INVALID_DEFAULT_IMPORT_COUNTRY |
Country code is invalid |
SCRIPT_ID_EMPTY |
No script was passed |
SCRIPT_NAME_EXISTS |
Script with given name already exists |
MSISDN_NOT_FOUND |
Main caller id was not found in your request body |
MSISDN_NOT_EXISTS |
Cannot find msisdn with given id |
PLANS_EXCEEDED |
Your plan doesn’t allow more projects |
In response you will receive project object.
Get all projects
You will receive all your projects sorted alphabetically.
Example request:
GET /api/v1/projects HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 421
[ {
"id" : 33,
"name" : "extra label",
"defaultImportCountry" : "PL",
"mainMsisdnId" : 26,
"eeaMsisdnId" : 26,
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : false,
"status" : "ACTIVE"
}, {
"id" : 32,
"name" : "Name",
"defaultImportCountry" : "PL",
"mainMsisdnId" : 25,
"eeaMsisdnId" : 25,
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : false,
"status" : "ACTIVE"
} ]
Response results
Path |
Type |
Description |
[].id |
Number |
Project’s id |
[].name |
String |
Label to be displayed |
[].scriptId |
Number |
Script assigned to this project |
[].mainMsisdnId |
Number |
Id of main phone number from which project will be calling |
[].eeaMsisdnId |
Number |
Id of main eea phone number from which project will be calling |
[].callerRestricted |
Boolean |
If project’s phone number should be invisible for clients |
[].defaultImportCountry |
String |
Project’s default import country. Imported numbers will be resolved as numbers from this country if they don’t have country code |
[].photo |
String |
Name of project’s current photo |
[].status |
String |
Project current status |
Project statuses
Status |
Description |
ACTIVE |
Normal state, everything is possible |
INACTIVE |
Project doesn’t count in limit. Calling is impossible |
SUSPENDED |
Project is suspended when 3 or more network errors occurred |
Get specific project
Example request:
GET /api/v1/projects/34 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 204
{
"id" : 34,
"name" : "Name",
"defaultImportCountry" : "PL",
"mainMsisdnId" : 27,
"eeaMsisdnId" : 27,
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : false,
"status" : "ACTIVE"
}
You can also get information about one, specific project
/api/v1/projects/{projectId}
Parameter |
Description |
projectId |
Id of project to be retrieved |
Response results
Path |
Type |
Description |
id |
Number |
Project’s id |
name |
String |
Label to be displayed |
scriptId |
Number |
Script assigned to this project |
mainMsisdnId |
Number |
Id of main phone number from which project will be calling |
eeaMsisdnId |
Number |
Id of main eea phone number from which project will be calling |
callerRestricted |
Boolean |
If project’s phone number should be invisible for clients |
defaultImportCountry |
String |
Project’s default import country. Imported numbers will be resolved as numbers from this country if they don’t have country code |
photo |
String |
Name of project’s current photo |
status |
String |
Project current status |
Project statuses
Status |
Description |
ACTIVE |
Normal state, everything is possible |
INACTIVE |
Project doesn’t count in limit. Calling is impossible |
SUSPENDED |
Project is suspended when 3 or more network errors occurred |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
Cannot find project with given id |
Delete project
Example request:
DELETE /api/v1/projects/30 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
There is possibility do delete specific project. There is no way to retrieve deleted project, but you will
be able to see basic info about it while listing all account’s projects.
/api/v1/projects/{projectId}
Parameter |
Description |
projectId |
Id of project to delete |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
Cannot find project with given id |
Deactivate project
Example request:
PUT /api/v1/projects/12/deactivate HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 128
{
"id" : 12,
"name" : "Name",
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : false,
"status" : "INACTIVE"
}
You can temporarily deactivate project. You won’t be able to make calls and it won’t count towards your current plan’s limit of projects.
You will be able to activate deactivated project whenever you want, as long as it doesn’t violate your plans limits.
/api/v1/projects/{projectId}/deactivate
Parameter |
Description |
projectId |
Id of project to deactivate |
Response results
Path |
Type |
Description |
id |
Number |
Project’s id |
name |
String |
Label to be displayed |
scriptId |
Number |
Script assigned to this project |
callerRestricted |
Boolean |
If project’s phone number should be invisible for clients |
photo |
String |
Name of project’s current photo |
status |
String |
Project current status |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
Cannot find project with given id |
Activate project
Example request:
PUT /api/v1/projects/14/activate HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 126
{
"id" : 14,
"name" : "Name",
"scriptId" : 1,
"photo" : "1.jpg",
"callerRestricted" : false,
"status" : "ACTIVE"
}
You reactivate your disabled projects. But remember - your current plan must be able to handle more projects
/api/v1/projects/{projectId}/activate
Parameter |
Description |
projectId |
Id of project to activate |
Response results
Path |
Type |
Description |
id |
Number |
Project’s id |
name |
String |
Label to be displayed |
scriptId |
Number |
Script assigned to this project |
callerRestricted |
Boolean |
If project’s phone number should be invisible for clients |
photo |
String |
Name of project’s current photo |
status |
String |
Project current status |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
Cannot find project with given id |
PROJECTS.LIMIT_REACHED |
Your plan do not support more projects |
Projects statistics
Example request:
GET /api/v1/projects/stats HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 34
{
"count" : 15,
"limit" : 30
}
Your current plan and limits.
Remember that you can change this by enable / disable specific project or by upgrading your plan.
Response results
Path |
Type |
Description |
count |
Number |
Number of all active projects |
limit |
Number |
Projects limit (depends on the current plan) |
Example request:
GET /api/v1/projects/31/contact-fields HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 32
[ "pRBKoAWRsLH", "EfyHKvpEUlq" ]
You can get contact fields
/api/v1/projects/{projectId}/contact-fields
Parameter |
Description |
projectId |
Project’s id to get |
Response results
Path |
Type |
Description |
[] |
Array |
List containing contact fields |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
Cannot find project with given id |
Example request:
POST /api/v1/projects/35/contact-fields HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 48
{
"name" : "orxYJqXEwcv",
"oldName" : null
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 48
{
"name" : "orxYJqXEwcv",
"oldName" : null
}
You can add a contact field to project
/api/v1/projects/{projectId}/contact-fields
Parameter |
Description |
projectId |
Project’s id to add new contact field to |
Request fields
Path |
Type |
Description |
name |
String |
(required) Contact field that will be attached to project |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
Cannot find project with given id |
CONTACT_FIELD_EXISTS |
Contact field with given name already exists |
Contact is a basic object representing entity that you can call to.
Example request:
GET /api/v1/contacts?page=2&limit=2&modificationDateFrom=2013-05-03T20%3A30%3A40.100Z&orderModificationDate=asc&msisdn=%2B HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 956
{
"total" : 6,
"totalPages" : 3,
"links" : {
"first" : "https://api.crazycall.com/api/v1/contacts",
"prev" : "https://api.crazycall.com/api/v1/contacts?page=1",
"next" : "https://api.crazycall.com/api/v1/contacts?page=3",
"last" : "https://api.crazycall.com/api/v1/contacts?page=3"
},
"data" : [ {
"id" : 85,
"projectId" : 54,
"msisdn" : "+48717221111",
"firstName" : null,
"lastName" : null,
"company" : null,
"externalLink" : null,
"createdAt" : "2024-02-21T11:18:48.000Z",
"lastModificationDate" : "2024-02-21T11:18:48.060Z",
"status" : "Open",
"email" : null
}, {
"id" : 86,
"projectId" : 54,
"msisdn" : "+33980091888",
"firstName" : null,
"lastName" : null,
"company" : null,
"externalLink" : null,
"createdAt" : "2024-02-21T11:18:48.000Z",
"lastModificationDate" : "2024-02-21T11:18:48.105Z",
"status" : "Open",
"email" : null
} ]
}
Returns paginated list of contacts imported to the application.
Request parameters
Parameter |
Description |
page |
Page number to be returned. Default of 1 |
limit |
Returned page will consist of that many elements or default of 100, whichever is lower |
orderModificationDate |
Sorting applied to result, using contact’s last modification date. Either asc or desc, default asc |
modificationDateFrom |
Filter result to only records newer or equal to given date. (e.g. 2013-05-03T20:30:40.100Z) |
projectId |
Filter result to records which ID of the project equals to given value. |
msisdn |
Filter result to records which MSISDN contains given sequence. Note: Please remember that ‘+’ is a special character in URL and make sure that you use ‘%2B’ instead. (e.g. %2B1 will show all numbers from U.S., Canada and other NANP countries.) |
Response results
Path |
Type |
Description |
total |
Number |
Total elements count returned by the query |
totalPages |
Number |
Total pages count |
links.first |
String |
API URL to first page of the data set |
links.prev |
String |
API URL to prev page of the data set, or null if current is first |
links.next |
String |
API URL to next page of the data set, or null if current is last |
links.last |
String |
API URL to last page of the data set, or null if no data |
data |
Array |
Array of contacts |
data.[].id |
Number |
ID of the contact |
data.[].projectId |
Number |
ID of project, that the contact belongs to |
data.[].msisdn |
String |
Primary MSISDN associated with the contact |
data.[].firstName |
String |
FirstName associated with the contact |
data.[].lastName |
String |
Last name associated with the contact |
data.[].company |
String |
Company associated with the contact |
data.[].externalLink |
String |
External link related to the contact |
data.[].email |
String |
Email associated with the contact |
data.[].createdAt |
String |
Date when contact was created |
data.[].lastModificationDate |
String |
Contact’s last modification date |
data.[].status |
String |
Status of contact |
Possible errors
Error key |
Description |
PAGE_NUMBER_INVALID |
When page parameter was invalid |
LIMIT_INVALID |
When limit parameter was invalid |
ORDER_MODIFICATION_DATE_INVALID |
When orderModificationDate parameter was invalid |
MODIFICATION_DATE_FROM_INVALID |
When modificationDateFrom parameter was invalid |
Returns specific contact
Example request:
GET /api/v1/contacts/67 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 290
{
"id" : 67,
"projectId" : 50,
"msisdn" : "+14153661222",
"firstName" : null,
"lastName" : null,
"company" : null,
"externalLink" : null,
"createdAt" : "2024-02-21T11:18:47.000Z",
"lastModificationDate" : "2024-02-21T11:18:47.350Z",
"status" : "Open",
"email" : null
}
/api/v1/contacts/{contactId}
Parameter |
Description |
contactId |
Contacts’s id to get |
Response results
Path |
Type |
Description |
id |
Number |
ID of the contact |
projectId |
Number |
ID of project, that the contact belongs to |
msisdn |
String |
Primary msisdn associated with the contact |
firstName |
String |
FirstName associated with the contact |
lastName |
String |
Last name associated with the contact |
company |
String |
Company associated with the contact |
externalLink |
String |
External link related to the contact |
email |
String |
Email associated with the contact |
createdAt |
String |
Date when contact was created |
lastModificationDate |
String |
Contact’s last modification date |
status |
String |
Status of contact |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Edits contact by id.
Example request:
POST /api/v1/contacts/38 HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 287
{
"id" : null,
"projectId" : null,
"msisdn" : null,
"firstName" : "Jeo",
"lastName" : "Doe",
"company" : "email@emai.com",
"externalLink" : "https://www.crazycall.com",
"createdAt" : null,
"lastModificationDate" : null,
"status" : null,
"email" : "email@emai.com"
}
/api/v1/contacts/{contactId}
Parameter |
Description |
contactId |
Contacts’s id which details will be updated |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 313
{
"id" : 38,
"projectId" : 43,
"msisdn" : "+14153661222",
"firstName" : null,
"lastName" : null,
"company" : null,
"externalLink" : "https://www.crazycall.com",
"createdAt" : "2024-02-21T11:18:46.000Z",
"lastModificationDate" : "2024-02-21T11:18:46.123Z",
"status" : "Open",
"email" : null
}
Response results
Path |
Type |
Description |
id |
Number |
id of contact |
projectId |
Number |
projectId of contact |
msisdn |
String |
Msisdn of contact |
createdAt |
String |
Creation date of contact |
status |
String |
status of contact |
firstName |
String |
Updated first name of contact |
lastName |
String |
Updated last Name of contact |
company |
String |
Updated company of contact |
externalLink |
String |
Updated external link related to the contact |
email |
String |
Updated email of contact |
lastModificationDate |
String |
date of last modification |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exisit |
Deletes contact with given id. Keep in mind that contact state may prevent it from deletion, e.g. when it is in the calling state.
Example request:
DELETE /api/v1/contacts/39 HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
/api/v1/contacts/{contactId}
Parameter |
Description |
contactId |
Contacts’s id to delete |
Example response:
HTTP/1.1 200 OK
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
CANNOT_DELETE_CONTACT |
When it is forbidden to delete given contact, e.g. it is in call state |
Closes contact with given id. Keep in mind that contact state may prevent it from closing, e.g. when it is in the calling state or it’s already closed.
Example request:
POST /api/v1/contacts/89/close HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
/api/v1/contacts/{contactId}/close
Parameter |
Description |
contactId |
Contacts’s id to close |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 292
{
"id" : 89,
"projectId" : 55,
"msisdn" : "+14153661222",
"firstName" : null,
"lastName" : null,
"company" : null,
"externalLink" : null,
"createdAt" : "2024-02-21T11:18:48.222Z",
"lastModificationDate" : "2024-02-21T11:18:48.258Z",
"status" : "Closed",
"email" : null
}
Response results
Path |
Type |
Description |
id |
Number |
ID of the contact |
projectId |
Number |
ID of project, that the contact belongs to |
msisdn |
String |
Primary msisdn associated with the contact |
firstName |
String |
FirstName associated with the contact |
lastName |
String |
Last name associated with the contact |
company |
String |
Company associated with the contact |
externalLink |
String |
External link related to the contact |
email |
String |
Email associated with the contact |
createdAt |
String |
Date when contact was created |
lastModificationDate |
String |
Contact’s last modification date |
status |
String |
Status of contact |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
CANNOT_CLOSE_CONTACT |
When contact is in call state or is closed |
Opens contact with given id. You can only open contacts that are closed or not verified.
Example request:
POST /api/v1/contacts/65/open HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
/api/v1/contacts/{contactId}/open
Parameter |
Description |
contactId |
Contacts’s id to open |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 290
{
"id" : 65,
"projectId" : 49,
"msisdn" : "+14153661222",
"firstName" : null,
"lastName" : null,
"company" : null,
"externalLink" : null,
"createdAt" : "2024-02-21T11:18:47.225Z",
"lastModificationDate" : "2024-02-21T11:18:47.268Z",
"status" : "Open",
"email" : null
}
Response results
Path |
Type |
Description |
id |
Number |
ID of the contact |
projectId |
Number |
ID of project, that the contact belongs to |
msisdn |
String |
Primary msisdn associated with the contact |
firstName |
String |
FirstName associated with the contact |
lastName |
String |
Last name associated with the contact |
company |
String |
Company associated with the contact |
externalLink |
String |
External link related to the contact |
email |
String |
Email associated with the contact |
createdAt |
String |
Date when contact was created |
lastModificationDate |
String |
Contact’s last modification date |
status |
String |
Status of contact |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
CANNOT_OPEN_CONTACT |
When contact is not in “closed” or “not verified” state |
Schedules contact with given id to be called at specified time. You cannot schedule contacts that are closed / not verified, or that are currently being called / updated.
/api/v1/contacts/{contactId}/schedule
Parameter |
Description |
contactId |
Contacts’s id to schedule. |
Example request:
POST /api/v1/contacts/78/schedule HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 68
{
"scheduleDate" : "2024-02-21T11:28:47.758Z",
"note" : "Note"
}
Request fields
Path |
Type |
Description |
scheduleDate |
String |
Date and time (in the future) the contact should be called at (e.g. 2020-04-03T20:30:40.100Z) |
note |
String |
Note |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 308
{
"contactId" : 78,
"primaryMsisdn" : "+14153661222",
"alternativeMsisdns" : [ "+14153661222" ],
"emails" : [ ],
"status" : "SCHEDULED",
"lock" : "NO_LOCK",
"lastModificationDate" : "2024-02-21T11:18:47.766Z",
"createdAt" : "2024-02-21T11:18:47.723Z",
"createdBy" : 39,
"origin" : "API"
}
Response results
Path |
Type |
Description |
contactId |
Number |
Id of the contact |
primaryMsisdn |
String |
Primary msisdn of the contact |
alternativeMsisdns |
Array |
Alternative msisdns of the contact (incl. primary) |
emails |
Array |
List of emails associated with returned contact |
status |
String |
Contact’s status |
lock |
String |
Lock type, possible locks: NO_LOCK, IN_QUEUE_APP, CALLING, UPDATE_LOCK |
lastModificationDate |
String |
Last modification date |
createdAt |
String |
Contact’s creation date |
createdBy |
Number |
Id of User who created the contact |
origin |
String |
Contact’s origin |
Possible errors
Error key |
Description |
SCHEDULE_DATE_MUST_BE_SPECIFIED |
No schedule date was passed |
SCHEDULE_DATE_CANNOT_BE_IN_THE_PAST |
Schedule date is in the past |
WRONG_CONTACT_STATE |
Contact is in closed/not verified state, or it’s locked for calling / update |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Returns detailed information about contact. Contact details are irregular structure so they are represented as JSON.
Example request:
GET /api/v1/contacts/53/details HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 42
{
"gender": "male",
"country": "USA"
}
When your contact have detailed information like gender and country then the json will look like this :
{
"gender":"male",
"country":"USA"
}
/api/v1/contacts/{contactId}/details
Parameter |
Description |
contactId |
Contacts’s id to get |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Example request:
POST /api/v1/contacts/25/details HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 42
{
"surname" : "doe",
"name" : "john"
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 82
{
"gender": "male",
"country": "USA",
"surname" : "doe",
"name" : "john"
}
Method updates additional information in contact. JSON with key and value should be provided in post body to update values.
If keys provided in JSON body existed before, they are updated with new values.
If they didn’t exist, they are added to the existing document.
/api/v1/contacts/{contactId}/details
Parameter |
Description |
contactId |
Contacts’s id which details will be edited |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Example request:
PUT /api/v1/contacts/42/details HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 42
{
"surname" : "doe",
"name" : "john"
}
Methods edits information in contact detail. JSON with key and value, which exist in details should be send in post body to edit.
If provided elements do not appear in existing element, system won’t include them.
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 82
{
"gender": "male",
"country": "USA",
"surname" : "doe",
"name" : "john"
}
/api/v1/contacts/{contactId}/details
Parameter |
Description |
contactId |
Contacts’s id which details will be updated |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
You can import contact to project
Example request:
POST /api/v1/contacts HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 737
{
"projectId" : 52,
"mainMsisdnColumnName" : "mainMsisdnColumnName",
"firstNameColumnName" : "firstNameColumnName",
"lastNameColumnName" : "lastNameColumnName",
"emailColumnName" : "emailColumnName",
"companyColumnName" : "companyColumnName",
"externalLinkColumnName" : null,
"alternativeMsisdnColumnNames" : [ "alternativeMsisdnColumnName" ],
"details" : {
"lastNameColumnName" : "Lastname",
"emailColumnName" : "test@crazycall.com",
"mainMsisdnColumnName" : "+14153661222",
"alternativeMsisdnColumnName" : "+48717221111",
"externalLinkColumnName" : "https://www.crazycall.com",
"companyColumnName" : "Company name",
"firstNameColumnName" : "Firstname",
"plainColumnName" : "test"
}
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 329
{
"id" : 80,
"projectId" : 52,
"msisdn" : "+14153661222",
"firstName" : "Firstname",
"lastName" : "Lastname",
"company" : "Company name",
"externalLink" : null,
"createdAt" : "2024-02-21T11:18:48.000Z",
"lastModificationDate" : "2024-02-21T11:18:47.859Z",
"status" : "Open",
"email" : "test@crazycall.com"
}
Request fields
Path |
Type |
Description |
projectId |
Number |
Contact will be added to that project |
mainMsisdnColumnName |
String |
Name of main msisdn column |
firstNameColumnName |
String |
Name of first name column |
lastNameColumnName |
String |
Name of last name column |
emailColumnName |
String |
Name of email column |
companyColumnName |
String |
Name of company column |
externalLinkColumnName |
Null |
Name of external link column |
alternativeMsisdnColumnNames |
Array |
Names of alternative msisdn columns |
details |
Object |
Data to be imported |
Response results
Path |
Type |
Description |
id |
Number |
ID of the contact |
projectId |
Number |
ID of project, that the contact belongs to |
msisdn |
String |
Primary msisdn associated with the contact |
firstName |
String |
FirstName associated with the contact |
lastName |
String |
Last name associated with the contact |
company |
String |
Company associated with the contact |
externalLink |
String |
External link related to the contact |
email |
String |
Email associated with the contact |
createdAt |
String |
Date when contact was created |
lastModificationDate |
String |
Contact’s last modification date |
status |
String |
Status of contact |
Possible errors
Error key |
Description |
PROJECT_ID_EMPTY |
No project’s id was passed |
PROJECT_NOT_EXIST |
Project with given id does not exist |
DETAILS_EMPTY |
No data was passed |
MAIN_MSISDN_EMPTY |
No main msisdn was passed |
MAIN_MSISDN_NOT_EXIST |
Column with given main msisdn does not exist |
Contact history
You can get contact history
Example request:
GET /api/v1/contacts/13/history HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
/api/v1/contacts/{contactId}/history
Parameter |
Description |
contactId |
Contacts’s id to get |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 518
[ {
"id" : 15,
"contactId" : 13,
"createdAt" : "2024-02-21T11:18:45.544+00:00",
"type" : "NOTE",
"agentUsername" : "john.doe@example.com",
"name" : "John",
"surname" : "Doe",
"recordingAvailable" : false,
"note" : "test",
"callDetails" : { }
}, {
"id" : 4,
"contactId" : 13,
"createdAt" : "2024-02-21T11:18:45.356+00:00",
"type" : "IMPORT_CONTACT",
"agentUsername" : "john.doe@example.com",
"name" : "John",
"surname" : "Doe",
"recordingAvailable" : false,
"callDetails" : { }
} ]
Response results
Path |
Type |
Description |
[].id |
Number |
Contact event id |
[].contactId |
Number |
Contact id |
[].createdAt |
String |
Date when event was created |
[].type |
String |
Type describing what happened with contact |
[].customStatus |
String |
Custom status set by agent |
[].clientMsisdn |
String |
Client phone number |
[].historicalCallerId |
String |
Number that contact was called from |
[].labelCallerId |
String |
historicalCallerId label |
[].callId |
Number |
Id of call connected with event |
[].callLength |
Number |
Length of call connected with event |
[].agentUsername |
String |
Agent’s username (typically email) |
[].name |
String |
Agent’s name |
[].surname |
String |
Agent’s surname |
[].newMsisdn |
String |
If number was changed it will be new number added to contact |
[].oldMsisdn |
String |
If number was changed it will be old number added to contact |
[].recordingAvailable |
Boolean |
Indicates if call recording is ready to download |
[].note |
String |
Note added to contact |
[].appType |
String |
Application used for the call. Can be either: BROWSER, WIDGET, MOBILE |
[].callDetails |
Object |
Additional fields related to the call |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Add note
You can add note to contact
/api/v1/contacts/{contactId}/note
Parameter |
Description |
contactId |
Contacts’s id that this note was created for. |
Example request:
POST /api/v1/contacts/36/note HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 21
{
"note" : "Note"
}
Request fields
Path |
Type |
Description |
note |
String |
Contents of note |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 303
{
"contactId" : 36,
"primaryMsisdn" : "+14153661222",
"alternativeMsisdns" : [ "+14153661222" ],
"emails" : [ ],
"status" : "OPEN",
"lock" : "NO_LOCK",
"lastModificationDate" : "2024-02-21T11:18:46.057Z",
"createdAt" : "2024-02-21T11:18:46.025Z",
"createdBy" : 30,
"origin" : "API"
}
Response results
Path |
Type |
Description |
contactId |
Number |
Id of the contact |
primaryMsisdn |
String |
Primary msisdn of the contact |
alternativeMsisdns |
Array |
Alternative msisdns of the contact (incl. primary) |
emails |
Array |
List of emails associated with returned contact |
status |
String |
Contact’s status |
lock |
String |
Lock type, possible locks: NO_LOCK, IN_QUEUE_APP, CALLING, UPDATE_LOCK |
lastModificationDate |
String |
Last modification date |
createdAt |
String |
Contact’s creation date |
createdBy |
Number |
Id of User who created the contact |
origin |
String |
Contact’s origin |
Possible errors
Error key |
Description |
NOTE_EMPTY |
No note was passed |
USER_NOT_EXIST |
User with given email does not exist |
Returns primary msisdn of specific contact.
Example request:
GET /api/v1/contacts/91/primary-msisdn HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 31
{
"msisdn" : "+14153661222"
}
/api/v1/contacts/{contactId}/primary-msisdn
Parameter |
Description |
contactId |
Contacts’s id to get |
Response results
Path |
Type |
Description |
msisdn |
String |
Current primary msisdn |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Add new primary msisdn
Add a new number to an existing contact and set it as primary number.
Example request:
POST /api/v1/contacts/41/primary-msisdn HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 30
{
"msisdn" : "+6499519999"
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 30
{
"msisdn" : "+6499519999"
}
/api/v1/contacts/{contactId}/primary-msisdn
Parameter |
Description |
contactId |
Contacts’s id to add new main number |
You must set new msisdn as request body. Remember that number can’t exist in any contact in the same project.
Valid msisdn has format: [optional '+' or '00'][country code][actual number]
, e.g. all of these are valid
14153661222, +14153661222, 0014153661222
Request fields
Path |
Type |
Description |
msisdn |
String |
Valid phone number which will be contact’s number |
Response results
Path |
Type |
Description |
msisdn |
String |
Current primary msisdn |
Possible errors
Error key |
Description |
MSISDN_EXISTS_IN_PROJECT |
Your msisdn already exists for this project |
INVALID_MSISDN |
You typed invalid msisdn |
RESOURCE_NOT_FOUND |
Cannot find contact with given id |
Update primary msisdn
If you have many alternative msisdns assigned to one contact you can change the primary msisdn from them.
Example request:
PUT /api/v1/contacts/81/primary-msisdn HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 31
{
"msisdn" : "+14153661222"
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 31
{
"msisdn" : "+14153661222"
}
/api/v1/contacts/{contactId}/primary-msisdn
Parameter |
Description |
contactId |
Contacts’s id to update primary msisdn |
You must set new msisdn as request body. Remember that number must exist as alternative msisdn in this contact.
Valid msisdn has format: [optional '+' or '00'][country code][actual number]
, e.g. all of these are valid
14153661222, +14153661222, 0014153661222
Request fields
Path |
Type |
Description |
msisdn |
String |
Existing phone number which will be contact’s number |
Response results
Path |
Type |
Description |
msisdn |
String |
Current primary msisdn |
Possible errors
Error key |
Description |
MSISDN_NOT_EXISTS_FOR_CONTACT |
Your msisdn not exist in current contact |
INVALID_MSISDN |
You typed invalid msisdn |
RESOURCE_NOT_FOUND |
Cannot find contact with given id |
Contact can be associated with more than one number, i.e. office, home, mobile.
All numbers except primary one are called alternative msisdns.
Agent, when calling, can manage and call alternative msisdn.
Remember however, that each msisdn can be assigned to at most one contact in a project.
Example request:
GET /api/v1/contacts/24/alternative-msisdns HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 47
[ {
"id" : 18,
"msisdn" : "+6499519999"
} ]
/api/v1/contacts/{contactId}/alternative-msisdns
Parameter |
Description |
contactId |
Contacts’s id to get |
Response results
Path |
Type |
Description |
[].id |
Number |
Alternative msisdn ID attached to newly created msisdn entity |
[].msisdn |
String |
Msisdn that you added |
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When contact doesn’t exist |
Add new alternative msisdn
This API allows you to attach new alternative msisdns to contact.
Example request:
POST /api/v1/contacts/12/alternative-msisdns HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 30
{
"msisdn" : "+6499519999"
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 42
{
"id" : 4,
"msisdn" : "+6499519999"
}
/api/v1/contacts/{contactId}/alternative-msisdns
Parameter |
Description |
contactId |
Contacts’s id to append alternative msisdn |
Request fields
Path |
Type |
Description |
msisdn |
String |
Phone number that will be attached to contact |
Response results
Path |
Type |
Description |
id |
Number |
Alternative msisdn ID attached to newly created msisdn entity |
msisdn |
String |
Msisdn that you added |
Possible errors
Error key |
Description |
MSISDN_EXISTS_IN_PROJECT |
Your msisdn already exists for this project |
INVALID_MSISDN |
You typed invalid msisdn |
RESOURCE_NOT_FOUND |
Cannot find contact with given id |
Delete alternative msisdn
This API allows you to remove alternative msisdns from contact. You cannot delete primary msisdn.
Example request:
DELETE /api/v1/contacts/64/alternative-msisdns/60 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 43
{
"id" : 60,
"msisdn" : "+6499519999"
}
/api/v1/contacts/{contactId}/alternative-msisdns/{msisdnId}
Parameter |
Description |
contactId |
Contacts’s id that alternative msisdn belongs to |
msisdnId |
Alternative msisdn ID to be removed |
Response results
Path |
Type |
Description |
id |
Number |
Alternative msisdn ID that were removed |
msisdn |
String |
Msisdn associated with deleted alternative msisdn entity |
Possible errors
Error key |
Description |
PRIMARY_MSISDN |
You cannot delete alternative msisdn that is primary at the same time |
RESOURCE_NOT_FOUND |
Cannot find alternative msisdn with given id |
Get script answers for given event
Example request:
GET /api/v1/contacts/events/99/answers HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 257
{
"Text question": [
"Some answer"
],
"Multi choice question": [
"Answer 1",
"Answer 2"
],
"Date question": [
"2017-10-24"
],
"Date time question": [
"2017-12-06T11:12:44.334+01:00"
]
}
Get answers to agent questions asked during call.
There are events that won’t produce answers (e.g. Failed events, where connection was not established) hence answers are optional.
Possible errors
Error key |
Description |
RESOURCE_NOT_FOUND |
When event doesn’t exist |
As response you will receive object with questions as keys and array with client’s answers as value.
Response results
Path |
Type |
Description |
[] |
Array |
Map containing question-answers pairs for given event id |
Phone numbers
Phone number (msisdn) is basic object for calling purposes. You can assign msisdn to project (each project can have different numbers)
Get all msisdns
Returns available msisdns to given client
Example request:
GET /api/v1/msisdns HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 264
[ {
"id" : 49,
"msisdn" : "+48717221111",
"eea" : true,
"isoCountry" : "pl",
"label" : "ZFpVP",
"initial" : false
}, {
"id" : 50,
"msisdn" : "+14153661222",
"eea" : false,
"isoCountry" : "us",
"label" : "+14153661222",
"initial" : false
} ]
Response results
Path |
Type |
Description |
[].id |
Number |
Msisdn’s id |
[].msisdn |
String |
Actual phone number |
[].label |
String |
Msisdn’s label to be displayed |
[].eea |
Boolean |
Is number in European Economic Area |
[].isoCountry |
String |
Number’s iso country code |
Set up call forwarding for incoming calls
You can set up call forwarding to automatically transfer all incoming calls from your CrazyCall number to any other number you specify, i.e. your cellphone.
Example request:
POST /api/v1/inbound/configuration/numbers/48/forward HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 36
{
"phoneNumber" : "+14153661222"
}
/api/v1/inbound/configuration/numbers/{msisdnId}/forward
Parameter |
Description |
msisdnId |
Phone number’s id which configuration will be updated |
Example response body:
{
"status" : "success",
"data" : null
}
Request fields
Path |
Type |
Description |
phoneNumber |
String |
(required) Phone number where calls will be forwarded |
Possible errors
Error key |
Description |
PHONE_NUMBER_INVALID |
When passed phone number in invalid format |
MSISDN_NOT_FOUND |
When there is no phone number with given id |
CANNOT_CONFIGURE_CLIENTS_MSISDN |
When trying to configure client’s phone number |
Do Not Call List
Do Not Call List is a list of phone numbers (msisdns) you do not wish to call. Numbers from that list will not be dialed, even when imported as contacts. You can block and unblock numbers from that list.
Get Do Not Call List history
Returns history of phone numbers (msisdns) which have been on the list.
Example request:
GET /api/v1/dnclist?page=1&limit=5&dateFrom=2013-05-03T20%3A30%3A40&dateTo=2119-05-03T20%3A30%3A40&msisdnLike=64&orderColumn=eventDate&direction=DESC HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Request parameters
Parameter |
Description |
page |
Page number to be returned. |
limit |
Returned page will consist of that many elements. |
dateFrom |
Filter result to only records newer or equal to given date. (e.g. 2013-05-03T20:30:40.100Z) |
dateTo |
Filter result to only records older or equal to given date. (e.g. 2013-05-03T20:30:40.100Z) |
msisdnLike |
Phone number pattern, e.g. “123” matches all numbers containing sequence “123” |
orderColumn |
Order column. Available: msisdn, username, eventDate, status. |
direction |
Sorting direction. Available: ASC, DESC |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 439
{
"total" : 2,
"data" : [ {
"msisdn" : "+16475586333",
"eventDate" : "2024-02-21T11:18:49.303Z",
"userId" : 69,
"status" : "UNBLOCKED",
"username" : "john.doe@example.com",
"sameMsisdnEventsCount" : 2
}, {
"msisdn" : "+6499519999",
"eventDate" : "2024-02-21T11:18:49.293Z",
"userId" : 69,
"status" : "UNBLOCKED",
"username" : "john.doe@example.com",
"sameMsisdnEventsCount" : 4
} ]
}
Response results
Path |
Type |
Description |
total |
Number |
Total elements count returned by the query |
data |
Array |
Array of events |
data.[].msisdn |
String |
Event phone number |
data.[].eventDate |
String |
Event date |
data.[].userId |
Number |
User Id of user who made event |
data.[].status |
String |
Blacklist record event status |
data.[].username |
String |
Username of user who made event |
data.[].sameMsisdnEventsCount |
Number |
Same phone numbers events count |
Possible errors
Error key |
Description |
EMPTY_FIELD |
When page or limit is not present |
PAGE_NUMBER_INVALID |
When page parameter was invalid |
LIMIT_INVALID |
When limit parameter was invalid |
WRONG_ORDER_COLUMN |
When order column is does not match any of msisdn, username, eventDate, status. |
Blacklist record status
Status |
Description |
BLOCKED |
Number has been banned |
UNBLOCKED |
Number has been unlocked |
Get number Do Not Call List history
Returns history of a particular number from Do Not Call List
Example request:
GET /api/v1/dnclist/+6499519999 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 316
[ {
"msisdn" : "+6499519999",
"eventDate" : "2024-02-21T11:18:49.377Z",
"userId" : 70,
"status" : "UNBLOCKED",
"username" : "john.doe@example.com"
}, {
"msisdn" : "+6499519999",
"eventDate" : "2024-02-21T11:18:49.372Z",
"userId" : 70,
"status" : "BLOCKED",
"username" : "john.doe@example.com"
} ]
Response results
Path |
Type |
Description |
[] |
Array |
Array of contacts |
[].msisdn |
String |
Blacklisted phone number |
[].eventDate |
String |
Date of event |
[].userId |
Number |
User Id of user who made event |
[].status |
String |
Blacklist record event status |
[].username |
String |
Username of user who made event |
Possible errors
Error key |
Description |
MSISDN_NOT_FOUND |
When phone number is not present in the Do Not Call List. |
Blacklist record status
Status |
Description |
BLOCKED |
Number has been banned |
UNBLOCKED |
Number has been unlocked |
Block msisdn
You can block phone numbers (msisdn) to the Do Not Call List. Incorrect numbers will be ignored.
Example request:
POST /api/v1/dnclist/block HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 33
[ "+6499519999", "+16475586333" ]
Request fields
Path |
Type |
Description |
[] |
Array |
Array of msisdns to block |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 237
[ {
"msisdn" : "+6499519999",
"eventDate" : "2024-02-21T11:18:49.150Z",
"userId" : 67,
"status" : "BLOCKED"
}, {
"msisdn" : "+16475586333",
"eventDate" : "2024-02-21T11:18:49.150Z",
"userId" : 67,
"status" : "BLOCKED"
} ]
Response results
Path |
Type |
Description |
[] |
Array |
Array of created events |
[].msisdn |
String |
Event’s phone number |
[].eventDate |
String |
Date of event |
[].userId |
Number |
User Id of user who made event |
[].status |
String |
Blacklist record event status |
Blacklist record status
Status |
Description |
BLOCKED |
Number has been banned |
UNBLOCKED |
Number has been unlocked |
Unblock msisdn
You can unblock phone numbers (msisdn) from the Do Not Call List. Incorrect numbers will be ignored.
Example request:
POST /api/v1/dnclist/unblock HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 33
[ "+6499519999", "+16475586333" ]
Request fields
Path |
Type |
Description |
[] |
Array |
Array of msisdns to unblock |
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 241
[ {
"msisdn" : "+16475586333",
"eventDate" : "2024-02-21T11:18:49.244Z",
"userId" : 68,
"status" : "UNBLOCKED"
}, {
"msisdn" : "+6499519999",
"eventDate" : "2024-02-21T11:18:49.244Z",
"userId" : 68,
"status" : "UNBLOCKED"
} ]
Response results
Path |
Type |
Description |
[] |
Array |
Array of created events |
[].msisdn |
String |
Event’s phone number |
[].eventDate |
String |
Date of event |
[].userId |
Number |
User Id of user who made event |
[].status |
String |
Blacklist record event status |
Blacklist record status
Status |
Description |
BLOCKED |
Number has been banned |
UNBLOCKED |
Number has been unlocked |
Scripts
Each project has one specific script. When calling using Call Panel,
questions from script are visible to agents, and agents can save answers to those questions.
Get all scripts
Example request:
GET /api/v1/scripts HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 572
[ {
"id" : 3,
"createdBy" : "John Doe",
"createdById" : 72,
"modifiedBy" : "John Doe",
"modifiedById" : 72,
"createdAt" : "2024-02-21T11:18:50.000+00:00",
"lastModified" : "2024-02-21T11:18:50.000+00:00",
"name" : "ScriptNameModified",
"projectCount" : 0,
"default" : false
}, {
"id" : 1,
"createdBy" : null,
"createdById" : null,
"modifiedBy" : null,
"modifiedById" : null,
"createdAt" : "2024-02-21T11:10:16.000+00:00",
"lastModified" : "2024-02-21T11:10:16.000+00:00",
"name" : "Default",
"projectCount" : 0,
"default" : true
} ]
You can retrieve all scripts saved on your account.
Remenber that there always will be one default
which you can’t delete in any way.
Response results
Path |
Type |
Description |
[].id |
Number |
Script’s id |
[].createdBy |
String |
Email of person who created script |
[].createdById |
Number |
Id of person who created script |
[].modifiedBy |
String |
Email of person who most recently modified script |
[].modifiedById |
Number |
Id of person who most recently modified script |
[].createdAt |
String |
Date when script was created |
[].lastModified |
String |
Date when script was most recently modified |
[].name |
String |
Script’s label |
[].projectCount |
Number |
Number of projects this script is assigned to |
[].default |
Boolean |
Default script cannot be deleted |
Script’s states
State |
Description |
USED |
Script was already used in Callpanel (modify is limited) |
UNUSED |
Script wasn’t used (you can modify all script’s element) |
DELETED |
Cannot use script |
Delete script
Example request:
DELETE /api/v1/scripts/2 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
You can delete specific script by its id
. Remember - you cannot delete default script!
/api/v1/scripts/{scriptId}
Parameter |
Description |
scriptId |
Id of script to delete |
Possible errors
Error key |
Description |
SCRIPT_NOT_EXISTS |
Cannot find script with given id |
ILLEGAL_ACTION_SCRIPT |
Trying to delete default script |
Calls
Call is a domain representation of call done by agent. It has properties describing e.g. length of calling, and agent identification.
Get all calls
You can retrieve all calls made on your account.
Request parameters
Parameter |
Description |
limit |
(required) Limit number of calls |
page |
(required) Page number |
projectId |
Project identifier |
msisdns |
Array of phone numbers associated with contact |
Example request:
GET /api/v1/calls?limit=1&page=1 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 610
[ {
"id" : 4265478739375079424,
"recordingExists" : false,
"startDate" : "2024-02-20T11:18:45.099Z",
"finishDate" : "2024-02-20T11:18:45.099Z",
"answeredDate" : "2024-02-20T11:18:45.099Z",
"lengthSeconds" : 0,
"direction" : "OUTBOUND",
"msisdn" : "",
"agentUsername" : "john.doe@example.com",
"agentName" : "John",
"agentSurname" : "Doe",
"agentMsisdn" : null,
"agentMsisdnIsoCountry" : null,
"agentMsisdnLabel" : null,
"answered" : true,
"contactName" : null,
"contactSurname" : null,
"appType" : "BROWSER",
"callDetails" : {
"key" : "value",
"number" : 7
}
} ]
Data will be sorted by finished date.
Response results
Path |
Type |
Description |
[] |
Array |
All finished calls |
[].id |
Number |
Call’s id |
[].recordingExists |
Boolean |
Indicates whether call has a recording. |
[].startDate |
String |
Date and time when call has been started |
[].finishDate |
String |
Date and time when call has been finished |
[].answeredDate |
String |
Date and time when call has been answered |
[].lengthSeconds |
Number |
Duration of the call in seconds |
[].direction |
String |
Direction of the call |
[].msisdn |
String |
Actual phone number |
[].agentUsername |
String |
Calling agent’s username (typically email) |
[].agentName |
String |
Calling agent’s name |
[].agentSurname |
String |
Calling agent’s surname |
[].answered |
Boolean |
Indicates whether call has been answered |
[].agentMsisdn |
String |
Agent phone number |
[].agentMsisdnIsoCountry |
String |
Agent phone number country code |
[].agentMsisdnLabel |
String |
Agent phone number label |
[].contactName |
String |
Contact’s name |
[].contactSurname |
String |
Contact’s surname |
[].appType |
String |
Application used for the call. Can be either: BROWSER, WIDGET, MOBILE |
[].callDetails |
Object |
Additional fields related to the call |
Possible directions
Direction |
Description |
INBOUND |
Call inbound (to CrazyCall app) |
OUTBOUND |
Call outbound (from CrazyCall app) |
Get specific call
You can receive specific call established with your account.
/api/v1/calls/{id}
Parameter |
Description |
id |
Call’s id to get |
Example request:
GET /api/v1/calls/4207368564280068096 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 606
{
"id" : 4207368564280068096,
"recordingExists" : false,
"startDate" : "2024-02-20T11:18:45.052Z",
"finishDate" : "2024-02-20T11:18:45.052Z",
"answeredDate" : "2024-02-20T11:18:45.052Z",
"lengthSeconds" : 0,
"direction" : "OUTBOUND",
"msisdn" : "",
"agentUsername" : "john.doe@example.com",
"agentName" : "John",
"agentSurname" : "Doe",
"agentMsisdn" : null,
"agentMsisdnIsoCountry" : null,
"agentMsisdnLabel" : null,
"answered" : true,
"contactName" : null,
"contactSurname" : null,
"appType" : "BROWSER",
"callDetails" : {
"key" : "value",
"number" : 7
}
}
Response results
Path |
Type |
Description |
id |
Number |
Call’s id |
recordingExists |
Boolean |
Indicates whether call has a recording. |
startDate |
String |
Date and time when call has been started |
finishDate |
String |
Date and time when call has been finished |
answeredDate |
String |
Date and time when call has been answered |
lengthSeconds |
Number |
Length of the call in seconds |
direction |
String |
Direction of the call |
msisdn |
String |
Actual phone number |
agentUsername |
String |
Agent’s username (typically email) |
agentName |
String |
Agent’s name |
agentSurname |
String |
Agent’s surname |
answered |
Boolean |
Logic value describing if call was answered |
agentMsisdn |
String |
Agent phone number |
agentMsisdnIsoCountry |
String |
Agent phone number country code |
agentMsisdnLabel |
String |
Agent phone number label |
contactName |
String |
Contact’s name |
contactSurname |
String |
Contact’s surname |
appType |
String |
Application used for the call. Can be either: BROWSER, WIDGET, MOBILE |
callDetails |
Object |
Additional fields related to the call |
Possible errors
Error key |
Description |
CALL_NOT_FOUND |
When the call with the given id is not available |
Possible directions
Direction |
Description |
INBOUND |
Call inbound (to CrazyCall app) |
OUTBOUND |
Call outbound (from CrazyCall app) |
Call recordings
Each call in CrazyCall is recorded and is available for download according to the plan you have purchased.
Create a public link to the recording
This method generates a link to the call recording. Recording availability can be limited by the plan you’ve purchased.
Please be aware the link is public and doesn’t require an API key to download the file. A generated link contains a
token at the end, which can be used to delete the link.
Request fields
Path |
Type |
Description |
callId |
Number |
(required) Call’s id that belongs to the recording |
Example request:
POST /api/v1/recordings HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 36
{
"callId" : 4424696535507716096
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 156
{
"callId" : 4424696535507716096,
"link" : "http://crazycall.com/recording-files/your-account-hash.crazycall.com/c537b14e-daed-4667-ad0c-f5b92396b8ba"
}
Response results
Path |
Type |
Description |
callId |
Number |
Call’s id that belongs to the recording. |
link |
String |
Link to the recording. |
Possible errors
Error key |
Description |
CALL_NOT_FOUND |
When there is no matching call. |
RECORDING_NOT_FOUND |
When there is no matching recording to provided call, or it hasn’t been processed yet. |
DATE_LIMIT_EXCEEDED |
When the provided date exceeds the limit in your plan. |
Get all links to public recordings
Returns all generated links along with call id.
Example request:
GET /api/v1/recordings HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 160
[ {
"callId" : 1889986036514201600,
"link" : "http://crazycall.com/recording-files/your-account-hash.crazycall.com/f1dd8bba-21c5-4b71-8388-821b37279dc2"
} ]
Response results
Path |
Type |
Description |
[] |
Array |
Array of all generated links. |
[].callId |
Number |
Call’s id that belongs to the recording. |
[].link |
String |
Link to the recording. |
Delete public link to recording
This method deletes a link to the public recording. This method does not remove recording itself.
/api/v1/recordings/{token}
Parameter |
Description |
token |
(required) Token provided with the link. |
Example request:
DELETE /api/v1/recordings/48a97b7d-9d59-4a1f-b6c7-96d219c4bf5e HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Possible errors
Error key |
Description |
RECORDING_NOT_FOUND |
When there is no matching recordings to provided token. |
Create a link to recordings archive
This method generates a link to the archive containing call recordings matching provided parameters. Parameters may be
limited by the plan you’ve purchased. Please be aware the link is public and doesn’t require an API key to download
the file. A generated link contains a token at the end, which can be used to delete the link.
Request fields
Path |
Type |
Description |
dateFrom |
String |
(required) Filter result to call recordings newer or equal to a given date (e.g. 2019-01-01T20:30:40.100Z). |
dateTo |
String |
(required) Filter result to call recordings older or equal to a given date (e.g. 2019-01-01T20:30:40.100Z). |
msisdns |
Array |
Phone numbers you have been calling to and want to get recordings from. |
userIds |
Array |
Ids of users who were participating in the call. |
projectIds |
Array |
Ids of projects in which the call happened. |
Example request:
POST /api/v1/archive HTTP/1.1
Content-Type: application/json
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Content-Length: 146
{
"msisdns" : [ ],
"userIds" : [ ],
"projectIds" : [ ],
"dateFrom" : "2024-02-19T11:18:30.000Z",
"dateTo" : "2024-02-21T11:18:30.000Z"
}
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 209
{
"link" : "http://crazycall.com/recording-archives/your-account-hash.crazycall.com/daa3f6f2-3e30-4335-94c9-a836129dc538",
"dateFrom" : "2024-02-19T11:18:30.000Z",
"dateTo" : "2024-02-21T11:18:30.000Z"
}
Response results
Path |
Type |
Description |
link |
String |
Link to the created archive. |
dateFrom |
String |
Lower bound of date range which covers archive. |
dateTo |
String |
Upper bound of date range which covers archive. |
Possible errors
Error key |
Description |
RECORDING_NOT_FOUND |
When there are no matching recordings to provided parameters. |
DATE_LIMIT_EXCEEDED |
When the provided date exceeds the limit in your plan. |
Get all links to recordings archive
Returns all generated links along with date ranges they cover.
Example request:
GET /api/v1/archive HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 213
[ {
"link" : "http://crazycall.com/recording-archives/your-account-hash.crazycall.com/d0a0ab73-ffc5-46ef-8867-b606378ca5d8",
"dateFrom" : "2024-02-19T11:18:30.000Z",
"dateTo" : "2024-02-21T11:18:30.000Z"
} ]
Response results
Path |
Type |
Description |
[] |
Array |
Array of all generated links along with date ranges they cover. |
[].link |
String |
Link to the created archive. |
[].dateFrom |
String |
Lower bound of date range which covers archive. |
[].dateTo |
String |
Upper bound of date range which covers archive. |
Delete recordings archive link
This method deletes a link to the already created archive.
/api/v1/archive/{token}
Parameter |
Description |
token |
(required) Token provided with the link. |
Example request:
DELETE /api/v1/archive/a028b340-dc62-4c21-a97c-5c1412cb33bd HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Possible errors
Error key |
Description |
RECORDING_NOT_FOUND |
When there are no matching recordings to provided parameters. |
ARCHIVE_NOT_CREATED_YET |
When the archive link has been created, but the archive itself has not been created yet. |
Get recording that belongs to the call
You can retrieve a call’s recording which is an audio file. Each call between agent and customer is recorded, and is available for download according to the plan you have purchased. The file is streamed.
/api/v1/call/{callId}/recording
Parameter |
Description |
callId |
(Required) Call’s id that belongs to the recording |
Example request:
GET /api/v1/call/3731090957200796672/recording HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Length: 53
Content-Type: application/octet-stream
The content will be a byte stream from an audio file.
Possible errors
Error key |
Description |
CALL_NOT_FOUND |
When the call with the given id is not available |
RECORDING_NOT_FOUND |
When recording is not available for the given call id. |
Finance
Finance represents your current plan’s settings and monetary balance
Get balance
Example request:
GET /api/v1/finance/balance?dateFrom=2024-02-21T11%3A18%3A42.459Z HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 86
{
"balance" : {
"monetary" : 10,
"voice" : 0
},
"secondsUsedToday" : 0
}
You can receive your current balance. It depends on your plan.
Request parameters
Parameter |
Description |
dateFrom |
(required) Date in ISO date format (e.g. 2024-02-21T11:18:42.459Z) |
Response results
Path |
Type |
Description |
balance |
Object |
Represents current balance |
balance.monetary |
Number |
Current balance (in plan’s currency) |
balance.voice |
Number |
Free call time from plan (in seconds) |
secondsUsedToday |
Number |
How many free seconds was used in day given as parameter (+24h) |
Possible errors
Error key |
Description |
PARAMETER.NOT_PRESENT |
When dateFrom was not present |
DATE_INVALID |
Date was passed in invalid format |
Get destinations
Example request:
GET /api/v1/finance/plans/destinations HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 8254
{
"destinations" : {
"GB_Mobile" : {
"countryIsoCode" : "gb",
"description" : "Mobile"
},
"US_Local" : {
"countryIsoCode" : "us",
"description" : "Local"
},
"RO_Mobile" : {
"countryIsoCode" : "ro",
"description" : "Mobile"
},
"MX_All" : {
"countryIsoCode" : "mx",
"description" : "All"
},
"AT_Local" : {
"countryIsoCode" : "at",
"description" : "Local"
},
"BD_All" : {
"countryIsoCode" : "bd",
"description" : "All"
},
...
},
"destinationGroups" : {
"basic" : [ "SK_Local", "ZA_Local", "KR_Local", "SE_Mobile", "GB_Mobile", "IS_Local", "IE_Local", "IL_Local", ...],
"free" : [ "BR_Local", "CA_Local", "CN_All", "DK_Local", "FR_Local", "DE_Local", ... ],
"regular" : [ "BR_Local", "CA_Local", "PT_Mobile", "RE_Local", "RO_Mobile", "SM_Local", "SG_All", "VE_Local", ...]
}
}
Get a list of countries eligible to be called for free, subject to your plans’ voice/minutes limit.
Response results
Path |
Type |
Description |
destinations |
Object |
All available destinations |
destinations.*.countryIsoCode |
String |
ico code for specific type |
destinations.*.description |
String |
Short description |
unlimitedVoiceBalance |
Object |
Countries with unlimited calls within given plan |
unlimitedVoiceBalance.regular |
Array |
Countries with unlimited calls in regular plan |
unlimitedVoiceBalance.call_forwarding |
Array |
Countries with unlimited calls in call forwarding plan |
destinationGroups |
Object |
Available countries per plan |
destinationGroups.free |
Array |
Countries in free plan |
destinationGroups.basic |
Array |
Countries in basic plan |
destinationGroups.regular |
Array |
Countries in regular plan |
destinationGroups.call_forwarding |
Array |
Countries in call forwarding plan |
Subscription
Example request:
GET /api/v1/finance/subscription HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Example response:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 481
{
"type" : "CRAZYCALL",
"status" : "ACTIVE",
"plan" : "FSksFgT",
"planId" : "9c1L80f",
"quantity" : 10,
"voiceBalanceSeconds" : 30000,
"discountPercentage" : 10,
"discountType" : "FOREVER",
"discountValid" : true,
"periodStart" : 1707650322,
"periodEnd" : 1710242322,
"destinationCountriesCount" : 90,
"cancelAtPeriodEnd" : false,
"planCurrency" : "USD",
"trial" : false,
"discountDollars" : 10.0,
"planPrice" : 0.95,
"subscriptionPrice" : 9.5
}
Receive your current subscription. Remember - when you try to upgrade plan it will be available after old subscription expired.
Response results
Path |
Type |
Description |
plan |
String |
Plan’s name |
status |
class com.crazycall.subscription.model.SubscriptionStatus |
Subscription status |
planPrice |
Number |
Basic price for this plan (per user) |
planCurrency |
String |
Currency of the plan in ISO 4217 format |
quantity |
Number |
Amount of money available now |
voiceBalanceSeconds |
Number |
Time (in seconds) of free calls |
discountPercentage |
Number |
Available discount’s percentage |
discountType |
class com.crazycall.subscription.model.DiscountType |
One of FOREVER , ONCE , and REPEATING |
discountValid |
Boolean |
Applied coupon is still valid |
discountDollars |
Number |
Available amount of discount |
periodStart |
Number |
Date (in millis) when subscription started |
periodEnd |
Number |
Date (in millis) when subscription will end |
destinationCountriesCount |
Number |
Number of countries for voice balance |
trial |
Boolean |
Is this subscription a trial |
subscriptionPrice |
Number |
Total price of this subscription |
cancelAtPeriodEnd |
Boolean |
Is the subscription scheduled for cancellation |
Reports
Download the reports for your calls and effectiveness.
Example request:
GET /api/v1/reports?dateFrom=2024-02-16&dateUntil=2024-02-21&timezoneOffsetMinutes=-120&reportTypes=DAILY_CONTACT_STATUS&reportTypes=BILLINGS&reportTypes=LAST_CONTACT_EVENTS_DUMP&projectIds=8&projectIds=9 HTTP/1.1
x-api-token: your-secret-api-key
Account: your-account-hash.crazycall.com
Host: api.crazycall.com
Request parameters
Parameter |
Description |
dateFrom |
(required) The date from which reports will be generated (e.g. 2017-12-12) |
dateUntil |
(required) The finish date of generated reports (e.g. 2017-12-12) |
projectIds |
Project’s ids for which will be generated report. Required non-null value for project report. Required null value for overall report. |
timezoneOffsetMinutes |
Time offset from UTC (in minutes, can be negative, default 0) |
reportTypes |
(required) Type of reports to generate (see the descriptions below) |
Example response:
HTTP/1.1 200 OK
Content-Type: application/zip;charset=UTF-8
Reports-Total: 4
Reports-Success: 2
Reports-Empty: 2
Reports-Empty-Name: SCRIPT_ANSWERS
Reports-Empty-Name: BILLINGS
Content-Disposition: attachment; filename="reports_2017-10-26.zip"
Content-Length: 6806
the content will be a file with reports (application/x-ms-excel if only one file is generated, application/zip otherwise)
reportTypes
parameter is an array. We will accept both reportTypes=TYPE1&reportType=TYPE2
and reportTypes=TYPE1,TYPE2
formats.
As a response, you will receive a file with reporting data. If only one report is selected, the file will be in .xlsx
format. Otherwise, the compressed .zip
file
will be downloaded with all selected reports as .xlsx
.
If we cannot generate any report (due to lack of data - for example, no calls were made in the selected date range)
there will be an empty response with 0 as value for Reports-Success
header.
The response contains Content-Disposition
header with the report’s filename. It will match this pattern: {REPORT_NAME}_{CURRENT_DATE}.xlsx
, (e.g. Effectiveness report_2017-10-26.xlsx
) for one report
and reports_{CURRENT_DATE}.zip
for .zip
file with {REPORT_NAME}.xlsx
reports.
Header |
Description |
Reports-Total |
Number of all downloaded reports |
Reports-Empty |
Number of empty reports (we were unable to generate it due to the lack of data) |
Reports-Success |
Number of downloaded reports with data |
Reports-Empty-Name |
Types of empty reports |
Possible errors
Error key |
Description |
DATE_EMPTY |
Cannot find dateFrom or dateUntil in your request |
REPORT_TYPES_EMPTY |
Cannot find any report type |
PARAM_UNEXPECTED |
Cannot generate overall report with given project’s id |
PROJECT_DOES_NOT_EXIST |
Cannot find project with given id |
REPORT_NOT_IN_BACKWARD_DAYS_RANGE |
Your plan doesn’t allow to get reports from given date |
REPORT_WRONG_ENTERED_DATES |
Invalid range - dateFrom is after dateUntil |
HOURS_OUT_OF_RANGE |
timezoneOffsetMinutes value is above 1439 (one day in minutes) |
Agent activity
Report Type: AGENT_ACTIVITY
Activity report lets you see how your agents performed on a given day or within a selected date range. It includes the statistics regarding the outbound and inbound calls made and taken by the agent, as well, as data on how the agent spent his time making and taking calls.
Here you will also find information about incoming calls and how many were answered, as well as, the number of outbound calls made and how many of those were picked up.
There are 17 constant elements in this report and here’s how to understand them:
- User - email address of the user
- Project - the name of the project in which the calls were handled
- Work time - work time of the agent
- Calls - the number of calls made or taken by the agent
- Outbound calls - the number of outbound calls made by the agent
- Answered outbound calls - the number of answered outbound calls made by the agent
- Inbound calls - the number of inbound calls taken by the agent
- Answered inbound calls - the number of answered inbound calls taken by the agent
- Closed Contacts - the number of closed contacts by the agent
- Successes - the number of success statuses given by the agent
- Success rate - the ratio of the total number of successes to the total number of calls made by the agent
- Successes per hour - the amount of successes per hour
- Summary talk time - the overall time the agent spent talking
- Average talk time - talk time calculated by dividing the summary talk time by the number of calls made by the agent
- Talk time rate - the ratio of summary talk time to work time
- Pause time - total time the agent has spent on pause
- Voice drop time - total time of the voice drop
Agent work time
Report Type: AGENT_WORKTIME
Agent work time report lets you know how long your agents were actually calling customers and how long they spent on pause.
The work time is counted right after the agent has logged into the Call Panel (or Chrome Extension) and chosen a project till he or she stopped
calling and logged out of the Call Panel (or Chrome Extension).
This is how to understand the terms used in this report:
- Date - the date when the agent worked
- Project - the name of the project
- User - email address of the user
- Work Time - time spent using the dialer and making calls
- Talk Time - time spent talking to a customer
- Pause Time - the total pause time expressed in minutes (all pauses taken by the agent will be displayed in this column)
- Pause 1, 2, 3.. - start and end time for each pause taken by the agent
To know for how long the agent was logged into the Call Panel (or Chrome Extension), you need to sum up the values from the second and third column.
The final appearance, name, and the number of columns in the report depend on the number of pauses taken by the agent.
If you generate the report for a specific date range, each day will appear in a separate tab.
Billings
Report Type: BILLINGS
With this report, you can see how much time each call takes and costs. It is counted from the moment your contact answers
the call until the moment he or she hangs up. The time waiting for the answer and the time after the call is excluded.
- Contact ID - ID of the given contact
- User - email address of the user
- Project - the name of the project in which the call was handled
- Date - the time and date when the call was answered
- Phone number - the contact number that was called
- Connection time - time that it took to connect to the customer (expressed in seconds) along with the whole duration of the call
- Call time - call duration expressed in seconds
- Cost - the price you paid for the particular connection. An empty value means that this call was included in your monthly minutes package
- Direction - information regarding whether it was an outbound or an inbound call
Call cost summary (Overall report)
Report Type: CALL_COST_SUMMARY
A very similar report to Billings report, but here you will be able to see the whole billing history on the account, from every project, even if the project was deleted the information about the costs will be saved here.
This is how to understand the terms used in this report:
- Contact ID - ID of the given contact
- User - email address of the user
- Project - the name of the project in which the call was handled
- Date - the time and date when the call was answered
- Phone number - the contact number that was called
- Connection time - time that it took to connect to the customer (expressed in seconds) along with the whole duration of the call
- Call time - call duration expressed in seconds
- Cost - the price you paid for the particular connection. An empty value means that this call was included in your monthly minutes package
- Direction - information regarding whether it was an outbound or an inbound call
Report Type: DAILY_CONTACT_STATUS
Daily contact status report presents daily information on the imported contacts. Use it to see how many of them are open, scheduled, auto-scheduled, etc. at the beginning of each day.
The number and names of columns always remain the same and are as following:
- Date - the time and date the report is on
- Project - the name of the project from which the data is gathered
- All not closed contacts at the beginning of that day - the number of not closed contacts on the project for the given day (contains open, auto-scheduled or scheduled contacts)
- Open contacts at the beginning of that day - the number of open contacts on a given project at the beginning of a given day
- Scheduled contacts at the beginning of that day - the number of scheduled contacts at the beginning of the given day
- Auto-scheduled contacts at the beginning of that day - the number of auto-scheduled contacts at the beginning of the given day
- Not verified contacts at the beginning of that day - the number of not verified contacts at the beginning of the given day
- Contacts imported to the project on that day - the number of imported contacts to the project for a given day
- Contacts closed in the project on that day - the number of closed contacts on the project for a given day
Effectiveness
Report Type: EFFECTIVENESS
Thanks to the Effectiveness report you can measure the most important Key Performance Indicators (KPIs) like Contact Rate,
Hit Rate, Success Rate, number of called, answered, and closed contacts. You can generate this report for a selected date range.
Here’s how to understand the terms used in this report:
- Date - the time and date the report is on
- Project - the name of the project in which the call was handled
- User - email address of the user
- Successes - the number of success statuses given by the agent
- Attempted Contacts - the number of contact attempts made by the agent
- Effective Contacts - the number of unique contacts made by the agent
- Closed Contacts - the number of closed contacts by the agent
- Contact Rate - the ratio of the total number of answered calls to the total number of attempted contacts made by the agent
- Success Rate - the ratio of the total number of successes to the total number of calls made by the agent
- Hit Rate - the ratio of the total number of successes to the total number of closed contacts
- Calls - the number of calls made or taken by the agent
Note: Voicemail is not considered as a contact answered by the customer.
Events
Report Type: EVENTS
An event in CrazyCall is an action that happens in relation to a given contact. This could be anything, from call attempt to closing with a success status.
Events report summarizes all these actions in one place.
This report contains two separate tabs. First being the Instructions tab in which you’ll find an explanation of what you can find in the report and the second being the report itself.
Here’s how to understand the terms used in this report:
- Contact ID - ID of the given contact
- User - email address of the user
- Project - the name of the project in which the calls were handled
- Project ID - ID of the given project
- Event date - when the given event happened
- Phone number - the contact number that was called
- First name - Contact’s first name
- Last name - Contact’s last name
- E-mail address - Contact’s e-mail address
- Company - Contact’s company
- Contact status - information regarding the contact status like that the record was opened, closed or scheduled for later call
- Event Status - type of event performed on this contact
- Schedule date - here you can check when a callback was set for a given number
- Note - note taken by the agent
- HubSpot Contact ID - the ID of HubSpot Contact. It’s only available when called from HubSpot using Call Widget
- HubSpot Ticket ID - the ID of HubSpot Ticket. It’s only available when called from HubSpot using Call Widget
Additionally, the report may contain imported customer data. The final appearance, names, and the number of columns in the report will depend on the imported file.
You may notice that your report contains columns with empty values. This can happen if your project includes several imports with different file structures, e.g. with varying number of columns or names.
Report Type: LAST_CONTACT_EVENTS_DUMP
Last contact events dump report presents detailed information on the recent events that happened to a contact. For each
contact you’ll see the following details: time of the call, its length, phone number, call status and the name of the agent who handled that call.
Let’s say, a call gets rescheduled at 2 pm. At 4 pm. the same day the same contact is marked with the Save Success
status.
With the Last Contact Events Dump Report
you’ll see the latest event, which in this case is the success.
The number and names of columns in this report are constant and here’s how to understand them:
- Contact ID - ID of the given contact
- Call start date - the time and date when the call was initiated
- Call answer date - the time and date when the call was answered
- Call finish date - the time and date when the call was finished
- Event save date - the time and date when the event was saved
- Phone number - contact number that was called
- Call direction - direction of the call whether it was inbound or outbound
- Status - information regarding the contact status like that the record was opened, closed or scheduled for later call
- Event Status - type of event performed on this contact
- Schedule date - here you can check when a callback was set for a given number
- User - email address of the user who performed that action on the contact
- Project - the name of the project in which this contact was made
- Note - note taken by the agent
- HubSpot Contact ID - the ID of HubSpot Contact. It’s only available when called from HubSpot using Call Widget
- HubSpot Ticket ID - the ID of HubSpot Ticket. It’s only available when called from HubSpot using Call Widget
Script answers
Report Type: SCRIPT_ANSWERS
Probably the most information-packed report at the moment. Here you can find the uploaded data of the contact, duration of the call, notes, contact and event status, and, as the name suggests, the script answers.
This report contains two separate tabs. First being the Instructions tab in which you’ll find an explanation of what you can find in the report and the second being the report itself.
This is how to understand the terms used in this report:
- Contact ID - ID of the given contact
- User - email address of the user
- Project - the name of the project in which the call was handled
- Project ID - ID of the given project
- Event date - when the event happened
- Contacts Phone Number - contact number that was called
- Your Phone Number - agent’s phone number
- First name - Contact’s first name
- Last name - Contact’s last name
- E-mail address - Contact’s e-mail address
- Company - Contact’s company
- Call script ID - ID of the given call script
- Call script name - the name of the script that was used and filled
- Call duration - call duration expressed in seconds
- Call direction - information regarding whether it was an outbound or an inbound call
- Contact status - information regarding the contact status like that the record was opened, closed or scheduled for later call
- Event Status - type of event performed on this contact
- Schedule date - here you can check when a callback was set for a given number
- HubSpot Contact ID - the ID of HubSpot Contact. It’s only available when called from HubSpot using Call Widget
- HubSpot Ticket ID - the ID of HubSpot Ticket. It’s only available when called from HubSpot using Call Widget
Besides the above columns you’ll also find additional ones containing the scripts answers provided by the agent.
Additionally, the report may contain imported customer data.
You may notice that your report contains columns with empty values. This can happen if your project includes several imports with different file structures, e.g. with varying number of columns or names.
Webhooks
Webhooks allow you to configure a URL that will be notified every time an event occurs on your account. When one of the events you subscribe to happens, crazycall will send a json object representing that event through a HTTP POST request to your webhooks URL.
Webhook configuration
To find webhook settings, click on your Account icon in the top right corner, then select For Developers. There, you can find “Webhooks” section. You can either edit your existing webhook configurations, disable them, or click “Add Webhook” at the top of the page to add a new configuration.
There are four sections that you have to fill:
- Project - webhooks are created for a project. Select one from the dropdown.
- Event types - select at least one of the event types you want to subscribe to. They are described in more detail below. You can choose any number of types.
- Webhook name - select a unique name you will identify your webhook by, like “Stats app notification”
- URL - provide an address that events should be sent to.
Responding to webhook
We do not expect any response from the endpoint you configure. You can respond with a customary HTTP 200 code, however this is not required. We currently do not support resending events that were failed to be properly delivered.
Event types
This is a list of all the types of events we currently send. We may add more at any time, so you shouldn’t rely on only these types existing in your code.
Here’s a list of dictionaries common to most event types described below.
status |
Description |
AUTOSCHEDULED |
Autoscheduled |
CLOSED |
Closed |
NOT_VERIFIED |
Not verified |
OPEN |
Open |
SCHEDULED |
Scheduled |
source |
Description |
API |
Api |
WEBHOOK |
Webhook |
INCOMING |
Incoming call |
WIDGET |
Widget |
LEAD |
Lead generation |
Call finished
Sent always when a call is finished, regardless of its result. If the call was answered, this webhook will contain a URL link to the recording file. This means that calls that are handled by this webhook automatically have public recording links. Please see Call Recordings section for more details.
Example response body:
{
"id" : 6705782096906236976,
"contact" : {
"id" : 7332858818067584057,
"createdAt" : "2024-02-21T11:18:48.771+00:00",
"projectId" : 460718215239467491,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "koMjMj",
"externalLink" : "http://www.crazycall.com",
"company" : "YOVDnF",
"detail" : "KDIcxr",
"email" : "snVJvDYEOAal@jfngcibbYEHh.com",
"lastname" : "lfwmkA"
},
"lastModificationDate" : "2024-02-21T11:18:48.771+00:00",
"externalServices" : null
},
"msisdn" : "+48717221111",
"agentMsisdn" : "+14153661222",
"agentMsisdnId" : 6323610474068845996,
"startDate" : "2024-02-21T11:11:48.770+00:00",
"answeredDate" : "2024-02-21T11:13:48.770+00:00",
"transferDate" : null,
"finishDate" : "2024-02-21T11:16:48.770+00:00",
"length" : 180,
"finishType" : "FINISHED_BY_AGENT",
"agentId" : 5078586672066375600,
"agentName" : "Name",
"agentSurname" : "Surname",
"agentUsername" : "eMnFCZTFKGAH@zAKYNxMPhGOq.com",
"recordingLink" : "http://www.crazycall.com/recording123",
"direction" : "OUTBOUND",
"lastEventType" : "SUCCESS",
"appType" : "WIDGET",
"callDetails" : {
"key" : "value",
"numeric" : 7
}
}
Response results
Path |
Type |
Description |
id |
Number |
Call Id |
direction |
String |
Direction of the call. Can be either INBOUND or OUTBOUND |
agentUsername |
String |
Username (typically email) of the user who created an event |
agentId |
Number |
User ID of the agent who participated in the call |
agentName |
String |
Name of the agent who participated in the call |
agentSurname |
String |
Surname of the agent who participated in the call |
agentMsisdnId |
Number |
ID of the phone number that agent was identified by during the call |
agentMsisdn |
String |
Phone number that agent was identified by during the call |
msisdn |
String |
Phone number of the client |
recordingLink |
String |
URL link to the recording file |
startDate |
String |
Date when the call was initialized by either party |
answeredDate |
String |
Date when the call was answered (either by the client for direction OUTBOUND or by an agent for INBOUND) |
finishDate |
String |
Date when the call was finished (e.h. either party hung up) |
transferDate |
Null |
Date when the call was transferred to another phone number (if it happened) |
length |
Number |
Length of the call in seconds |
appType |
String |
Application used by the agent to handle the call. Can be either BROWSER, WIDGET or MOBILE |
finishType |
String |
Reason why the call was finished |
lastEventType |
String |
Last event set by an agent or the system after the call has ended |
callDetails |
Object |
Additional details related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Finish type
Finish type |
Description |
BUSY |
Busy |
NOT_ANSWERED |
Not answered |
FAILED |
Call failed |
INCOMING_CALL_FAILED |
Incoming call was not handled |
INCOMING_CALL_VOICEMAIL |
No agents handled the call. Voicemail prompt was played. |
MAX_CALL_DURATION_EXCEEDED |
Call was too long |
VOICE_MAIL_DROP |
Agent played voicemail drop message |
FINISHED_BY_AGENT |
Agent hungup |
FINISHED_BY_CLIENT |
Client hung up |
FAILED_CONNECT_AGENT |
Failed to connect to agents browser |
INSUFFICIENT_FUNDS |
Insufficient funds on the account |
Last event type
Last event type |
Description |
SCHEDULE |
a call has been manually scheduled to a particular date and time by an agent |
SUCCESS |
contact has been closed and marked as a success. Usually, it means the goal of the call has been reached |
REFUSE |
contact has been closed with a custom status created by a user. It can take any value |
FAILED_CONTACT |
a call didn’t connect to a person. It can be due to several reasons - agent reached a voicemail, the line was busy, a call has been not answered, agent disconnected before reached a person or network error |
NOT_VERIFIED |
this is an automated status, which is set whenever an agent has not set any status during a call |
INCOMING_CALL_STATUS |
an incoming call marked with a custom status created by a user. By default, it’s “Incoming call” |
VOICE_MAIL_DROP |
an agent has decided to play a pre-recorded message and disconnect the call |
Sent when you closed a contact
Example response body:
{
"id" : 5896180369210232927,
"createdAt" : "2024-02-21T11:18:48.828+00:00",
"type" : "CLOSE_CONTACT",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contact" : {
"id" : 2189152986649774875,
"createdAt" : "2024-02-21T11:18:48.828+00:00",
"projectId" : 270970746084599261,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "rHzwoE",
"externalLink" : "http://www.crazycall.com",
"company" : "FWDlPX",
"detail" : "RjLECk",
"email" : "LzcPBjPxniCL@RBPseMKqJIeh.com",
"lastname" : "xkIFrc"
},
"lastModificationDate" : "2024-02-21T11:18:48.828+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always CLOSE_CONTACT ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Conference call
Sent when you created a conference call
Example response body:
{
"id" : 3917900900455230308,
"createdAt" : "2024-02-21T11:18:48.502+00:00",
"type" : "CONFERENCE_CALL",
"callId" : 5739042705011871727,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"conferenceMsisdn" : "+48717221111",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"note" : "biuCMxbPgfH",
"contact" : {
"id" : 1105307603088272825,
"createdAt" : "2024-02-21T11:18:48.502+00:00",
"projectId" : 680150962714584562,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "cqwTBJ",
"externalLink" : "http://www.crazycall.com",
"company" : "ASqSKH",
"detail" : "Unrwud",
"email" : "TraOcZBolwVs@rmSoeOGrDiiX.com",
"lastname" : "XFSIiH"
},
"lastModificationDate" : "2024-02-21T11:18:48.502+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always CONFERENCE_CALL ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Id of the call that initiated the conference |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Phone number of the contact that initiated the call |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
conferenceMsisdn |
String |
Number with which the conference was established |
note |
String |
Note added during the conference |
Config change event
Sent when you change the number on one of your contacts.
Example response body:
{
"id" : 6268023921834898502,
"createdAt" : "2024-02-21T11:18:48.958+00:00",
"type" : "MSISDN_CONFIG_CHANGE",
"callId" : 5531195333369090225,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"newMsisdn" : "+14153661222",
"oldMsisdn" : "+48717221111",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"note" : "SsmkNtEdnBu",
"contact" : {
"id" : 6842083666339117218,
"createdAt" : "2024-02-21T11:18:48.958+00:00",
"projectId" : 8065987352817837521,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "CHmQjP",
"externalLink" : "http://www.crazycall.com",
"company" : "QwORMQ",
"detail" : "uEjnBC",
"email" : "BKvWTpeNfkba@VJXmvgPqmfgG.com",
"lastname" : "azPhGX"
},
"lastModificationDate" : "2024-02-21T11:18:48.958+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always MSISDN_CONFIG_CHANGE ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
For a change that happened during a call, the relevant call id (optional) |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
For a change that happened during a call, the called contact’s phone number (optional) |
crazyCallMsisdn |
String |
For a change that happened during a call, phone number assigned to your project when the call happened (optional) |
oldMsisdn |
String |
Previous number |
newMsisdn |
String |
Updated msisdn (current for contact) |
note |
String |
Note added while changing number (optional) |
Sent when you updated custom information about your contact
Example response body:
{
"id" : 2846249240007057889,
"createdAt" : "2024-02-21T11:18:48.597+00:00",
"type" : "CONTACT_DETAILS_CHANGE",
"callId" : 6969121515653951866,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"contact" : {
"id" : 8585638777688011414,
"createdAt" : "2024-02-21T11:18:48.597+00:00",
"projectId" : 8335340491169590930,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "humMPC",
"externalLink" : "http://www.crazycall.com",
"company" : "BJcbZa",
"detail" : "xjmmGj",
"email" : "bepOhaEkikbi@zKinoUcCPdyH.com",
"lastname" : "cUNSrJ"
},
"lastModificationDate" : "2024-02-21T11:18:48.597+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always CONTACT_DETAILS_CHANGE ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
For a change that occurred during a call, the relevant call id (optional) |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
For a change that occurred during a call, the called contact’s phone number (optional) |
crazyCallMsisdn |
String |
For a change that occurred during a call, phone number assigned to your project when the call happened (optional) |
Sent when you removed a contact
Example response body:
{
"id" : 6141367139573954375,
"createdAt" : "2024-02-21T11:18:49.058+00:00",
"type" : "DELETE_CONTACT",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contact" : {
"id" : 5276717765720838088,
"createdAt" : "2024-02-21T11:18:49.058+00:00",
"projectId" : 2037482688767608429,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "VMzLBg",
"externalLink" : "http://www.crazycall.com",
"company" : "VzffvQ",
"detail" : "qWyYbv",
"email" : "wTiRnnsQRQQc@PgdFdwSxANGM.com",
"lastname" : "eNAZkw"
},
"lastModificationDate" : "2024-02-21T11:18:49.058+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always DELETE_CONTACT ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Sent when you attempted a call, but you didn’t reach your contact for whatever reason, like the contact is unavailable or decided to not pickup your call.
Example response body:
{
"id" : 5947439374330999885,
"createdAt" : "2024-02-21T11:18:48.713+00:00",
"type" : "FAILED_CONTACT",
"reason" : "VOICE_MAIL",
"callId" : 5555695928110824370,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"contact" : {
"id" : 559521741735570415,
"createdAt" : "2024-02-21T11:18:48.713+00:00",
"projectId" : 1058893881054159842,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "oiWPlm",
"externalLink" : "http://www.crazycall.com",
"company" : "XgPRqM",
"detail" : "WPAxWZ",
"email" : "gkxzdZnOCKmq@YOjEshwiFrtp.com",
"lastname" : "GxdxwB"
},
"lastModificationDate" : "2024-02-21T11:18:48.713+00:00",
"externalServices" : null
},
"scheduleDate" : "2024-02-23T11:18:48.713+00:00"
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always FAILED_CONTACT ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Call id for a call that was attempted but failed |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
scheduleDate |
String |
Scheduled date of next contact |
reason |
String |
Failed reason |
Failed reasons
Reason |
Description |
VOICE_MAIL |
Voice mail |
BUSY |
Busy |
NOT_ANSWERED |
Not answered |
UNAVAILABLE_MSISDN |
Unavailable msisdn |
NETWORK_ERROR |
Network error |
NO_MSISDN_TO_CALL |
No msisdn to call |
FAILED_CONNECT_AGENT |
Failed connect agent |
INSUFFICIENT_FUNDS |
Insufficient funds |
Sent when you created new contacts through the “Load contacts” wizard in your project
Example response body:
{
"id" : 4692537878046769587,
"createdAt" : "2024-02-21T11:18:48.800+00:00",
"type" : "IMPORT_CONTACT",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contact" : {
"id" : 912316619844106974,
"createdAt" : "2024-02-21T11:18:48.800+00:00",
"projectId" : 3267667101589088075,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "UzZnXl",
"externalLink" : "http://www.crazycall.com",
"company" : "lRyCPy",
"detail" : "pHBcJL",
"email" : "tYdGhNzHIRoa@FTEvoDiUUCNt.com",
"lastname" : "xBigXH"
},
"lastModificationDate" : "2024-02-21T11:18:48.800+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always IMPORT_CONTACT ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Incoming call
Sent when someone attempted a call to one of the numbers associated with your projects. This event is also sent for failed calls, so whether you actually received the call or weren’t available
Example response body:
{
"id" : 2884693786421002494,
"createdAt" : "2024-02-21T11:18:48.987+00:00",
"type" : "INCOMING_CALL_STATUS",
"customStatus" : "INCOMING_CALL_STATUS.REDIRECT_INCOMING_CALL",
"callId" : 8898108864843369989,
"callDirection" : "INBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"redirectMsisdn" : "+48717221111",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"note" : "rLXhFYtBXwq",
"answerResults" : {
"Question1" : [ "Answer1", "Answer2" ],
"Question2" : [ "Answer1" ],
"Question3" : [ "2024-02-21T11:18:48.987Z" ]
},
"contact" : {
"id" : 2945595408520873514,
"createdAt" : "2024-02-21T11:18:48.987+00:00",
"projectId" : 942167738131168422,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "Ebucma",
"externalLink" : "http://www.crazycall.com",
"company" : "mkogKL",
"detail" : "QoNfPx",
"email" : "sXKwVjgglRaF@vUpQqUdECZMr.com",
"lastname" : "JidPWZ"
},
"lastModificationDate" : "2024-02-21T11:18:48.987+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always INCOMING_CALL_STATUS ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Call id of the call |
callDirection |
String |
Type of call, always INBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
redirectMsisdn |
String |
Number to redirect to, according to rules setup for this crazyCall number (optional) |
customStatus |
String |
Status assigned to this call |
note |
String |
If note was created during a call, the text contents of the note (optional) |
answerResults |
Object |
Answers to the script |
Incoming call started
Sent when a call is being answered by the agent, regardless if it has been answered in CrazyCall or as a forwarded call.
Example response body:
{
"id" : 6624315468560505945,
"contact" : {
"id" : 7889634188355161258,
"createdAt" : "2024-02-21T11:18:48.684+00:00",
"projectId" : 3197901154998145123,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "IJQdDQ",
"externalLink" : "http://www.crazycall.com",
"company" : "kxCWDG",
"detail" : "aXgPzk",
"email" : "npMuQCDrsAIO@hxhuIxnBMPcb.com",
"lastname" : "xwMvIL"
},
"lastModificationDate" : "2024-02-21T11:18:48.684+00:00",
"externalServices" : null
},
"msisdn" : "+48717221111",
"agentMsisdn" : "+14153661222",
"agentMsisdnId" : 1866978226490768760,
"startDate" : "2024-02-21T11:11:48.684+00:00",
"answeredDate" : "2024-02-21T11:12:48.684+00:00",
"transferDate" : null,
"finishDate" : "2024-02-21T11:16:48.684+00:00",
"length" : 0,
"finishType" : "FINISHED_BY_CLIENT",
"agentId" : 9002319625225809281,
"agentName" : "Name",
"agentSurname" : "Surname",
"agentUsername" : "GxkjOtKSTKFt@amRNoQoYRqaH.com",
"recordingLink" : null,
"direction" : "INBOUND",
"lastEventType" : "SUCCESS",
"appType" : "BROWSER",
"callDetails" : {
"key" : "value",
"numeric" : 7
}
}
Response results
Path |
Type |
Description |
id |
Number |
Call Id |
direction |
String |
Direction of the call. In this scenario it will always be INBOUND |
agentUsername |
String |
Username (typically email) of the user who created an event |
agentId |
Number |
User ID of the agent who participated in the call |
agentName |
String |
Name of the agent who participated in the call |
agentSurname |
String |
Surname of the agent who participated in the call |
agentMsisdnId |
Number |
ID of the phone number that agent was identified by during the call |
agentMsisdn |
String |
Phone number that agent was identified by during the call |
msisdn |
String |
Phone number of the client |
startDate |
String |
Date when the call was initialized by either party |
answeredDate |
String |
Date when the call was answered by an agent |
finishDate |
String |
Date when the call was finished (e.h. either party hung up) |
length |
Number |
Length of the call in seconds |
appType |
String |
Application used by the agent to handle the call. Can be either BROWSER, WIDGET or MOBILE |
finishType |
String |
Reason why the call was finished |
lastEventType |
String |
Last event set by an agent or the system |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Voice message left
Voice message left
Example response body:
{
"id" : 6260228718640996064,
"contact" : {
"id" : 5380348761582414576,
"createdAt" : "2024-02-21T11:18:48.742+00:00",
"projectId" : 4185965657929387482,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "OpXZKv",
"externalLink" : "http://www.crazycall.com",
"company" : "YZiigs",
"detail" : "EsdAFp",
"email" : "KNThgWggqRVG@KVsEJTikdZAE.com",
"lastname" : "rselwC"
},
"lastModificationDate" : "2024-02-21T11:18:48.742+00:00",
"externalServices" : null
},
"msisdn" : "+48717221111",
"agentMsisdn" : null,
"agentMsisdnId" : null,
"startDate" : "2024-02-21T11:11:48.742+00:00",
"answeredDate" : "2024-02-21T11:12:48.742+00:00",
"transferDate" : null,
"finishDate" : "2024-02-21T11:16:48.742+00:00",
"length" : 240,
"finishType" : "INCOMING_CALL_VOICEMAIL",
"agentId" : null,
"agentName" : null,
"agentSurname" : null,
"agentUsername" : null,
"recordingLink" : "http://www.crazycall.com/recording123",
"direction" : "INBOUND",
"lastEventType" : "INCOMING_CALL_STATUS",
"appType" : null,
"callDetails" : null
}
Response results
Path |
Type |
Description |
id |
Number |
Call Id |
direction |
String |
Direction of the call. In this scenario it will always be INBOUND |
msisdn |
String |
Phone number of the client |
startDate |
String |
Date when the call was initialized by either party |
answeredDate |
String |
Date when the call was answered by an agent |
finishDate |
String |
Date when the call was finished (e.h. either party hung up) |
length |
Number |
Length of the call in seconds |
finishType |
String |
Reason why the call was finished. In this scenario it will always be INCOMING_CALL_VOICEMAIL |
lastEventType |
String |
Last event set by an agent or the system. In this scenario it will always be INCOMING_CALL_STATUS |
recordingLink |
String |
URL link to the recording file |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Not verified
Sent when something unexpected happened during a call. These should be rare. You should review them later.
Example response body:
{
"id" : 3230811024046578058,
"createdAt" : "2024-02-21T11:18:48.885+00:00",
"type" : "NOT_VERIFIED",
"callId" : 8557084864773156079,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"contact" : {
"id" : 5645140749344165221,
"createdAt" : "2024-02-21T11:18:48.885+00:00",
"projectId" : 8108847584889448180,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "UdkRfp",
"externalLink" : "http://www.crazycall.com",
"company" : "lhvwZr",
"detail" : "kWQurp",
"email" : "gCgtSYKPQqdi@NNbPQvBsUDSe.com",
"lastname" : "SojiOd"
},
"lastModificationDate" : "2024-02-21T11:18:48.885+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always NOT_VERIFIED ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Call id for a call that was attempted but its status and results should be reviewed |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
Note
Sent when an incoming call hasn’t been answered and a client has left a voicemail. It can only happen if it’s allowed in the phone number settings.
Example response body:
{
"id" : 2191351564943247466,
"createdAt" : "2024-02-21T11:18:48.422+00:00",
"type" : "NOTE",
"callId" : 1572035616241318938,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"note" : "YxdipfBNWEO",
"contact" : {
"id" : 2826601970720499796,
"createdAt" : "2024-02-21T11:18:48.423+00:00",
"projectId" : 2766089497742898549,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "xyXXiQ",
"externalLink" : "http://www.crazycall.com",
"company" : "aXXfEq",
"detail" : "DpfTpr",
"email" : "XidcuVugpeZE@TswCwAvUXKSr.com",
"lastname" : "mdyXdR"
},
"lastModificationDate" : "2024-02-21T11:18:48.423+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always NOTE ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
For a note that was created during a call, the relevant call id (optional) |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
For a note that was created during a call, the called contact’s phone number (optional) |
crazyCallMsisdn |
String |
For a note that was created during a call, phone number assigned to your project when the call happened (optional) |
note |
String |
Actual note |
Sent when you opened a contact
Example response body:
{
"id" : 8791319488809276354,
"createdAt" : "2024-02-21T11:18:48.542+00:00",
"type" : "OPEN_CONTACT",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contact" : {
"id" : 1722408675282556413,
"createdAt" : "2024-02-21T11:18:48.542+00:00",
"projectId" : 3998652847271070975,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "kuvoHh",
"externalLink" : "http://www.crazycall.com",
"company" : "lkehzn",
"detail" : "dhkAFz",
"email" : "DwrTVnlEfXfM@quMtssGAnuny.com",
"lastname" : "inrJfg"
},
"lastModificationDate" : "2024-02-21T11:18:48.542+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always OPEN_CONTACT ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
Refuse event
Sent when you mark a call as refused and you choose a reason for refusal.
Example response body:
{
"id" : 503628982459574003,
"createdAt" : "2024-02-21T11:18:49.018+00:00",
"type" : "REFUSE",
"callId" : 7613322333466869224,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"answerResults" : {
"Question1" : [ "Answer1", "Answer2" ],
"Question2" : [ "Answer1" ],
"Question3" : [ "2024-02-21T11:18:49.018Z" ]
},
"refuseReason" : {
"id" : 7016813437045143300,
"name" : "pMoeh",
"projectId" : 7955270451235042495,
"type" : "CALL_PANEL"
},
"contact" : {
"id" : 2706105818085589398,
"createdAt" : "2024-02-21T11:18:49.018+00:00",
"projectId" : 951063547028930367,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "QGORoX",
"externalLink" : "http://www.crazycall.com",
"company" : "IwwSEn",
"detail" : "lWYFhP",
"email" : "PnleAwgUkpiQ@pDtHKCXpgTuj.com",
"lastname" : "smpING"
},
"lastModificationDate" : "2024-02-21T11:18:49.018+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always REFUSE ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Call id during which the refusal happened |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
refuseReason.id |
Number |
Refuse reason’s id |
refuseReason.name |
String |
Refuse reason’s name |
refuseReason.projectId |
Number |
Id of the project where contact is assigned |
refuseReason.type |
String |
Type of refuse reason (CALL_PANEL or WIDGET ) |
answerResults |
Object |
Answers to the script |
Schedule event
Sent when you schedule another date during a call.
Example response body:
{
"id" : 7809258009204146987,
"createdAt" : "2024-02-21T11:18:49.087+00:00",
"type" : "SCHEDULE",
"callId" : 4277171341196982115,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"note" : "ZeQMAlaOPBX",
"answerResults" : {
"Question1" : [ "Answer1", "Answer2" ],
"Question2" : [ "Answer1" ],
"Question3" : [ "2024-02-21T11:18:49.087Z" ]
},
"contact" : {
"id" : 4709284218549799484,
"createdAt" : "2024-02-21T11:18:49.087+00:00",
"projectId" : 6476327335396816527,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "xgFtWT",
"externalLink" : "http://www.crazycall.com",
"company" : "bMvWmD",
"detail" : "ccuCwU",
"email" : "yEADYbklpmma@lPMKrtAQOttm.com",
"lastname" : "tHEXMA"
},
"lastModificationDate" : "2024-02-21T11:18:49.087+00:00",
"externalServices" : null
},
"scheduleDate" : "2024-02-23T11:18:49.087+00:00"
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always SCHEDULE ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Call id during which the scheduling happened |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
note |
String |
Note added while scheduling contact |
scheduleDate |
String |
Schedule date |
answerResults |
Object |
Answers to the script |
Success event
Sent when you make a call and mark it a success (for example go through a script and record all answers).
Example response body:
{
"id" : 3070858477745652748,
"createdAt" : "2024-02-21T11:18:48.913+00:00",
"type" : "SUCCESS",
"callId" : 4062931383822462662,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"answerResults" : {
"Question1" : [ "Answer1", "Answer2" ],
"Question2" : [ "Answer1" ],
"Question3" : [ "2024-02-21T11:18:48.913Z" ]
},
"contact" : {
"id" : 1394562328314479194,
"createdAt" : "2024-02-21T11:18:48.913+00:00",
"projectId" : 3721676730336331703,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "KlFykL",
"externalLink" : "http://www.crazycall.com",
"company" : "uLgmFu",
"detail" : "eTOAiQ",
"email" : "RWUxInPxrUUN@iRDHthZErMOD.com",
"lastname" : "julhru"
},
"lastModificationDate" : "2024-02-21T11:18:48.913+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always SUCCESS ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Call id during which the success happened |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
answerResults |
Object |
Answers to the script |
Transfer call
Sent when you used the transfer option during a call
Example response body:
{
"id" : 5676603071582202517,
"createdAt" : "2024-02-21T11:18:48.473+00:00",
"type" : "TRANSFER_CALL",
"callId" : 9189259587133468690,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"transferMsisdn" : "+14153661222",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"note" : "qrVISudeNEU",
"contact" : {
"id" : 6879947449473473402,
"createdAt" : "2024-02-21T11:18:48.473+00:00",
"projectId" : 7923084343925604473,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "AZdxxd",
"externalLink" : "http://www.crazycall.com",
"company" : "btPmSg",
"detail" : "fTWaOt",
"email" : "VyaXjxJEnrSF@SsIhioRMkWxQ.com",
"lastname" : "rVLVya"
},
"lastModificationDate" : "2024-02-21T11:18:48.473+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always TRANSFER_CALL ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Id of the call that was later transferred |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Phone number of the contact that initiated the call that was later transferred |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |
transferMsisdn |
String |
Number where call was transferred |
note |
String |
Note added during a call that was later transferred |
Voice Drop
Sent when you used the voice drop option during a call and you leave predefined message.
Example response body:
{
"id" : 426919585823314054,
"createdAt" : "2024-02-21T11:18:48.569+00:00",
"type" : "VOICE_MAIL_DROP",
"callId" : 4307068195040182566,
"callDirection" : "OUTBOUND",
"callDetails" : {
"key" : "value",
"numeric" : 7
},
"agentUsername" : "email@email.com",
"userName" : "Name",
"userSurname" : "Surname",
"contactMsisdn" : "+33980091888",
"crazyCallMsisdn" : "+3225889300",
"contact" : {
"id" : 1553696854964188029,
"createdAt" : "2024-02-21T11:18:48.569+00:00",
"projectId" : 3686596930309055642,
"status" : "OPEN",
"source" : "WIDGET",
"primaryMsisdn" : "+33980091888",
"alternativeMsisdns" : [ "+16475586333" ],
"details" : {
"firstname" : "BIJDDA",
"externalLink" : "http://www.crazycall.com",
"company" : "gFdfab",
"detail" : "nJQTUa",
"email" : "QbcfiwuWrmzP@nudxucmqrFzG.com",
"lastname" : "WNiojJ"
},
"lastModificationDate" : "2024-02-21T11:18:48.569+00:00",
"externalServices" : null
}
}
Response results
Path |
Type |
Description |
id |
Number |
Contact event id |
type |
String |
Type of event (always VOICE_MAIL_DROP ) |
createdAt |
String |
When event was created |
agentUsername |
String |
Username (typically email) of the user who created event |
userName |
String |
Name of the user who created event |
userSurname |
String |
Surname of the user who created event |
callDetails |
Object |
Additional information related to the call |
contact.id |
Number |
Contact id |
contact.createdAt |
String |
Contact’s import date |
contact.projectId |
Number |
Id of the project contact was imported into |
contact.status |
String |
Current contact’s status |
contact.source |
String |
Import source (optional) |
contact.primaryMsisdn |
String |
Primary phone number (optional) |
contact.alternativeMsisdns |
Array |
List of alternative phone numbers assigned to contact (optional) |
contact.details |
Object |
Details of the contact |
contact.details.firstname |
String |
Contact’s firstname |
contact.details.lastname |
String |
Contact’s lastname |
contact.details.company |
String |
Contact’s company name |
contact.details.email |
String |
Contact’s email |
contact.details.detail |
String |
Custom contact detail |
contact.details.externalLink |
String |
External link related to the contact |
contact.lastModificationDate |
String |
Date of the most recent modification |
contact.externalServices |
Null |
|
callId |
Number |
Id of the call which ended with the voice drop |
callDirection |
String |
Type of call, can be: INBOUND or OUTBOUND |
contactMsisdn |
String |
Contact’s phone number |
crazyCallMsisdn |
String |
Phone number assigned to your project when the call happened |