Trova le sedi e archivia quelle che non gestisci più

Cerca per parola chiave, risolvi codici negozio e ID in blocco, programma o annulla l'archiviazione di sedi chiuse a fine ciclo di fatturazione.

Tre endpoint di lettura trovano le sedi tramite chiavi diverse: una ricerca a testo libero, una ricerca per codice negozio e una ricerca per id. L'archiviazione è un'operazione di scrittura pianificata: la sede rimane attiva fino alla fine del ciclo di fatturazione corrente, poi la sincronizzazione e la fatturazione si interrompono. Fino a quel momento puoi annullarla.

1. Cerca per parola chiave

GET /locations/search?query= cerca il termine nel nome, nell'indirizzo, nella città e nell'id del negozio e restituisce una connessione basata su cursori: edges[].node con pageInfo.endCursor, paginata tramite first e after. Ometti query per scorrere le pagine dell'intero account.

Search
curl "https://listingsapi.com/api/v4/locations/search?query=Acme&first=10" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "searchLocations": {      "edges": [        {          "cursor": "TG9jYXRpb246MTgwMDI4OQ==",          "node": {            "id": "TG9jYXRpb246MTgwMDI4OQ==",            "databaseId": 1800289,            "name": "Acme Kitchen",            "storeId": "ACME-NYC-001",            "approved": "APPROVED",            "archived": false,            "archivalScheduledAt": null          }        }      ],      "pageInfo": { "endCursor": "TG9jYXRpb246MTgwMDI4OQ==", "hasNextPage": false, "total": 1 }    }  }}

Un array edges vuoto indica che non sono state trovate corrispondenze: questo è il controllo da eseguire prima di una creazione quando non sai con certezza se un negozio esiste già. Entrambi gli SDK accettano fields per limitare la ricerca delle corrispondenze solo a name o store_id.

2. Cerca per codice negozio

Se i tuoi sistemi identificano le sedi tramite un tuo codice negozio, risolvile direttamente con GET /locations-by-store-codes. Il parametro storeCodes è un array JSON con codifica URL. I codici senza corrispondenza non sono presenti nel risultato.

By store code
curl -G https://listingsapi.com/api/v4/locations-by-store-codes \--data-urlencode 'storeCodes=["ACME-NYC-001","ACME-NYC-002"]' \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "getLocationsByStoreCodes": [      {        "id": "TG9jYXRpb246MTgwMDI4OQ==",        "databaseId": 1800289,        "storeId": "ACME-NYC-001",        "name": "Acme Kitchen",        "archived": false      }    ]  }}

3. Recupera i record completi per un gruppo di id

Quando disponi già di id base64, provenienti dal tuo archivio o dal payload di un webhook, GET /locations-by-ids restituisce il record completo per ciascuno di essi in un'unica chiamata. Vengono risolte anche le sedi archiviate, quindi leggi archived e archivedAt per distinguerle. Gli id sconosciuti vengono ignorati senza segnalazioni; confronta i conteggi.

By ids
curl -G https://listingsapi.com/api/v4/locations-by-ids \--data-urlencode 'ids=["TG9jYXRpb246MTgwMDI4OQ==","TG9jYXRpb246MTgwMDI5MA=="]' \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "data": {    "getLocationsByIds": [      { "id": "TG9jYXRpb246MTgwMDI4OQ==", "databaseId": 1800289, "name": "Acme Kitchen", "archived": false, "archivedAt": null },      { "id": "TG9jYXRpb246MTgwMDI5MA==", "databaseId": 1800290, "name": "Acme Kitchen Brooklyn", "archived": false, "archivedAt": null }    ]  }}

Per ottenere un sottoinsieme dell'intero account selezionato lato server, GET /locations accetta anche un parametro filter codificato in JSON, ad esempio per filtrare in base allo stato di approvazione. Consulta Elenca tutte le sedi.

4. Archivia le sedi che non gestisci più

POST /locations/archive accetta input.locationIds e restituisce una voce result per ogni sede. L'archiviazione è pianificata, non immediata: ogni sede passa a ARCHIVE_SCHEDULED, continua a sincronizzarsi fino alla fine del ciclo di fatturazione corrente e viene archiviata quando viene generata la fattura successiva. Da quel momento la sincronizzazione con le piattaforme di pubblicazione e la fatturazione si interrompono.

Archive
curl -X POST https://listingsapi.com/api/v4/locations/archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{  "input": {    "locationIds": ["TG9jYXRpb246MTgwMDI4OQ==", "TG9jYXRpb246MTgwMDI5MA=="]  }}'
JSON
{  "data": {    "archiveLocations": {      "errors": null,      "result": [        { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "status": "ARCHIVE_SCHEDULED", "success": true, "errors": null },        { "locationId": "TG9jYXRpb246MTgwMDI5MA==", "status": "ARCHIVE_SCHEDULED", "success": true, "errors": null }      ]    }  }}
result[].statusSignificato
ARCHIVE_SCHEDULEDIn coda. La sede rimane attiva e continua a essere fatturata fino alla fine del ciclo di fatturazione.
ARCHIVEDGià archiviata da una chiamata o da un ciclo precedente.

Leggi success di ogni voce: un id non valido non blocca il resto del gruppo. Mentre l'archiviazione è pianificata, il campo archivalScheduledAt della sede è impostato nei risultati degli elenchi e delle ricerche. Una sede archiviata non può essere aggiornata finché non viene riattivata. Se sono configurati webhook, viene emesso un evento profile.deleted; si tratta di un'eliminazione logica e non è prevista un'eliminazione definitiva.

5. Annulla un'archiviazione pianificata

Prima della chiusura del ciclo, POST /locations/cancel_archive con gli stessi id riporta le sedi a ACTIVE e la fatturazione continua. Una volta che la sede è stata completamente archiviata, questa operazione restituisce 404 per quella sede. L'annullamento non emette alcun evento webhook.

Cancel archive
curl -X POST https://listingsapi.com/api/v4/locations/cancel_archive \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationIds": ["TG9jYXRpb246MTgwMDI4OQ=="] } }'
JSON
{  "data": {    "cancelLocationsArchive": {      "errors": null,      "result": [        { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "status": "ACTIVE", "success": true, "errors": null }      ]    }  }}

Entrambi gli SDK richiedono due argomenti posizionali aggiuntivi, un tipo di selezione e un identificatore changedBy, che inviano insieme a locationIds. Il corpo della richiesta REST richiede solo gli id.

Passaggi successivi