Newsletter · API reference

Subscribers API

Keep your contacts in sync with Make. Create and update subscribers, organise them in lists and tags, and read their opens, clicks and unsubscribes.

Base URLhttps://subscribers.dialogapi.noOpenAPI spec

Custom Fields

/api/public/v2/custom_fields
GET/api/public/v2/custom_fields

Find all custom fields

Responses
200Return all fields401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/custom_fields'
Example response 200
[
  {
    "id": 1,
    "label": "Field 1 from table",
    "value": "EXTRA1",
    "datatype": "string"
  },
  {
    "id": 2,
    "label": "Field 2",
    "value": "EXTRA2",
    "datatype": "dropdown",
    "choices": [
      "option 1",
      "option 2"
    ]
  }
]
POST/api/public/v2/custom_fields

Create custom field

Parameters
labelrequired
body · string
datatyperequired
body · string
choices
body · string[]
Responses
200Field created401Unathorized422Field params invalid
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "label": "label", "datatype": "datatype", "choices": [ "choices" ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/custom_fields'
Example response 200
{
  "id": 7,
  "label": "Consent",
  "value": "EXTRA3",
  "datatype": "gdpr_optin",
  "choices": [
    "option 1",
    "option 2"
  ]
}
GET/api/public/v2/custom_fields/{id}

Show custom field

Parameters
idrequired
path · integer
Field ID
Responses
200Field found401Unathorized404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/custom_fields/{id}'
Example response 200
{
  "id": 1,
  "label": "Field 1 from table",
  "value": "EXTRA1",
  "datatype": "string"
}
PATCH/api/public/v2/custom_fields/{id}

Update custom field

Parameters
idrequired
path · integer
Field ID
labelrequired
body · string
datatyperequired
body · string
choices
body · string[]
Responses
200Field updated401Unathorized404Not Found422Field params invalid
Request · curl
curl --request PATCH \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "label": "label", "datatype": "datatype", "choices": [ "choices" ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/custom_fields/{id}'
Example response 200
{
  "id": 1,
  "label": "New label",
  "value": "EXTRA1",
  "datatype": "string"
}
DELETE/api/public/v2/custom_fields/{id}

Delete custom field

Parameters
idrequired
path · integer
Field ID
Responses
200Field deleted401Unathorized404Not Found422Field is used in Signup or Profile form
Request · curl
curl --request DELETE \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/custom_fields/{id}'
Example response 200
{
  "status": "200 Success"
}

Events

/api/public/v2/events
GET/api/public/v2/events/bounces

Find bounce events

Parameters
sending_id
query · string
Limit events to sending IDs. Can be a comma delimited list, i.e. "101,102,103"
from_date
query · string
First day of the period to get events for
to_date
query · string
Last day of the period to get events for (inclusive)
Responses
200Return all not deleted bounce events401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/events/bounces'
Example response 200
[
  {
    "subscriber_email_id": 95,
    "reason": null,
    "reasoncode": 0,
    "bounce_message": null,
    "created_at": "2020-08-26T02:00:00.000+02:00",
    "sending_id": 43,
    "bounce_source": "make.4.0.",
    "email": "test21@test.com",
    "external_id": null
  }
]
GET/api/public/v2/events/clicks

Find click events

Parameters
sending_id
query · string
Limit events to sending IDs. Can be a comma delimited list, i.e. "101,102,103"
from_date
query · string
First day of the period to get events for
to_date
query · string
Last day of the period to get events for (inclusive)
Responses
200Return all not deleted click events401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/events/clicks'
Example response 200
[
  {
    "subscriber_email_id": 109,
    "ua_browser": null,
    "ua_version": null,
    "ua_platform": null,
    "ua_device": null,
    "sending_id": 43,
    "link_id": null,
    "original_link": "",
    "created_at": "2020-08-26T02:00:00.000+02:00",
    "email": "test35@test.com",
    "external_id": null
  }
]
GET/api/public/v2/events/opens

Find open events

Parameters
sending_id
query · string
Limit events to sending IDs. Can be a comma delimited list, i.e. "101,102,103"
from_date
query · string
First day of the period to get events for
to_date
query · string
Last day of the period to get events for (inclusive)
Responses
200Return all not deleted open events401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/events/opens'
Example response 200
[
  {
    "subscriber_email_id": 123,
    "ua_browser": null,
    "ua_version": null,
    "ua_platform": null,
    "ua_device": null,
    "sending_id": 43,
    "created_at": "2020-08-26T02:00:00.000+02:00",
    "email": "test49@test.com",
    "external_id": null
  }
]
GET/api/public/v2/events/sendings

Find sending events

Parameters
sending_id
query · string
Limit events to sending IDs. Can be a comma delimited list, i.e. "101,102,103"
from_date
query · string
First day of the period to get events for
to_date
query · string
Last day of the period to get events for (inclusive)
Responses
200Return all not deleted sending events401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/events/sendings'
Example response 200
[
  {
    "subscriber_email_id": 137,
    "sending_id": 43,
    "created_at": "2020-08-26T02:00:00.000+02:00",
    "email": "test63@test.com",
    "external_id": null
  }
]
GET/api/public/v2/events/unsubscribes

Find unsubscribe events

Parameters
sending_id
query · string
Limit events to sending IDs. Can be a comma delimited list, i.e. "101,102,103"
from_date
query · string
First day of the period to get events for
to_date
query · string
Last day of the period to get events for (inclusive)
Responses
200Return all not deleted unsubscribe events401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/events/unsubscribes'
Example response 200
[
  {
    "unsubscribable_type": "SubscriberEmail",
    "unsubscribable_id": 181,
    "reason": null,
    "reasoncode": 0,
    "ua_browser": null,
    "ua_version": null,
    "ua_platform": null,
    "ua_device": null,
    "created_at": "2020-08-26T02:00:00.000+02:00",
    "sending_id": 43,
    "email": "test107@test.com",
    "external_id": null
  }
]

Newsletters

/api/public/v2/newsletters
GET/api/public/v2/newsletters/by_subscribers_email

List newsletters for the subscriber

Parameters
emailrequired
query · string
Subscriber email
include_deleted
query · boolean
Include deleted newsletters
Responses
200Newsletters listed successfully401Unathorized404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/newsletters/by_subscribers_email'
Example response 200
[
  {
    "id": 29,
    "openrate": 100,
    "subscriber_list_ids": [
      "14"
    ],
    "subscriber_segment_ids": [],
    "send_at": "2024-01-16T12:19:00.000+01:00",
    "sent_at": "2024-01-16T12:31:41.227+01:00",
    "unique_clicks": 20,
    "clicks": 24,
    "complaints": 0,
    "opens": 20,
    "bounce": 0,
    "unsubscribes": 0,
    "scheduled": 1,
    "sent": 20,
    "created_at": "2024-01-16T12:14:50.402+01:00",
    "updated_at": "2024-01-16T12:33:59.398+01:00",
    "tracking_mode": "standard",
    "external_guid": 9,
    "webversion_url": "http://test.host/",
    "preheader": "Newsletter preheader",
    "subject": "Newsletter subject",
    "from_email": "sender@email.com",
    "newsletter_screenshot_url": "http://newsletter.screenshot/",
    "opened_at": "2026-01-01T12:00:00+01:00",
    "clicked_at": null,
    "opened": true,
    "clicked": false,
    "subscriber_id": 216,
    "external_id": "a5e6f3ec-1942-49d6-8d6b-2f1248985f56"
  },
  {
    "id": 30,
    "openrate": 100,
    "subscriber_list_ids": [
      "15"
    ],
    "subscriber_segment_ids": [],
    "send_at": "2024-01-16T12:19:00.000+01:00",
    "sent_at": "2024-01-16T12:31:41.227+01:00",
    "unique_clicks": 20,
    "clicks": 24,
    "complaints": 0,
    "opens": 20,
    "bounce": 0,
    "unsubscribes": 0,
    "scheduled": 1,
    "sent": 20,
    "created_at": "2024-01-16T12:14:50.402+01:00",
    "updated_at": "2024-01-16T12:33:59.398+01:00",
    "tracking_mode": "standard",
    "external_guid": 10,
    "webversion_url": "http://test.host/",
    "preheader": "Newsletter preheader",
    "subject": "Newsletter subject",
    "from_email": "sender@email.com",
    "newsletter_screenshot_url": "http://newsletter.screenshot/",
    "opened_at": null,
    "clicked_at": "2026-01-01T12:00:00+01:00",
    "opened": false,
    "clicked": true,
    "subscriber_id": 216,
    "external_id": "a5e6f3ec-1942-49d6-8d6b-2f1248985f56"
  }
]
GET/api/public/v2/newsletters/by_subscribers_external_id

List newsletters for the subscriber

Parameters
external_idrequired
query · string
Subscriber external ID
include_deleted
query · boolean
Include deleted newsletters
Responses
200Newsletters listed successfully401Unathorized404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/newsletters/by_subscribers_external_id'
Example response 200
[
  {
    "id": 37,
    "openrate": 100,
    "subscriber_list_ids": [
      "22"
    ],
    "subscriber_segment_ids": [],
    "send_at": "2024-01-16T12:19:00.000+01:00",
    "sent_at": "2024-01-16T12:31:41.227+01:00",
    "unique_clicks": 20,
    "clicks": 24,
    "complaints": 0,
    "opens": 20,
    "bounce": 0,
    "unsubscribes": 0,
    "scheduled": 1,
    "sent": 20,
    "created_at": "2024-01-16T12:14:50.402+01:00",
    "updated_at": "2024-01-16T12:33:59.398+01:00",
    "tracking_mode": "standard",
    "external_guid": 17,
    "webversion_url": "http://test.host/",
    "preheader": "Newsletter preheader",
    "subject": "Newsletter subject",
    "from_email": "sender@email.com",
    "newsletter_screenshot_url": "http://newsletter.screenshot/",
    "opened_at": "2026-01-01T12:00:00+01:00",
    "clicked_at": null,
    "opened": true,
    "clicked": false,
    "subscriber_id": 220,
    "external_id": "a5e6f3ec-1942-49d6-8d6b-2f1248985f56"
  },
  {
    "id": 38,
    "openrate": 100,
    "subscriber_list_ids": [
      "23"
    ],
    "subscriber_segment_ids": [],
    "send_at": "2024-01-16T12:19:00.000+01:00",
    "sent_at": "2024-01-16T12:31:41.227+01:00",
    "unique_clicks": 20,
    "clicks": 24,
    "complaints": 0,
    "opens": 20,
    "bounce": 0,
    "unsubscribes": 0,
    "scheduled": 1,
    "sent": 20,
    "created_at": "2024-01-16T12:14:50.402+01:00",
    "updated_at": "2024-01-16T12:33:59.398+01:00",
    "tracking_mode": "standard",
    "external_guid": 18,
    "webversion_url": "http://test.host/",
    "preheader": "Newsletter preheader",
    "subject": "Newsletter subject",
    "from_email": "sender@email.com",
    "newsletter_screenshot_url": "http://newsletter.screenshot/",
    "opened_at": null,
    "clicked_at": "2026-01-01T12:00:00+01:00",
    "opened": false,
    "clicked": true,
    "subscriber_id": 220,
    "external_id": "a5e6f3ec-1942-49d6-8d6b-2f1248985f56"
  }
]

Signup forms

/api/public/v2/signup_forms/{id}/signup
POST/api/public/v2/signup_forms/{id}/signup

Sign up subscriber

Parameters
idrequired
path · string
Signup form ID or token
emailrequired
body · string
firstname
body · string
lastname
body · string
address
body · string
zip
body · string
city
body · string
phone
body · string
company
body · string
birthday
body · string
tags
body · string[]
external_id
body · string
gender
body · string
Responses
200Uses form-level country code prefix for local phone numbers401Unathorized422Subscriber params invalid
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "email": "user@example.com", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "phone": "phone", "company": "company", "birthday": "2026-01-01", "tags": [ "tags" ], "external_id": "external_id", "gender": "gender" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/signup_forms/{id}/signup'
Example response 200
{
  "status": "200 Success",
  "id": 225
}

Subscriber Tags

/api/public/v2/subscriber_tags
GET/api/public/v2/subscriber_tags

Find all subscriber tags

Responses
200Return all subscriber tags401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriber_tags'
Example response 200
[
  {
    "id": 18,
    "title": "tag1",
    "created_at": "2026-01-01T12:00:00.000+01:00",
    "updated_at": "2026-01-01T12:00:00.000+01:00",
    "subscribers_with_tag": 0
  },
  {
    "id": 19,
    "title": "tag2",
    "created_at": "2026-01-01T12:00:00.000+01:00",
    "updated_at": "2026-01-01T12:00:00.000+01:00",
    "subscribers_with_tag": 0
  }
]
POST/api/public/v2/subscriber_tags

Create subscriber tag

Parameters
titlerequired
body · string
Responses
200Tag created401Unathorized422Tag params invalid
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "title": "title" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriber_tags'
Example response 200
{
  "id": 24,
  "title": "new tag",
  "created_at": "2026-01-01T12:00:00.000+01:00",
  "updated_at": "2026-01-01T12:00:00.000+01:00",
  "subscribers_with_tag": 0
}
GET/api/public/v2/subscriber_tags/{id}

Show subscriber tag

Parameters
idrequired
path · integer
Tag ID
Responses
200Tag found401Unathorized404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriber_tags/{id}'
Example response 200
{
  "id": 29,
  "title": "tag1",
  "created_at": "2026-01-01T12:00:00.000+01:00",
  "updated_at": "2026-01-01T12:00:00.000+01:00",
  "subscribers_with_tag": 0
}
PATCH/api/public/v2/subscriber_tags/{id}

Update subscriber tag

Parameters
idrequired
path · integer
Tag ID
titlerequired
body · string
Responses
200Tag updated401Unathorized404Not Found422Tag params invalid
Request · curl
curl --request PATCH \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "title": "title" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriber_tags/{id}'
Example response 200
{
  "id": 35,
  "title": "mollitia",
  "created_at": "2026-01-01T12:00:00.000+01:00",
  "updated_at": "2026-01-01T12:00:00.000+01:00",
  "subscribers_with_tag": 0
}
DELETE/api/public/v2/subscriber_tags/{id}

Delete subscriber tag

Parameters
idrequired
path · integer
Tag ID
Responses
200Tag deleted
Request · curl
curl --request DELETE \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriber_tags/{id}'
Example response 200
{
  "status": "200 Success"
}

Subscriberlists

/api/public/v2/subscriberlists
GET/api/public/v2/subscriberlists

Find all lists

Responses
200Return all lists401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriberlists'
Example response 200
[
  {
    "id": 548,
    "title": "My contacts (test list)",
    "date_created": "2026-01-01T11:00:00.000Z",
    "date_updated": "2026-01-01T11:00:00.000Z",
    "subscriber_emails": 0,
    "subscriber_sms": 0
  }
]
POST/api/public/v2/subscriberlists

Create list

Parameters
titlerequired
body · string
Responses
200List created401Unathorized422List params invalid
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "title": "title" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriberlists'
Example response 200
{
  "id": 550,
  "title": "New list",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "subscriber_emails": 0,
  "subscriber_sms": 0
}
GET/api/public/v2/subscriberlists/{id}

Show list

Parameters
idrequired
path · integer
List ID
Responses
200List found401Unathorized404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriberlists/{id}'
Example response 200
{
  "id": 552,
  "title": "My contacts (test list)",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "subscriber_emails": 0,
  "subscriber_sms": 0
}
PATCH/api/public/v2/subscriberlists/{id}

Update list

Parameters
idrequired
path · integer
List ID
titlerequired
body · string
Responses
200List updated401Unathorized404Not Found422List params invalid
Request · curl
curl --request PATCH \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "title": "title" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriberlists/{id}'
Example response 200
{
  "id": 555,
  "title": "New title",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "subscriber_emails": 0,
  "subscriber_sms": 0
}
DELETE/api/public/v2/subscriberlists/{id}

Delete list

Parameters
idrequired
path · integer
List ID
Responses
200List deleted401Unathorized404Not Found422List has Signup Form linked
Request · curl
curl --request DELETE \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriberlists/{id}'
Example response 200
{
  "status": "200 Success"
}

Subscribers

/api/public/v2/subscribers
GET/api/public/v2/subscribers/{subscriber_id}/subscriberlists

Find all lists with subscriber

Parameters
subscriber_idrequired
path · integer
Subscriber ID
Responses
401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{subscriber_id}/subscriberlists'
POST/api/public/v2/subscribers/{subscriber_id}/subscriberlists

Add subscriber to the list

Parameters
subscriber_idrequired
path · integer
Subscriber ID
list_idrequired
body · integer
Responses
200Subscriber added to the list401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "list_id": 1 }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{subscriber_id}/subscriberlists'
Example response 200
{
  "list_id": 569
}
DELETE/api/public/v2/subscribers/{subscriber_id}/subscriberlists/{id}

Remove subscriber from the list

Parameters
subscriber_idrequired
path · integer
Subscriber ID
idrequired
path · integer
List ID
Responses
200Subscriber removed from the list401Unathorized404Not Found
Request · curl
curl --request DELETE \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{subscriber_id}/subscriberlists/{id}'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers

Create or update subscriber

NOTE: Please use captcha to prevent false signups from bots.

Parameters
subscriber_list_id[]required
query · integer[]
Subscriberlist ID
status
query · string
Status of email. Possible value: active|unsubscribed|bounce
status_mobile
query · string
Status of mobile. Possible value: active|unsubscribed|bounce
tag
query · string
Tags handling mode. Possible values: replace | merge. Default: replace
emailrequired
body · string
firstname
body · string
lastname
body · string
address
body · string
zip
body · string
city
body · string
phone
body · string
company
body · string
birthday
body · string
tags
body · string[]
external_id
body · string
gender
body · string
Responses
200Automation triggered401Unathorized404List(s) not found422Subscriber params invalid
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "email": "user@example.com", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "phone": "phone", "company": "company", "birthday": "2026-01-01", "tags": [ "tags" ], "external_id": "external_id", "gender": "gender" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers'
Example response 200
{
  "status": "200 Success",
  "id": 313
}
GET/api/public/v2/subscribers/stats

Show subscriber email stats

Parameters
email
query · string
Subscriber email
Responses
200Subscriber email found404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/stats'
Example response 200
{
  "clicks": 4,
  "opens": 2,
  "newsletters_clicked": [
    2,
    3
  ],
  "newsletters_opened": [
    2,
    3
  ],
  "received": 3,
  "newsletters_received": [
    2,
    3,
    4
  ]
}
GET/api/public/v2/subscribers/{id}

Show subscriber by external id

Parameters
idrequired
path · integer
Subscriber ID
external_id
query · string
External Subscriber ID
Responses
200Subscriber found401Unathorized404Not Found
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{id}'
Example response 200
{
  "id": 341,
  "email": "test239@test.com",
  "firstname": "Firstname",
  "lastname": "Lastname",
  "address": null,
  "zip": null,
  "city": null,
  "phone": "4710000048",
  "company": null,
  "birthday": null,
  "gender": null,
  "tags": [
    "tagname",
    "tagname2"
  ],
  "external_id": "10",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "email_status": "active",
  "phone_status": "active",
  "EXTRA1": "value1",
  "EXTRA2": null,
  "EXTRA3": null,
  "EXTRA4": null,
  "OPTINEMAIL": null,
  "OPTINSMS": null,
  "OPTINEMAILSMS": null,
  "PRIVACYPOLICY": null,
  "lists": []
}
PATCH/api/public/v2/subscribers/{id}

Update subscriber

Parameters
idrequired
path · integer
Subscriber ID
external_id
query · string
External Subscriber ID
status
query · string
Status of email. Possible value: active | unsubscribed | bounce
status_mobile
query · string
Status of mobile. Possible value: active | unsubscribed | bounce
tag
query · string
Tags handling mode. Possible values: replace | merge. Default: replace
subscriber_list_id[]
query · integer[]
Subscriberlist ID
emailrequired
body · string
firstname
body · string
lastname
body · string
address
body · string
zip
body · string
city
body · string
phone
body · string
company
body · string
birthday
body · string
tags
body · string[]
external_id
body · string
gender
body · string
Responses
200Subscriber is updated401Unathorized404List(s) not found422Subscriber params invalid
Request · curl
curl --request PATCH \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "email": "user@example.com", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "phone": "phone", "company": "company", "birthday": "2026-01-01", "tags": [ "tags" ], "external_id": "external_id", "gender": "gender" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{id}'
Example response 200
{
  "status": "200 Success",
  "id": 333
}
DELETE/api/public/v2/subscribers/{id}

Delete subscriber

Parameters
idrequired
path · integer
Subscriber ID
external_id
query · string
External Subscriber ID
email
query · string
Subscriber email
Responses
200Subscribers deleted401Unathorized404Not Found
Request · curl
curl --request DELETE \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{id}'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/{id}/unsubscribe_email

Unsubscribe email

Parameters
idrequired
path · integer
Subscriber ID
Responses
200Unsubscribed successfully401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{id}/unsubscribe_email'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/unsubscribe_email

Unsubscribe email by external id

Parameters
external_idrequired
query · string
External Subscriber ID
Responses
200Unsubscribed successfully401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/unsubscribe_email'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/{id}/unsubscribe_phone

Unsubscribe phone

Parameters
idrequired
path · integer
Subscriber ID
Responses
200Unsubscribed successfully401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/{id}/unsubscribe_phone'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/unsubscribe_phone

Unsubscribe phone by external_id

Parameters
external_idrequired
query · string
External Subscriber ID
Responses
200Unsubscribed successfully401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/unsubscribe_phone'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/bulkinsert

Create and/or update batch of subscribers. 1000 subscribers max.

Parameters
subscriber_list_id[]required
query · integer[]
Subscriberlist ID
status
query · string
Status of email. Possible value: active | unsubscribed | bounce | reactivate
status_mobile
query · string
Status of mobile. Possible value: active | unsubscribed | bounce | reactivate
tag
query · string
Tags handling mode. Possible values: replace | merge. Default: replace
(array)required
body · object[]
Subscriber params. 1000 subscribers max.
[].email
body · string
[].phone
body · string
[].firstname
body · string
[].lastname
body · string
[].address
body · string
[].zip
body · string
[].city
body · string
[].company
body · string
[].birthday
body · string
[].gender
body · string
[].external_id
body · string
[].bounce_source
body · string
[].bounce_reason
body · string
[].tags
body · string[]
Responses
200Custom field absent from first record is saved for subsequent records401Unathorized404List(s) not found422Subscriber params invalid
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '[ { "email": "user@example.com", "phone": "phone", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "company": "company", "birthday": "2026-01-01", "gender": "gender", "external_id": "external_id", "bounce_source": "bounce_source", "bounce_reason": "bounce_reason", "tags": [ "tags" ] } ]' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/bulkinsert'
Example response 200
{
  "status": "200 Success"
}
PUT/api/public/v2/subscribers/bulkupdate

Update batch of subscribers. 1000 subscribers max.

Parameters
subscriber_list_id[]required
query · integer[]
Subscriberlist ID
status
query · string
Status of email. Possible value: active | unsubscribed | bounce | reactivate
status_mobile
query · string
Status of mobile. Possible value: active | unsubscribed | bounce | reactivate
tag
query · string
Tags handling mode. Possible values: replace | merge. Default: replace
(array)required
body · object[]
Subscriber params. 1000 subscribers max.
[].email
body · string
[].phone
body · string
[].firstname
body · string
[].lastname
body · string
[].address
body · string
[].zip
body · string
[].city
body · string
[].company
body · string
[].birthday
body · string
[].gender
body · string
[].external_id
body · string
[].bounce_source
body · string
[].bounce_reason
body · string
[].tags
body · string[]
Responses
200Custom field absent from first record is saved for subsequent records401Unathorized404List(s) not found
Request · curl
curl --request PUT \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '[ { "email": "user@example.com", "phone": "phone", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "company": "company", "birthday": "2026-01-01", "gender": "gender", "external_id": "external_id", "bounce_source": "bounce_source", "bounce_reason": "bounce_reason", "tags": [ "tags" ] } ]' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/bulkupdate'
Example response 200
{
  "status": "200 Success"
}
PUT/api/public/v2/subscribers/bulkupdate_by_external_id

Update batch of subscribers. 1000 subscribers max.

Parameters
subscriber_list_id[]
query · integer[]
Subscriberlist ID
tag
query · string
Tags handling mode. Possible values: replace | merge. Default: replace
(array)required
body · object[]
Subscriber params. 1000 subscribers max.
[].external_idrequired
body · string
[].email
body · string
[].phone
body · string
[].firstname
body · string
[].lastname
body · string
[].address
body · string
[].zip
body · string
[].city
body · string
[].company
body · string
[].birthday
body · string
[].gender
body · string
[].tags
body · string[]
Responses
200Subscriber birthday cleared401Unathorized
Request · curl
curl --request PUT \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '[ { "external_id": "external_id", "email": "user@example.com", "phone": "phone", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "company": "company", "birthday": "2026-01-01", "gender": "gender", "tags": [ "tags" ] } ]' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/bulkupdate_by_external_id'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/bulkinsert_by_external_id

Create batch of subscribers by external_id (insert-only). 1000 subscribers max.

Parameters
subscriber_list_id[]required
query · integer[]
Subscriberlist ID
status
query · string
Status of email. Possible value: active | unsubscribed | bounce
status_mobile
query · string
Status of mobile. Possible value: active | unsubscribed | bounce
tag
query · string
Tags handling mode. Possible values: replace | merge. Default: replace
(array)required
body · object[]
Subscriber params. 1000 subscribers max.
[].external_idrequired
body · string
[].email
body · string
[].phone
body · string
[].firstname
body · string
[].lastname
body · string
[].address
body · string
[].zip
body · string
[].city
body · string
[].company
body · string
[].birthday
body · string
[].gender
body · string
[].tags
body · string[]
[].custom_fields
body · object
Responses
200Unsubscribed contacts added401Unathorized404List(s) not found422Email conflict - email belongs to subscriber with different external_id (Case 4/5)
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '[ { "external_id": "external_id", "email": "user@example.com", "phone": "phone", "firstname": "firstname", "lastname": "lastname", "address": "address", "zip": "zip", "city": "city", "company": "company", "birthday": "2026-01-01", "gender": "gender", "tags": [ "tags" ], "custom_fields": {} } ]' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/bulkinsert_by_external_id'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/bulkremove

Remove batch of subscribers from list. 1000 subscribers max.

Parameters
subscriber_list_id[]required
query · integer[]
Subscriberlist ID
(array)required
body · object[]
Subscriber email or phone. 1000 entries max.
[].email
body · string
[].phone
body · string
[].external_id
body · string
Responses
200Contacts removed from list401Unathorized
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '[ { "email": "user@example.com", "phone": "phone", "external_id": "external_id" } ]' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/bulkremove'
Example response 200
{
  "status": "200 Success"
}
POST/api/public/v2/subscribers/by_email

Show subscriber based on email

Parameters
email
body · string
Responses
200Subscriber found401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "email": "user@example.com" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/by_email'
Example response 200
{
  "id": 419,
  "email": "test284@test.com",
  "firstname": "Firstname",
  "lastname": "Lastname",
  "address": null,
  "zip": null,
  "city": null,
  "phone": "4710000077",
  "company": null,
  "birthday": null,
  "gender": null,
  "tags": [
    "tagname",
    "tagname2"
  ],
  "external_id": "10",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "status": "active",
  "EXTRA1": "value1",
  "EXTRA2": null,
  "EXTRA3": null,
  "EXTRA4": null,
  "OPTINEMAIL": null,
  "OPTINSMS": null,
  "OPTINEMAILSMS": null,
  "PRIVACYPOLICY": null,
  "lists": [
    {
      "id": 741,
      "title": "List"
    }
  ]
}
POST/api/public/v2/subscribers/by_phone

Show subscriber based on phone

Parameters
phone
body · string
Responses
200Subscriber found401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "phone": "phone" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/by_phone'
Example response 200
{
  "id": 422,
  "email": "test287@test.com",
  "firstname": "Firstname",
  "lastname": "Lastname",
  "address": null,
  "zip": null,
  "city": null,
  "phone": "4710000080",
  "company": null,
  "birthday": null,
  "gender": null,
  "tags": [
    "tagname",
    "tagname2"
  ],
  "external_id": "10",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "status": "active",
  "EXTRA1": "value1",
  "EXTRA2": null,
  "EXTRA3": null,
  "EXTRA4": null,
  "OPTINEMAIL": null,
  "OPTINSMS": null,
  "OPTINEMAILSMS": null,
  "PRIVACYPOLICY": null,
  "lists": [
    {
      "id": 747,
      "title": "List"
    }
  ]
}
POST/api/public/v2/subscribers/by_trackingtoken

Show subscriber based on trackingtoken

Parameters
trackingtoken
body · string
Responses
200Subscriber found401Unathorized404Not Found
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "trackingtoken": "trackingtoken" }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/by_trackingtoken'
Example response 200
{
  "id": 425,
  "email": "test290@test.com",
  "firstname": "Firstname",
  "lastname": "Lastname",
  "address": null,
  "zip": null,
  "city": null,
  "phone": "4710000083",
  "company": null,
  "birthday": null,
  "gender": null,
  "tags": [
    "tagname",
    "tagname2"
  ],
  "external_id": "10",
  "date_created": "2026-01-01T11:00:00.000Z",
  "date_updated": "2026-01-01T11:00:00.000Z",
  "make_id": 1452,
  "EXTRA1": "value1",
  "EXTRA2": null,
  "EXTRA3": null,
  "EXTRA4": null,
  "OPTINEMAIL": null,
  "OPTINSMS": null,
  "OPTINEMAILSMS": null,
  "PRIVACYPOLICY": null,
  "lists": [
    {
      "id": 753,
      "title": "List"
    }
  ]
}
GET/api/public/v2/subscribers/by_list

