API AgroDO

Через API можно читать и менять всё, что есть в кабинете: заказы, товары, склад, клиентов, деньги. Формат запросов и ответов: JSON:API 1.1.

Адрес

https://ваш-адрес.agrodo.ru/api/v1/{раздел}

У каждого кабинета свой адрес: вместо «ваш-адрес» подставьте адрес своего кабинета.

Первый запрос

curl https://ваш-адрес.agrodo.ru/api/v1/orders?page[size]=5 \
  -H "Authorization: Bearer ВАШ_КЛЮЧ"

Ключ и вход

Ключ создаёт владелец кабинета: меню → «Настройки» → «API и webhooks». У ключа есть роль: он видит и меняет только те разделы, которые открыты этой роли. Ключ показывается один раз при создании.

Ключ передаётся в каждом запросе заголовком:

Authorization: Bearer ВАШ_КЛЮЧ

API доступен на платных тарифах.

Формат запросов

Тело запроса и ответ в JSON. У каждой записи есть type (раздел), id и attributes (поля).

{
  "data": {
    "type": "orders",
    "id": "15",
    "attributes": { "...": "..." }
  }
}
GET/{раздел}список
GET/{раздел}/{id}одна запись
POST/{раздел}создать
PATCH/{раздел}/{id}изменить
DELETE/{раздел}/{id}удалить

Для POST, PATCH и DELETE нужен заголовок Content-Type: application/json.

Списки: отбор, сортировка, страницы

filter[поле]=значениеотбор по полю
filter[q]=текстпоиск по основным полям раздела
sort=поле, sort=-полесортировка по возрастанию и по убыванию
page[number]=1&page[size]=25номер страницы и её размер
GET https://ваш-адрес.agrodo.ru/api/v1/orders?filter[status]=confirmed&sort=-id&page[size]=50

В ответе data (записи) и meta: total (сколько всего), size (размер страницы).

Создание и изменение

В attributes передаются только те поля, которые меняются. Поля со звёздочкой обязательны при создании. Поля «только чтение» сервер заполняет сам.

curl -X PATCH https://ваш-адрес.agrodo.ru/api/v1/buyers/42 \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"data":{"type":"buyers","id":"42","attributes":{"name":"Новое имя"}}}'

Ошибки

{ "errors": [ { "status": "422", "code": "validation", "detail": "Текст для человека" } ] }
401нет ключа или он отозван
402лимит тарифа или раздел недоступен на тарифе
403роли ключа раздел закрыт
404записи нет
409время или место уже занято
422данные не прошли проверку, причина в detail
429слишком много запросов

Деньги, даты, телефоны

  • Деньги передаются в копейках целым числом: 1 500 ₽ это 150000.
  • Дата: 2026-10-12. Дата и время: 2026-10-12 10:30:00.
  • Телефон: с плюсом и кодом страны, +79270001122.

Webhooks

Webhook сообщает вашему серверу о событиях в кабинете. Настраивается там же, где ключи: адрес (только https) и список событий.

Событие записывается как раздел.действие: orders.create, buyers.update. Все события раздела: orders.*. Все события: *.

Запрос приходит методом POST. Заголовки: X-Agrodo-Event (событие) и X-Agrodo-Signature: sha256=… (HMAC-SHA256 тела запроса с секретом webhook). Проверяйте подпись перед обработкой.

{
  "id": "9f2c1a7b3d4e5f60",
  "event": "orders.create",
  "created_at": "2026-10-12T07:30:00+00:00",
  "data": { "type": "orders", "id": "15", "changes": { "...": "..." } }
}

Кроме событий разделов (create, update, delete) есть события по смыслу:

lk.createdКлиенту создан личный кабинет
order.createdСоздан заказ
order.status_changedИзменён статус заказа
shipment.createdЗаказ отгружен
payment.receivedПолучена оплата
task.createdНазначена задача
message.incomingНовое сообщение от клиента

Если ваш сервер не ответил кодом 2xx, доставка повторяется.

Продажи

Покупатели buyers

GET/buyersсписок
GET/buyers/{id}запись
POST/buyersсоздать
PATCH/buyers/{id}изменить
DELETE/buyers/{id}удалить
ПолеТипОписание
name *строкаНазвание или ФИО
phoneстрокаТелефон
typeодно из: person, company, soleТип
noteтекстЗаметка
emailстрокаEmail
price_type_idссылка на price-typesВид цены для заказов
tax_idстрокаИНН / УНП / БИН
kppстрокаКПП
reg_numberстрокаОГРН / рег. номер
legal_addressстрокаЮридический адрес
countryстрокаСтрана (код, например RU, BY, KZ)
currencyстрокаВалюта расчётов (код)
orders_countцелое только чтениеЗаказов
orders_totalкопейки, целое только чтениеСумма заказов, ₽
debtкопейки, целое только чтениеДолг, ₽
last_orderдата и время, UTC только чтениеПоследний заказ

