# GetCourse API: Создать заказ и получить ссылку на оплату

Сценарий из mcp-everything. Актуально на 2026-10-24.

Заказ из CRM или чат-бота: менеджер оформляет покупку, клиент получает ссылку на оплату GetCourse.

1. Отправь POST /deals как form-data с action = add, key и params (JSON в base64). Минимум для заказа — user.email, deal.offer_code (или product_title) и deal.deal_cost; либо email и deal.offer_id.
2. Чтобы сразу получить ссылку на оплату и номер заказа, добавь system.return_payment_link = 1 и system.return_deal_number = 1. В ответе result: deal_id, deal_number, payment_link.
3. Сохрани deal_number у себя: по нему заказ обновляется.
4. Если оплата прошла вне GetCourse, смени статус тем же методом: action = add, user.email, deal.deal_number и deal.deal_status = payed.
5. Импорт ограничен числом создаваемых объектов в месяц по тарифу; изменения существующих заказов в лимит не входят.

```python
import base64, json, requests

def gc_import(entity, params):
    payload = base64.b64encode(json.dumps(params, ensure_ascii=False).encode()).decode()
    return requests.post(f"https://myschool.getcourse.ru/pl/api/{entity}",
                         data={"action": "add", "key": "<секретный ключ>", "params": payload}).json()

r = gc_import("deals", {
    "user": {"email": "client@example.ru", "first_name": "Олег"},
    "deal": {"offer_code": "python-start", "deal_cost": 14900, "deal_status": "new",
             "manager_email": "sales@myschool.ru"},
    "system": {"return_payment_link": 1, "return_deal_number": 1},
})
print(r["result"].get("payment_link"), r["result"].get("deal_number"))

# Позже, когда оплата подтверждена:
gc_import("deals", {"user": {"email": "client@example.ru"},
                    "deal": {"deal_number": r["result"]["deal_number"], "deal_status": "payed"}})
```

## Базовые URL

- Боевой: `https://{account}.getcourse.ru/pl/api`

## Авторизация

Тип: API-ключ

Отдельной авторизации нет: секретный ключ аккаунта передаётся в каждом запросе — в импорте POST-параметром `key`, в экспорте параметром `key` в строке запроса. Ключ создаётся в аккаунте («Профиль» → «Настройки аккаунта» → «АПИ»); для импорта нужен ключ с правом записи.

## Методы сценария

### POST /deals — Импорт заказа

Создаёт заказ или обновляет существующий по `deal_number`; смена статуса — `action=add` с `user.email`, `deal.deal_number` и `deal.deal_status`. Минимум для создания: код или название предложения, сумма и email (либо `offer_id` и email).

В ответе: `success`, `action`, `result` (`deal_id`, `deal_number`, `user_id`, `user_status`, `payment_link`, `error_message`, `error`).

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `action` | body | string | да | add |
| `key` | body | string | да | Секретный ключ |
| `params` | body | string | да | JSON в base64 |
| `params.user.email` | body | string | да | Email покупателя |
| `params.deal.deal_number` | body | string | нет | Номер заказа (для обновления) |
| `params.deal.offer_code` | body | string | нет | Код предложения |
| `params.deal.offer_id` | body | string | нет | ID предложения |
| `params.deal.product_title` | body | string | нет | Название предложения |
| `params.deal.deal_cost` | body | string | нет | Сумма заказа |
| `params.deal.deal_status` | body | string | нет | Статус: new, payed, cancelled и др. |
| `params.deal.deal_is_paid` | body | integer | нет | Признак оплаты |
| `params.deal.payment_type` | body | string | нет | Способ оплаты |
| `params.deal.payment_status` | body | string | нет | Статус платежа |
| `params.deal.manager_email` | body | string | нет | Email менеджера |
| `params.deal.deal_comment` | body | string | нет | Комментарий |
| `params.system.multiple_offers` | body | integer | нет | 1 — несколько предложений в одном заказе (добавляются по одному) |
| `params.system.return_payment_link` | body | integer | нет | Вернуть ссылку на оплату |
| `params.system.return_deal_number` | body | integer | нет | Вернуть номер заказа |

## Нюансы

- Импорт: POST с полями `action`, `key`, `params`; в base64 кодируется только `params`. Без POST/form-data будет ошибка «Пустой параметр action».
- Экспорт двухшаговый: запрос с фильтром → `export_id` → получение данных; экспорты выполняются последовательно, не параллельте их.
- Справочники доп. полей пользователей и заказов — `/account/fields` с `action=get`.
- Даты в импорте — `yyyy-mm-dd HH:MM:II`.
- Для оперативной передачи событий документация рекомендует процессы с операцией «Вызвать URL» вместо частого экспорта.

## Другие сценарии

- [Добавить ученика в группу после оплаты](https://mcp-everything.ru/integrations/getcourse/scenarios/dobavit-uchenika-v-gruppu-posle-oplaty.md)
- [Выгрузить заказы за период в аналитику](https://mcp-everything.ru/integrations/getcourse/scenarios/vygruzit-zakazy-za-period-v-analitiku.md)
- [Выгрузить учеников группы](https://mcp-everything.ru/integrations/getcourse/scenarios/vygruzit-uchenikov-gruppy.md)

---

Если этого недостаточно — официальная документация: https://getcourse.ru/help/api
Вся интеграция одним документом: https://mcp-everything.ru/integrations/getcourse.md
