/api/v4/locations/photos拠点に写真をアップロードする
公開画像URLを指定するか、メディアライブラリにすでにあるファイルを参照して、拠点にメディアを添付します。
パラメーター
ボディ
必須と示されたネストされたフィールドは、その親フィールドを送信する場合にのみ適用されます。親フィールドが任意で省略した場合、その必須の子フィールドは適用されません。
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| input.locationId | string | 必須 | The location's Base64-encoded Relay ID to attach media to. |
| input.photos | array of objects | 必須 | Images to attach. `photo` is the only required key on each item. |
| input.photos[].photo | string | 必須 | A publicly accessible JPEG or PNG URL that Listings API fetches and stores. The field is named `photo`, not `url`. |
| input.photos[].type | string | 任意 | Which slot the image fills: `LOGO`, `COVER`, or `ADDITIONAL`. Defaults to an additional photo. |
| input.photos[].starred | boolean | 任意 | Star the photo as it is attached, instead of a follow-up call to the star endpoint. Only additional photos can be starred, at most 4 per location. |
| input.photos[].source | string | 任意 | Free-text label recording where the image came from. |
リクエストの例
そのまま貼り付けられるボディです。プレースホルダーの ID と値をご自身のものに置き換えてください。
{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "photos": [ { "photo": "https://cdn.example.com/jenny-home/logo.png", "type": "LOGO" }, { "photo": "https://cdn.example.com/jenny-home/storefront.jpg", "type": "ADDITIONAL" } ] }}レスポンス
200Photos attached inline. Returns the created photo records; `errors` is null on success and `request` is empty because nothing was queued.
{ "data": { "addLocationPhotos": { "clientMutationId": null, "success": true, "request": {}, "photos": [ { "id": "TWVkaWFGaWxlOjU4Nzg5MzE=", "databaseId": 5878931, "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/f47d62a6.png", "thumbnailUrl": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/thumbnail_f47d62a6.png", "type": "LOGO", "starred": false }, { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "databaseId": 5878932, "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/ef4ffb12.jpg", "thumbnailUrl": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/thumbnail_ef4ffb12.jpg", "type": "ADDITIONAL", "starred": false } ], "errors": null } }}401Unauthenticated, missing or invalid API key.
拠点に1枚以上の画像を添付します。photos配列を指定してください。各項目には少なくともphotoを含めます。これは、Listings APIが取得して保存する画像の公開URLです。locationIdと、空でないphotos配列は常に必須です。
成功時の2つの形式
小規模なバッチはインラインでアップロードされます。上のサンプルのように、photosには処理済みのメディアが格納され、requestは空のオブジェクトになります。大規模なバッチは代わりにキューに登録され、同じ200が次のようになります。
{ "data": { "addLocationPhotos": { "clientMutationId": null, "success": true, "request": { "requestId": "e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a", "status": "PROCCESSING" }, "photos": [], "errors": null } }}どちらも成功なので、photosにデータが入っていると想定するのではなく、request.requestIdが存在するかどうかを確認して処理してください。
URLフィールドはphotoです。 urlでもimageでもありません。各項目には、このフィールドに加えて、任意でtype(LOGO、COVER、またはADDITIONAL)、starred、sourceを指定でき、パートナー連携用にpublisherOverrideとpartnerMediaIdも指定できます。返される写真にはcaptionフィールドがありません。
ユースケース:新しい拠点の画像を初期登録する。 「Jenny Home」などの拠点を作成した直後に、1回の呼び出しで、ロゴと店舗外観の写真のURLをPOSTします。レスポンスには新しい写真ごとのidが含まれます。このIDは、後でスター付けや削除のエンドポイントに渡します。
ユースケース:承認済みのアセットを複数の拠点で再利用する。 各拠点のphotos配列に、ホストされている同じ画像のURLを指定することで、すべての拠点が同じソースアセットを共有できます。
注意点。
- 画像はJPEGまたはPNGである必要があります。掲載先のサイズ規則はカテゴリごとに適用されます(一般的な下限は約10 KB、上限は数MBです)。
- 大規模なバッチは非同期で処理されます。サーバー側で定められたバッチサイズを超えると、呼び出しはインラインでアップロードする代わりに処理をキューに登録し、
photosが空で返され、request.requestIdが設定されます。そのIDを使用してGET /locations/photos/requests/{requestId}をポーリングし、完了状況を追跡してください。しきい値はサーバー側の設定なので、固定の数値として扱うのではなく、「大規模なバッチはキューに登録される場合がある」と捉え、request.requestIdの有無に基づいて処理を分岐してください。 request.statusの値に基づいて処理を分岐しないでください。キューに登録された場合のレスポンスでは、これは文字列リテラルPROCCESSINGであり、ポーリング用エンドポイントが同じジョブについて報告するPROCESSINGとは表記が異なります。request.requestIdが存在することが、信頼できる判断基準です。- スター付き写真が上限の4枚を超えるように
starred: trueを指定すると、呼び出し全体がSY15012で失敗します。このチェックでは、拠点の既存のスター付き写真と、このリクエスト内のスター付き項目を合算します。 - 拠点にはロゴとカバーがそれぞれ1枚だけ保持され、どちらのカテゴリも再アップロードすると既存の画像が置き換えられます。
- 画像をロゴまたはカバーにする場合は、
typeを明示的に設定してください。指定しない場合、画像は追加の写真として保存されます。
curl -X POST 'https://listingsapi.com/api/v4/locations/photos' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "photos": [ { "photo": "https://cdn.example.com/jenny-home/logo.png", "type": "LOGO" }, { "photo": "https://cdn.example.com/jenny-home/storefront.jpg", "type": "ADDITIONAL" } ] } }'