API リファレンス

Contacts

連絡先を追加

チャネルアカウントに連絡先を追加します。phone_number または username の少なくとも一方を指定します。whatsapp_options は WhatsApp のみで使用でき、未対応チャネルは 501 unsupported_by_provider を返します。

POSThttps://api.unifyport.ai/v1/accounts/{account_id}/contacts/add

対応チャネル

WhatsApp

呼び出す前に

対象ワークスペースの X-Api-Key をサーバー側で使用します。実行前にすべてのプレースホルダーを置き換えます。

パラメーターの取得元
account_id
アカウント作成・取得応答の data.id を使います。識別子は X-Api-Key のワークスペースに属します。 アカウント取得

リクエストパラメータ

ヘッダー

X-Api-Key
string必須

ワークスペース API キー。このヘッダーからワークスペースを特定します。

Content-Type
string必須

JSON のリクエストボディを送る場合は application/json を使用します。

パスパラメータ

account_id
string必須

contacts ルートで使用される識別子。

リクエストボディ

phone_number
string

国または地域コードを含む数字のみの電話番号。プラス記号、空白、区切り文字は含めません。phone_number または username を指定します。

minLength: 1

username
string

チャネルのユーザー名。username または phone_number を指定し、形式は対象チャネルに従います。

minLength: 1

whatsapp_options
object

WhatsApp 専用の任意連絡先設定。first_name、full_name、sync_to_device_contacts は whatsapp_options 内にのみネストし、他のチャネルではこのオブジェクトを省略します。

first_name
string

WhatsApp 連絡先の任意の名。

full_name
string

WhatsApp 連絡先の任意の氏名。

sync_to_device_contacts
boolean

現在の WhatsApp アカウントに関連付けられた端末のシステム連絡先にも保存するか。デフォルトは false。

結果の確認

この API に記載された応答項目と HTTP 状態で結果を判断し、関連操作から次の手順を選びます。

レスポンス 200 OK

{
  "request_id": "<REQUEST_ID>",
  "data": {
    "id": "8600000000000@s.whatsapp.net",
    "conversation_id": "123456789012345@lid",
    "display_name": "Alice Example",
    "avatar_url": "",
    "provider_user_id": "8600000000000@s.whatsapp.net",
    "extra": {
      "phone": "8600000000000"
    }
  }
}

レスポンスボディ

id
string

連絡先識別子。

conversation_id
string

この連絡先の会話識別子。メッセージ送信やチャットの特定に使用します。

display_name
string

連絡先の表示名。ない場合は空文字列。

avatar_url
string

連絡先のアバター URL。ない場合は空文字列。

provider_user_id
string

連絡先のプロバイダ側ユーザー識別子。

is_blocked
boolean

接続アカウントがこの連絡先をブロックしているかどうか。

extra
object

phone などプロバイダ固有の追加フィールド。

phone
string

WhatsApp の phone JID から抽出した電話番号。

first_name
string

現在のアカウントのアドレス帳に保存されている連絡先の略称または名。

full_name
string

現在のアカウントのアドレス帳に保存されている連絡先のフルネーム。

push_name
string

連絡先本人が WhatsApp で設定したプロフィール名。

username
string

WhatsApp の連絡先のユーザー名(provider=whatsapp)で、プロフィール名 push_name とは独立しています。一覧と詳細では空でないユーザー名を取得済みの場合のみ返されます。欠落は現時点で不明であることを意味し、相手が未設定であることを示すものではありません。欠落を理由に保存済みのユーザー名を消去しないでください。

minLength: 1

business_name
string

WhatsApp Business アカウントのビジネス名または認証済みの名前。

redacted_phone
string

プロバイダーが番号の一部だけを返した場合のマスクされた電話番号。

レスポンス

200

200 OK

リクエスト成功。レスポンスボディの例を参照してください。

400

Bad Request

リクエストボディ、パス、またはパラメータが不正です。

401

Unauthorized

X-Api-Key ヘッダが欠落しているか無効です。

403

Forbidden

リクエストは識別されましたが、この操作は許可されていません。

404

Not Found

要求されたリソースが見つかりません。error.code と現在の操作を合わせて確認してください。

409

Conflict

要求された操作が、既存のプロバイダアカウントまたはリソースと競合しています。

500

Internal Server Error

サービスで予期しないエラーが発生しました。

501

Not Implemented

選択したプロバイダはこの操作を実装していません。

502

Bad Gateway

プロバイダアダプタまたは上流サービスが操作を完了できませんでした。

