Téléverser un logo, une image de couverture et des photos

Ajoutez par URL logo, couverture et photos de galerie à un établissement, listez les médias, étoilez l’image principale et supprimez les médias obsolètes.

Les photos sont associées à un établissement par URL publique : vous hébergez l'image, l'API la récupère et la stocke, puis les plateformes de publication la récupèrent depuis cet emplacement. Un établissement conserve un logo, une image de couverture et un nombre quelconque de photos supplémentaires, dont 4 au maximum peuvent être marquées d'une étoile pour bénéficier d'un affichage prioritaire.

1. Téléverser par URL

POST /locations/photos accepte input.locationId et un tableau input.photos. L'URL de chaque élément doit figurer dans un champ nommé photo, et non url. Définissez explicitement type sur LOGO, COVER ou ADDITIONAL ; un élément sans type est stocké comme photo supplémentaire.

Upload
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/cover.jpg", "type": "COVER" },      { "photo": "https://cdn.example.com/jenny-home/storefront.jpg", "type": "ADDITIONAL" }    ]  }}'
JSON
{  "data": {    "addLocationPhotos": {      "success": true,      "request": {},      "photos": [        { "id": "TWVkaWFGaWxlOjU4Nzg5MzE=", "databaseId": 5878931, "type": "LOGO", "starred": false,          "url": "https://sy-media-store.s3-us-west-2.amazonaws.com/f868bb3f/59c670a3/f47d62a6.png" },        { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "databaseId": 5878932, "type": "ADDITIONAL", "starred": false }      ],      "errors": null    }  }}

Conservez le id de chaque photo : c'est la valeur qu'acceptent les endpoints de marquage par étoile et de suppression. Téléverser à nouveau un LOGO ou un COVER remplace celui qui existe déjà. Un petit lot est stocké directement lors de l'appel, comme ici. Un lot volumineux est, lui, mis en file d'attente : photos est renvoyé vide et request.requestId est renseigné. Choisissez le traitement selon la présence de requestId, puis interrogez périodiquement GET /locations/photos/requests/{requestId}.

Poll a queued batch
curl https://listingsapi.com/api/v4/locations/photos/requests/e6c2d9d9-9a18-4015-88cf-9a4e19a6f49a \-H "Authorization: API $LISTINGSAPI_KEY"
status de la tâcheSignification
PROCESSINGTraitement toujours en cours. Interrogez à nouveau après quelques secondes.
SUCCESSTraitement terminé. Certaines photos peuvent néanmoins avoir échoué, consultez donc photos[].status et photos[].errorMessage.
ERRORLa tâche elle-même a échoué. Examinez photos[].errorMessage.

2. Lister les médias associés

GET /locations/{locationId}/photos renvoie tous les fichiers multimédias de l'établissement sous la forme d'un simple tableau. Utilisez-le pour vérifier si un logo ou une image de couverture manque avant de téléverser des fichiers, et pour recueillir les identifiants nécessaires aux 2 étapes suivantes. Le chemin accepte l'identifiant encodé en base64 ou le nombre brut.

List photos
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/photos \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "mediaFilesOfLocation": [      { "id": "TWVkaWFGaWxlOjU4Nzg5MzE=", "categoryName": "Logo", "categoryId": "4", "starred": false, "viewsCount": 0 },      { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "categoryName": "Additional", "categoryId": "12", "starred": true, "viewsCount": 143 }    ]  }}

categoryName vaut Logo, Cover ou Additional. Un établissement sans médias renvoie un tableau vide, et non une erreur.

3. Marquer d'une étoile des photos supplémentaires

POST /locations/photos/star marque les photos supplémentaires pour leur accorder un affichage prioritaire sur les plateformes de publication qui prennent en charge la mise en avant d'images. Seules les photos ADDITIONAL peuvent être marquées d'une étoile, à raison de 4 au maximum par établissement ; une cinquième fait échouer l'ensemble de l'appel avec SY15012. Vous pouvez également transmettre starred: true sur un élément lors du téléversement.

Star
curl -X POST https://listingsapi.com/api/v4/locations/photos/star \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "photoIds": ["TWVkaWFGaWxlOjU4Nzg5MzI="],    "starred": true  }}'
JSON
{  "data": {    "starUnstarLocationPhotos": {      "success": true,      "photos": [        { "id": "TWVkaWFGaWxlOjU4Nzg5MzI=", "type": "ADDITIONAL", "starred": true }      ],      "error": null    }  }}

La clé de réponse est starUnstarLocationPhotos et contient un seul error, et non un tableau errors. L'indicateur starred dans le corps contrôle l'action : envoyez false pour retirer l'étoile. Les méthodes du SDK acceptent le même booléen.

4. Supprimer une photo

POST /locations/photos/remove dissocie les photos supplémentaires à partir de leur identifiant. removedCount indique combien ont été dissociées ; ainsi, 0 avec errors: null signifie qu'aucun de ces identifiants n'était associé à cet établissement.

Remove
curl -X POST https://listingsapi.com/api/v4/locations/photos/remove \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationId": "TG9jYXRpb246MTgwMDI4OQ==",    "photoIds": ["TWVkaWFGaWxlOjU4Nzg5MzI="]  }}'
JSON
{  "data": {    "removeLocationPhotos": {      "removedCount": 1,      "errors": null    }  }}

Seules les photos ADDITIONAL peuvent être supprimées ici. Pour changer le logo ou l'image de couverture, téléversez une nouvelle image avec ce type : elle remplace l'ancienne. La suppression dissocie le fichier de l'établissement ; elle ne le supprime pas nécessairement de votre médiathèque.

5. Utilisation de chaque emplacement par les plateformes de publication

EmplacementNombreUtilisation par les plateformes de publication
LOGOUn par établissementAffiché comme image de profil ou de marque. Un nouveau téléversement le remplace. Il ne peut pas être marqué d'une étoile ni supprimé via l'API.
COVERUne par établissementAffichée comme image d'en-tête sur les fiches qui en possèdent une. Les mêmes règles que pour le logo s'appliquent : seul le remplacement est possible.
ADDITIONALNombre quelconqueLa galerie. Valeur par défaut de type lorsqu'aucune n'est fournie. Suppression possible.
ADDITIONAL marqué d'une étoileJusqu'à 4Bénéficient d'un affichage prioritaire sur les plateformes de publication qui prennent en charge la mise en avant d'images ; privilégiez donc vos meilleures photos d'extérieur et d'intérieur.

Étapes suivantes