The WiseData NPS API lets another system β your CRM, e-commerce or ERP β read and maintain your contacts and lists automatically, without anyone touching the panel. It's a REST API: you make HTTP requests and get JSON responses. Everything is on the Integrations page, available on the Business plan.
Overview
Base URL:
https://api.wisedatanps.comAuthentication: token in the
Authorization: Bearer YOUR_TOKENheaderFormat: JSON in requests (with
Content-Type: application/json) and in responsesWhat you can do today: list, create, read, update and delete contacts, and list your contact lists
Step 1 β Create a token
On the Integrations page, click New Token, give it a name that helps identify the integration (e.g. "CRM integration") and confirm. The token is shown only once: copy it and store it somewhere safe, because it won't be shown again. After that, the list only shows a preview (the last digits), the creation date and the last use.
If a token leaks or is no longer used, revoke it β any system using it loses access immediately. Tip: use one token per integration so you can revoke only what you need.
Step 2 β Authenticate your requests
Send the token on every call, in the authorization header:
Authorization: Bearer YOUR_TOKEN
Content-Type: application/jsonStep 3 β Your first request
Start by listing your contact lists to find each one's id:
curl https://api.wisedatanps.com/api/v1/contact-lists/all \
-H "Authorization: Bearer YOUR_TOKEN"With a list's id in hand, you can read or add contacts to it.
Endpoints
List all lists
GET /api/v1/contact-lists/all β returns all your contact lists.
List a list's contacts
GET /api/v1/contact-lists/{listId}/contacts β returns a list's contacts, paginated. Accepted query parameters:
searchβ search by name, email or phone.sortβ sort field:name,email,phoneorcreated_at.orderβascordesc.pageβ page number.per_pageβ items per page (1 to 100).
The response is paginated, with the data in data and pagination info in meta:
{
"data": [
{
"id": 123,
"name": "John Smith",
"email": "[email protected]",
"phone": "+15551234567",
"emailStatus": "valid",
"phoneStatus": "valid",
"createdAt": "2026-06-05T13:40:00.000000Z"
}
],
"meta": { "current_page": 1, "per_page": 15, "total": 42, "last_page": 3 }
}Create a contact
POST /api/v1/contact-lists/{listId}/contacts β creates a contact and adds it to the given list. Body fields:
nameβ required, 2 to 100 characters.emailβ optional, must be a valid email (disposable emails are rejected).phoneβ optional, 8 to 20 characters.
curl -X POST https://api.wisedatanps.com/api/v1/contact-lists/1/contacts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "John Smith", "email": "[email protected]", "phone": "+15551234567" }'On success, the response is 201 with the created contact:
{
"message": "Contact created successfully.",
"data": {
"id": 123,
"name": "John Smith",
"email": "[email protected]",
"phone": "+15551234567",
"emailStatus": "pending",
"phoneStatus": "pending",
"createdAt": "2026-06-05T13:40:00.000000Z"
}
}Note: email and phone start with a pending status and go through an automatic check in the background β the status changes to valid (or another value) shortly after.
Read a contact
GET /api/v1/contacts/{contactId} β returns a contact's details in data.
Update a contact
PUT /api/v1/contacts/{contactId} β updates name, email and/or phone. The response includes a message and the updated contact in data.
Delete a contact
DELETE /api/v1/contacts/{contactId} β removes the contact permanently. The response is just a confirmation message.
How to read responses
Responses follow a simple pattern: a single resource comes inside data; when there is an action, a message comes too; and lists are paginated, with data (the items) and meta (current page, total, etc.).
Common errors
401 β missing or invalid token. Check the
Authorizationheader.403 β no permission for the resource (for example, a plan without API access).
404 β the given list or contact does not exist (or isn't in your account).
422 β invalid data. The body includes a
messageand anerrorsobject pointing to each problematic field.429 β you exceeded the request limit (see below).
Usage limits
Reads (GET): up to 60 requests per minute (varies by plan).
Writes (POST/PUT/DELETE): up to 30 requests per minute.
When you hit the limit, the API responds
429with theRetry-Afterheader, telling you how many seconds to wait before retrying.
Best practices and security
Never expose the token in code that runs in the browser or in public repositories β use it only from your server.
Handle the
429status by waiting for theRetry-Aftertime before repeating the request.Keep one token per integration and immediately revoke any token that might have leaked.
The Integrations page itself includes ready-made examples in cURL, JavaScript and PHP for you to copy and adapt.