Документация для разработчиков

Переход с API 1.0

Возможности и имена параметров в v2 те же, что в старом API вида ?method=lists.get. Меняются адресация, HTTP-методы и форма ответа.

Что изменилось #

ЧтоAPI 1.0API v2
Адресация ?method=lists.get GET /v2/lists
HTTP-методы Всё через GET или POST GET, POST, PUT, DELETE по смыслу операции
Ключ ?api_key= либо username + password Заголовок Authorization: Bearer; ?api_key= тоже работает. Вход по логину и паролю убран
Код ответа Всегда 200, ошибка внутри msg HTTP-статус отражает результат: 201, 204, 4xx, 5xx
Ответ при ошибке {"response":{"msg":{"err_code":5,…}}} {"error":{"code":5,"message":"…"}}
Ответ при успехе {"response":{"msg":…,"data":…}} Без изменений — тот же конверт
Формат вывода format=json|xml|jsonp Только JSON, параметр format не поддерживается
Кодировка Параметр charset Всегда UTF-8

Успешный ответ не изменился: полезная нагрузка по-прежнему лежит в response.data. Если разбор ответа у вас уже написан, переписывать его не нужно — достаточно добавить проверку HTTP-статуса и ветку для error.

Параметры #

Имена параметров совпадают со старым API. Разница в том, что часть из них теперь берётся из URL: /lists/128341/members — это list_id=128341 для метода lists.get_members. Все остальные параметры передаются в теле запроса и попадают в тот же обработчик без изменений.

Практическое следствие: если какого-то фильтра нет в таблице параметров эндпоинта, но он был в старом API — просто передайте его в теле, он будет учтён.

Таблица соответствия #

Метод 1.0Эндпоинт v2
lists.getGET /lists, GET /lists/{list_id}
lists.addPOST /lists
lists.updatePUT /lists/{list_id}
lists.deleteDELETE /lists/{list_id}
lists.get_membersGET /lists/{list_id}/members
lists.add_memberPOST /lists/{list_id}/members
lists.add_member_batchPOST /lists/{list_id}/members/batch
lists.uploadPOST /lists/{list_id}/members/import
lists.get_import_resultGET /lists/{list_id}/members/import
lists.get_memberGET /lists/{list_id}/members/{email}
lists.update_memberPUT /lists/{list_id}/members/{email}
lists.delete_memberDELETE /lists/{list_id}/members/{email}
lists.unsubscribe_memberPOST /lists/{list_id}/members/{email}/unsubscribe
lists.move_memberPOST /lists/{list_id}/members/{email}/move
lists.copy_memberPOST /lists/{list_id}/members/{email}/copy
lists.member_activityGET /lists/{list_id}/members/{email}/activity
lists.clean_listPOST /lists/{list_id}/clean
lists.get_unsubscribedGET /lists/{list_id}/unsubscribed
lists.get_complaintsGET /lists/{list_id}/complaints
lists.get_import_historyGET /lists/{list_id}/import-history
lists.last_statusGET /lists/{list_id}/last-status
lists.add_mergePOST /lists/{list_id}/fields
lists.update_mergePUT /lists/{list_id}/fields/{merge_id}
lists.delete_mergeDELETE /lists/{list_id}/fields/{merge_id}
campaigns.getGET /campaigns, GET /campaigns/{campaign_id}
campaigns.createPOST /campaigns
campaigns.updatePUT /campaigns/{campaign_id}
campaigns.deleteDELETE /campaigns/{campaign_id}
campaigns.copyPOST /campaigns/{campaign_id}/copy
campaigns.pausePOST /campaigns/{campaign_id}/pause
campaigns.restart_pausedPOST /campaigns/{campaign_id}/resume
campaigns.resend_unopenedPOST /campaigns/{campaign_id}/resend
campaigns.attachPOST /campaigns/{campaign_id}/attachments
campaigns.get_attachmentsGET /campaigns/{campaign_id}/attachments
campaigns.delete_attachmentDELETE /campaigns/{campaign_id}/attachments/{id}
campaigns.get_foldersGET /campaigns/folders
campaigns.move_to_folderPOST /campaigns/{campaign_id}/move
campaigns.get_automationsGET /automations
campaigns.create_autoPOST /automations
campaigns.update_autoPUT /automations/{campaign_id}
campaigns.delete_automationDELETE /automations/{campaign_id}
campaigns.force_autoPOST /automations/{campaign_id}/trigger
campaigns.copy_automationPOST /automations/{campaign_id}/copy
campaigns.get_templatesGET /templates
campaigns.get_saved_templatesGET /templates/saved
campaigns.add_templatePOST /templates
campaigns.delete_templateDELETE /templates/{id}
reports.summary и другиеGET /reports/{campaign_id}/{метрика}
account.get_balanceGET /account/balance
account.get_confirmedGET /account/senders
account.confirm_from_emailPOST /account/senders/confirm
account.get_domainsGET /account/domains
account.add_domainPOST /account/domains
account.check_domainsGET /account/domains/check
account.delete_domainDELETE /account/domains/{domain}
account.get_webhooksGET /account/webhooks
account.add_webhooksPOST /account/webhooks
account.delete_webhooksDELETE /account/webhooks/{event_name}

Пример переписывания #

Было

curl 'https://api.dashamail.com/?method=lists.add_member&api_key=KEY\
&list_id=128341&email=ivan@example.com&merge_1=%D0%98%D0%B2%D0%B0%D0%BD'

Стало

curl -X POST 'https://api.dashamail.com/v2/lists/128341/members' \
  -H 'Authorization: Bearer KEY' \
  -H 'Content-Type: application/json' \
  -d '{"email": "ivan@example.com", "merge_1": "Иван"}'

Поддержка старого API #

API 1.0 продолжает работать — переход на v2 не обязателен и не имеет срока. Обе версии обращаются к одной и той же логике, поэтому их можно использовать одновременно, в том числе с одним ключом.

DashaMail хранит и защищает ваши данные на территории Российской Федерации

Подробнее...