失敗時の対応

HTTP 状態と error.code/numeric_code を確認し、request_id を保存します。原因に応じてパラメーター修正・認証・状態確認を行い、送信や書き込みの再試行前に前回の結果を確認します。 エラーリファレンス

HTTP ステータス、error.code、error.numeric_code を現在の操作と合わせて確認します。数値コードは文字列です。request_id は調査用で、冪等性キーやタスク ID ではありません。

invalid_request · 10000 · 400

JSON 本文と必須項目を確認してください。

対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。

JSON の例です。message は実際の原因によって変わります · 400 · 10000
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_request",
    "numeric_code": "10000",
    "message": "Invalid request parameters"
  }
}
invalid_target_workspace · 11003 · 400

上書き対象のワークスペースが空、または形式が無効です。上書き用ヘッダーを削除し、対象ワークスペースの API Key を使用してください。

発生条件: ワークスペースを上書きする X-Workspace-Id リクエストヘッダーを送った場合に適用されます。

対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。

JSON の例です。message は実際の原因によって変わります · 400 · 11003
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_target_workspace",
    "numeric_code": "11003",
    "message": "Invalid target workspace"
  }
}
provider_invalid_request · 30001 · 400

チャネル固有の項目と形式を確認してください。

対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。

JSON の例です。message は実際の原因によって変わります · 400 · 30001
{
  "request_id": "req_example",
  "error": {
    "code": "provider_invalid_request",
    "numeric_code": "30001",
    "message": "Provider rejected the request"
  }
}
invalid_api_key · 11001 · 401

API Key が正しく有効か確認してください。

対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。

JSON の例です。message は実際の原因によって変わります · 401 · 11001
{
  "request_id": "req_example",
  "error": {
    "code": "invalid_api_key",
    "numeric_code": "11001",
    "message": "Invalid API key"
  }
}
missing_api_key · 11000 · 401

X-Api-Key ヘッダーを追加してください。

対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。

例 · 401 · 11000
{
  "request_id": "req_xxx",
  "error": {
    "code": "missing_api_key",
    "numeric_code": "11000",
    "message": "Missing X-Api-Key header"
  }
}
workspace_override_forbidden · 11002 · 403

この API Key に許可されていないワークスペースの上書きを要求しています。上書き用ヘッダーを削除し、対象ワークスペースの API Key を使用してください。

発生条件: ワークスペースを上書きする X-Workspace-Id リクエストヘッダーを送った場合に適用されます。

対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。

JSON の例です。message は実際の原因によって変わります · 403 · 11002
{
  "request_id": "req_example",
  "error": {
    "code": "workspace_override_forbidden",
    "numeric_code": "11002",
    "message": "Workspace override is not allowed"
  }
}
target_workspace_not_found · 11004 · 404

上書きで指定したワークスペースが存在しないか利用できません。所有範囲を確認し、上書き用ヘッダーを削除して対象ワークスペースの API Key を使用します。再試行で権限は増えません。

発生条件: ワークスペースを上書きする X-Workspace-Id リクエストヘッダーを送った場合に適用されます。

対処と再試行: 対象の識別子、所有範囲、現在のワークスペースを確認します。不存在やアクセス不可が確認された対象を、一時的なサービス障害として自動再試行しないでください。

JSON の例です。message は実際の原因によって変わります · 404 · 11004
{
  "request_id": "req_example",
  "error": {
    "code": "target_workspace_not_found",
    "numeric_code": "11004",
    "message": "Target workspace not found"
  }
}
account_binding_not_found · 30006 · 409

有効なチャネル接続への紐付けがありません。アカウントの状態を確認してください。

対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。

JSON の例です。message は実際の原因によって変わります · 409 · 30006
{
  "request_id": "req_example",
  "error": {
    "code": "account_binding_not_found",
    "numeric_code": "30006",
    "message": "Account is not bound to an available server"
  }
}
egress_configuration_pending · 20032 · 409

プラットフォームの既定のネットワーク設定を確認または読み込みできません。ログアウトを意味するものではありません。

発生条件: この操作はプラットフォームのネットワーク容量、またはアカウントに固定された既定のネットワーク設定を使用します。

対処と再試行: request_id を保存し、再度書き込む前にアカウントや作成結果を確認してください。容量や設定の復旧を待つか、サポートに連絡してください。アカウント作成、ネットワーク変更、再起動を自動で繰り返さないでください。

