APIのエラーと応答
この参考記事では、Braze APIの使用中に発生する可能性のあるさまざまなエラーとサーバー応答、およびそれらのトラブルシューティング方法について説明します。
サーバーレスポンス
POST ペイロードが Braze のサーバーで受け付けられた場合、メッセージが成功すると次のレスポンスが返されます。
{
"message" : "success"
}
success は、RESTful API ペイロードが正しく構成され、プッシュ通知、メール、またはその他のメッセージングサービスに渡されたことのみを意味します。メッセージが実際に配信されたことを意味するものではありません。デバイスがオフラインである、プッシュトークンが Apple のサーバーで拒否された、不明なユーザー ID が指定されたなど、メッセージの配信を妨げる要因が他にもあるためです。
メッセージが配信されていないのにリクエストが success を返すのはなぜですか?
message: success または 2XX のレスポンスは、Braze が対象のエンドポイントへのリクエストを受け付けてキューに入れたことを意味します。すべての受信者がメッセージを受け取ったことを意味するものではありません。メッセージングの場合、配信はチャネルの適格性、トークン、プロバイダーのエラー、コンテンツの検証にも左右されます。送信をブロックする HTTP エラーについては致命的なエラーの表を、その後の配信指標についてはキャンペーンまたはキャンバスの分析を参照してください。
/users/identify のようにメッセージを送信しないエンドポイントの場合、success レスポンスは Braze がリクエストを処理用に受け付けたことのみを意味します。指定したエイリアスを持つユーザーが存在しない場合や、エイリアスがすでに external_id を持つプロファイルに属している場合、Braze は identify をスキップします。それでも API は最初の success レスポンスを返し、エイリアスが一致しなかったことを示すエラーは返されません。alias_name は大文字と小文字を区別するため、大文字と小文字が一致しない場合も同じ結果になります。
メッセージが成功しても致命的でないエラーがある場合は、次のレスポンスが返されます。
{
"message" : "success", "errors" : [<minor error message>]
}
成功した場合、errors 配列内のエラーの影響を受けなかったメッセージは引き続き配信されます。メッセージに致命的なエラーがある場合は、次のレスポンスが返されます。
{
"message" : <fatal error message>, "errors" : [<minor error message>]
}
追跡対象の送信 ID に対するレスポンス
キャンペーンの分析はいつでも利用できます。さらに、キャンペーンがブロードキャストとして送信された場合は、特定のキャンペーン送信インスタンスの分析も利用できます。特定のキャンペーン送信インスタンスのトラッキングが利用可能な場合は、次のレスポンスが返されます。
{
"message": "success", "send_id" : "example_send_id"
}
返された送信 ID は、/send/data_series エンドポイントのパラメーターとして使用でき、送信ごとの分析を取得できます。
エラー
サーバーレスポンスのステータスコード要素は3桁の数字で、最初の桁がレスポンスのクラスを表します。
- 2XX クラスのステータスコード (非致命的) は、リクエストが正常に受信、理解、受け入れられたことを示します。
- 4XX クラスのステータスコード (致命的) は、クライアントエラーを示します。4XX エラーコードとその説明の一覧については、致命的なエラーの表を参照してください。
- 5XX クラスのステータスコード (致命的) は、サーバーエラーを示します。考えられる原因はいくつかあります。たとえば、アクセスしようとしているサーバーがリクエストを実行できない、サーバーがメンテナンス中のためリクエストを実行できない、サーバーのトラフィックが高負荷になっている、などです。この場合は、エクスポネンシャルバックオフを使用してリクエストを再試行することをお勧めします。インシデントや障害が発生した場合、Braze はインシデント期間中に失敗した REST API 呼び出しを再実行できません。インシデント期間中に失敗した呼び出しは、お客様自身で再試行する必要があります。
- 502 エラーは、宛先サーバーに到達する前に失敗したことを意味します。
- 503 エラーは、リクエストが宛先サーバーに到達したものの、容量不足やネットワークの問題などの理由でリクエストを完了できないことを意味します。
- 504 エラーは、サーバーが上流の別のサーバーからレスポンスを受け取れなかったことを示します。
致命的なエラー
リクエストで致命的なエラーが発生した場合、次のステータスコードと関連するエラーメッセージが返されます。