Заказы orders

GET/ordersсписок
GET/orders/{id}запись
POST/ordersсоздать
PATCH/orders/{id}изменить
DELETE/orders/{id}удалить
ПолеТипОписание
numberстрока только чтениеНомер
created_atдата и время, UTC только чтениеСоздан
counterparty_id *ссылка на buyersПокупатель
status_idссылка на order-statuses только чтениеСтатус
warehouse_idссылка на warehousesСклад отгрузки
delivery_typeодно из: pickup, delivery, carrierПолучение
delivery_addressстрокаАдрес доставки
cityстрокаГород
confirm_stateодно из: asked, yes, no только чтениеПодтверждение приёма
confirm_dateдата только чтениеДата приёма
msg_stateодно из: ok, weak, fail, queued только чтениеПоследнее сообщение клиенту
msg_textстрока только чтениеИтог последнего сообщения
delivery_costкопейки, целоеСтоимость доставки, ₽
wanted_dateдатаЖелаемая дата
wanted_intervalстрокаВремя (например, 10–14)
payment_method_idссылка на payment-methodsСпособ оплаты
discountкопейки, целоеСкидка на заказ, ₽
responsible_user_idссылка на usersОтветственный
commentтекстКомментарий
totalкопейки, целое только чтениеСумма
paid_totalкопейки, целое только чтениеОплачено
payment_statusодно из: unpaid, partial, paid только чтениеОплата

Формы заказа order-forms

GET/order-formsсписок
GET/order-forms/{id}запись
POST/order-formsсоздать
PATCH/order-forms/{id}изменить
DELETE/order-forms/{id}удалить
ПолеТипОписание
name *строкаНазвание
codeстрокаАдрес формы латиницей (пусто = придумаем сами)
welcome_textтекстПриветствие над товарами
price_type_idссылка на price-typesВид цены (пусто = основной)
warehouse_idссылка на warehousesСклад (пусто = первый)
min_totalкопейки, целоеМинимальная сумма заказа, ₽
stock_modeодно из: hide, show, limitОстатки
pay_onlineда/нетПринимать оплату онлайн: после заказа клиент может сразу оплатить картой или через СБП (нужна ЮKassa, раздел «Онлайн-оплата»)
is_publishedда/нетОпубликована

Отгрузки shipments

GET/shipmentsсписок
GET/shipments/{id}запись
ПолеТипОписание
numberстрока только чтениеНомер
doc_dateдата и время, UTC только чтениеДата
counterparty_idссылка на buyers только чтениеПокупатель
order_idссылка на orders только чтениеЗаказ
warehouse_idссылка на warehouses только чтениеСклад
totalкопейки, целое только чтениеСумма
cost_totalкопейки, целое только чтениеСебестоимость
is_returnда/нет только чтениеВозврат
noteстрока только чтениеКомментарий

Задачи tasks

GET/tasksсписок
GET/tasks/{id}запись
POST/tasksсоздать
PATCH/tasks/{id}изменить
DELETE/tasks/{id}удалить
ПолеТипОписание
title *строкаЧто сделать
descriptionтекстОписание
assignee_user_idссылка на usersИсполнитель (пользователь)
assignee_employee_idссылка на employeesИсполнитель (сотрудник)
due_atдата и время, UTCСрок
priorityодно из: low, normal, highПриоритет
repeat_everyодно из: daily, weekly, monthlyПовторять (нужен срок)
statusодно из: new, work, review, done, cancelledСтатус

Товары и склад

Товары и услуги products

GET/productsсписок
GET/products/{id}запись
POST/productsсоздать
PATCH/products/{id}изменить
DELETE/products/{id}удалить
ПолеТипОписание
sale_priceкопейки, целое только чтениеЦена продажи, ₽
stock_qtyчисло только чтениеОстаток
stock_freeчисло только чтениеСвободно (без резерва)
name *строкаНазвание
kindодно из: product, material, serviceВид
unit_idссылка на unitsЕдиница измерения
descriptionтекстОписание (его видит покупатель)
show_in_formsда/нетПоказывать в формах заказа
category_idссылка на product-categoriesКатегория
purchase_priceкопейки, целоеЦена закупки, ₽
min_stockчислоМинимальный остаток (ниже него товар попадает в план закупки)
skuстрокаАртикул
barcodeстрокаШтрихкод
vat_rateчислоСтавка НДС, % (пусто = без НДС, цены считаются с НДС)
export_avitoда/нетВыгружать на Авито
marketда/нетПубликовать на маркете AgroDO

