GET/api/v4/locations

모든 사업장 조회

계정에 속한 사업장 목록을 커서 기반 페이지네이션으로 반환합니다.

API 키가 필요합니다. 헤더 형식과 키 교체는 인증을 참고하세요.

매개변수

쿼리

이름유형필수설명기본값
firstinteger선택Number of records to fetch from the start of the connection (forward pagination). Combine with `after`.50
lastinteger선택Number of records to fetch from the end of the connection (backward pagination). Combine with `before`.—
afterstring선택Cursor to fetch records after. Pass `pageInfo.endCursor` from the previous page.—
beforestring선택Cursor to fetch records before, used with `last`. Pass the `cursor` of the first edge of the page you are moving back from. `pageInfo` carries no `startCursor` field, so the edge cursor is the value to use.—
filterstring선택JSON-encoded filter object to narrow the result set (e.g. by approval status or sync state).—

응답

200Cursor-paginated connection of locations. Each edge exposes a `cursor` and a `node` (the full location).
Response
{  "data": {    "allLocations": {      "edges": [        {          "cursor": "TG9jYXRpb246MTgwMDI4OQ==",          "node": {            "id": "TG9jYXRpb246MTgwMDI4OQ==",            "databaseId": 1800289,            "accountId": 12345,            "accountName": "owner@brightsmile-dental.com",            "name": "Jenny Home",            "approved": "APPROVED",            "archived": false,            "archivalScheduledAt": null,            "archivedAt": null,            "street": "600 Congress Ave, Suite 200",            "city": "Austin",            "stateIso": "TX",            "stateName": "Texas",            "postalCode": "78701",            "countryIso": "US",            "countryCode": "1",            "latitude": "30.2711286",            "longitude": "-97.7436995",            "phone": "5125550142",            "additionalPhones": [],            "bizUrl": null,            "hideAddress": false,            "storeId": null,            "categoryId": 15,            "subCategoryId": 1432,            "subCategoryName": "Restaurants",            "additionalCategoryIds": [],            "additionalCategoryNames": [],            "description": "This is a standalone duplex house. A comfortable, private residence located in the Bouldin Creek neighborhood of Austin, offering spacious duplex living with easy access to the surrounding South Congress area and downtown Austin.",            "businessHours": [],            "package": "PREMIUM",            "planId": 3797,            "planName": "Launch",            "temporarilyClosed": false,            "ownerEmail": null,            "ownerName": null,            "googleVerificationStatus": { "status": "NOT_CONNECTED", "message": null },            "voiceStatus": 3,            "uid": "3c92283c-6145-4a43-8a62-0c15fd712021",            "createdDate": "July 06, 2026",            "lastUpdatedDate": "July 06, 2026",            "updatedAt": "2026-07-06T18:33:29.664Z",            "placeActionLinks": [              {                "placeActionType": "FOOD_ORDERING",                "uri": "https://order.example.com",                "isPreferred": true,                "name": "locations/1944.../placeActionLinks/54ada85bc246058a",                "submissionStatus": "success",                "submissionMessage": "Already up to date on Google.",                "lastSubmittedAt": "2026-07-08T12:14:36Z"              }            ],            "discoveredPlaceActionLinks": [              {                "placeActionType": "APPOINTMENT",                "uri": "https://book.example.com",                "isPreferred": false,                "name": "locations/1944.../placeActionLinks/abc123",                "providerType": "MERCHANT",                "isEditable": true              }            ]          }        }      ],      "pageInfo": {        "hasNextPage": false,        "hasPreviousPage": false,        "endCursor": "TG9jYXRpb246MTgwMDI4OQ==",        "total": 1      }    }  }}
401Unauthenticated, missing or invalid API key.
429Rate limit exceeded. Retry after the `Retry-After` header value.

계정에 속한 모든 사업장을 페이지 단위로 조회합니다. 결과는 생성일 기준으로 정렬됩니다(최신순). 각 edge에는 cursor(불투명한 base64 토큰으로, 사업장의 경우 디코딩하면 Location:<databaseId>가 됩니다)와 전체 사업장 레코드를 담은 node가 포함됩니다.

사용 사례: 모든 사업장을 자체 시스템에 동기화. ?first=50으로 시작하여 pageInfo.hasNextPage를 읽고, true이면 ?first=50&after=<pageInfo.endCursor>로 다음 페이지를 요청합니다. hasNextPage가 false가 될 때까지 반복합니다. 반대쪽 끝에서 백필을 재개하려면, 현재 페이지에서 이전 페이지로 이동할 때 현재 페이지의 첫 번째 edge에 있는 cursor를 last + before와 함께 사용합니다. node의 base64 id는 다른 모든 엔드포인트에서 요구하는 식별자이므로, ID로 사업장 조회, 음성 어시스턴트 또는 사업장 업데이트에 전달합니다.

사용 사례: 필터링된 일부 데이터 조회. 모든 페이지를 가져와 클라이언트 측에서 필터링하는 대신, filter에 JSON으로 인코딩한 객체를 전달하여 서버 측에서 connection의 범위를 제한합니다(예: 승인 상태 기준). 이렇게 하면 규모가 큰 계정에서도 요청 빈도 제한을 넘지 않습니다.

페이지네이션 + 요청 빈도 제한 관련 주의 사항: 커서는 불투명하므로 직접 만들지 말고, 항상 API가 반환한 커서를 다시 전달해야 하며, 정방향으로 이동할 때는 pageInfo.endCursor를, 역방향으로 이동할 때는 edge 자체의 cursor를 사용합니다(pageInfo에는 startCursor가 없습니다). first/after(정방향) 또는 last/before(역방향) 중 하나만 사용하고, 두 방향을 동시에 사용하지 않습니다. 짧은 간격으로 페이지를 반복 요청하는 것은 429 응답의 가장 흔한 원인이므로, Retry-After 헤더를 준수하고 여러 페이지를 동시에 요청하지 않습니다.

각 사업장에 대해 placeActionLinks(Listings API가 관리하는 Google 작업 링크)와 discoveredPlaceActionLinks(업체의 Google 프로필에서 직접 발견되었지만 아직 관리되지 않는 링크)를 반환합니다. 이러한 링크를 읽고, 관리 대상으로 추가하고, 관리하는 방법은 장소 작업 링크 가이드를 참조하세요.

Request
curl -X GET 'https://listingsapi.com/api/v4/locations' \  -H "Authorization: API $LISTINGSAPI_KEY"