Resources

    Subscriber management API

    Create, list, update and delete subscribers on a list, including bulk operations.

    How subscribers work

    A subscriber is a person on one of your email lists: their email address, name, status, tags and any custom fields you have defined on the list. Subscribers always belong to a specific list, which is why every endpoint below takes a listId in the path. The same email address can exist on several lists as separate subscriber records.

    The Subscribers API is the workhorse of most integrations: it is how signups from your own website, app or backend reach the platform, and how you keep profile data in sync with external systems. For one-off changes use the single-subscriber endpoints; for imports and synchronization jobs use the bulk endpoint, which processes up to 1,000 subscribers per request.

    Use cases

    • Add a newsletter signup from your own form or checkout flow, with double opt-in handled automatically.
    • Migrate an existing audience from another platform in batches of up to 1,000 with the bulk endpoint.
    • Keep profile data (names, tags, custom fields) in sync with your CRM or webshop.
    • Honor unsubscribe requests collected outside the platform by updating the status.
    • Look up a subscriber before sending, for example to check their status or custom fields.

    The subscriber object

    Every subscriber has these core fields:

    NameTypeDescription
    idstringUnique subscriber id (UUID). Assigned by the platform.
    emailstringThe subscriber’s email address. Unique per list.
    first_name / last_namestringOptional name fields, available as {{firstName}} and {{lastName}} merge tags in emails.
    statusstringSending eligibility - see the status table below. Only active subscribers receive campaigns.
    tagsstring[]Free-form labels, for example customer or vip. Usable in segment rules.
    custom_fieldsobjectKey-value data specific to your account, for example company or phone. Define the field names on the list.
    created_atstringWhen the subscriber was added (UTC).

    The status field controls whether the platform will send to the address:

    NameTypeDescription
    activestatusConfirmed and sendable. Receives campaigns and automations.
    inactivestatusNot sendable. Also the holding status while a double opt-in confirmation is pending.
    unsubscribedstatusOpted out. Never emailed again unless they resubscribe themselves.
    complainedstatusMarked an email as spam. Permanently excluded from sending.
    bouncedstatusThe address hard-bounced. Excluded to protect your sender reputation.
    blacklistedstatusOn your suppression list (see the Blacklist API).

    Statuses protect your deliverability

    The API lets you set an explicit status, but never move complained, bounced or unsubscribed contacts back to active unless the person has genuinely re-consented. Mailbox providers penalize senders who email recycled complainers, and that affects your whole account.

    Double opt-in behavior

    If your account has double opt-in enabled (Settings, GDPR), subscribers created through the API start as inactive with a pending confirmation, and the platform automatically sends them a confirmation email. They become active when they click the link. The create response includes confirmation_required and confirmation_email_sent so your integration knows what happened.

    When importing contacts who already gave consent elsewhere, pass skip_confirmation: true or an explicit status to add them directly without a new confirmation email.

    Endpoints

    GET

    Get subscribers

    /subscriber-api/{listId}

    Retrieve all subscribers from a list with optional filtering and pagination.

    Query parameters

    NameTypeDescription
    listIdrequiredstringEmail list id (path).
    statusstringFilter by status (active, inactive, blacklisted, unsubscribed).
    searchstringSearch in email, first_name, last_name.
    pagenumberPage number (default: 1).
    limitnumberResults per page (default: 25, max: 100).
    curl -X GET "https://api.mailingplatform.net/subscriber-api/your-list-id?status=active&page=1" \
      -H "Authorization: Bearer mp_live_..." \
      -H "Content-Type: application/json"
    GET

    Get single subscriber

    /subscriber-api/{listId}/{subscriberId}

    Retrieve a specific subscriber by their ID.

    NameTypeDescription
    listIdrequiredstringEmail list id (path).
    subscriberIdrequiredstringSubscriber id (path).
    curl -X GET "https://api.mailingplatform.net/subscriber-api/{listId}/{subscriberId}" \
      -H "Authorization: Bearer mp_live_..." \
      -H "Content-Type: application/json"
    POST

    Create subscriber

    /subscriber-api/{listId}

    Add a new subscriber to a list. If your account has double opt-in enabled (Settings, GDPR), new subscribers start as pending and automatically receive a confirmation email; they become active when they click the link. Pass skip_confirmation: true or an explicit status to add subscribers directly, for example when migrating contacts who already confirmed elsewhere.

    Request body

    NameTypeDescription
    emailrequiredstringSubscriber email address.
    first_namestringFirst name.
    last_namestringLast name.
    tagsstring[]Optional tags, for example customer, newsletter.
    custom_fieldsobjectList-specific custom fields.
    skip_confirmationbooleanSkip the double opt-in confirmation email.
    statusstringExplicit status when adding a subscriber directly.

    The response includes confirmation_required and confirmation_email_sent so you know whether the subscriber still needs to confirm.

    curl -X POST "https://api.mailingplatform.net/subscriber-api/{listId}" \
      -H "Authorization: Bearer mp_live_..." \
      -H "Content-Type: application/json" \
      -d '{
      "email": "john@example.com",
      "first_name": "John",
      "last_name": "Doe",
      "tags": ["customer", "newsletter"],
      "custom_fields": {
        "company": "Acme Corp",
        "phone": "+1234567890"
      },
      "skip_confirmation": false
    }'
    PUT

    Update subscriber

    /subscriber-api/{listId}/{subscriberId}

    Update an existing subscriber's information.

    Request body (partial)

    NameTypeDescription
    first_namestringUpdated first name.
    statusstringUpdated status, for example inactive.
    custom_fieldsobjectUpdated custom fields.
    curl -X PUT "https://api.mailingplatform.net/subscriber-api/{listId}/{subscriberId}" \
      -H "Authorization: Bearer mp_live_..." \
      -H "Content-Type: application/json" \
      -d '{
      "first_name": "John Updated",
      "status": "inactive",
      "custom_fields": {
        "company": "New Company"
      }
    }'
    DELETE

    Delete subscriber

    /subscriber-api/{listId}/{subscriberId}

    Remove a subscriber from the list permanently.

    curl -X DELETE "https://api.mailingplatform.net/subscriber-api/{listId}/{subscriberId}" \
      -H "Authorization: Bearer mp_live_..."
    POST

    Bulk operations

    /bulk-subscriber-api/{listId}

    Perform bulk operations on multiple subscribers at once. Maximum 1,000 items per request; limited to 10 requests per minute. unsubscribe sets the subscriber's status to unsubscribed.

    Partial success is normal

    Bulk requests do not fail as a whole when single items are invalid. The response contains a results array with one entry per subscriber plus a summary with successful and failed counts - always check it when synchronizing, so rejected rows are not silently lost.

    Supported actions

    NameTypeDescription
    addactionAdd multiple subscribers.
    updateactionUpdate multiple subscribers.
    deleteactionDelete multiple subscribers.
    unsubscribeactionUnsubscribe multiple subscribers.

    Example: bulk add

    curl -X POST "https://api.mailingplatform.net/bulk-subscriber-api/{listId}" \
      -H "Authorization: Bearer mp_live_..." \
      -H "Content-Type: application/json" \
      -d '{
      "action": "add",
      "subscribers": [
        {
          "email": "user1@example.com",
          "first_name": "User",
          "last_name": "One",
          "status": "active"
        },
        {
          "email": "user2@example.com",
          "first_name": "User",
          "last_name": "Two",
          "status": "active"
        }
      ]
    }'