/api/v4/locations/photosSubir fotos a una ubicación
Adjunta contenido multimedia a una ubicación mediante una URL pública de imagen o referencias a archivos de tu biblioteca multimedia.
Parámetros
Cuerpo
Un campo anidado marcado como obligatorio solo se aplica cuando envías su campo principal. Si el campo principal es opcional y lo omites, sus campos hijos obligatorios no se aplican.
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| input.locationId | string | obligatorio | The location's Base64-encoded Relay ID to attach media to. |
| input.photos | array of objects | obligatorio | Images to attach. `photo` is the only required key on each item. |
| input.photos[].photo | string | obligatorio | A publicly accessible JPEG or PNG URL that Listings API fetches and stores. The field is named `photo`, not `url`. |
| input.photos[].type | string | opcional | Which slot the image fills: `LOGO`, `COVER`, or `ADDITIONAL`. Defaults to an additional photo. |
| input.photos[].starred | boolean | opcional | 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 | opcional | Free-text label recording where the image came from. |
Solicitud de ejemplo
Cuerpo listo para pegar. Sustituye los ID y valores de ejemplo por los tuyos.
{ "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" } ] }}Respuestas
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.
Adjunta una o más imágenes a una ubicación. Proporciona un array photos en el que cada elemento incluya al menos photo, una URL pública de imagen que Listings API descarga y almacena. Siempre se requieren locationId y un array photos que no esté vacío.
Dos formas de éxito
Un lote pequeño se sube de forma síncrona: photos contiene el contenido multimedia ya procesado y request es un objeto vacío, como en el ejemplo anterior. En cambio, un lote grande se pone en cola y el mismo 200 tiene este aspecto:
{ "data": { "addLocationPhotos": { "clientMutationId": null, "success": true, "request": { "requestId": "e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a", "status": "PROCCESSING" }, "photos": [], "errors": null } }}Ambos casos indican éxito, así que gestiónalos comprobando si request.requestId está presente en lugar de suponer que photos contiene datos.
El campo de URL es photo. No es url ni image. Además, cada elemento admite los campos opcionales type (LOGO, COVER o ADDITIONAL), starred y source; también se aceptan publisherOverride y partnerMediaId para integraciones con socios. Una foto devuelta no tiene el campo caption.
Caso de uso: añadir las imágenes iniciales de una nueva ubicación. Justo después de crear una ubicación como "Jenny Home", sube su logotipo y las fotos de su fachada por URL mediante POST en una sola llamada. La respuesta devuelve el id de cada foto nueva, que luego pasas a los endpoints para destacar y eliminar fotos.
Caso de uso: reutilizar un recurso aprobado en varias ubicaciones. Usa la misma URL de imagen alojada en los arrays photos de varias ubicaciones para que todas compartan el mismo recurso de origen.
Aspectos que debes tener en cuenta.
- Las imágenes deben ser JPEG o PNG. Las reglas de tamaño de las plataformas de publicación se aplican por categoría (un mínimo habitual es de unos 10 KB y un máximo de unos pocos MB).
- Los lotes grandes se procesan de forma asíncrona. Si se supera el tamaño de lote establecido en el servidor, la llamada pone el trabajo en cola en lugar de subir las imágenes de forma síncrona:
photosse devuelve vacío y se establecerequest.requestId. Consulta periódicamenteGET /locations/photos/requests/{requestId}con ese id para comprobar cuándo se completa el trabajo. El umbral se configura en el servidor, así que interprétalo como "los lotes grandes pueden ponerse en cola" en lugar de asumir un número fijo, y elige la rama de ejecución según sirequest.requestIdestá presente. - No bases la lógica condicional en
request.status. En la respuesta de un trabajo en cola, su valor es la cadena literalPROCCESSING, que se escribe de forma distinta aPROCESSING, el valor que devuelve el endpoint de consulta periódica para el mismo trabajo. La presencia derequest.requestIdes el indicador fiable. - Pasar
starred: truepara más de las 4 fotos destacadas permitidas hace que falle toda la llamada conSY15012. La comprobación cuenta las fotos destacadas que ya tiene la ubicación más los elementos destacados de esta solicitud. - Una ubicación conserva un único logotipo y una única imagen de portada; volver a subir una imagen de cualquiera de estas categorías reemplaza la imagen existente.
- Establece
typeexplícitamente cuando quieras que una imagen sea el logotipo o la portada. Sin este campo, la imagen se almacena como una foto adicional.
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" } ] } }'