Склад "Кунцево" переехал! Новый адрес: Москва, ул. Рябиновая, д. 32. Закрыть
МЕНЮ

API

Для взаимодействия с внешними системами в компании "ГлавДоставка" разработан API, доступный для всех клиентов компании. Он позволяет получать предварительный расчёт стоимости, план перевозки, а также оформлять накладные в собственной системе клиента. Пожалуйста, свяжитесь с вашим куратором, чтобы начать процесс интеграции.

Текущая версия API — 2019.10.30.1.

Оглавление

Протокол обмена

API-сервер доступен по адресу https://api.glavdostavka.ru

Структура запроса

Поле Тип Обязательный Формат/описание Пример
id string
Идентификатор запроса. Ответ также содержит этот идентификатор, что позволяет асинхронно обрабатывать несколько запросов '11119016315a2117bc330dc5.67310202'
auth string + Авторизационный токен клиента (см. ниже) '75743/433ca3e5068add011dcbf60dfbca84bb'

Структура ответа

Поле Тип Обязательный Формат/описание Пример
id string
Идентификатор запроса '11119016315a2117bc330dc5.67310202'
error object + Данные об ошибке { "code": 0, "message": "" }
notice array
Примечания [ "Не указан груз", "Не указан отправитель" ]
result mixed
Результат выполнения запроса

Поле "error"

Поле Тип Обязательный Формат/описание
code int + Числовой код ошибки
message string + Текст ошибки

Если error.code = 0, то запрос завершился без ошибок.

Поле "result"

Структура поля result зависит от вызова. Все вызовы, кроме тестовых, возвращают в данном поле массив. Если в методе возникла обрабатываемая ошибка, массив result будет содержать поле error с текстом ошибки.

Список методом вместе с описанием параметров и структуры ответа приведён далее в документе.

Токен клиента

Все закрытые методы требуют авторизации клиента. Авторизация реализована через токен, который представляет из себя составную строку следующего вида:

user_id/user_hash

где user_id — идентификатор пользователя, а user_hash — это авторизационный хэш, который хранится в настройках клиента. Пример токена: '75743/433ca3e5068add011dcbf60dfbca84bb'

Токен должен передаваться в параметре auth, который добавляется к url-запросу (см. пример).

На период тестирования авторизационный токен выдаётся по запросу клиента. В дальнейшем информация о токене будет доступна в ЛК клиента.

Пример вызова

<?php
	$API_URL = 'http://api.glavdostavka.ru';
	$API_KEY = '75743/433ca3e5068add011dcbf60dfbca84bb'; // пример ключа (подставить свой!)

	$api_method = '/service/extra/';
	$get_params = [
		'id'      => uniqid(mt_rand(), true),
		'auth'    => $API_KEY,
		];
	$post_params = [];

	$url = $API_URL.$api_method;
	$url.= '?'.http_build_query($get_params);
	if (!empty($post_params))
		$post_params = http_build_query($post_params);

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);

	$response = curl_exec($ch);
	if ($response === false)
		throw new Exception(sprintf('Api connect error: "%s"', curl_error($ch)), 500);

	curl_close($ch);

	$response = json_decode($response, true);
	var_dump($response);

Открытые методы API

Список складов

URL

/service/storehouse/

HTTP-метод POST
Описание Список складов

Параметры

Параметр Тип Обязательный Формат/описание Пример
city_id int
Фильтрует список, оставляя только склады в указанном городе (по идентификатору) 20595294
fias_id string
Фильтрует список, оставляя только склады в указанном городе (по коду ФИАС) '0c5b2444-70a0-4932-980c-b4dc0d3f02b5'
take_in boolean
Фильтрует список, оставляя только те склады, в которых возможна приёмка груза true
give_out boolean
Фильтрует список, оставляя только те склады, в которых возможна выдача груза true

Чтобы получить склады по конкретному городу, укажите один из параметров — city_id или fias_id. Не передавайте сразу оба параметра.

Ответ

Массив складов, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
storehouse_id int + Идентификатор склада 21110649
title string + Название склада 'Дмитровка'
address string + Адрес склада 'г Москва, Дмитровское шоссе, д 116'
phone string
Контактный телефон '+7(495) 660-20-49'
email string
Адрес электронной почты 'info@glav-dostavka.ru'
take_in boolean + На складе возможна приёмка груза true
give_out boolean + На складе возможна выдача груза false
latitude string + Широта '55.9043420'
longitude string + Долгота '37.5455010'
city_id int + Идентификатор города 35
city_title string + Название города 'Москва'