Категории product-categories

GET/product-categoriesсписок
GET/product-categories/{id}запись
POST/product-categoriesсоздать
PATCH/product-categories/{id}изменить
DELETE/product-categories/{id}удалить
ПолеТипОписание
name *строкаНазвание
parent_idссылка на product-categoriesВходит в категорию
sortцелоеПорядок

Склады warehouses

GET/warehousesсписок
GET/warehouses/{id}запись
POST/warehousesсоздать
PATCH/warehouses/{id}изменить
DELETE/warehouses/{id}удалить
ПолеТипОписание
name *строкаНазвание
addressстрокаАдрес
responsible_user_idссылка на usersОтветственный

Складские документы stock-docs

GET/stock-docsсписок
GET/stock-docs/{id}запись
POST/stock-docsсоздать
PATCH/stock-docs/{id}изменить
DELETE/stock-docs/{id}удалить
ПолеТипОписание
numberстрока только чтениеНомер
type *одно из: receipt, writeoff, transfer, inventoryВид документа
doc_dateдата и время, UTCДата
warehouse_id *ссылка на warehousesСклад
warehouse_to_idссылка на warehousesСклад-получатель (для перемещения)
reasonодно из: purchase, harvest, spoilage, shrinkage, own_needs, samples, otherПричина
counterparty_idссылка на suppliersПоставщик
noteтекстКомментарий
cost_refcostОтнести на сезон поля
purchase_idссылка на purchases только чтениеЗакупка
statusодно из: draft, posted только чтениеСостояние
totalкопейки, целое только чтениеСумма

Поставщики suppliers

GET/suppliersсписок
GET/suppliers/{id}запись
POST/suppliersсоздать
PATCH/suppliers/{id}изменить
DELETE/suppliers/{id}удалить
ПолеТипОписание
name *строкаНазвание или ФИО
phoneстрокаТелефон
typeодно из: person, company, soleТип
noteтекстЗаметка
emailстрокаEmail
price_type_idссылка на price-typesВид цены для заказов
tax_idстрокаИНН / УНП / БИН
kppстрокаКПП
reg_numberстрокаОГРН / рег. номер
legal_addressстрокаЮридический адрес
countryстрокаСтрана (код, например RU, BY, KZ)
currencyстрокаВалюта расчётов (код)
purchases_countцелое только чтениеЗакупок
purchases_totalкопейки, целое только чтениеСумма закупок, ₽
debtкопейки, целое только чтениеМы должны, ₽

Закупка

Заказы поставщикам purchases

GET/purchasesсписок
GET/purchases/{id}запись
POST/purchasesсоздать
PATCH/purchases/{id}изменить
DELETE/purchases/{id}удалить
ПолеТипОписание
numberстрока только чтениеНомер
doc_dateдата и время, UTCДата
counterparty_id *ссылка на suppliersПоставщик
statusодно из: draft, sent, confirmed, partial, received, cancelled только чтениеСтатус
expected_dateдатаОжидаем к дате
warehouse_idссылка на warehousesСклад приёмки
noteтекстКомментарий
totalкопейки, целое только чтениеСумма
paid_totalкопейки, целое только чтениеОплачено

План закупки purchase-plans

GET/purchase-plansсписок
GET/purchase-plans/{id}запись
POST/purchase-plansсоздать
PATCH/purchase-plans/{id}изменить
DELETE/purchase-plans/{id}удалить
ПолеТипОписание
product_id *ссылка на productsЧто купить
qty *числоКоличество
need_dateдатаНужно к дате
counterparty_idссылка на suppliersПоставщик
expected_priceкопейки, целоеОжидаемая цена, ₽
statusодно из: plan, ordered, done, cancelledСостояние
purchase_idссылка на purchases только чтениеЗаказ поставщику
noteстрокаЗаметка

Затраты и услуги expenses

GET/expensesсписок
GET/expenses/{id}запись
POST/expensesсоздать
PATCH/expenses/{id}изменить
DELETE/expenses/{id}удалить
ПолеТипОписание
expense_date *датаДата
product_idссылка на productsУслуга или статья
counterparty_idссылка на suppliersКому заплатили
qtyчислоКоличество
amount *копейки, целоеСумма, ₽
money_account_idссылка на money-accountsОплачено со счёта (пусто: ещё не платили)
cost_refcostОтнести на сезон поля
purchase_idссылка на purchases только чтениеЗаказ поставщику
noteстрокаЗаметка

Хозяйство

Поля fields

