Лиды от агентств партнёров
Как маркетинговое агентство партнёра отправляет лиды прямо как потенциальных клиентов партнёра и сразу получает для каждого персональную ссылку для записи: согласие на собственной посадочной странице, затем запись на приём без повторного ввода данных.
Процесс
Агентство работает с ключом партнёра, привязанным ровно к одному партнёру (аффилиату). Оно один раз читает описание формы, отправляет значения по каждому лиду и в том же ответе получает идентификатор потенциального клиента, а с типом приёма также персональную ссылку партнёра для записи. Кто открывает ссылку, видит свои данные уже заполненными и выбирает только время. Приём относится к партнёру и его команде.
1. Выдать ключ партнёра
Выдать ключ может партнёр в портале партнёра в разделе «Интерфейс для моего агентства» или администратор организации в управлении аффилиатами у партнёра. Оба видят одни и те же ключи и могут их отозвать. Название, по желанию срок действия и разрешённые IP-адреса; ключ (capi_…) показывается только один раз. Ротация выдаёт новый ключ, старый действует ещё 24 часа. Ключ вызывает ровно три эндпоинта: GET /forms/{id}, POST /forms/{id}/responses и POST /appointment-types/{id}/partner-links. Он действует, только пока партнёр активен и интерфейс организации включён; доступ через MCP его не принимает. Идентификаторы форм и типов приёма, которыми он может пользоваться, показывает инструкция в портале.
2. Прочитать форму
GET /forms/{id} называет поля (key, required, options), согласия с идентификатором (elementId), текстом (labelHtml) и обязательностью, а также страницы. Посадочная страница агентства показывает текст согласий точно в таком виде: только тогда отправленное согласие действительно. С ключом партнёра возвращаются только формы, открытые для портала партнёра и создающие потенциальных клиентов; на любую другую ответ 404. responseCount считает только отправки своего партнёра, publicUrl пуст. Если организация меняет форму, вместе с ней меняется и описание; перед кампанией его стоит прочитать заново.
curl "https://www.claritos.io/api/v1/forms/<FORMULAR>?locale=de" \
-H "Authorization: Bearer capi_…"{
"id": "<FORMULAR>",
"fields": [
{ "key": "std:firstName", "required": true },
{ "key": "std:email", "required": true },
{ "key": "cf:interesse", "required": false, "options": [ … ] }
],
"consents": [
{ "elementId": "<EINWILLIGUNG>", "required": true, "labelHtml": "<p>Ich bin einverstanden, …</p>" }
]
}3. Отправить лид, ссылка для записи в том же ответе
POST /forms/{id}/responses с values (ключи из шага 2) и consents (идентификатор согласия со значением true). С appointmentTypeId, типом приёма, открытым партнёру, сразу приходит персональная ссылка для записи; senderContactId по желанию выбирает, от чьего имени она отправляется, иначе от ответственного за потенциального клиента или владельца партнёра. affiliateId передавать не нужно: ключ сам задаёт своего партнёра. Idempotency-Key для каждого лида не даёт повторному вызову создать лид дважды. Если не удалась только ссылка, лид остаётся сохранённым: bookingUrl тогда пуст, а bookingError называет причину (prospect-without-contact, appointment-type-not-released-to-partner, sender-not-in-team, prospect-not-found, booking-failed). Если человек уже является потенциальным клиентом другого партнёра, действуют те же правила, что и для публичной формы.
curl -X POST https://www.claritos.io/api/v1/forms/<FORMULAR>/responses \
-H "Authorization: Bearer capi_…" -H "Content-Type: application/json" \
-H "Idempotency-Key: <je Lead eindeutig>" \
-d '{ "values": { "std:firstName": "Anna", "std:lastName": "Muster", "std:email": "anna@example.com" },
"consents": { "<EINWILLIGUNG>": true },
"appointmentTypeId": "<TERMINART>" }'{
"id": "<EINSENDUNG>",
"prospectId": "<INTERESSENT>",
"contactId": "<KONTAKT>",
"affiliateId": "<PARTNER>",
"bookingUrl": "https://www.claritos.io/t/…",
"bookingError": null
}4. Получить ссылку позже
По идентификатору из ответа (prospectId) POST /appointment-types/{id}/partner-links в любой момент снова возвращает ссылку, в том числе для другого открытого типа приёма. Если она уже есть, возвращается та же ссылка.
curl -X POST https://www.claritos.io/api/v1/appointment-types/<TERMINART>/partner-links \
-H "Authorization: Bearer capi_…" -H "Content-Type: application/json" \
-d '{ "prospectId": "<INTERESSENT>" }'Ошибки
401: ключ отозван или партнёр больше не активен; key-expired после окончания срока действия, в том числе через 24 часа после ротации. 403: ip-not-allowed, api-disabled (интерфейс организации выключен), forbidden с reason partner-key-endpoint (другой эндпоинт). 404: форма не открыта для партнёров. 422 validation-failed: в body.values.<key> или body.consents.<id> при отсутствии обязательных данных, в body.affiliateId с кодом partner-affiliate, если передан другой партнёр, в body.prospectId с кодом not_found для неизвестного потенциального клиента или клиента другого партнёра (оба случая выглядят одинаково). 422 precondition-failed для ссылки: prospect-without-contact, appointment-type-not-released-to-partner.
С ключом организации
Те же эндпоинты работают и с ключом организации. affiliateId тогда выбирает партнёра, которому принадлежит потенциальный клиент; appointmentTypeId при отправке дополнительно требует appointments:write, а POST /appointment-types/{id}/partner-links требует человека с правом управлять планированием приёмов. Для агентства правильный путь ключ партнёра: он больше ничего не умеет.