Список городов, в которые и из которых возможна перевозка

URL

/service/shipping_city/

HTTP-метод POST
Описание Список складов

Ответ

Массив городов, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
city_id int + Идентификатор населённого пункта

43

title string + Название населённого пункта во внутреннем формате 'Екатеринбург г (Свердловская обл)'

fullname

string

+

Название населённого пункта в формате DaData

'Свердловская обл, г Екатеринбург'

shortname string + Краткое название населённого пункта 'Екатеринбург'
kladr_id int + Код КЛАДР (только для городов России). Поле является устаревшим, используйте fias_id.

'6600000100000'

fias_id string + Код ФИАС (только для городов России)

'2763c110-cb8b-416a-9dac-ad28a55b4402'

Информация о накладной по номеру

URL

/order/status/

HTTP-метод POST
Описание

Получение информации о накладной по её номеру

Параметры

Параметр Тип Обязательный Формат/описание Пример
title string + Номер накладной 'МСК-СПБ-123456/19'

Ответ

Поле Тип Обязательный Формат/описание Пример
title string + Внутренний номер накладной 'МСК-СПБ-123456/17'
report_date string + Дата и время прихода накладной на склад отправления. Формат — YYYY-MM-DD hh:mm:ss '2017-11-01 12:00:00'
from_city_id int + Идентификатор города отправления 35
from_city string + Город отправления 'Москва г'
from_city_fias string
ФИАС города отправления (только для городов России) '0c5b2444-70a0-4932-980c-b4dc0d3f02b5'
take_in_storehouse_id int
Идентификатор склада приёмки 22842428
to_city_id int + Идентификатор города назначения 36
to_city string + Город назначения 'Санкт-Петербург г'
to_city_fias string
ФИАС города назначения (только для городов России) 'e0b171b6-bf2e-4d68-ab05-4d42ab2b375a'
give_out_storehouse_id int
Идентификатор склада выдачи 40
status string + Идентификатор текущего статуса накладной. Расшифровка статуса в методе /order/statuses/ 'open'
status_title srting + Текст текущего статуса 'Заявка оформлена'
amount int + Количество мест в грузе 1
volume float + Общий объём груза 2.0
weight float + Общий вес груза 20
history array + Массив с историей накладной (см. ниже)

Поле history

Содержит массив с историей статусов, отсортированный по времени. Структура каждого элемента описана ниже.

Поле Тип Обязательный Формат/описание Пример
status string + Идентификатор статуса 'open'
status_title string + Текст статуса 'Заявка оформлена'
date srting + Дата и время перехода накладной в данный статус. Формат — YYYY-MM-DD hh:mm:ss '2017-11-01 12:00:00'

Закрытые методы API

Список дополнительных услуг

URL

/service/extra/

HTTP-метод POST
Описание

Получение списка дополнительных услуг, которые предоставляет компания

Параметры

-

Ответ

Массив дополнительных услуг, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
service_id int + Идентификатор статуса 8994057
title string + Текст статуса 'Стреппинг лента'
parent_services string[]
Возможные родительские услуги [ 'pickup', 'delivery' ]

Список городов

URL

/service/city/

HTTP-метод POST
Описание Список населенных пунктов, в которые осуществляется доставка

Параметры

Параметр Тип Обязательный Формат/описание Пример
fias_id string
Фильтрует список, оставляя только город с указанным кодом ФИАС '0c5b2444-70a0-4932-980c-b4dc0d3f02b5'
kladr_id string deprecated Фильтрует список, оставляя только город с указанным кодом КЛАДР. Поле является устаревшим, используйте fias_id. '7700000000000'
letter string
Фильтрует список, оставляя только те города, названия которых начинаются с указанного символа 'М'

Ответ

Массив населённых пунктов, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
city_id int + Идентификатор населённого пункта 20595294
title string + Название населённого пункта во внутреннем формате 'Электросталь г (Московская обл)'
fullname string + Название населённого пункта в формате DaData 'Московская обл, г Электросталь'
fias_id string
Код ФИАС (только для городов России) 'e0b171b6-bf2e-4d68-ab05-4d42ab2b375a'

