「顧客」は、YappliCRMに登録されているアプリの会員(エンドユーザー)を指します。ここでは、顧客情報の取得・登録・更新・削除をおこなうエンドポイント群を説明します。カスタムフィールドの扱いについては カスタムフィールド設計ガイド、id ・unique_id・外部連携IDの違いについては 顧客の識別子(id / unique_id / 外部連携ID)の使い分け も合わせて参照してください。
すべてのエンドポイントで Authorization: Bearer {access_token} が必須です。また、リクエストボディを送信するエンドポイント(顧客登録・顧客更新)では、Content-Type: application/json も併せて指定してください。
顧客一覧
GET/api/ext/users
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 | デフォルト |
|---|---|---|---|---|
per_page |
Integer | - | 1ページあたりの件数(最大 1000) |
50 |
page |
Integer | - | ページ番号 | 1 |
顧客の絞り込みや並べ替え(フィルタリング・ソート)には対応していません。per_page / page によるページングのみご利用いただけます。
カスタムフィールドを物理名(キー名)で取得することもできません。常に column01〜column50 の連番キーで返却されます。設定されている数が50個未満の場合でも、顧客一覧では未設定分を含めて column50 まで返却されます。この点は、設定されている数分しか返却されない 顧客登録・顧客詳細とは異なります。詳細は カスタムフィールドの件数と型 を参照してください。
顧客一覧は、YappliCRM内部の顧客ID昇順(登録日時の古い順)で返却されます。並び順は固定で、ページング中に順序が変わることはありません。
レスポンス(成功時 200)
{
"members": [
{
"id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"client_id": "c9e1a2b3-4d5e-6f70-8192-a3b4c5d6e7f8",
"unique_id": "A00000000012345B",
"pin": null,
"login_id": "tanaka.ichiro@example.com",
"age": 0,
"rank": "bronze",
"change_status": 0,
"cms_token": null,
"change_code": null,
"change_passcode": null,
"change_requested_at": null,
"change_email": null,
"change_password": null,
"regist_token": null,
"email_token": null,
"password_token": null,
"login_token": null,
"device_token": null,
"token_isuued_at": null,
"column01": null,
"column02": null,
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"column17": null,
"column18": null,
"column19": null,
"column20": null,
"column21": null,
"column22": null,
"column23": null,
"column24": null,
"column25": null,
"column26": null,
"column27": null,
"column28": null,
"column29": null,
"column30": null,
"column31": null,
"column32": null,
"column33": null,
"column34": null,
"column35": null,
"column36": null,
"column37": null,
"column38": null,
"column39": null,
"column40": null,
"column41": null,
"column42": null,
"column43": null,
"column44": null,
"column45": null,
"column46": null,
"column47": null,
"column48": null,
"column49": null,
"column50": null,
"secret_question": null,
"secret_answer": null,
"point": 0,
"total_point": 0,
"total_point_count": 0,
"logined": 1,
"enabled": 1,
"memo": null,
"ud_id": "90c83ca0-846a-4301-9682-2fb028bda57f",
"user_agent": null,
"os": null,
"os_version": null,
"app_version": null,
"regist_route": 0,
"email_verified_at": null,
"point_geted_at": null,
"first_booted_at": null,
"last_booted_at": null,
"logined_at": "2026-06-03 14:13:33",
"returned_at": null,
"created_at": "2026-05-25 17:10:41",
"updated_at": "2026-07-01 00:02:15",
"change_status_name": "引継依頼なし",
"logined_name": "ログイン中",
"enabled_name": "有効"
},
{
"id": "e3a1c2d4-1f5b-4a2e-9c3d-8b7a6f5e4d3c",
"client_id": "c9e1a2b3-4d5e-6f70-8192-a3b4c5d6e7f8",
"unique_id": "A00000000067890B",
"pin": null,
"login_id": "yamada.taro@example.com",
"age": 0,
"rank": "gold",
"change_status": 0,
"cms_token": null,
"change_code": null,
"change_passcode": null,
"change_requested_at": null,
"change_email": null,
"change_password": null,
"regist_token": null,
"email_token": null,
"password_token": null,
"login_token": null,
"device_token": null,
"token_isuued_at": null,
"column01": "山田太郎",
"column02": null,
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"column17": null,
"column18": null,
"column19": null,
"column20": null,
"column21": null,
"column22": null,
"column23": null,
"column24": null,
"column25": null,
"column26": null,
"column27": null,
"column28": null,
"column29": null,
"column30": null,
"column31": null,
"column32": null,
"column33": null,
"column34": null,
"column35": null,
"column36": null,
"column37": null,
"column38": null,
"column39": null,
"column40": null,
"column41": null,
"column42": null,
"column43": null,
"column44": null,
"column45": null,
"column46": null,
"column47": null,
"column48": null,
"column49": null,
"column50": null,
"secret_question": null,
"secret_answer": null,
"point": 10016,
"total_point": 75016,
"total_point_count": 12,
"logined": 0,
"enabled": 1,
"memo": null,
"ud_id": null,
"user_agent": null,
"os": "iOS",
"os_version": "18.0",
"app_version": "3.2.1",
"regist_route": 0,
"email_verified_at": null,
"point_geted_at": "2026-09-01 14:19:00",
"first_booted_at": "2026-05-25 17:38:35",
"last_booted_at": "2026-09-01 14:19:00",
"logined_at": null,
"returned_at": "2026-09-01 14:19:00",
"created_at": "2026-05-25 17:38:35",
"updated_at": "2026-07-01 00:02:15",
"change_status_name": "引継依頼なし",
"logined_name": "未ログイン",
"enabled_name": "有効"
}
],
"total": 2,
"per_page": 50,
"current_page": 1,
"last_page": 1
}
Member Object
| フィールド | 型 | 説明 |
|---|---|---|
id |
String | YappliCRMの顧客ID |
client_id |
String | YappliCRMの契約単位(クライアント)を識別するID |
unique_id |
String | 外部システムでユニークな会員証番号等のID |
pin |
String | 指定発番時に割り当てられるピン |
login_id |
String | ログインID |
age |
Integer | 年齢 |
rank |
String | ランク |
change_status / change_code / change_passcode / change_requested_at / change_email / change_password / cms_token / regist_token / email_token / password_token / login_token / device_token / token_isuued_at |
mixed | YappliCRM内部用のフィールドです。値の形式・内容は保証されないため、外部システムからは参照しないでください |
column01〜column50 |
String | カスタムフィールド(最大50個)。管理画面上で「文字列」「数値」「日付」「日付時間」の型を設定できますが、保存・返却される値は常にString型です(詳細は カスタムフィールドの件数と型 を参照) |
secret_question |
String | 秘密の質問 |
secret_answer |
String | 秘密の質問の答え |
point |
Integer | 保有ポイント |
total_point |
Integer | 総取得ポイント |
total_point_count |
Integer | ポイント付与・減算の実行回数 |
logined |
Integer | ログイン状態(0:未ログイン/1:ログイン済) |
enabled |
Integer | 利用可否(0:利用不可/1:利用可) |
memo |
String | メモ |
ud_id |
String | ユーザーデバイスID(最大255文字) |
user_agent |
String | 会員登録・利用時のUser-Agent |
os |
String | 利用端末のOS(例:iOS、Android) |
os_version |
String | 利用端末のOSバージョン |
app_version |
String | 利用しているアプリのバージョン |
regist_route |
Integer | 会員登録経路を表す数値 |
email_verified_at |
DateTime | メールアドレスの認証日時 |
point_geted_at |
DateTime | ポイント最終取得日 |
first_booted_at |
DateTime | アプリの初回起動日時 |
last_booted_at |
DateTime | アプリの最終起動日時 |
logined_at |
DateTime | 最終ログイン日 |
returned_at |
DateTime | 最終復帰日時(アプリを最後に開いた日時) |
created_at |
DateTime | 登録日 |
updated_at |
DateTime | 更新日 |
change_status_name |
String | change_status の表示名(例:引継依頼なし) |
logined_name |
String | logined の表示名(例:ログイン中/未ログイン) |
enabled_name |
String | enabled の表示名(例:有効/利用不可) |
顧客登録・顧客更新のレスポンスにはexternal_idsフィールドが含まれますが、顧客一覧のレスポンスには含まれません。
pin は「指定発番」というID発番方式を利用している場合に割り当てられる値です。指定発番の詳細について知りたい場合は、当社担当者へお問い合わせください。
enabledは、その顧客がYappliCRMを利用できる状態かどうかを表します。1(利用可)が通常の状態で、0(利用不可)は、利用規約違反などを理由にアカウントを利用停止にしたいケースを想定した項目です。
レスポンス(失敗時)
HTTPステータス:401
{
"status": false,
"errors": ["認証に失敗しました。"],
"all_errors": ["認証に失敗しました。"],
"error_code": "API-OPENAPI16"
}
アクセストークンが無効・期限切れの場合に返却されます。詳細は エラーコード一覧 を参照してください。
顧客詳細
GET/api/ext/users/{id}
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id |
String | ○ | YappliCRMの顧客ID |
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 | デフォルト |
|---|---|---|---|---|
with_column_key |
Boolean | - | true の場合、カスタムフィールドの物理名(キー名)をレスポンスに含める |
false |
レスポンス(成功時 200)
顧客登録・更新APIと同様に、レスポンスは member オブジェクトでラップされた形式で返却されます。
レスポンス例(with_column_key=false 時)
{
"member": {
"id": "b4f3a1c2-7e9d-4c6a-8f2b-1d3e5a7c9b0d",
"unique_id": "A00000000012345B",
"pin": null,
"login_id": "sato.hanako@example.com",
"rank": "silver",
"column01": "山田太郎",
"column02": "test",
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"secret_question": null,
"secret_answer": null,
"point": 0,
"total_point": 1010,
"logined": 0,
"enabled": 1,
"memo": null,
"ud_id": "1a2b3c4d5e6f7g8h",
"point_geted_at": "2026-01-12 13:42:47",
"point_used_at": "2026-01-12",
"point_expired_at": "--",
"point_expired_point": "--",
"external_ids": {
"example_id1": "66",
"example_id2": "88"
},
"logined_at": "2026-01-16 08:43:08",
"created_at": "2025-03-13 13:56:45",
"updated_at": "2026-07-13 00:06:44"
}
}
with_column_key=false(デフォルト)の場合、カスタムフィールドは物理名ではなく column01〜column50 の連番キーで返却されます。ただし実際に返却されるキーの数は、そのクライアントで設定されているカスタムフィールドの数分のみです(上記例では column16 まで。50個すべてが常に返却されるわけではありません)。
レスポンス例(with_column_key=true 時)
{
"member": {
"id": "b4f3a1c2-7e9d-4c6a-8f2b-1d3e5a7c9b0d",
"unique_id": "A00000000012345B",
"pin": null,
"login_id": "sato.hanako@example.com",
"rank": "silver",
"column01": "山田太郎",
"column02": "test",
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"secret_question": null,
"secret_answer": null,
"point": 0,
"total_point": 1010,
"logined": 0,
"enabled": 1,
"memo": null,
"ud_id": "1a2b3c4d5e6f7g8h",
"point_geted_at": "2026-01-12 13:42:47",
"point_used_at": "2026-01-12",
"point_expired_at": "--",
"point_expired_point": "--",
"last_name": "山田太郎",
"first_name": "test",
"survey_opt_in": null,
"purchase_amount": null,
"external_reference_id": null,
"birth_date": null,
"phone_number": null,
"membership_period": null,
"password_changed_flag": null,
"last_login_flag": null,
"registration_channel": null,
"total_purchase_amount": null,
"gold_rank_flag": null,
"silver_rank_flag": null,
"sample_date_field": null,
"favorite_categories": null,
"external_ids": {
"example_id1": "66",
"example_id2": "88"
},
"logined_at": "2026-01-16 08:43:08",
"created_at": "2025-03-13 13:56:45",
"updated_at": "2026-07-13 00:06:44"
}
}
with_column_key=true の場合、column01〜(クライアントで設定されている数まで)の連番キーはそのまま維持された上で、point_expired_point の後・external_ids の前の位置に、実際にYappliCRMの管理画面で設定されているカスタムフィールドの物理名(キー名)をキーとした同じ値のフィールドが追加されます(上記例の last_name〜favorite_categories が該当)。
物理名フィールドが追加されるのは、そのクライアントで実際に設定・利用されているカスタムフィールドの分のみです(上記例では16個のカスタムフィールドが設定されているクライアントを想定しています)。未設定のカスタムフィールドについては、columnNN ・物理名のいずれのキーも追加されません。
Member Object(顧客詳細)
顧客詳細のMember Objectは、顧客一覧のMember Objectと共通のフィールドに加え、以下のフィールドが追加で含まれます。
| フィールド | 型 | 説明 |
|---|---|---|
point_used_at |
Date / String | 初回ポイント使用日。「最終使用日」ではなく最も古い(初回の)使用日が返却されます。未設定時は null ではなく "--" という文字列で返却されます |
point_expired_at |
String | 今後失効するポイントのうち、もっとも近い有効期限日(YYYY-MM-DD 形式。期間の制限を受けません)。今後失効する予定のポイントが1件もない場合は "--" という文字列で返却されます(例:ポイントの獲得履歴がない、保有ポイントを使い切っている、有効期限付きのポイントがすべて期限切れ、有効期限のないポイントのみを保有している、のいずれかに該当する場合) |
point_expired_point |
String | 管理画面の「直近失効ポイント表示」設定で指定した期間内に失効するポイント数の合計。デフォルト設定(「直近」)の場合は、もっとも近い失効日に失効するポイント数です。値がある場合も常に文字列型で返却され、1,000以上の場合はカンマ区切り(例:"1,234")になります。該当するポイントがない場合は同様に "--" という文字列で返却されます |
external_ids |
Object | {外部連携キー: 外部連携ID} 形式のオブジェクト。詳細は カスタムフィールド設計ガイド を参照 |
point_used_at / point_expired_at / point_expired_point の3項目は、ポイント付与(加算・減算)APIのレスポンスとしても返却されます。この3項目が返却されるのはYappliCRMのポイント機能を利用しているクライアントのみで、ポイント機能を利用していないクライアントでは "--" ではなくキー自体がレスポンスに含まれません。
point_expired_atとpoint_expired_pointは、集計する範囲が異なるため、必ずセットで値が入る・"--"になるわけではありません。point_expired_pointの集計期間(「直近失効ポイント表示」設定)よりも先の日付にしか失効ポイントがない場合、point_expired_atには日付が入っていてもpoint_expired_pointは"--"になります(例:設定が「直近30日」で、もっとも近い失効日が2ヶ月先の場合、point_expired_atは日付を返しつつpoint_expired_pointは"--"になります)。
point_used_at/point_expired_at/point_expired_pointは、該当する値がない場合nullではなく"--"という文字列で返却されます。パース処理では、この文字列パターンに加え、point_expired_pointのカンマ区切り表記も考慮した実装にしてください。
レスポンス(失敗時)
HTTPステータス:400
{
"status": false,
"errors": "Member is not found"
}
指定した id の顧客が存在しない場合に返却されます。アクセストークンが無効な場合の挙動は顧客一覧と同様です。詳細は エラーコード一覧 を参照してください。
顧客詳細(ユニークID)
GET/api/ext/users/unique_id/{unique_id}
会員証の読み取り等により、id ではなく unique_id から顧客を特定したい場合に使用します。
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
unique_id |
String | ○ | 外部システムでユニークな会員証番号等のID |
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 | デフォルト |
|---|---|---|---|---|
with_column_key |
Boolean | - | カスタムフィールドを物理名で取得するか | false |
レスポンスの構造・失敗時のエラー(Member is not found 等)は顧客詳細と同様です。
顧客詳細(外部連携ID)
GET/api/ext/users/external_id/{external_key}/{external_id}
事前に外部連携IDを連携済みの場合に使用します。
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
external_key |
String | ○ | 事前にYappliCRMの管理画面で設定した外部連携IDのキー名 |
external_id |
String | ○ | 外部システム独自のID |
external_key は任意の値を自由に設定できるものではなく、YappliCRMの管理画面から当社担当者が事前に設定する必要があります。クライアント側で直接設定することはできないため、設定が必要な場合は当社担当者までご連絡ください(詳細は カスタムフィールド設計ガイド を参照)。
レスポンスの構造は顧客詳細と同様です。失敗時はMember is not foundエラーが返却されますが、これはexternal_key自体が未設定の場合と、該当するexternal_idの顧客が存在しない場合のいずれでも同じエラーになります(詳細は エラーコード一覧 を参照)。
顧客登録
POST/api/ext/users
リクエストパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
unique_id |
String | - | 外部システムでユニークな会員証番号等のID。半角文字、最大255文字、重複不可。省略時はエラーになりません(自動採番が有効なクライアントでは自動採番された値が設定され、無効なクライアントでは null のまま登録されます)。空文字 "" を送信した場合はエラーになります(※「必須パラメータについて」を参照) |
login_id |
String | - | ログインID。半角文字、1〜255文字、重複不可 |
password |
String | - | パスワード。半角文字、4〜255文字(※「必須パラメータについて」を参照) |
rank |
String | - | ランク。最大255文字(※「必須パラメータについて」を参照) |
column01〜column50 |
String / mixed | - | カスタムフィールド(型については カスタムフィールドの件数と型 を参照) |
secret_question |
String | - | 秘密の質問(最大255文字) |
secret_answer |
String | - | 秘密の質問の答え(最大255文字) |
logined |
Integer | - | ログイン状態(0/1) |
enabled |
Integer | - | 利用可否(0/1。デフォルト 1) |
logined_at |
String | △ | 最終ログイン日時(Y-m-d H:i:s 形式)。logined=1 の場合は必須 |
ud_id |
String | - | ユーザーデバイスID(最大255文字) |
with_column_key |
Boolean | - | カスタムフィールドを物理名で送信するか(デフォルト false) |
external_ids |
Object | - | 外部連携ID({external_key: external_id} 形式。詳細は カスタムフィールド設計ガイド) |
必須パラメータについて:本APIには必須パラメータはありません。リクエストボディを空({})にして送信しても、エラーにならず顧客登録がおこなえます(unique_idは自動採番、rankはデフォルト値が設定されます)。ただし、password・rank・unique_idは、パラメータ自体を送らなければエラーになりませんが、空文字""を送信した場合はエラー(passwordは必須です。等)になります。login_idは空文字を送信してもエラーになりません。また、logined=1を指定した場合のみlogined_atが必須になります。
リクエスト例
curl -X POST "{{APP_URL}}/api/ext/users" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"login_id": "user@example.com",
"password": "password123",
"unique_id": "U12345",
"rank": "bronze",
"column01": "2000-01-01",
"enabled": 1,
"external_ids": {
"example_id1": "1001",
"example_id2": "2002"
}
}'
レスポンス(成功時)
HTTPステータス:200
{
"member": {
"id": "a2580159-bc70-481c-a7c7-ffde97a85218",
"unique_id": "U12345",
"pin": null,
"login_id": "user@example.com",
"rank": "bronze",
"column01": "2000-01-01",
"column02": null,
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"secret_question": null,
"secret_answer": null,
"point": 0,
"total_point": 0,
"logined": 0,
"enabled": 1,
"memo": null,
"ud_id": null,
"point_geted_at": null,
"point_used_at": "--",
"point_expired_at": "--",
"point_expired_point": "--",
"external_ids": {
"example_id1": "1001",
"example_id2": "2002"
},
"logined_at": null,
"created_at": "2026-02-02 12:34:56",
"updated_at": "2026-02-02 12:34:56"
}
}
レスポンスは member オブジェクトでラップされる点に注意してください(顧客一覧の Member Object とは異なり、キーが1段ネストしています)。フィールド構成は 顧客詳細のMember Objectと同じで、point_used_at / point_expired_at / point_expired_point / external_ids も含まれます(id はString型のUUIDで返却され、pin は「指定発番」というID発番方式を利用している場合のみ値が設定されます)。
column01〜column50のうち実際に返却されるのは、そのクライアントで設定されているカスタムフィールドの数分のみです(上記例のクライアントでは column16 まで)。全クライアントで常に50個分すべてが返却されるとは限らない点に注意してください。
レスポンス(エラー時)
エラー時は status: false と errors を含むJSONが返却されます。errors はケースによって「配列」または「文字列」のいずれかの型で返るため、パース処理は両方を考慮してください。
{
"status": false,
"errors": [
"指定のunique idは既に使用されています。",
"指定のlogin idは既に使用されています。"
]
}
{
"status": false,
"errors": "Not contracted"
}
| エラーメッセージ | 意味 |
|---|---|
指定のunique idは既に使用されています。 |
unique_id が重複 |
指定のlogin idは既に使用されています。 |
login_id が重複 |
external_ids.〇〇の値は既に使用されています。 |
指定した外部連携ID(external_ids)の値が、同一クライアント内の他の顧客と重複 |
passwordは必須です。 |
password ・ rank ・ unique_id に空文字 "" を送信した場合(パラメータ自体を省略した場合はエラーになりません) |
loginedが1の場合、logined atを指定してください。 |
logined=1 を指定したが logined_at が未指定 |
会員情報の保持に必要なカスタムフィールドの設定がありません。 |
カスタムフィールドの設定不足 |
Not contracted |
クライアント(契約)が無効。errors が文字列で返る点に注意 |
アクセストークンが無効な場合の挙動は顧客一覧と同様です。詳細は エラーコード一覧 を参照してください。
顧客更新
PUT/api/ext/users/{id}
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id |
String | ○ | YappliCRMの顧客ID |
リクエストパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
unique_id |
String | - | 外部システムでユニークな会員証番号等のID。半角文字、最大255文字、重複不可。指定した場合は既存の値が上書きされ、省略した場合は既存の値が維持されます(自動採番は再実行されません) |
login_id |
String | - | ログインID。半角文字、1〜255文字、重複不可 |
password |
String | - | パスワード。半角文字、4〜255文字。省略時はエラーになりませんが、空文字 "" を送信した場合はエラーになります |
rank |
String | - | ランク。最大255文字 |
column01〜column50 |
String / mixed | - | カスタムフィールド(型については カスタムフィールドの件数と型 を参照) |
secret_question |
String | - | 秘密の質問(最大255文字) |
secret_answer |
String | - | 秘密の質問の答え(最大255文字) |
logined |
Integer | - | ログイン状態(0/1) |
enabled |
Integer | - | 利用可否(0/1) |
logined_at |
String | △ | 最終ログイン日時(Y-m-d H:i:s 形式)。logined=1 の場合は必須 |
ud_id |
String | - | ユーザーデバイスID(最大255文字) |
with_column_key |
Boolean | - | カスタムフィールドを物理名で送信するか(デフォルト false) |
external_ids |
Object | - | 外部連携ID({external_key: external_id} 形式。詳細は カスタムフィールド設計ガイド) |
パラメータの内容は顧客登録と同じです。バリデーションエラーの形式も顧客登録と同様です。
リクエスト例
curl -X PUT "{{APP_URL}}/api/ext/users/{id}" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"column01": "更新後の値"
}'
レスポンス(成功時)
HTTPステータス:200
{
"member": {
"id": "a2580442-cad7-4cdf-8bcf-081c23eee430",
"unique_id": "U12345",
"pin": null,
"login_id": "user@example.com",
"rank": "gold",
"column01": "更新後の値",
"column02": null,
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"secret_question": null,
"secret_answer": null,
"point": 330,
"total_point": 360,
"logined": 0,
"enabled": 1,
"memo": null,
"ud_id": null,
"point_geted_at": "2026-07-27 15:33:41",
"point_used_at": "2026-07-27",
"point_expired_at": "2027-01-15",
"point_expired_point": "--",
"external_ids": {},
"logined_at": "2026-07-27 10:57:45",
"created_at": "2026-07-25 23:18:43",
"updated_at": "2026-07-27 15:38:19"
}
}
更新した項目(この例ではcolumn01)だけでなく、常に顧客情報全体が返却されます。レスポンス構造は顧客登録・顧客詳細と同じです。
レスポンス(失敗時)
HTTPステータス:400
{
"status": false,
"errors": "Member is not found"
}
指定した id の顧客が存在しない場合に返却されます。バリデーションエラーの形式は顧客登録と同様です。詳細は エラーコード一覧 を参照してください。
カスタムフィールド更新時の注意点
このエンドポイントでカスタムフィールドの値を変更すると、YappliCRM側で設定されている「指定カラム変化トリガー」が発火する場合があります。詳細は カスタムフィールド設計ガイド を参照してください。
外部連携ID削除
DELETE/api/ext/users/{id}/external_ids/{key}
指定した顧客から、特定の外部連携IDの紐付けを削除します。
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id |
String | ○ | YappliCRMの顧客ID |
key |
String | ○ | 削除対象の外部連携IDのキー名 |
レスポンス(成功時)
HTTPステータス:204 No Content(レスポンスボディは空)
レスポンス(失敗時)
HTTPステータス:404
{
"status": false,
"errors": "Page Not Found",
"all_errors": ["Page Not Found"],
"error_code": "API-OPENAPI08"
}
指定した id の顧客が存在しない場合に返却されます。他のエンドポイントの Member is not found(400)とは異なるエラー形式である点に注意してください。
HTTPステータス:400
{
"status": false,
"errors": "External ID not found"
}
顧客は存在するが、指定した key の外部連携IDが登録されていない場合に返却されます。
詳細は エラーコード一覧 を参照してください。
ログイン
POST/api/ext/users/login
ログインIDとパスワードを指定して、顧客のログイン処理をおこないます。
このエンドポイントは、multipart/form-data形式(-Fオプション)でのリクエストも受け付けます。他の多くのエンドポイントで使用するapplication/json形式に統一したい場合は、そちらも利用できます。
リクエストパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
login_id |
String | ○ | ログインID |
password |
String | ○ | パスワード |
リクエスト例
curl -X POST "{{APP_URL}}/api/ext/users/login" \
-H "Authorization: Bearer {access_token}" \
-F "login_id=user@example.com" \
-F "password=password123"
レスポンス(成功時)
HTTPステータス:200
{
"member": {
"id": "a2580442-cad7-4cdf-8bcf-081c23eee430",
"unique_id": "U12345",
"pin": null,
"login_id": "user@example.com",
"rank": "bronze",
"column01": null,
"column02": null,
"column03": null,
"column04": null,
"column05": null,
"column06": null,
"column07": null,
"column08": null,
"column09": null,
"column10": null,
"column11": null,
"column12": null,
"column13": null,
"column14": null,
"column15": null,
"column16": null,
"secret_question": null,
"secret_answer": null,
"point": 0,
"total_point": 0,
"logined": 1,
"enabled": 1,
"memo": null,
"ud_id": null,
"point_geted_at": null,
"point_used_at": "--",
"point_expired_at": "--",
"point_expired_point": "--",
"logined_at": "2026-07-27 10:57:45",
"created_at": "2026-02-02 12:34:56",
"updated_at": "2026-02-02 12:34:56"
}
}
レスポンスは顧客詳細と同じMember Object構造ですが、external_ids は含まれません。ログインに成功すると、logined は 1 に、logined_at は現在時刻に自動更新されます(ただし、認証メールを利用するクライアントでは、この更新はおこなわれません)。
レスポンス(失敗時)
HTTPステータス:400
{
"status": false,
"errors": "ログインIDまたはパスワードが間違っています。"
}
| エラーメッセージ | 意味 |
|---|---|
ログインIDまたはパスワードが間違っています。 |
login_id が存在しない、または login_id / password の組み合わせが一致しない(存在しない login_id を指定した場合も、顧客の存在有無を区別せずこのメッセージが返却されます) |
アカウントがロックされています。 |
対象顧客が利用不可(enabled = 0)の状態 |
このアカウントは機種変更手続き中です。 |
対象顧客が機種変更手続き中の状態 |
login idは、必ず指定してください。(errors は配列) |
login_id / password が未指定 |
詳細は エラーコード一覧 を参照してください。
ログアウト
POST/api/ext/users/{id}/logout
指定した顧客のログイン状態(logined)を未ログイン(0)に更新します。
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id |
String | ○ | YappliCRMの顧客ID |
リクエスト例
curl -X POST "{{APP_URL}}/api/ext/users/{id}/logout" \
-H "Authorization: Bearer {access_token}"
レスポンス(成功時)
HTTPステータス:200
{
"status": true
}
レスポンス(失敗時)
HTTPステータス:400
{
"status": false,
"errors": "Member is not found"
}
指定した id の顧客が存在しない場合、上記のエラーが返却されます。詳細は エラーコード一覧 を参照してください。
退会
DELETE/api/ext/users/{id}/resign
登録されている顧客の退会処理をおこないます。
退会処理後は、対象の顧客IDに対して顧客詳細(GET)等を実行すると Member is not found エラーが返却され、通常のAPIからは取得できなくなります。
パスパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id |
String | ○ | YappliCRMの顧客ID |
リクエストパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
column01〜column50 |
String | - | カスタムフィールド。退会にあわせて、ダミーデータへの置き換えなど値を更新したいカスタムフィールドがある場合に指定します |
このエンドポイントも、ログインと同様に multipart/form-data 形式でのリクエストを受け付けます。application/json 形式に統一したい場合は、そちらも利用できます。
リクエスト例
curl -X DELETE "{{APP_URL}}/api/ext/users/{id}/resign" \
-H "Authorization: Bearer {access_token}" \
-F "column01=退会済み"
レスポンス(成功時)
HTTPステータス:204 No Content(レスポンスボディは空)
レスポンス(失敗時)
HTTPステータス:400
{
"status": false,
"errors": "Member is not found"
}
指定した id の顧客が存在しない場合に返却されます。詳細は エラーコード一覧 を参照してください。