{"name":"GetCourse API","vendor":"GetCourse","industry":"other","summary":"API онлайн-школ на платформе GetCourse: импорт пользователей и заказов (создание, обновление, смена статуса заказа, добавление в группы) и экспорт пользователей, групп, заказов и платежей. Импорт доступен только на платных тарифах. Работает в аккаунте школы по секретному ключу.","docsUrl":"https://getcourse.ru/help/api","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"dobavit-uchenika-v-gruppu-posle-oplaty","title":"Добавить ученика в группу после оплаты","summary":"Оплата прошла на внешнем лендинге или в другой системе — ученик автоматически появляется в GetCourse и получает доступ к курсу через группу.","steps":["Создай ключ API в аккаунте школы («Профиль» → «Настройки аккаунта» → «АПИ»). Для импорта нужен ключ с правом записи и платный тариф.","Собери params: user.email (или phone), first_name, group_name — список групп, дающих доступ к курсу. Чтобы не получить ошибку на существующем пользователе, передай system.refresh_if_exists = 1.","Закодируй JSON params в base64 и отправь POST /users как form-data с полями action = add, key и params. Без form-data придёт ошибка «Пустой параметр action».","Проверь ответ: success верхнего уровня говорит только о том, что запрос принят. Итог по пользователю — в result: user_id, user_status и error_message.","UTM-метки передавай в params.session — они попадут в аналитику школы."],"code":"import base64, json, requests\n\nACCOUNT, KEY = \"myschool\", \"<секретный ключ>\"\nparams = {\n    \"user\": {\"email\": \"student@example.ru\", \"first_name\": \"Анна\", \"group_name\": [\"Курс «Python с нуля» — поток 5\"]},\n    \"system\": {\"refresh_if_exists\": 1},\n    \"session\": {\"utm_source\": \"vk\", \"utm_campaign\": \"autumn\"},\n}\nr = requests.post(f\"https://{ACCOUNT}.getcourse.ru/pl/api/users\", data={\n    \"action\": \"add\",\n    \"key\": KEY,\n    \"params\": base64.b64encode(json.dumps(params, ensure_ascii=False).encode()).decode(),\n}).json()\nprint(r[\"success\"], r.get(\"result\"))","language":"python","methods":["POST /users"]},{"id":"sozdat-zakaz-i-poluchit-ssylku-na-oplatu","title":"Создать заказ и получить ссылку на оплату","summary":"Заказ из CRM или чат-бота: менеджер оформляет покупку, клиент получает ссылку на оплату GetCourse.","steps":["Отправь POST /deals как form-data с action = add, key и params (JSON в base64). Минимум для заказа — user.email, deal.offer_code (или product_title) и deal.deal_cost; либо email и deal.offer_id.","Чтобы сразу получить ссылку на оплату и номер заказа, добавь system.return_payment_link = 1 и system.return_deal_number = 1. В ответе result: deal_id, deal_number, payment_link.","Сохрани deal_number у себя: по нему заказ обновляется.","Если оплата прошла вне GetCourse, смени статус тем же методом: action = add, user.email, deal.deal_number и deal.deal_status = payed.","Импорт ограничен числом создаваемых объектов в месяц по тарифу; изменения существующих заказов в лимит не входят."],"code":"import base64, json, requests\n\ndef gc_import(entity, params):\n    payload = base64.b64encode(json.dumps(params, ensure_ascii=False).encode()).decode()\n    return requests.post(f\"https://myschool.getcourse.ru/pl/api/{entity}\",\n                         data={\"action\": \"add\", \"key\": \"<секретный ключ>\", \"params\": payload}).json()\n\nr = gc_import(\"deals\", {\n    \"user\": {\"email\": \"client@example.ru\", \"first_name\": \"Олег\"},\n    \"deal\": {\"offer_code\": \"python-start\", \"deal_cost\": 14900, \"deal_status\": \"new\",\n             \"manager_email\": \"sales@myschool.ru\"},\n    \"system\": {\"return_payment_link\": 1, \"return_deal_number\": 1},\n})\nprint(r[\"result\"].get(\"payment_link\"), r[\"result\"].get(\"deal_number\"))\n\n# Позже, когда оплата подтверждена:\ngc_import(\"deals\", {\"user\": {\"email\": \"client@example.ru\"},\n                    \"deal\": {\"deal_number\": r[\"result\"][\"deal_number\"], \"deal_status\": \"payed\"}})","language":"python","methods":["POST /deals"]},{"id":"vygruzit-zakazy-za-period-v-analitiku","title":"Выгрузить заказы за период в аналитику","summary":"Продажи школы — в BI, Google-таблицу или сквозную аналитику.","steps":["Запусти экспорт: GET /account/deals с key и фильтрами — created_at[from] и created_at[to] (YYYY-MM-DD) или payed_at[from] / payed_at[to] для оплаченных. В ответе — export_id.","Через минуту-другую забери данные: GET /account/exports/{export_id} с key. Пока файл готовится, придёт ошибка — повтори запрос позже.","Данные приходят таблицей: список полей и строки значений. Сопоставь их по позиции.","Лимит Export API — 100 запросов за 2 часа на аккаунт, включая проверки статуса, и экспорты идут строго по одному. Ошибка 903 — лимит исчерпан, жди сброса. Не проверяй статус чаще раза в минуту.","Платежи выгружаются так же: GET /account/payments с created_at[from] и created_at[to]."],"code":"import time, requests\n\nBASE, KEY = \"https://myschool.getcourse.ru/pl/api\", \"<секретный ключ>\"\n\nstart = requests.get(f\"{BASE}/account/deals\", params={\n    \"key\": KEY, \"created_at[from]\": \"2026-10-01\", \"created_at[to]\": \"2026-10-23\"}).json()\nexport_id = start[\"info\"][\"export_id\"]\n\nfor _ in range(10):\n    time.sleep(60)\n    res = requests.get(f\"{BASE}/account/exports/{export_id}\", params={\"key\": KEY}).json()\n    if res.get(\"success\"):\n        fields, items = res[\"info\"][\"fields\"], res[\"info\"][\"items\"]\n        deals = [dict(zip(fields, row)) for row in items]\n        break","language":"python","methods":["GET /account/deals","GET /account/payments","GET /account/exports/{export_id}"]},{"id":"vygruzit-uchenikov-gruppy","title":"Выгрузить учеников группы","summary":"Список учеников потока — для рассылки, проверки доступа или переноса в другую систему.","steps":["Найди ID группы: GET /account/groups с key.","Запусти экспорт: GET /account/groups/{id}/users с key, при необходимости added_at[from] и added_at[to] — дата добавления в группу.","Забери результат: GET /account/exports/{export_id} — как и для заказов, с паузой и с учётом общего лимита Export API.","Для частых событий (новый ученик, оплата) экспорт не подходит: настрой в GetCourse процесс с операцией «Вызвать URL», и школа сама будет отправлять события в твою систему."],"code":"KEY='<секретный ключ>'\ncurl -s -G \"https://myschool.getcourse.ru/pl/api/account/groups\" -d key=$KEY\n\nEXPORT=$(curl -s -G \"https://myschool.getcourse.ru/pl/api/account/groups/123456/users\" \\\n  -d key=$KEY -d 'added_at[from]=2026-09-01' | jq -r .info.export_id)\nsleep 60\ncurl -s -G \"https://myschool.getcourse.ru/pl/api/account/exports/$EXPORT\" -d key=$KEY","language":"bash","methods":["GET /account/groups","GET /account/groups/{id}/users","GET /account/exports/{export_id}"]}],"baseUrls":[{"label":"Боевой","url":"https://{account}.getcourse.ru/pl/api"}],"auth":{"type":"api_key","description":"Отдельной авторизации нет: секретный ключ аккаунта передаётся в каждом запросе — в импорте POST-параметром `key`, в экспорте параметром `key` в строке запроса. Ключ создаётся в аккаунте («Профиль» → «Настройки аккаунта» → «АПИ»); для импорта нужен ключ с правом записи.","example":""},"methods":[{"id":"POST /users","title":"Импорт пользователя","httpMethod":"POST","path":"/users","description":"Тело — `form-data`: `action`, `key` и `params` (JSON, закодированный в base64).","params":[{"name":"action","in":"body","type":"string","required":true,"description":"add — создать (или обновить при refresh_if_exists=1); update — задать полный список групп по user.id"},{"name":"key","in":"body","type":"string","required":true,"description":"Секретный ключ"},{"name":"params","in":"body","type":"string","required":true,"description":"JSON в base64"},{"name":"params.user.email","in":"body","type":"string","required":false,"description":"Email (нужен email или телефон)"},{"name":"params.user.phone","in":"body","type":"string","required":false,"description":"Телефон"},{"name":"params.user.first_name","in":"body","type":"string","required":false,"description":"Имя"},{"name":"params.user.last_name","in":"body","type":"string","required":false,"description":"Фамилия"},{"name":"params.user.city","in":"body","type":"string","required":false,"description":"Город"},{"name":"params.user.country","in":"body","type":"string","required":false,"description":"Страна"},{"name":"params.user.group_name","in":"body","type":"array","required":false,"description":"Группы (можно с датой добавления)"},{"name":"params.user.addfields","in":"body","type":"object","required":false,"description":"Дополнительные поля"},{"name":"params.system.refresh_if_exists","in":"body","type":"integer","required":false,"description":"1 — обновить существующего пользователя"},{"name":"params.system.partner_email","in":"body","type":"string","required":false,"description":"Email партнёра"},{"name":"params.session","in":"body","type":"object","required":false,"description":"UTM-метки: utm_source, utm_medium, utm_content, utm_campaign, utm_group"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /deals","title":"Импорт заказа","httpMethod":"POST","path":"/deals","description":"Создаёт заказ или обновляет существующий по `deal_number`; смена статуса — `action=add` с `user.email`, `deal.deal_number` и `deal.deal_status`. Минимум для создания: код или название предложения, сумма и email (либо `offer_id` и email).\n\nВ ответе: `success`, `action`, `result` (`deal_id`, `deal_number`, `user_id`, `user_status`, `payment_link`, `error_message`, `error`).","params":[{"name":"action","in":"body","type":"string","required":true,"description":"add"},{"name":"key","in":"body","type":"string","required":true,"description":"Секретный ключ"},{"name":"params","in":"body","type":"string","required":true,"description":"JSON в base64"},{"name":"params.user.email","in":"body","type":"string","required":true,"description":"Email покупателя"},{"name":"params.deal.deal_number","in":"body","type":"string","required":false,"description":"Номер заказа (для обновления)"},{"name":"params.deal.offer_code","in":"body","type":"string","required":false,"description":"Код предложения"},{"name":"params.deal.offer_id","in":"body","type":"string","required":false,"description":"ID предложения"},{"name":"params.deal.product_title","in":"body","type":"string","required":false,"description":"Название предложения"},{"name":"params.deal.deal_cost","in":"body","type":"string","required":false,"description":"Сумма заказа"},{"name":"params.deal.deal_status","in":"body","type":"string","required":false,"description":"Статус: new, payed, cancelled и др."},{"name":"params.deal.deal_is_paid","in":"body","type":"integer","required":false,"description":"Признак оплаты"},{"name":"params.deal.payment_type","in":"body","type":"string","required":false,"description":"Способ оплаты"},{"name":"params.deal.payment_status","in":"body","type":"string","required":false,"description":"Статус платежа"},{"name":"params.deal.manager_email","in":"body","type":"string","required":false,"description":"Email менеджера"},{"name":"params.deal.deal_comment","in":"body","type":"string","required":false,"description":"Комментарий"},{"name":"params.system.multiple_offers","in":"body","type":"integer","required":false,"description":"1 — несколько предложений в одном заказе (добавляются по одному)"},{"name":"params.system.return_payment_link","in":"body","type":"integer","required":false,"description":"Вернуть ссылку на оплату"},{"name":"params.system.return_deal_number","in":"body","type":"integer","required":false,"description":"Вернуть номер заказа"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /account/users","title":"Экспорт пользователей","httpMethod":"GET","path":"/account/users","description":"Запускает экспорт и возвращает ключ экспорта; данные получают методом `/account/exports/{export_id}`.","params":[{"name":"key","in":"query","type":"string","required":true,"description":"Секретный ключ"},{"name":"created_at[from]","in":"query","type":"string","required":false,"description":"Дата создания с, YYYY-MM-DD"},{"name":"created_at[to]","in":"query","type":"string","required":false,"description":"Дата создания по"},{"name":"status","in":"query","type":"string","required":false,"description":"active или in_base"},{"name":"email","in":"query","type":"string","required":false,"description":"Email через запятую"},{"name":"idgrouplist","in":"query","type":"string","required":false,"description":"Выгрузить ID групп (id или id_date — с датой добавления)"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /account/groups","title":"Список групп","httpMethod":"GET","path":"/account/groups","description":"","params":[{"name":"key","in":"query","type":"string","required":true,"description":"Секретный ключ"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /account/groups/{id}/users","title":"Экспорт пользователей группы","httpMethod":"GET","path":"/account/groups/{id}/users","description":"","params":[{"name":"id","in":"path","type":"integer","required":true,"description":"ID группы"},{"name":"key","in":"query","type":"string","required":true,"description":"Секретный ключ"},{"name":"added_at[from]","in":"query","type":"string","required":false,"description":"Дата добавления в группу с"},{"name":"added_at[to]","in":"query","type":"string","required":false,"description":"Дата добавления в группу по"},{"name":"status","in":"query","type":"string","required":false,"description":"Статус пользователя"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /account/deals","title":"Экспорт заказов","httpMethod":"GET","path":"/account/deals","description":"","params":[{"name":"key","in":"query","type":"string","required":true,"description":"Секретный ключ"},{"name":"created_at[from]","in":"query","type":"string","required":false,"description":"Дата создания с"},{"name":"created_at[to]","in":"query","type":"string","required":false,"description":"Дата создания по"},{"name":"payed_at[from]","in":"query","type":"string","required":false,"description":"Дата оплаты с"},{"name":"payed_at[to]","in":"query","type":"string","required":false,"description":"Дата оплаты по"},{"name":"finished_at[from]","in":"query","type":"string","required":false,"description":"Дата завершения с"},{"name":"status_changed_at[from]","in":"query","type":"string","required":false,"description":"Дата смены статуса с"},{"name":"status","in":"query","type":"string","required":false,"description":"Статус заказа"},{"name":"user_in_group","in":"query","type":"integer","required":false,"description":"ID группы пользователя"},{"name":"user_id","in":"query","type":"string","required":false,"description":"ID пользователей через запятую"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /account/payments","title":"Экспорт платежей","httpMethod":"GET","path":"/account/payments","description":"","params":[{"name":"key","in":"query","type":"string","required":true,"description":"Секретный ключ"},{"name":"created_at[from]","in":"query","type":"string","required":false,"description":"Дата создания с"},{"name":"created_at[to]","in":"query","type":"string","required":false,"description":"Дата создания по"},{"name":"status","in":"query","type":"string","required":false,"description":"Статус платежа"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /account/exports/{export_id}","title":"Результат экспорта","httpMethod":"GET","path":"/account/exports/{export_id}","description":"","params":[{"name":"export_id","in":"path","type":"integer","required":true,"description":"ID экспорта из ответа метода экспорта"},{"name":"key","in":"query","type":"string","required":true,"description":"Секретный ключ"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"903","description":"Превышен лимит export API — дождитесь сброса"},{"code":"Неавторизованное API-обращение","description":"Неверный аккаунт или ключ"},{"code":"Действие запрещено","description":"Ключ только на чтение"},{"code":"Пустой параметр action","description":"Данные переданы не в теле POST form-data"},{"code":"Не указан ни эл. адрес, ни телефон","description":"Нет email или телефона в params"}],"limits":"- Import API: лимит создаваемых объектов в месяц по тарифу; изменение существующих объектов не ограничено. Статистика — «Профиль» → «Настройки аккаунта» → «АПИ».\n- Export API: 100 запросов за 2 часа на аккаунт, включая проверки статуса.","gotchas":["Импорт: POST с полями `action`, `key`, `params`; в base64 кодируется только `params`. Без POST/form-data будет ошибка «Пустой параметр action».","Экспорт двухшаговый: запрос с фильтром → `export_id` → получение данных; экспорты выполняются последовательно, не параллельте их.","Справочники доп. полей пользователей и заказов — `/account/fields` с `action=get`.","Даты в импорте — `yyyy-mm-dd HH:MM:II`.","Для оперативной передачи событий документация рекомендует процессы с операцией «Вызвать URL» вместо частого экспорта."],"slug":"getcourse","version":2,"updatedAt":"2026-10-24T17:05:33.205Z","sources":[{"title":"API GetCourse","url":"https://getcourse.ru/help/api","kind":"research","addedAt":"2026-10-17T07:21:20.625Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-17T07:21:20.625Z"},{"title":"scenarios-getcourse.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:24.664Z"}],"logoUrl":null}