ポイント /api/ext/users/{id}/points

YappliCRMでは、顧客(会員)にポイントを付与し、ランクなどの会員プログラムに活用できます。ここでは、顧客のポイント付与履歴の取得、ポイントの付与・加減算、ポイント計算をおこなうエンドポイント群を説明します。すべてのエンドポイントで Authorization: Bearer {access_token} が必須です。また、リクエストボディを送信するエンドポイント(ポイント付与・ポイント計算)では、Content-Type: application/json も併せて指定してください。


ポイント付与履歴

GET/api/ext/users/{id}/points

パスパラメータ

パラメータ 必須 説明
id String YappliCRMの顧客ID

クエリパラメータ

パラメータ 必須 説明 デフォルト
per_page Integer - 1ページあたりの件数(最大 1000 50
page Integer - ページ番号 1

レスポンス(成功時 200

{
  "points": [
    {
      "id": "c1a2b3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
      "point": 100,
      "title": "購入ポイント付与",
      "detail": null,
      "remarks": null,
      "expired_at": "2027-01-15 23:59:59",
      "created_at": "2026-07-27 15:14:12",
      "updated_at": "2026-07-27 15:14:12"
    },
    {
      "id": "d2b3c4e5-6f7a-8b9c-0d1e-2f3a4b5c6d7e",
      "point": -50,
      "title": "クーポン利用による減算",
      "detail": null,
      "remarks": "外部システムからの減算処理",
      "expired_at": null,
      "created_at": "2026-08-01 09:00:00",
      "updated_at": "2026-08-01 09:00:00"
    }
  ],
  "total": 2,
  "per_page": 50,
  "current_page": 1,
  "last_page": 1
}

Point Object

フィールド 説明
id String ポイント履歴ID
point Integer 付与ポイント数(マイナス値の場合は減算)
title String ポイント付与のタイトル。アプリのポイント履歴画面等で、エンドユーザー向けの表示項目として利用されることが多い項目です
detail String 非推奨(Deprecated):現在この項目に値が設定されることはなく、常に null が返却されます。将来のバージョンでレスポンスから削除される予定のため、この項目には依存しないでください
remarks String 備考
expired_at DateTime 有効期限(Y-m-d H:i:s形式)。リクエスト時に日付のみ(Y-m-d)を指定した場合、その日の23:59:59が設定されます。有効期限が設定されていない場合はnull
created_at DateTime 作成日時(Y-m-d H:i:s形式)
updated_at DateTime 更新日時(Y-m-d H:i:s形式)

レスポンス(失敗時)

HTTPステータス400

{
  "status": false,
  "errors": "Member is not found"
}

指定した id の顧客が存在しない場合に返却されます。アクセストークンが無効な場合のエラー形式は顧客一覧と同様です。詳細は エラーコード一覧 を参照してください。


ポイント有効期限一覧

GET/api/ext/users/{id}/points/expired_list

クエリパラメータ

パラメータ 必須 説明 デフォルト
per_page Integer - 1ページあたりの件数(最大 1000 50
page Integer - ページ番号 1

レスポンス(成功時 200

{
  "points": [
    {
      "expired_at": "2027-01-15 23:59:59",
      "point": "100"
    }
  ],
  "total": 1,
  "per_page": 50,
  "current_page": 1,
  "last_page": 1
}
フィールド 説明
expired_at DateTime 有効期限(Y-m-d H:i:s形式)
point String 当該期限で失効するポイント数。数値ではなく 文字列 で返却されます
注意点:このエンドポイントの point は常に文字列型で返却されます(例:"100")。数値として扱う場合は、外部システム側で数値型への変換が必要です。対象となる有効期限付きポイントが0件の場合は、points が空配列([])、total0 になります("--" という文字列は返却されません)。

レスポンス(失敗時)

HTTPステータス400

{
  "status": false,
  "errors": "Member is not found"
}

指定した id の顧客が存在しない場合に返却されます。詳細は エラーコード一覧 を参照してください。


ポイント付与(加算・減算)

POST/api/ext/users/{id}/points

point に負の値を指定することで、ポイントの減算もおこなえます。

リクエストパラメータ

パラメータ 必須 説明
point Integer 付与するポイント数(負の値で減算)
title String - ポイント付与のタイトル。アプリのポイント履歴画面等で、エンドユーザー向けの表示項目として利用されることが多い項目です
expired_at Date - 有効期限(Y-m-d形式で指定)。省略した場合の挙動は後述の「有効期限の延長ルール」を参照
remarks String - 備考

リクエスト例

curl -X POST "{{APP_URL}}/api/ext/users/{id}/points" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "point": 500,
    "title": "キャンペーンポイント付与",
    "expired_at": "2027-03-31",
    "remarks": "春の新生活応援キャンペーン"
  }'

レスポンス(成功時 200

顧客情報(顧客詳細のMember Objectと同形式。ただし external_ids は含まれません)を返却します。

{
  "member": {
    "id": "a25b7276-e23a-4972-a6de-1452c944406f",
    "unique_id": "U12345",
    "pin": null,
    "login_id": "user@example.com",
    "rank": "gold",
    "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": 500,
    "total_point": 500,
    "logined": 0,
    "enabled": 1,
    "memo": null,
    "ud_id": null,
    "point_geted_at": "2026-07-27 16:14:32",
    "point_used_at": "--",
    "point_expired_at": "2027-03-31",
    "point_expired_point": "--",
    "logined_at": null,
    "created_at": "2026-07-27 16:14:21",
    "updated_at": "2026-07-27 16:14:32"
  }
}

特に以下の3項目は、ポイント残高の状況を確認する上で重要です。

フィールド 説明
point_used_at Date / String 初回ポイント使用日。「最終使用日」ではなく最も古い(初回の)使用日が返却されます。未設定時は null ではなく "--" という文字列で返却されます
point_expired_at String 今後失効するポイントのうち、もっとも近い有効期限日(YYYY-MM-DD 形式。期間の制限を受けません)。今後失効する予定のポイントが1件もない場合は "--" という文字列で返却されます(例:ポイントの獲得履歴がない、保有ポイントを使い切っている、有効期限付きのポイントがすべて期限切れ、有効期限のないポイントのみを保有している、のいずれかに該当する場合)
point_expired_point String 管理画面の「直近失効ポイント表示」設定で指定した期間内に失効するポイント数の合計。デフォルト設定(「直近」)の場合は、もっとも近い失効日に失効するポイント数です。値がある場合も常に文字列型で返却され、1,000以上の場合はカンマ区切り(例:"1,234")になります。該当するポイントがない場合は同様に "--" という文字列で返却されます

この3項目が返却されるのはYappliCRMのポイント機能を利用しているクライアントのみで、ポイント機能を利用していないクライアントでは "--" ではなくキー自体がレスポンスに含まれません。

point_expired_atpoint_expired_point は、集計する範囲が異なるため、必ずセットで値が入る・"--" になるわけではありません。point_expired_point の集計期間(「直近失効ポイント表示」設定)よりも先の日付にしか失効ポイントがない場合、point_expired_at には日付が入っていても point_expired_point"--" になります(例:設定が「直近30日」で、もっとも近い失効日が2ヶ月先の場合、point_expired_at は日付を返しつつ point_expired_point"--" になります)。
ランク設定は当社担当者側での設定が必要な項目のため、アプリでランクプログラムを構築する際は、事前に当社担当者へご相談ください。

ポイント減算時の消込順序

ポイントを減算する際、以下の優先順位で消し込まれます。

  1. 有効期限が最も早いポイントから消し込まれる
  2. 同じ有効期限のポイントが複数ある場合は、その中でも付与タイミングが早いものから消し込まれる
  3. 最後に、有効期限が設定されていないポイントが消し込まれる

有効期限の延長ルール

YappliCRMのポイント期限タイプには「ポイント単位」と「最終付与日」があります。いずれか一方が設定されます。この設定は当社担当者が設定します。

まとめると、以下のようになります。

レスポンス(失敗時)

HTTPステータス400

{
  "status": false,
  "errors": ["Member is not found"]
}

指定した id の顧客が存在しない場合に返却されます。

point に整数以外の値を指定した場合は、以下のエラーが返却されます。

{
  "status": false,
  "errors": ["pointには、整数を指定してください。"]
}

point を指定しなかった場合は、以下のエラーが返却されます。

{
  "status": false,
  "errors": ["pointは、必ず指定してください。"]
}

point に指定可能な範囲(-999999999999)を超える値を指定した場合は、以下のようなエラーが返却されます。

{
  "status": false,
  "errors": ["pointには、-999999以上の数字を指定してください。"]
}

ポイント機能を利用していないクライアントの場合は、以下のエラーが返却されます。

{
  "status": false,
  "errors": "Not available for points"
}

point に負の値(減算)を指定し、保有ポイントが不足している場合は、以下のエラーが返却されます。errors はフィールド名をキーにしたオブジェクト形式で返却される点に注意してください(他のエラーとは形式が異なります)。

{
  "status": false,
  "errors": {
    "point": ["保有ポイントが不足しています。"]
  }
}

詳細は エラーコード一覧 を参照してください。


ポイント計算

POST/api/ext/users/{id}/points/calculation

購入金額等から、ランクに応じた付与率でポイント付与額を計算し、実際に付与します。ランクに応じた付与率は当社担当者が設定します。

リクエストパラメータ

パラメータ 必須 説明
amount Integer ポイント計算の元になる金額等の数値
title String - ポイント付与のタイトル。アプリのポイント履歴画面等で、エンドユーザー向けの表示項目として利用されることが多い項目です
expired_at Date - 有効期限(Y-m-d形式で指定)。省略した場合の挙動はポイント付与(加算・減算)の「有効期限の延長ルール」と同様です
remarks String - 備考

リクエスト例

curl -X POST "{{APP_URL}}/api/ext/users/{id}/points/calculation" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 2000,
    "title": "購入によるポイント計算付与",
    "remarks": "オンラインストア注文No.12345"
  }'

レスポンス(成功時 200

顧客情報(顧客詳細のMember Objectと同形式。ただし external_ids は含まれません)を返却します。

{
  "member": {
    "id": "a25b8891-a58d-4dc7-b629-6d7e37933b25",
    "unique_id": "U12345",
    "pin": null,
    "login_id": "user@example.com",
    "rank": "silver",
    "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": 20,
    "total_point": 20,
    "logined": 0,
    "enabled": 1,
    "memo": null,
    "ud_id": null,
    "point_geted_at": "2026-07-27 17:16:22",
    "point_used_at": "--",
    "point_expired_at": "2028-07-26",
    "point_expired_point": "--",
    "logined_at": null,
    "created_at": "2026-07-27 17:16:09",
    "updated_at": "2026-07-27 17:16:22"
  }
}

上記の例では、amount: 2000に対してsilverランクの付与率(1%)が適用され、20ポイントが付与されています。titleremarksに指定した値は、ポイント付与履歴の該当するPoint Objectにもそのまま反映されます。

計算方法について

現行の付与率計算は、「金額 × ランクごとの付与率」という単一のレートを掛け合わせる方式です(基礎付与分・ランク上乗せ分・期間施策上乗せ分を分けて計算する仕組みはありません)。付与率はクライアント・ランクごとの設定によります。

上記の掛け算の結果、小数点以下が発生した場合は切り捨てとなります(例:amount: 1050 に付与率1%を適用した場合、計算上は10.5ポイントですが、実際に付与されるのは10ポイントです)。

レスポンス(失敗時)

HTTPステータス400

{
  "status": false,
  "errors": ["Member is not found"]
}

指定した id の顧客が存在しない場合に返却されます。

amount に不正な値(文字列等)を指定した場合は、以下のエラーが返却されます。

{
  "status": false,
  "errors": ["amountには、整数を指定してください。"]
}

amount を指定しなかった場合は、以下のエラーが返却されます。

{
  "status": false,
  "errors": ["amountは、必ず指定してください。"]
}

amount に指定可能な範囲(1999999999)を超える値を指定した場合は、以下のようなエラーが返却されます。

{
  "status": false,
  "errors": ["amountには、999999999以下の数字を指定してください。"]
}

ポイント機能を利用していないクライアントの場合は、以下のエラーが返却されます。

{
  "status": false,
  "errors": "Not available for points"
}

詳細は エラーコード一覧 を参照してください。