Show subscribers based on list id

Parameters
list_idrequired
query · integer
Subscriberlist ID
status
query · string
Status of email. Possible value: active|unsubscribed|bounce. Default: active
status_mobile
query · string
Status of mobile. Possible value: active|unsubscribed|bounce. Default: active
page
query · integer
Page number
per_page
query · integer
Number of entries per page (MAX 1000)
updated_after
query · string
Filter by updated date. Format: YYYY-MM-DDTHH:MM:SSZ (iso8601)
Responses
200Unsubscribed email and subscribed phone subscribers found401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/by_list'
Example response 200
[
  {
    "id": 436,
    "email": "test301@test.com",
    "firstname": "Firstname",
    "lastname": "Lastname",
    "address": null,
    "zip": null,
    "city": null,
    "phone": "4710000094",
    "company": null,
    "birthday": null,
    "gender": null,
    "tags": [],
    "external_id": "11",
    "date_created": "2026-01-01T11:00:00.000Z",
    "date_updated": "2026-01-01T11:00:00.000Z",
    "email_status": "unsubscribed",
    "phone_status": "unsubscribed",
    "EXTRA1": "value1",
    "EXTRA2": null,
    "EXTRA3": null,
    "EXTRA4": null,
    "OPTINEMAIL": null,
    "OPTINSMS": null,
    "OPTINEMAILSMS": null,
    "PRIVACYPOLICY": null,
    "lists": [
      {
        "id": 763,
        "title": "List"
      }
    ]
  }
]

