API integrations: a complete usage guide

4 min read6

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.com

  • Authentication: token in the Authorization: Bearer YOUR_TOKEN header

  • Format: JSON in requests (with Content-Type: application/json) and in responses

  • What 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/json

Step 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, phone or created_at.

  • order β€” asc or desc.

  • 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 Authorization header.

  • 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 message and an errors object 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 429 with the Retry-After header, 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 429 status by waiting for the Retry-After time 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.

Was this article helpful?