Справочник API
Сравнение провайдеров

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

WhatsApp поддерживает QR-сопряжение и сопряжение по номеру телефона через стандартные эндпоинты аутентификации. QR-поток также может перейти в дополнительную авторизацию Passkey через три публичных эндпоинта с X-Api-Key.

qrcode

WhatsApp QR-сопряжение: вызовите /auth/qr/start, чтобы начать сессию устройства. QR-токен приходит через account.auth.required и также доступен для опроса через /auth/qr/check.

  1. 1. POST /v1/accounts с provider=whatsapp, auth_mode=qrcode. device_os / device_platform задаются в provider_data, постоянная маршрутизация — верхнеуровневым proxy.
  2. 2. POST /v1/accounts/{account_id}/auth/qr/start запускает устройство. Возвращается status=awaiting_qr_scan, но сама строка QR приходит асинхронно.
  3. 3. Слушайте событие account.auth.required на webhook — auth_payload.qr_code содержит строку, которую UI должен отрисовать как сканируемый QR. Альтернатива — опрос /auth/qr/check.
  4. 4. После сканирования приходит account.auth.succeeded с provider_account_ref, обычно затем account.started. Проверьте runtime_status, прежде чем решать, нужен ли POST /v1/accounts/{account_id}/runtime/start.
  • provider_data.device_osМетка ОС устройства, отображаемая на экране «Связанные устройства». По умолчанию MacOS. Нужно задавать вместе с device_platform — допустимые комбинации см. в таблице платформ выше по потоку.
  • provider_data.device_platformЧисловой код платформы устройства (1=CHROME, 2=FIREFOX, 5=SAFARI, 14=IOS_PHONE, 16=ANDROID_PHONE, ...). Действует только в паре с device_os.
  • proxyПостоянный proxy верхнего уровня аккаунта; это не provider_data.proxy_config.

code

WhatsApp по номеру телефона: сохраните номер на аккаунте при создании, затем введите на телефоне 8-значный verify_code в «Связанные устройства → Связать по номеру телефона».

  1. 1. POST /v1/accounts с provider=whatsapp, auth_mode=code и provider_data.phone в формате E.164 (только цифры). Номер сохраняется на аккаунте и автоматически переиспользуется последующими действиями аутентификации.
  2. 2. POST /v1/accounts/{account_id}/auth/start с пустым телом. Сохранённый номер переиспользуется; в ответе под auth_payload приходит 8-значный verify_code.
  3. 3. Покажите verify_code пользователю. Телефон принимает его около 3 минут; по истечении этого времени поток нужно перезапустить.
  4. 4. После сопряжения приходят events.PairSuccess и events.Connected через webhook — как и в QR-потоке.
  • provider_data.phoneНомер телефона в E.164 (только цифры, например 15551234567). Указывается в provider_data.phone при создании аккаунта; последующие действия аутентификации автоматически переиспользуют его.

Passkey (ветвь QR)

Дополнительная ветка Passkey в WhatsApp: после начала QR-потока состояние может потребовать WebAuthn credential и, при необходимости, явного подтверждения.

  1. 1. Сначала запустите обычный WhatsApp QR-поток. Когда GET /v1/accounts/{account_id}/auth вернёт status=passkey_required, создайте POST /v1/accounts/{account_id}/auth-sessions.
  2. 2. Завершите размещённый authorize_url либо используйте auth_payload.public_key в WebAuthn API и отправьте сериализованный credential через POST /auth/passkey-response.
  3. 3. Если состояние станет passkey_confirmation, вызовите POST /v1/accounts/{account_id}/auth/passkey-confirm без JSON-тела.
  4. 4. Опрашивайте GET /v1/accounts/{account_id}/auth после каждого действия. passkey_pending и passkey_confirmation_sent являются промежуточными состояниями.
  5. 5. Завершите поток при status=authorized или обработайте last_error при status=failed. Для повтора начните новый QR-поток.
  • auth_payload.public_keyПубличные параметры WebAuthn challenge из auth_payload.public_key. Передавайте их только WebAuthn API в доверенном origin.
  • authorize_urlВременная размещённая страница авторизации для завершения Passkey без собственной реализации WebAuthn UI.
  • webauthn_responseСериализованный credential WebAuthn. Передавайте его как строку без изменений; не записывайте и не публикуйте значение.

Примечания

  • QR приходит через webhook-событие account.auth.required, а не синхронно в ответе на /auth/qr/start. Подключите webhook-приёмник до запуска потока.
  • authorize_url, challenge и credential WebAuthn являются временными чувствительными данными. В документации используйте только плейсхолдеры; не записывайте значения в публичные логи и не передавайте их другим лицам.
  • Полученный из /auth/start verify_code показывается конечному пользователю и НЕ возвращается обратно в API. WhatsApp ожидает, что пользователь введёт его на телефоне в течение ~3 минут.
  • Кэшированный provider client не переключает proxy на лету. Во время авторизации выполните stop и перезапуск; для работающего аккаунта — runtime/reconnect.
  • Реакции приходят в виде events.Message + Message.reactionMessage, но платформа отображает их как message.reaction (эмодзи в data.event.reaction, id исходного сообщения в data.message.target_message_id).
  • Медиа, превышающее лимиты вышестоящего сервиса (аудио 50 MB / видео 60 MB / документы 50 MB), отдаётся с пустым url и metadata.is_big_file=true.