kladr_id

string deprecated Код КЛАДР (только для городов России). Поле является устаревшим, используйте fias_id. '5000002100000'

Список городов, из которых возможна перевозка

URL

/service/shipping_city_from/

HTTP-метод POST
Описание Список складов

Параметры

Параметр Тип Обязательный Формат/описание Пример
to_city_id int
ID города, в который будет осуществляться перевозка 49

Ответ

Массив городов в которые возможна перевозка, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
city_id int + Идентификатор населённого пункта

43

title string + Название населённого пункта во внутреннем формате 'Екатеринбург г (Свердловская обл)'

fullname

string

+

Название населённого пункта в формате DaData

'Свердловская обл, г Екатеринбург'

shortname string + Краткое название населённого пункта 'Екатеринбург'
kladr_id int + Код КЛАДР (только для городов России). Поле является устаревшим, используйте fias_id.

'6600000100000'

fias_id string + Код ФИАС (только для городов России)

'2763c110-cb8b-416a-9dac-ad28a55b4402'

Список городов, в которые возможна перевозка

URL

/service/shipping_city_to/

HTTP-метод POST
Описание Список складов

Параметры

Параметр Тип Обязательный Формат/описание Пример
from_city_id int
ID города, из которого будет осуществляться перевозка 49

Ответ

Массив городов из которых возможна перевозка, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
city_id int + Идентификатор населённого пункта

43

title string + Название населённого пункта во внутреннем формате 'Екатеринбург г (Свердловская обл)'

fullname

string

+

Название населённого пункта в формате DaData

'Свердловская обл, г Екатеринбург'

shortname string + Краткое название населённого пункта 'Екатеринбург'
kladr_id int + Код КЛАДР (только для городов России). Поле является устаревшим, используйте fias_id.

'6600000100000'

fias_id string + Код ФИАС (только для городов России)

'2763c110-cb8b-416a-9dac-ad28a55b4402'

Список возможных статусов накладных

URL

/order/statuses/

HTTP-метод POST
Описание Получение списка возможных статусов накладных

Параметры

-

Ответ

Массив статусов, структура элементов представлена ниже.

Поле Тип Обязательный Формат/описание Пример
status string + Идентификатор статуса open
title string + Текст статуса Заявка оформлена
title_short string + Краткий текст статуса Проект

Дата прибытия и доставки

URL

/order/arrival/

HTTP-метод POST
Описание Получение даты прихода груза на склад назначения и минимальной даты доставки по дате сдачи груза на склад отправления

Параметры

Параметр Тип Обязательный Формат/описание Пример
from_city_id int + Идентификатор города отправления 35
to_city_id int + Идентификатор города назначения 149
report_date string + Дата и время сдачи груза на склад отправления. Допустимые форматы — YYYY-MM-DD hh:mm; YYYY-MM-DD '2018-09-01'

Ответ

Поле Тип Обязательный Формат/описание Пример
arrival_date string + Дата и время планируемого прибытия груза на склад назначения '2018-09-06 13:00'
delivery_date string + Минимально возможная дата и время доставки груза '2018-09-07 09:00'

Информация о накладной по ID

URL

/order/{order_id}/

HTTP-метод POST
Описание

Получение данных накладной, которая была оформлена ранее

Параметры

Параметр Тип Обязательный Формат/описание Пример
order_id int + Идентификатор накладной. Параметр передаётся через URL запроса. 123456789

Ответ