JSON の例です。message は実際の原因によって変わります · 409 · 20032
{
  "request_id": "req_example",
  "error": {
    "code": "egress_configuration_pending",
    "numeric_code": "20032",
    "message": "Account network configuration is pending verification"
  }
}
provider_not_ready · 30009 · 409

接続が未準備です。認可と runtime_status を確認してから再試行を判断してください。

対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。

JSON の例です。message は実際の原因によって変わります · 409 · 30009
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30009",
    "message": "Provider client is not ready"
  }
}
provider_not_ready · 30014 · 409

このアカウントに必要なチャネルのインスタンスがありません。実行環境の可用性の問題であり、認証の期限切れを示すものではありません。

対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。

対象チャネル: WhatsApp

JSON の例です。message は実際の原因によって変わります · 409 · 30014
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30014",
    "message": "Provider instance is missing"
  }
}
provider_not_ready · 30015 · 409

チャネルの実行プロセスは停止しています。起動前に意図した停止かを確認してください。実行の停止自体はログアウトを意味しません。

対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。

対象チャネル: WhatsApp

JSON の例です。message は実際の原因によって変わります · 409 · 30015
{
  "request_id": "req_example",
  "error": {
    "code": "provider_not_ready",
    "numeric_code": "30015",
    "message": "Provider runtime is stopped"
  }
}
create_contact_failed · 20020 · 500

account_id を確認し、アカウントが属するワークスペースの X-Api-Key を使います。このワークスペースにないアカウントには現在のキーでアクセスできません。

発生条件: アカウントが見つからない場合、従来の HTTP ステータスと操作の code を維持し、numeric_code でアカウントの不存在を示します。

対処と再試行: 対象の識別子、所有範囲、現在のワークスペースを確認します。不存在やアクセス不可が確認された対象を、一時的なサービス障害として自動再試行しないでください。

JSON の例です。message は実際の原因によって変わります · 500 · 20020
{
  "request_id": "req_example",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "20020",
    "message": "Account not found"
  }
}
create_contact_failed · 30010 · 500

チャネルが操作を完了できませんでした。message に「Provider operation failed:」以降の元の原因が含まれる場合があります。原因の文面は可変で、安定したプログラムのインターフェースではありません。

発生条件: チャネルがより具体的な失敗分類を返さない場合、現在の操作のエラーを維持します。

対処と再試行: 作成を繰り返す前に既存のリソースを一覧・照会し、前回の作成が反映されたか確認します。原因を解消して request_id を保存し、重複リソースを自動作成しないでください。

対象チャネル: WhatsApp

JSON の例です。message は実際の原因によって変わります · 500 · 30010
{
  "request_id": "req_example",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "30010",
    "message": "Provider operation failed"
  }
}
create_contact_failed · 30017 · 500

上流チャネルがリクエスト頻度の超過を明示的に拒否しました。この数値分類は操作の従来の HTTP ステータスと code を維持します。

対処と再試行: リクエストを停止し、回数を制限した方針で後から再試行します。ここでは固定待機時間や Retry-After の処理は保証されません。書き込みの再試行前に前回の結果を確認してください。

対象チャネル: WhatsApp

JSON の例です。message は実際の原因によって変わります · 500 · 30017
{
  "request_id": "req_example",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "30017",
    "message": "Provider rate limit exceeded"
  }
}
create_contact_failed · 30018 · 500

チャネル側のアカウントの App State の基準状態が同期していません。アカウントの同期状態の問題であり、一般的なリクエスト形式エラーではありません。

対処と再試行: チャネルがアカウントの App State の基準状態を復元するのを待ち、現在の状態を確認してから再試行します。この分類だけで認証情報が無効と判断したり、再認証を開始しないでください。

対象チャネル: WhatsApp

JSON の例です。message は実際の原因によって変わります · 500 · 30018
{
  "request_id": "req_example",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "30018",
    "message": "Provider app state is out of sync"
  }
}
create_contact_failed · 30021 · 500

このリクエスト時点で、アカウントはメッセージングプラットフォームに接続されていませんでした。WhatsApp の連絡先追加では 500 / create_contact_failed / 30021 が返ることがあります。ログアウトや、現在も実行状態が disconnected であることを意味しません。現在の状態を照会してから復旧方法を選んでください。

対処と再試行: 接続が必要な業務操作を停止します。まず POST /v1/accounts/{account_id}/runtime/refresh を呼び、最新状態に従って復旧し、runtime_status=running を確認してから業務 API を実行します。再送前に前回の書き込み結果を確認してください。