GET/fieldsсписок
GET/fields/{id}запись
POST/fieldsсоздать
PATCH/fields/{id}изменить
DELETE/fields/{id}удалить
ПолеТипОписание
season_nowстрока только чтениеЧто растёт сейчас
name *строкаНазвание
areaчислоПлощадь
area_unitодно из: ha, sotkaЕдиница площади
typeодно из: open, greenhouse, garden, pastureТип
addressстрокаАдрес или ориентир
descriptionтекстОписание
statusстрокаСтатус
latстрокаШирота
lngстрокаДолгота

Табель timesheets

GET/timesheetsсписок
GET/timesheets/{id}запись
POST/timesheetsсоздать
PATCH/timesheets/{id}изменить
DELETE/timesheets/{id}удалить
ПолеТипОписание
employee_id *ссылка на employeesСотрудник
work_date *датаДата
hoursчислоЧасы (пусто = отработан день)
piece_qtyчислоСдельная выработка
cost_refcostГде работал (пусто = общие работы)
plan_hoursчислоЧасы по графику
noteстрокаЗаметка

Зарплата payroll-periods

GET/payroll-periodsсписок
GET/payroll-periods/{id}запись
POST/payroll-periodsсоздать
PATCH/payroll-periods/{id}изменить
DELETE/payroll-periods/{id}удалить
ПолеТипОписание
date_from *датаНачало периода
date_to *датаКонец периода
plan_fundкопейки, целоеПлановый фонд оплаты, ₽
accruedкопейки, целое только чтениеНачислено (факт), ₽
paidкопейки, целое только чтениеВыплачено, ₽
dueкопейки, целое только чтениеК выплате, ₽
peopleцелое только чтениеСотрудников в расчёте
statusодно из: open, closed только чтениеСостояние

Сотрудники employees

GET/employeesсписок
GET/employees/{id}запись
POST/employeesсоздать
PATCH/employees/{id}изменить
DELETE/employees/{id}удалить
ПолеТипОписание
pay_dueкопейки, целое только чтениеК выплате, ₽
name *строкаФИО
kindодно из: staff, hiredВид
positionстрокаДолжность
phoneстрокаТелефон
hired_atдатаПринят
fired_atдатаУволен
noteтекстЗаметка

Настройки

Пользователи users

GET/usersсписок
GET/users/{id}запись
POST/usersсоздать
PATCH/users/{id}изменить
DELETE/users/{id}удалить
ПолеТипОписание
name *строкаИмя
phoneстрокаТелефон (логин)
emailстрокаEmail (логин)
role_idссылка на rolesРоль
statusодно из: active, blockedСтатус
passwordpasswordНовый пароль (от 8 символов)

Роли roles

GET/rolesсписок
GET/roles/{id}запись
POST/rolesсоздать
PATCH/roles/{id}изменить
DELETE/roles/{id}удалить
ПолеТипОписание
name *строкаНазвание

Дополнительные поля custom-fields

GET/custom-fieldsсписок
GET/custom-fields/{id}запись
POST/custom-fieldsсоздать
PATCH/custom-fields/{id}изменить
DELETE/custom-fields/{id}удалить
ПолеТипОписание
entity_type *одно из: counterparty, order, task, product, warehouse, purchase, field, employeeГде показывать
name *строкаНазвание поля
code *строкаКод (латиницей, например sort_name)
type *одно из: string, number, date, list, boolТип
optionslinesВарианты списка, по одному в строке
is_requiredда/нетОбязательное
sortцелоеПорядок

Единицы измерения units

GET/unitsсписок
GET/units/{id}запись
POST/unitsсоздать
PATCH/units/{id}изменить
DELETE/units/{id}удалить
ПолеТипОписание
name *строкаНазвание
short_name *строкаСокращение
okei_codeстрокаКод ОКЕИ

Виды цен price-types

GET/price-typesсписок
GET/price-types/{id}запись
POST/price-typesсоздать
PATCH/price-types/{id}изменить
DELETE/price-types/{id}удалить
ПолеТипОписание
name *строкаНазвание
currencyстрокаВалюта (код)
is_defaultда/нетОсновной

Статусы заказов order-statuses