Поле Тип Обязательный Формат/описание Пример
order_id int + Идентификатор накладной 123456789
title string + Внутренний номер накладной 'МСК-СПБ-123456/17'
client_order_num string
Клиентский номер накладной 'Мск-Спб/123.456'
report_date string + Дата и время прихода накладной на склад отправления. Формат — YYYY-MM-DD hh:mm:ss '2017-11-01 12:00:00'
from_city_id int + Идентификатор города отправления 35
from_city string + Город отправления 'Москва г'
from_city_fias string
ФИАС города отправления (только для городов России) '0c5b2444-70a0-4932-980c-b4dc0d3f02b5'
take_in_storehouse_id int
Идентификатор склада приёмки 22842428
to_city_id int + Идентификатор города назначения 36
to_city string + Город назначения 'Санкт-Петербург г'
to_city_fias string
ФИАС города назначения (только для городов России) 'e0b171b6-bf2e-4d68-ab05-4d42ab2b375a'
give_out_storehouse_id int
Идентификатор склада выдачи 40
status string + Идентификатор текущего статуса накладной. Расшифровка статуса в методе /order/statuses/ 'open'
status_title srting + Текст текущего статуса 'Заявка оформлена'
amount int + Количество мест в грузе 1
volume float + Общий объём груза 2.0
weight float + Общий вес груза 20
cost float + Общая стоимость услуг по накладной 650
services array + Список услуг
history array + Массив с историей накладной (см. ниже)
documents array + Массив документов по накладной (см. ниже)

Поле services

Содержит массив со списком услуг

Поле Тип Обязательный Форма/описание Пример
title string + Название услуги 'Перевозка'
cost float + Стоимость услуги 650
is_manual_pricing boolean + Идентификатор ручного расчёта стоимости услуги true

Поле history

Содержит массив с историей статусов, отсортированный по времени. Структура каждого элемента описана ниже.

Поле Тип Обязательный Формат/описание Пример
status string + Идентификатор статуса 'open'
status_title string + Текст статуса 'Заявка оформлена'
date srting + Дата и время перехода накладной в данный статус. Формат — YYYY-MM-DD hh:mm:ss '2017-11-01 12:00:00'

Поле documents

Содержит массив документов по накладной. Структура каждого элемента описана ниже.

Поле Тип Обязательный Формат/описание Пример
type string + Тип документа 'Сопроводительные документы'
document_id int + Идентификатор документа 987654321
href srting + Ссылка на получение документа '/order/123456789/document/987654321/'

Список накладных по фильтру

URL

/order/filter/

HTTP-метод POST
Описание Получение списка накладных, соответвующих переданным полям фильтрации

Параметры

Параметр Тип Обязательный По умолчанию Формат/описание Пример
status string|string[]

Статус или список статусов накладных [ 'open', 'pickup', 'store' ]
from_report_date string
начало предыдущего месяца Дата прихода груза на склад (от). Формат — YYYY-MM-DD '2017-11-01'
to_report_date string
текущая дата Дата прихода груза на склад (до). Формат — YYYY-MM-DD '2017-11-10'
from_city_id int

Идентификатор города отправления 35
to_city_id int

Идентификатор города назначения 36
title string

Внутренний номер накладной 'МСК-СПБ-123456/17'
client_order_num string

Клиентский номер накладной 'Мск-Спб/123.456'

Ответ

Массив накладных

Структура каждого элемента аналогична структуре ответа /order/{order_id}/.

Загрузка документа накладной

URL

/order/{order_id}/document/{document_id}/

HTTP-метод POST
Описание Загрузка документа по накладной

Параметры

Параметр Тип Обязательный Формат/описание Пример
order_id int + Идентификатор накладной 123456789
document_id int + Идентификатор документа 987654321

Ответ

Запрошенный документ в формате PDF. Ответ выдаётся с заголовками, соответствующими загрузке файла.

Просчёт накладной

URL

/order/calc/

HTTP-метод POST
Описание Просчет накладной

Параметры

Параметр

Тип

Обязательный

По умолчанию

Формат/описание

Пример

payer enum: '', 'from_client', 'to_client'
владелец API-токена Плательщик по накладной. Можно принудительно задать плательщиком отправителя (значение 'from_client') или получателя (значение 'to_client'). 'from_client'
report_date string
текущая дата Дата самоподвоза '2017-11-01'
aviso_date string

Дата и время авизации (доставки в сетевой магазин). Допустимые форматы — YYYY-MM-DD hh:mm; YYYY-MM-DD.

Важно: если прислана дата без времени, время считается равным 00:00.

'2017-11-10 10:00'
from_client string +

Название клиента отправителя

'АО "Пластик"'
from_city_id int +

id города отправления

35
from_address string +
Адрес отправителя 'г. Москва, Ленинский пр-кт, д. 7'
to_client string +
Название клиента получателя 'ООО "Игрушки"'
to_city_id int +
id города получателя 36
to_address string +
Адрес получателя 'г. Санкт-Петербург, Адмиралтейский пр-кт, д. 5'
pickup_date string