以下のエラーコードはすべて、メッセージが送信されないことを示します。
| エラーコード | 説明 |
|---|---|
5XX Internal Server Error |
エクスポネンシャルバックオフを使用してリクエストを再試行してください。 |
400 Bad Request |
構文が不正です。無効な JSON の場合は HTTP 400 が返されます。error フィールドには、リクエスト本文に有効な application/json を渡す必要があるというメッセージ、または Error while parsing request body. Please check your syntax. が含まれる場合があります。リクエスト本文の解析中のエラーを参照してください。 |
400 No Recipients |
リクエストに external ID やセグメント ID、またはプッシュトークンが含まれていません。 |
400 Invalid キャンペーン ID |
指定したキャンペーン ID に対応するメッセージング API キャンペーンが見つかりませんでした。 |
400 Bad Request (transactional campaign) |
トランザクションキャンペーンはこのエンドポイントからトリガーできません。代わりに /transactional/v1/campaigns/{campaign_id}/send エンドポイントを使用してください。campaign_id がトランザクションメールキャンペーンに属している場合に、/campaigns/trigger/send および /campaigns/trigger/schedule/create から返されます。 |
400 Message Variant Unspecified |
キャンペーン ID は指定されていますが、メッセージバリエーション ID が指定されていません。 |
400 Invalid Message Variant |
有効なキャンペーン ID は指定されていますが、メッセージバリエーション ID がそのキャンペーンのどのメッセージとも一致しません。 |
400 Mismatched Message Type |
少なくとも1つのメッセージに対して、誤ったメッセージタイプのメッセージバリエーションが指定されています。 |
400 Invalid Extra Push Payload |
apple_push または android_push に extra キーが指定されていますが、辞書形式ではありません。 |
400 Max Input Length Exceeded |
/users/track の場合、このエラーは1回のリクエストで許可されるオブジェクトの最大数を超えたことが原因です。上限はレート制限モデルによって異なります。ほとんどの顧客の場合、各リクエストは attributes、events、purchases の合計で最大75個のオブジェクトをサポートします。従来のレート制限が適用される顧客の場合、各配列がそれぞれ独立して最大75個のオブジェクトをサポートします。詳細については、POST:ユーザーの作成と更新を参照してください。 |
400 The max number of external_ids and aliases per request was exceeded |
50を超える external ID を呼び出したことが原因です。 |
400 The max number of ids per request was exceeded |
50を超える external ID を呼び出したことが原因です。 |
400 No message to send |
メッセージにペイロードが指定されていません。 |
400 Slideup Message Length Exceeded |
スライドアップメッセージが140文字を超えています。 |
400 Apple Push Length Exceeded |
JSON ペイロードが1,912バイトを超えています。 |
400 Android Push Length Exceeded |
JSON ペイロードが4,000バイトを超えています。 |
400 Bad Request |
send_at の日時を解析できません。 |
400 Bad Request |
リクエストで in_local_time が true になっていますが、会社のタイムゾーンで time がすでに過ぎています。 |
401 Unauthorized |
API キーが無効です。一般的な原因は次のとおりです。 - Authorization ヘッダーがない、または形式が正しくない。ヘッダーの値は、 Bearer の後にスペースを1つ入れ、続けて API キーを指定する必要があります: Authorization: Bearer YOUR-API-KEY。よくある間違いとして、Bearer の省略、Bearer の後のキーの省略、値を引用符で囲むことなどがあります。- REST エンドポイントが間違っている。誤ったインスタンスにリクエストを送信しています。たとえば、アカウントが EU インスタンス ( https://dashboard-01.braze.eu) にある場合、リクエストは https://rest.fra-01.braze.eu に送信する必要があります。- 権限が不十分。各 API キーは、特定のワークスペースと権限セットにスコープが設定されています。ダッシュボードの 設定 > API キー でキーの権限を確認してください。 - API キーが間違っている。API キーはワークスペースごとに固有です。あるワークスペースのキーを、別のワークスペースのリクエストの認証に使用することはできません。 |
403 Forbidden |
料金プランがサポートしていないか、アカウントが無効化されています。 |
403 Access Denied |
使用している REST API キーに十分な権限がありません。一般的な原因は次のとおりです。
|
404 Not Found |
URL が無効です。 |
415 Unsupported Media Type |
Content-Type リクエストヘッダーがないか、正しくありません。設定ページで、値が application/json の Content-Type を追加してください。 |
429 Rate Limited |
レート制限を超えています。 |
リクエスト本文の解析中のエラー
リクエスト本文が有効な JSON でない場合、Braze は HTTP 400 を返します。これは、POST、PUT、PATCH など、JSON 本文を受け付ける REST エンドポイントに適用されます。
error フィールドには、リクエスト本文に有効な application/json を渡す必要があるというメッセージが含まれます。Error while parsing request body. Please check your syntax. が表示される場合もあります。
一般的な原因としては、末尾のカンマ、JSON 内のコメント、単一引用符で囲まれた文字列、ペイロードの前の余分な {、JSON エンコードされたオブジェクトではなく連結された文字列の送信などがあります。
再試行する前に、次の点を確認してください。
- JSON リンターでペイロードを検証します。
Content-Type: application/jsonを設定し、UTF-8 でエンコードされた JSON を送信します。- HTTP クライアントが生の文字列を連結するのではなく、オブジェクトを JSON エンコードしていることを確認します。
/users/track のペイロードサイズとリクエストあたりのオブジェクト数の上限については、構文エラーまたは解析エラーで 400 Bad Request が返されるのはなぜですか?を参照してください。