Adicionar um local
Crie um local com os campos necessários para as plataformas de publicação, trate erros de validação e confirme que ele foi colocado na fila para envio.
Listagens, avaliações, publicações e análises são vinculadas a um ID de local. POST /api/v4/locations cria o local e coloca na fila uma listagem para cada plataforma de publicação do seu plano.
1. Reúna os campos obrigatórios
Dez campos são obrigatórios. Uma empresa que atende em uma área de serviço também envia o endereço completo: com hideAddress: true, ListingsAPI armazena o endereço, mas não o envia às plataformas de publicação. As plataformas de publicação exibem os campos opcionais omitidos em branco, então envie todas as informações que você tiver.
2. Crie o local
POST /api/v4/locations recebe os campos em um objeto input no corpo JSON da requisição. O método locations.add() do Python SDK recebe os mesmos campos como argumentos nomeados e valida os obrigatórios antes de enviar a requisição. O método createLocation() do Node SDK recebe o objeto camelCase diretamente.
curl -X POST https://listingsapi.com/api/v4/locations \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "name": "Acme Kitchen", "storeId": "ACME-NYC-001", "description": "Acme Kitchen is a family-owned neighborhood restaurant in downtown New York serving wood-fired pizza, hand-rolled pasta, and a short seasonal menu built around produce from nearby farms. Open for lunch and dinner seven days a week, with takeout and delivery available.", "street": "123 Jump Street", "city": "New York", "stateIso": "NY", "postalCode": "10013", "countryIso": "US", "phone": "6443859313", "bizUrl": "https://acmekitchen.example.com", "subCategoryId": 1432, "businessHours": [ { "day": "MONDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "TUESDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "WEDNESDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "THURSDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "10:00pm" }] }, { "day": "FRIDAY", "type": "OPEN", "slots": [{ "start": "11:00am", "end": "11:00pm" }] }, { "day": "SATURDAY", "type": "OPEN", "slots": [{ "start": "12:00pm", "end": "11:00pm" }] }, { "day": "SUNDAY", "type": "CLOSED", "slots": [] } ] }}'3. Leia a resposta
Uma criação bem-sucedida retorna success: true e o novo local em data.createLocation.location. Guarde os dois identificadores: id é o valor em base64 recebido por todas as operações de gravação posteriores, e databaseId é o valor numérico exibido nos painéis e nos payloads de webhook.
{ "data": { "createLocation": { "success": true, "errors": null, "location": { "id": "TG9jYXRpb246MTgwMDI5MA==", "databaseId": 1800290, "storeId": "ACME-NYC-001", "name": "Acme Kitchen", "city": "New York", "stateIso": "NY", "countryIso": "US", "status": "PENDING" } } }}status é PENDING enquanto o local é validado e colocado na fila. Esse valor avança sem uma nova chamada à API.
4. Trate os erros de validação
Uma criação pode falhar em dois pontos. Uma requisição malformada ou uma chave inválida retorna 4xx com um array errors no nível superior. Uma requisição bem formada com um campo que a API rejeita retorna 200 com success: false e o problema dentro de data.createLocation.errors, então verifique o corpo da resposta de cada operação de gravação, não apenas o código de status.
{ "data": { "createLocation": { "success": false, "errors": [ { "code": "SY10005", "message": "SY10005: description must be at least 200 characters", "path": ["input", "description"] } ], "location": null } }}Ambos os SDKs lançam exceções em caso de falha. O locations.add() do Python verifica os campos obrigatórios localmente e lança ValidationError antes de enviar a requisição. O createLocation() do Node lança ValidationError quando a API rejeita os dados de entrada, e é por isso que o exemplo acima não verifica nenhum indicador de sucesso.
Os códigos que você encontrará com mais frequência:
5. Confirme que o envio foi iniciado
A criação do local coloca na fila uma listagem por plataforma de publicação do seu plano. Cada listagem começa em AVAILABLE ou IN_PROGRESS e passa para SYNCED com um listingUrl assim que a plataforma de publicação a aceita.
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI5MA==/listings/premium \-H "Authorization: API $LISTINGSAPI_KEY"Com os webhooks configurados, não é necessário fazer consultas periódicas. Um evento profile.created é disparado quando o registro existe, e um evento listing.submission é disparado para cada plataforma de publicação conforme seu status muda.
Próximos passos
- Atualize um local: altere os horários, indique um fechamento temporário, adicione categorias do Google.
- Envie fotos do local: logotipo, capa e imagens da galeria.
- Conecte o Google e importe locais: vincule o Google Business Profile para que as listagens, avaliações e publicações do Google comecem a ser sincronizadas.
- Conecte o Apple Business Connect: publique no Apple Maps por meio da conta verificada do Apple Business do proprietário ou por meio da conta da ListingsAPI quando ele não tiver uma.
- Verifique o status das listagens e os links ativos: acompanhe os envios que você acabou de colocar na fila.