Дата забора груза / услуга забора не осуществляется, если не заполнено это поле '2017-11-01'
pickup_note string

Комментарий по забору груза 'Проезд между красных зданий.'
delivery_date string

Дата доставки груза / услуга доставка не осуществляется, если не заполнено это поле '2017-11-10'
delivery_time string|string[]

Время доставки груза. Работает аналогично полю pickup_time. '15:00'
delivery_note string

Комментарий по доставке груза 'Осторожно - злая собака.'
service array


Дополнительные услуги по накладной
service[][service_id] int + (при наличии доп. услуги)

id дополнительной услуги

8994057
service[][parent_service] string

Родительская услуга (только для дополнительных услуг к забору или доставке). Возможные варианты:

  • 'pickup' — забор;
  • 'delivery' — доставка.
'pickup'
cargo array +

Информация о грузе


cargo[][one_place] boolean
false

true — параметры одного места
false — параметры всех мест

true
cargo[][amount] int +
Количество мест 3
cargo[][weight] float +
Вес 10
cargo[][length] float +
Длина 1.0
cargo[][width] float +
Ширина 0.5
cargo[][height] float +
Высота 0.7
cargo[][hard_pack] boolean
false

true — необходима жёсткая упаковка


true
cargo[][pallet] boolean
false true — необходима упаковка в паллет-борт false
cargo_max float[] + (при наличии забора/доставки)


Габариты максимального места


cargo_max[length] float +
Максимальная длина 1.0
cargo_max[width] float +
Максимальная ширина 0.5
cargo_max[height] float +
Максимальная высота 0.7
cargo_type string

Характер груза 'Пластиковые игрушки.'
cargo_pack string

Описание упаковки груза '3 картонные коробки.'
appraised_value float + (при наличии услуги "страхование")
Заявленная стоимость 300000
return_documents boolean
false true — необходима услуга "Возврат документов" false

Ответ

Поле

Тип

Обязательный

Формат/описание

Пример

waybills array + Услуги и доп. услуги по накладной
waybills[][service_id] int + ID услуги или доп. услуги 90
waybills[][title] string + Название услуги или доп. услуги 'Перевозка'
waybills[][sum_debit] float + Просчитанная сумма по услуге 1837.50

total_sum_debit float + Просчитанная сумма по накладной 5572.60

Создание новой накладной

URL

/order/add/

HTTP-метод POST
Описание Создание накладной на основе переданных параметров

Параметры

Параметр Тип Обязательный По умолчанию Формат/описание Пример
payer enum: '', 'from_client', 'to_client'
владелец API-токена Плательщик по накладной. Можно принудительно задать плательщиком отправителя (значение 'from_client') или получателя (значение 'to_client'). 'from_client'
client_order_num string

Клиентский номер заказа 'Мск-Спб/123.456'
client_tn string

Клиентский номер товарной накладной 'ТН-123'
client_trn string

Клиентский номер транспортной накладной 'ТРН-123'
client_ttn string

Клиентский номер товарно-транспортной накладной 'ТТН-123'
client_sf string

Клиентский номер счет-фактуры 'СФ-123'
report_date string
текущая дата Дата самоподвоза '2017-11-01'
aviso_date string

Дата и время авизации (доставки в сетевой магазин). Допустимые форматы — YYYY-MM-DD hh:mm; YYYY-MM-DD.

Важно: если прислана дата без времени, время считается равным 00:00.

'2017-11-10 10:00'
aviso_all_day boolean
false

false — авизация к заданному в поле aviso_date времени;

true — авизация в течение дня; время из поля aviso_date в таком случае не учитывается.

false
from_client string +

Название клиента отправителя

'АО "Пластик"'
from_city_id int +

id города отправления

35
from_name string +

Ф.И.О. отправителя

'Иванов Иван Иванович'
from_address string +
Адрес отправителя 'г. Москва, Ленинский пр-кт, д. 7'
from_phone string +
Телефон отправителя '+7-900-100-20-30'
to_client string +
Название клиента получателя 'ООО "Игрушки"'
to_city_id int +
id города получателя 36
to_name string +
Ф.И.О. получателя 'Петров Пётр Петрович'
to_address string +
Адрес получателя 'г. Санкт-Петербург, Адмиралтейский пр-кт, д. 5'
to_phone string +
Телефон получателя '+7-900-400-50-60'
pickup_date string