Subscriptions

/api/public/v2/subscribers/subscriptions
POST/api/public/v2/subscribers/subscriptions/products/bulkinsert

Bulk insert products for user

Parameters
productsrequired
body · object[]
products[].external_idrequired
body · string
products[].name
body · string
products[].price_cents
body · integer
Responses
201Products inserted successfully
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "products": [ { "external_id": "external_id", "name": "name", "price_cents": 1 } ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/subscriptions/products/bulkinsert'
Example response 201
{
  "message": "products inserted successfully"
}
POST/api/public/v2/subscribers/subscriptions/bulkinsert

Bulk insert subscriptions for subscribers

Parameters
subscriber_subscriptionsrequired
body · object[]
subscriber_subscriptions[].emailrequired
body · string
subscriber_subscriptions[].subscriptionsrequired
body · object[]
subscriber_subscriptions[].subscriptions[].external_idrequired
body · string
subscriber_subscriptions[].subscriptions[].product_external_idrequired
body · string
subscriber_subscriptions[].subscriptions[].start_daterequired
body · string
subscriber_subscriptions[].subscriptions[].end_date
body · string
subscriber_subscriptions[].subscriptions[].name
body · string
subscriber_subscriptions[].subscriptions[].deliveries
body · integer
subscriber_subscriptions[].subscriptions[].interval_days
body · integer
subscriber_subscriptions[].subscriptions[].status
body · string
subscriber_subscriptions[].subscriptions[].payment_method_name
body · string
subscriber_subscriptions[].subscriptions[].cancellation_reason
body · string
subscriber_subscriptions[].subscriptions[].cancel_date
body · string
Responses
201subscriptions inserted with auto-created products
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "subscriber_subscriptions": [ { "email": "user@example.com", "subscriptions": [ {} ] } ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/subscriptions/bulkinsert'
Example response 201
{
  "message": "subscriptions inserted successfully"
}
POST/api/public/v2/subscribers/subscriptions/bulkinsert_by_external_id

Bulk insert subscriptions for subscribers

Parameters
subscriber_subscriptionsrequired
body · object[]
subscriber_subscriptions[].external_idrequired
body · string
subscriber_subscriptions[].subscriptionsrequired
body · object[]
subscriber_subscriptions[].subscriptions[].external_idrequired
body · string
subscriber_subscriptions[].subscriptions[].product_external_idrequired
body · string
subscriber_subscriptions[].subscriptions[].start_daterequired
body · string
subscriber_subscriptions[].subscriptions[].end_date
body · string
subscriber_subscriptions[].subscriptions[].name
body · string
subscriber_subscriptions[].subscriptions[].deliveries
body · integer
subscriber_subscriptions[].subscriptions[].interval_days
body · integer
subscriber_subscriptions[].subscriptions[].status
body · string
subscriber_subscriptions[].subscriptions[].payment_method_name
body · string
subscriber_subscriptions[].subscriptions[].cancellation_reason
body · string
subscriber_subscriptions[].subscriptions[].cancel_date
body · string
Responses
201subscriptions inserted with auto-created products
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "subscriber_subscriptions": [ { "external_id": "external_id", "subscriptions": [ {} ] } ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/subscriptions/bulkinsert_by_external_id'
Example response 201
{
  "message": "subscriptions inserted successfully"
}

Tickets

/api/public/v2/subscribers/tickets
POST/api/public/v2/subscribers/tickets/events/bulkinsert

Bulk insert events for subscribers

Parameters
eventsrequired
body · object[]
events[].external_idrequired
body · string
events[].title
body · string
events[].category
body · string
events[].start_daterequired
body · string
events[].end_date
body · string
events[].venue
body · string
events[].url
body · string
events[].status
body · string
Responses
201Events inserted successfully
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "events": [ { "external_id": "external_id", "title": "title", "category": "category", "start_date": "2026-01-01", "end_date": "2026-01-01", "venue": "venue", "url": "url", "status": "active" } ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/tickets/events/bulkinsert'
Example response 201
{
  "message": "Events inserted successfully"
}
POST/api/public/v2/subscribers/tickets/bulkinsert

Bulk insert tickets for subscribers

Parameters
subscriber_ticketsrequired
body · object[]
subscriber_tickets[].emailrequired
body · string
subscriber_tickets[].ticketsrequired
body · object[]
subscriber_tickets[].tickets[].external_idrequired
body · string
subscriber_tickets[].tickets[].event_external_idrequired
body · string
subscriber_tickets[].tickets[].count
body · integer
subscriber_tickets[].tickets[].price_cents
body · integer
subscriber_tickets[].tickets[].purchased_at
body · string
subscriber_tickets[].tickets[].status
body · string
Responses
201Tickets inserted successfully422Invalid ticket payload
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "subscriber_tickets": [ { "email": "user@example.com", "tickets": [ {} ] } ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/tickets/bulkinsert'
Example response 201
{
  "message": "Tickets inserted successfully"
}
POST/api/public/v2/subscribers/tickets/bulkinsert_by_external_id

Bulk insert tickets for subscribers by external id

Parameters
subscriber_ticketsrequired
body · object[]
subscriber_tickets[].external_idrequired
body · string
subscriber_tickets[].ticketsrequired
body · object[]
subscriber_tickets[].tickets[].external_idrequired
body · string
subscriber_tickets[].tickets[].event_external_idrequired
body · string
subscriber_tickets[].tickets[].count
body · integer
subscriber_tickets[].tickets[].price_cents
body · integer
subscriber_tickets[].tickets[].status
body · string
subscriber_tickets[].tickets[].purchased_at
body · string
Responses
201Tickets inserted successfully422Invalid ticket payload
Request · curl
curl --request POST \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --data '{ "subscriber_tickets": [ { "external_id": "external_id", "tickets": [ {} ] } ] }' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscribers/tickets/bulkinsert_by_external_id'
Example response 201
{
  "message": "Tickets inserted successfully"
}

Subscriberstatus

/api/public/v2/subscriberstatus
GET/api/public/v2/subscriberstatus

Get latest updated subscribers

Parameters
from_date
query · string
Date to get subscribers updated after this date. Format: YYYY-MM-DD
to_date
query · string
Date to get subscribers updated before this date. Format: YYYY-MM-DD
Responses
200Return all lists401Unathorized
Request · curl
curl --request GET \
  --user 'user_id:api_key' \
  --header 'content-type: application/json' \
  --url 'https://subscribers.dialogapi.no/api/public/v2/subscriberstatus'
Example response 200
[
  {
    "id": 440,
    "email": "test305@test.com",
    "firstname": "Firstname",
    "lastname": "Lastname",
    "address": null,
    "zip": null,
    "city": null,
    "phone": "4710000098",
    "company": null,
    "birthday": null,
    "gender": null,
    "date_created": "2026-01-01T11:00:00.000Z",
    "date_updated": "2026-01-01T11:00:00.000Z",
    "inactive_emails": [
      {
        "email": "unsubscribed@test.com",
        "status": "unsubscribed",
        "reason": "The content is not relevant for me"
      }
    ],
    "inactive_phones": [],
    "date_updated_by_user": "2026-01-01T11:00:00.000Z",
    "OPTINEMAIL": null,
    "OPTINSMS": null,
    "OPTINEMAILSMS": null,
    "PRIVACYPOLICY": null
  }
]