POST/api/v4/locations/photos

Carica foto su una sede

Allega contenuti multimediali a una sede tramite URL pubblico dell'immagine o riferimenti a file già nella tua libreria multimediale.

Richiede una chiave API. Consulta Autenticazione per il formato dell’header e la rotazione delle chiavi.

Parametri

Corpo

Un campo annidato contrassegnato come obbligatorio si applica solo quando invii il campo padre. Se il padre è facoltativo e lo ometti, i suoi campi figli obbligatori non si applicano.

NomeTipoObbligatorioDescrizione
input.locationIdstringobbligatorioThe location's Base64-encoded Relay ID to attach media to.
input.photosarray of objectsobbligatorioImages to attach. `photo` is the only required key on each item.
input.photos[].photostringobbligatorioA publicly accessible JPEG or PNG URL that Listings API fetches and stores. The field is named `photo`, not `url`.
input.photos[].typestringfacoltativoWhich slot the image fills: `LOGO`, `COVER`, or `ADDITIONAL`. Defaults to an additional photo.
input.photos[].starredbooleanfacoltativoStar 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[].sourcestringfacoltativoFree-text label recording where the image came from.

Richiesta di esempio

Corpo pronto da incollare. Sostituisci gli ID e i valori segnaposto con i tuoi.

Request body
{  "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" }    ]  }}

Risposte

200Photos attached inline. Returns the created photo records; `errors` is null on success and `request` is empty because nothing was queued.
Response
{  "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.

Allega una o più immagini a una sede. Fornisci un array photos in cui ogni elemento contenga almeno photo, un URL pubblico da cui Listings API recupera e memorizza l'immagine. locationId e un array photos non vuoto sono sempre obbligatori.

Due forme di esito positivo

Un piccolo gruppo di immagini viene caricato direttamente: photos contiene i contenuti multimediali caricati e request è un oggetto vuoto, come nell'esempio sopra. Un gruppo numeroso viene invece messo in coda e lo stesso 200 assume questa forma:

JSON
{  "data": {    "addLocationPhotos": {      "clientMutationId": null,      "success": true,      "request": {        "requestId": "e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a",        "status": "PROCCESSING"      },      "photos": [],      "errors": null    }  }}

Entrambi indicano un esito positivo, quindi gestiscili verificando se request.requestId è presente anziché presumere che photos sia popolato.

Il campo dell'URL è photo. Non url e nemmeno image. Oltre a questo campo, ogni elemento accetta i campi facoltativi type (LOGO, COVER o ADDITIONAL), starred e source; per le integrazioni dei partner sono accettati anche publisherOverride e partnerMediaId. Una foto restituita non contiene il campo caption.

Caso d'uso: aggiungere le immagini iniziali di una nuova sede. Subito dopo aver creato una sede come "Jenny Home", usa POST per caricare il logo e le foto della facciata tramite URL in un'unica chiamata. La risposta restituisce il valore id di ogni nuova foto, che passerai successivamente agli endpoint per contrassegnare le foto come preferite e rimuoverle.

Caso d'uso: riutilizzare una risorsa approvata in più sedi. Inserisci lo stesso URL di un'immagine ospitata negli array photos di più sedi, in modo che tutte condividano la stessa risorsa di origine.

Aspetti a cui prestare attenzione.

  • Le immagini devono essere in formato JPEG o PNG. Le regole sulle dimensioni della piattaforma di pubblicazione si applicano per categoria (in genere il limite minimo è di circa 10 KB e quello massimo di pochi MB).
  • I gruppi numerosi vengono elaborati in modo asincrono. Quando il gruppo supera una dimensione definita sul server, la chiamata mette in coda il lavoro anziché caricare direttamente le immagini: photos viene restituito vuoto e request.requestId viene impostato. Interroga periodicamente GET /locations/photos/requests/{requestId} con quell'ID per monitorare il completamento. La soglia è una configurazione del server, quindi considera che "i gruppi numerosi possono essere messi in coda" anziché basarti su un numero fisso, e scegli il flusso da seguire in base alla presenza di request.requestId.
  • Non usare request.status per scegliere il flusso da seguire. Nella risposta che indica la messa in coda, il suo valore è la stringa letterale PROCCESSING, scritta diversamente da PROCESSING, che l'endpoint di polling riporta per lo stesso processo. La presenza di request.requestId è il segnale affidabile.
  • Passare starred: true per un numero di foto preferite superiore al limite consentito di 4 fa fallire l'intera chiamata con SY15012. Il controllo conta le foto preferite già presenti nella sede più gli elementi contrassegnati come preferiti in questa richiesta.
  • Una sede conserva un solo logo e una sola copertina; caricare nuovamente un'immagine in una delle due categorie sostituisce l'immagine esistente.
  • Imposta esplicitamente type quando vuoi che un'immagine sia il logo o la copertina. In sua assenza, l'immagine viene memorizzata come foto aggiuntiva.
Request
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"        }      ]    }  }'