Дата забора груза / услуга забора не осуществляется, если не заполнено это поле '2017-11-01'
pickup_time string|string[]

Время забора груза. Варианты использования:

  • Точное время: '10:00'.
  • Интервал: [ '10:00', '14:00' ].
  • Несколько интервалов: [ [ '10:00', '14:00' ], [ '16:00', '20:00' ] ].
[ '10:00', '14:00' ]
pickup_note string

Комментарий по забору груза 'Проезд между красных зданий.'
delivery_date string

Дата доставки груза / услуга доставка не осуществляется, если не заполнено это поле '2017-11-10'
delivery_time string|string[]

Время доставки груза. Работает аналогично полю pickup_time. '15:00'
delivery_note string

Комментарий по доставке груза 'Осторожно - злая собака.'
service array


Дополнительные услуги по накладной
service[][service_id] int + (при наличии доп. услуги)

id дополнительной услуги

8994057
take_in_storehouse_id int

ID склада приёмки (см. /service/storehouse/)
22842428
service[][note] string

Комментарий к услуге 'Обернуть стреппинг лентой коробки.'
service[][parent_service] string

Родительская услуга (только для дополнительных услуг к забору или доставке). Возможные варианты:

  • 'pickup' — забор;
  • 'delivery' — доставка.
'pickup'
cargo array +

Информация о грузе


cargo[][one_place] boolean
false

true — параметры одного места
false — параметры всех мест

true
cargo[][amount] int +
Количество мест 3
cargo[][weight] float +
Вес 10
cargo[][length] float +
Длина 1.0
cargo[][width] float +
Ширина 0.5
cargo[][height] float +
Высота 0.7
cargo[][hard_pack] boolean
false

true — необходима жёсткая упаковка


true
cargo[][pallet] boolean
false true — необходима упаковка в паллет-борт false
cargo_max float[] + (при наличии забора/доставки)


Габариты максимального места


cargo_max[length] float +
Максимальная длина 1.0
cargo_max[width] float +
Максимальная ширина 0.5
cargo_max[height] float +
Максимальная высота 0.7
cargo_type string

Характер груза 'Пластиковые игрушки.'
cargo_pack string

Описание упаковки груза '3 картонные коробки.'
appraised_value float + (при наличии услуги "страхование")
Заявленная стоимость 300000
return_documents boolean
false true — необходима услуга "Возврат документов" false
client_information string

Служебная информация, добавляется только через API и отображается в экспедиторской расписке. 'Текстовое описание 200-300 символов'

Если город отправления(from_city_id) и город назначения(to_city_id) привязаны к одному филиалу и указаны адрес забора (from_address) и адрес доставки (to_address), то будет создана накладная с типом "Доставка грузов по городу и области". Груз поедет одним днём, этот день можно указать в одном из параметров: delivery_date / pickup_date. Примечание: при данных условиях нельзя одновременно указывать разные delivery_date и pickup_date — накладная не будет создана!

Если город отправления (from_city_id) и город назначения (to_city_id) привязаны к одному филиалу, не указан адрес забора (т. е. будет самоподвоз на склад) и указан адрес доставки, будет создана накладная с типом "Доставка сборных грузов" с доставкой и выездами за пределы города без стоимости перевозки.

При добавлении доп. услуги для забора или доставки (например, погрузо-разгрузочных работ) необходимо указывать родительскую услугу в поле parent_service — забор ('pickup') или доставку ('delivery'). Чтобы заказать услугу и для забора, и для доставки, добавьте её дважды с разными parent_service. Пример:

{
    ...
    pickup_date: '2019-02-01',
    delivery_date: '2019-02-10',
    service: [
        {
            service_id: 8994057,
            note: 'Упаковка стреппинг лентой'
        },
        {
            service_id: 528,
            parent_service: 'pickup',
            note: 'ПРР для забора груза'
        },
        {
            service_id: 528,
            parent_service: 'delivery',
            note: 'ПРР для доставки груза'
        }
    ],
    ...
}

Обратите внимание, что если в накладной нет забора, то и добавить услугу для забора нельзя (вернётся ошибка, накладная не будет создана). Аналогично для доставки.

