ユーザープロフィールAPI

ユーザープロフィールAPIを使うと、自社のデータベースにのみ保持しているユーザーの属性情報(会員ランクや、LTV、性別、Emailなど)をユーザープロフィールに登録できます。

このAPIを利用して更新したユーザープロフィールの情報を基にして、対象となるユーザーを絞り込んだプッシュ通知やアプリ内メッセージを送信することができます。

これにより以下のような施策を実現できます。

  • ゴールド会員ユーザー向けに特典情報を告知するプッシュ通知を送る
  • LTVの高いロイヤルカスタマーのみに特設ページへ招待するアプリ内メッセージを送る

ユーザープロフィールに関する詳細は ユーザープロフィール をご覧ください。

注釈

はじめに

ユーザープロフィールAPIを使うには、Repro API トークンを利用する必要があります。

  1. 設定 > アプリ設定 に行き、 アプリ > Repro API トークン を確認します。
Repro API Token

API 経由でユーザープロフィールを更新する

ユーザープロフィールAPIはHTTPの POST メソッドを受けつけるエンドポイントと紐付いています。

POST https://api.reproio.com/v2/user_profiles

警告

エンドポイントのドメインが repro.io から reproio.com に変更されます。 旧ドメインも引き続きご利用頂けますが、なるべく新しいドメインをご利用ください。

認証

取得した Repro API トークンをHTTPヘッダーの X-Repro-Token フィールドに設定してください。

単位時間あたりのアクセス上限

リクエストが正常に完了すると、レスポンスの X-RateLimit-Limit ヘッダーに、1分あたりのリクエストの上限回数が記載されます。リクエスト数がこれを超えると、 HTTP Status 429 (Too Many Requests) が返ります。なお、 X-RateLimit-Limit の値は変動する場合があります。

詳細は ユーザープロフィールAPIのレスポンス をご覧ください。

APIフォーマット

メッセージをHTTP bodyにJSONフォーマットでセットします。

  • user_id: アプリ内で ユーザーID APIを使って登録されたユーザーのIDを指定します。
  • user_profiles: 1つのペイロードで複数設定できます。(配列形式で格納します)
    • key: プロフィールのキーです。文字列のみが指定できます。nilや空文字列は不可、上限は255文字です。
    • type: プロフィールの型です。 string (文字列)、 int (整数)、 decimal (小数)、 datetime (日付) が指定できます。
    • value: プロフィールの値です。型に応じた値を指定します。

文字列

セットできる文字数の上限は255文字です。

{
  "key": "Job",
  "type": "string",
  "value": "Developer"
}

整数

{
  "key": "Age",
  "type": "int",
  "value": 25
}

小数

{
  "key": "Height",
  "type": "decimal",
  "value": 176.5
}

日付

ISO8601 フォーマットに準拠した文字列のみセットできます。

{
  "key": "LastLogin",
  "type": "datetime",
  "value": "2017-08-01T12:34:56.789+09:00"
}

ユーザープロフィールAPIのペイロード例

1人のユーザーのプロフィールを更新する

{
  "user_id": "user-123",
  "user_profiles": [
    {
      "key": "Job",
      "type": "string",
      "value": "Developer"
    },
    {
      "key": "Age",
      "type": "int",
      "value": 25
    }
  ]
}

注釈

  • 同じキーのプロフィールを複数指定した場合、一番最後のプロフィールが更新の対象となります。

警告

  • 既に存在しているユーザープロフィールキーやデータ型は後から変更や削除をすることができません。詳しくは、 ユーザープロフィール をご覧ください。

ユーザープロフィールAPIのレスポンス

レスポンスのヘッダーには、以下の値が含まれます。

ステータス ヘッダー 説明
正常 X-RateLimit-Limit 単位時間あたりのアクセス上限
正常 X-RateLimit-Remaining アクセスできる残り回数
正常 X-RateLimit-Reset アクセス数がリセットされる時刻(unixtime)
リクエスト制限 Retry-After 再実行可能になるまでの秒数

ユーザープロフィールAPIをコールした際の、レスポンスに含まれるステータスコードとエラーメッセージの一覧は下記になります。

202 Accepted

リクエストが成功しました。更新したユーザーIDおよびプロフィールに関してはレスポンスボディをご確認ください。

レスポンスボディ:

{
  "user_id": "user-123",
  "user_profiles": [
    {
      "key": "Job",
      "type": "string",
      "value": "Developer"
    },
    {
      "key": "Age",
      "type": "int",
      "value": 25
    },
    {
      "key": "LastLogin",
      "type": "datetime",
      "value": "2017-08-01 03:34:56.789"
    }
  ]
}

注釈

  • 日付型のプロフィールの値はサーバー側でUTCに変換されます。

400 Bad Request

リクエストにエラーがあります。エラーメッセージを確認の上、対応してください。

1001 ペイロードの形式に誤りがあります

user_iduser_profiles の形式をご確認ください。

レスポンスボディ:

{
  "error": {
    "code": 1001,
    "messages": [
      "user_id is missing"
    ]
  }
}

1002 ユーザーIDが登録されていません

指定したユーザーIDはまだアプリ内から登録されていません。

レスポンスボディ:

{
  "error": {
    "code": 1002,
    "messages": [
      "'user-123' is not registered"
    ]
  }
}

1003 ユーザープロフィールの key, type, value が適切に設定されていません

エラーメッセージに加えて、 APIフォーマット もご確認ください。

レスポンスボディ:

{
  "error": {
    "code": 1003,
    "messages": [
      "Job does not have a valid value"
    ]
  }
}

警告

  • 1つでも適切に設定されていないプロフィールがあると同じペイロード内の全てのプロフィールが更新されません。

401 Unauthorized

Repro API トークンが指定されていません。

レスポンスボディ:

{
  "status": "unauthorized",
  "error": {
    "messages": [
      "Please include your Repro API Token as \"X-Repro-Token\" HTTP header."
    ]
  }
}

403 Forbidden

指定した Repro API トークンが間違っています。

レスポンスボディ:

{
  "status": "forbidden",
  "error": {
    "messages": [
      "Please check your Repro API Token as \"X-Repro-Token\" HTTP header."
    ]
  }
}

404 Not Found

エンドポイントが存在しません。

レスポンスボディ:

{
  "status": "not_found",
  "error": {
    "messages": [
      "Not found."
    ]
  }
}

429 Too Many Requests

リクエスト数が多すぎます。 Retry-After ヘッダーに記載された秒数待った後、リクエストを再開してください。

レスポンスボディ:

{
  "status": "too_many_requests",
  "error": {
      "messages": [
          "Too many requests hit the API too quickly."
      ]
  }
}