対象チャネル: WhatsApp

JSON の例です。message は実際の原因によって変わります · 500 · 30021
{
  "request_id": "req_example",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "30021",
    "message": "Account is not connected to the messaging platform"
  }
}
create_contact_failed · 35003 · 500

連絡先を追加:リソースの作成に失敗したか、作成結果を確認できませんでした。

対処と再試行: 作成を繰り返す前に既存のリソースを一覧・照会し、前回の作成が反映されたか確認します。原因を解消して request_id を保存し、重複リソースを自動作成しないでください。

JSON の例です。message は実際の原因によって変わります · 500 · 35003
{
  "request_id": "req_example",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "35003",
    "message": "Failed to create contact"
  }
}
create_contact_failed · 35009 · 500

今回の照会で、WhatsApp は対象番号を有効な連絡先として認識しませんでした。未登録や恒久的な利用不可を証明するものではありません。

対処と再試行: 国番号、電話番号、WhatsApp の登録状況を利用者に確認し、error.message を確認してください。原因を確認してから再要求し、同じ番号への自動再試行を繰り返さないでください。

対象チャネル: WhatsApp

例 · 500 · 35009
{
  "request_id": "req_example_contact_not_active",
  "error": {
    "code": "create_contact_failed",
    "numeric_code": "35009",
    "message": "Target phone number was not recognized as an active WhatsApp contact"
  }
}
unsupported_by_provider · 30003 · 501

チャネルが未対応です。対応表から利用可能な操作を選んでください。

対処と再試行: ドキュメントで対応しているチャネルと操作を選びます。同じリクエストを繰り返しても機能やベータ権限は追加されません。

例 · 501 · 30003
{
  "request_id": "req_xxx",
  "error": {
    "code": "unsupported_by_provider",
    "numeric_code": "30003",
    "message": "Operation not supported by this provider"
  }
}
provider_adapter_not_found · 30004 · 502

チャネルサービスを利用できません。状態を確認するか後で再試行してください。書き込みは前回の結果を先に確認してください。

対処と再試行: 作成を繰り返す前に既存のリソースを一覧・照会し、前回の作成が反映されたか確認します。原因を解消して request_id を保存し、重複リソースを自動作成しないでください。

JSON の例です。message は実際の原因によって変わります · 502 · 30004
{
  "request_id": "req_example",
  "error": {
    "code": "provider_adapter_not_found",
    "numeric_code": "30004",
    "message": "Provider adapter unavailable"
  }
}
provider_unavailable · 30002 · 502

チャネルサービスを利用できません。状態を確認するか後で再試行してください。書き込みは前回の結果を先に確認してください。

対処と再試行: 作成を繰り返す前に既存のリソースを一覧・照会し、前回の作成が反映されたか確認します。原因を解消して request_id を保存し、重複リソースを自動作成しないでください。

例 · 502 · 30002
{
  "request_id": "req_example_provider_unavailable",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30002",
    "message": "Provider service unavailable"
  }
}
provider_unavailable · 30010 · 502

チャネルが操作を完了できませんでした。message に「Provider operation failed:」以降の元の原因が含まれる場合があります。原因の文面は可変で、安定したプログラムのインターフェースではありません。

対処と再試行: 作成を繰り返す前に既存のリソースを一覧・照会し、前回の作成が反映されたか確認します。原因を解消して request_id を保存し、重複リソースを自動作成しないでください。

対象チャネル: WhatsApp

例 · 502 · 30010
{
  "request_id": "req_example_operation_failed",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30010",
    "message": "Provider operation failed: Example operation could not be completed"
  }
}
provider_unavailable · 30021 · 502

このリクエスト時点で、アカウントはメッセージングプラットフォームに接続されていませんでした。WhatsApp の連絡先追加では 500 / create_contact_failed / 30021 が返ることがあります。ログアウトや、現在も実行状態が disconnected であることを意味しません。現在の状態を照会してから復旧方法を選んでください。

対処と再試行: 接続が必要な業務操作を停止します。まず POST /v1/accounts/{account_id}/runtime/refresh を呼び、最新状態に従って復旧し、runtime_status=running を確認してから業務 API を実行します。再送前に前回の書き込み結果を確認してください。

対象チャネル: WhatsApp

例 · 502 · 30021
{
  "request_id": "req_example_connection_disconnected",
  "error": {
    "code": "provider_unavailable",
    "numeric_code": "30021",
    "message": "example operation: websocket not connected"
  }
}