Ниже приведен код с несколькими примерами накладных.

<?php
	$API_URL = 'http://api.glavdostavka.ru';
	$API_KEY = '75743/433ca3e5068add011dcbf60dfbca84bb'; // пример ключа (подставить свой!)

	$api_method = '/service/extra/';
	$get_params = [
		'id'      => uniqid(mt_rand(), true),
		'auth'    => $API_KEY,
	];

	/*
		1. Пример с минимальным количеством параметров. Накладная Москва-Петербург без автоэкспедирования.
	*/
	$post_params = [
	   'from_client' => 'Имя клиента отправителя',
	   'to_client' => 'Имя клиента получателя',
	   'from_city_id' => 35,
	   'to_city_id' => 36,
	   'cargo' => [
		  0 => [
			 'amount' => 2,
			 'weight' => 100,
			 'length' => 2,
			 'width' => 1,
			 'height' => 3
		  ]
	   ]
	];

	/*
		2. Пример с автоэкспедированием.
	*/
	$post_params = [
	   'from_client' => 'Имя клиента отправителя',
	   'to_client' => 'Имя клиента получателя',
	   'from_city_id' => 35,
	   'to_city_id' => 36,
	   'cargo' => [
		  0 => [
			 'amount' => 2,
			 'weight' => 100,
			 'length' => 2,
			 'width' => 1,
			 'height' => 3
		  ]
	   ],
	   'pickup_date' => '2019-01-30',
	   'delivery_date' => '2019-01-31',
	   'cargo_max' => [
		  'length' => 2,
		  'width' => 1,
		  'height' => 3
	   ]
	];

	/*
		3. Пример с грузом или несколькими грузами.
		Параметр amount в cargo задаёт количество грузов. Если при этом указан флаг one_place = false,
		то вне зависимости от количества создастся одно место в накладной, и габариты, указанные в
		параметрах cargo, применятся к этому месту. Если же one_place = true, то создастся столько мест,
		сколько указано в amount, и каждому месту применятся габариты, указанные в cargo.
	*/
	$post_params = [
	   'from_client' => 'Имя клиента отправителя',
	   'to_client' => 'Имя клиента получателя',
	   'from_city_id' => 35,
	   'to_city_id' => 36,
	   'cargo' => [
		  0 => [
			 'amount' => 2,
			 'weight' => 100,
			 'length' => 2,
			 'width' => 1,
			 'height' => 3,
			 'one_place' => false // 1 место с габаритами 2,1,3
		  ],
		  1 => [
			 'amount' => 2,
			 'weight' => 100,
			 'length' => 2,
			 'width' => 1,
			 'height' => 3,
			 'one_place' => true // 2 места с габаритами 2,1,3
		  ]
	   ]
	];

	/*
		4. Также можно задать клиентский номер накладной, для последующего его использования.
	*/
	$post_params = [
	   'from_client' => 'Имя клиента отправителя',
	   'to_client' => 'Имя клиента получателя',
	   'from_city_id' => 35,
	   'to_city_id' => 36,
	   'client_order_num' => 'Мск-Спб/123.456', // Номер накладной согласно базе клиента
	   'cargo' => [
		  0 => [
			 'amount' => 2,
			 'weight' => 100,
			 'length' => 2,
			 'width' => 1,
			 'height' => 3
		  ]
	   ]
	];

	$url = $API_URL . $api_method;
	$url .= '?' . http_build_query($get_params);
	if (!empty($post_params))
		$post_params = http_build_query($post_params);

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);

	$response = curl_exec($ch);
	if ($response === false)
		throw new Exception(sprintf('Api connect error: "%s"', curl_error($ch)), 500);

	curl_close($ch);

	$response = json_decode($response, true);
	var_dump($response);

Ответ

Поле Тип Обязательный Формат/описание Пример
order_id int|boolean +

id созданной накладной в системе ГД

false — при наличии ошибки при создании накладной

123456789
title string + Внутренний номер накладной 'МСК-СПБ-123456/17'
client_order_num string|null + Клиентский номер заказа 'Мск-Спб/123.456'
aviso_date string
Сохранённые дата и время авизации '2018-09-01 09:00:00'
aviso_all_day boolean
true — задана авизация в течение дня false
delivery_date string
Сохранённая дата доставки '2018-09-01'