GET/order-statusesсписок
GET/order-statuses/{id}запись
POST/order-statusesсоздать
PATCH/order-statuses/{id}изменить
DELETE/order-statuses/{id}удалить
ПолеТипОписание
name *строкаНазвание
kindодно из: new, work, done, cancelЭтап
colorстрокаЦвет (#RRGGBB)
reserveда/нетДержать резерв на складе
client_visibleда/нетВиден клиенту
client_editда/нетКлиент может сам менять состав заказа в этом статусе
autoодно из: none, shipped, doneСтавить автоматически
client_nameстрокаНазвание для клиента
sortцелоеПорядок

Связь

Быстрые ответы quick-replies

GET/quick-repliesсписок
GET/quick-replies/{id}запись
POST/quick-repliesсоздать
PATCH/quick-replies/{id}изменить
DELETE/quick-replies/{id}удалить
ПолеТипОписание
title *строкаКороткое название
text *текстТекст ответа
sortцелоеПорядок

Рассылки mailings

GET/mailingsсписок
GET/mailings/{id}запись
POST/mailingsсоздать
PATCH/mailings/{id}изменить
DELETE/mailings/{id}удалить
ПолеТипОписание
name *строкаНазвание для себя
text *текстТекст сообщения. Можно {имя}
channels *linesКаналы по порядку: сообщение уйдёт в первый, через который его можно доставить
recipientslinesГруппы покупателей (ничего не выбрано = все покупатели)
is_marketingда/нетЭто реклама: отправлять только давшим согласие и добавить ссылку «Отписаться»
scheduled_atдата и время, UTCОтправить не раньше (пусто = сразу)
statusодно из: draft, scheduled, sending, done, cancelled только чтениеСостояние

Группы покупателей counterparty-groups

GET/counterparty-groupsсписок
GET/counterparty-groups/{id}запись
POST/counterparty-groupsсоздать
PATCH/counterparty-groups/{id}изменить
DELETE/counterparty-groups/{id}удалить
ПолеТипОписание
name *строкаНазвание (опт, розница, постоянные)

Оповещения notification-rules

GET/notification-rulesсписок
GET/notification-rules/{id}запись
POST/notification-rulesсоздать
PATCH/notification-rules/{id}изменить
DELETE/notification-rules/{id}удалить
ПолеТипОписание
name *строкаНазвание
event *одно из: lk.created, order.created, order.status_changed, shipment.created, payment.received, task.created, message.incomingКогда
recipient *одно из: client, responsible, assignee, owner, userКому
recipient_user_idссылка на usersПользователь
channels *linesКаналы по порядку
send_allда/нетОтправлять во все каналы. Без отметки сообщение уходит в первый канал, который его принял, остальные не используются
conditionslinesТолько для статусов заказа (ничего не выбрано = для всех)
template *текстТекст сообщения
delay_minutesцелоеЗадержка отправки, минут
is_activeда/нетВключено

Журнал сообщений outbox

GET/outboxсписок
GET/outbox/{id}запись
ПолеТипОписание
created_atдата и время, UTC только чтениеКогда
channel_typeстрока только чтениеКанал
counterparty_idссылка на buyers только чтениеКлиент
user_idссылка на users только чтениеСотрудник
textтекст только чтениеТекст
statusодно из: queued, sent, delivered, error, skipped только чтениеСостояние
errorстрока только чтениеПричина
sent_viaстрока только чтениеЧерез что ушло
costкопейки, целое только чтениеСтоимость, ₽
sent_atдата и время, UTC только чтениеОтправлено

Выгрузка на Авито avito-feeds

GET/avito-feedsсписок
GET/avito-feeds/{id}запись
POST/avito-feedsсоздать
PATCH/avito-feeds/{id}изменить
DELETE/avito-feeds/{id}удалить
ПолеТипОписание
name *строкаНазвание для себя
address *строкаАдрес объявлений (город, улица)
contact_phoneстрокаТелефон в объявлении
category_idссылка на product-categoriesТовары только из категории (пусто = все отмеченные)
price_type_idссылка на price-typesВид цены (пусто = основной)
hide_zero_stockда/нетНе выгружать товары, которых нет на складе
is_activeда/нетВключено
last_generated_atдата и время, UTC только чтениеАвито забирал файл

Финансы

Способы оплаты payment-methods

GET/payment-methodsсписок
GET/payment-methods/{id}запись
POST/payment-methodsсоздать
PATCH/payment-methods/{id}изменить
DELETE/payment-methods/{id}удалить
ПолеТипОписание
name *строкаНазвание для клиента
provider *одно из: manualКак принимается
money_account_idссылка на money-accountsНа какой счёт попадают деньги
is_activeда/нетДействует
sortцелоеПорядок

Статьи прихода и расхода money-categories

GET/money-categoriesсписок
GET/money-categories/{id}запись
POST/money-categoriesсоздать
PATCH/money-categories/{id}изменить
DELETE/money-categories/{id}удалить
ПолеТипОписание
name *строкаНазвание
direction *одно из: in, outДля чего
sortцелоеПорядок

AgroDO · На сайт