Дополнительные примеры

Получение складов, городов перевозок

<?php
	$API_URL = 'http://api.glavdostavka.ru';
	$API_KEY = '75743/433ca3e5068add011dcbf60dfbca84bb'; // пример ключа (подставить свой!)

	/*
	* Метод получения складов
	*/
	$api_method = '/service/storehouse/';
	/*
	* Ответ
	*/
	array (size=3)
	  'id' => string '17444090375d3aecb715a0a9.05181050' (length=33)
	  'error' =>
		array (size=2)
		  'code' => int 0
		  'message' => string '' (length=0)
	  'result' =>
		array (size=139)
		  0 =>
			array (size=11)
			  'storehouse_id' => int 23446742
			  'title' => string 'Офис и склад' (length=22)
			  'address' => string 'г Петропавловск-Камчатский, ул Тундровая 1/2' (length=79)
			  'phone' => string '+7 (415) 234-32-25' (length=18)
			  'email' => string 'info.ptk@glavdostavka.ru' (length=24)
			  'latitude' => string '53.0437700' (length=10)
			  'longitude' => string '158.6632930' (length=11)
			  'city_id' => int 635
			  'city_title' => string 'Петропавловск-Камчатский' (length=47)
			  'take_in' => boolean true
			  'give_out' => boolean true
	...


	/*
	* Метод получения городов перевозок
	*/
	$api_method = '/service/shipping_city/';
	/*
	* Ответ
	*/
	array (size=3)
	  'id' => string '6447451445d3aed68080d73.29672152' (length=32)
	  'error' =>
		array (size=2)
		  'code' => int 0
		  'message' => string '' (length=0)
	  'result' =>
		array (size=1)
		  'cities' =>
			array (size=143)
			  35 =>
				array (size=5)
				  'city_id' => int 35
				  'title' => string 'Москва г' (length=15)
				  'fullname' => string 'г Москва' (length=15)
				  'kladr_id' => string '7700000000000' (length=13)
				  'fias_id' => string '0c5b2444-70a0-4932-980c-b4dc0d3f02b5' (length=36)
	...

	$get_params = [
		'id'      => uniqid(mt_rand(), true),
		'auth'    => $API_KEY,
	];



	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);

	$response = curl_exec($ch);
	if ($response === false)
		throw new Exception(sprintf('Api connect error: "%s"', curl_error($ch)), 500);

	curl_close($ch);

	$response = json_decode($response, true);
	var_dump($response);

Пример просчёта накладной

<?php
	$API_URL = 'http://api.glavdostavka.ru';
	$API_KEY = '75743/433ca3e5068add011dcbf60dfbca84bb'; // пример ключа (подставить свой!)

	$api_method = '/service/calc/';
	$get_params = [
		'id'      => uniqid(mt_rand(), true),
		'auth'    => $API_KEY,
	];

	/*
		1. Пример параметров просчёта накладной
	*/
	$post_params = [
	   'payer' => 'from_client',
	   'from_client' => 'Тестов Тест 1',
	   'from_city_id' => 21098012,
	   'from_name' => 'Тестов Тест',
	   'from_address' => 'Московская обл, Селятино рп, д. 15',
	   'to_client' => 'Тестов Тест 2',
	   'to_city_id' => 36,
	   'to_name' => 'Тестов Тест',
	   'to_address' => 'Санкт-Петербург, ул Писарева, д 29А',
	   'cargo' => [
		  [
			 'amount' => 1,
			 'weight' => 100,
			 'length' => 1,
			 'width' => 1,
			 'height' => 1,
			 'one_place' => false,
		  ],
	   ],
	   'cargo_max' => [
		  'length' => 5,
		  'width' => 2.5,
		  'height' => 2.7,
	   ],
	   'report_date' => '2019-07-10 0:0:0',
	   'pickup_date' => '2019-08-10',
	];
	$url = $API_URL . $api_method;
	$url .= '?' . http_build_query($get_params);
	if (!empty($post_params))
		$post_params = http_build_query($post_params);

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);

	$response = curl_exec($ch);
	if ($response === false)
		throw new Exception(sprintf('Api connect error: "%s"', curl_error($ch)), 500);

	curl_close($ch);

	$response = json_decode($response, true);
	var_dump($response);