Bulk Upload Locations (request verification)

Accepts an Excel file of locations and an account_id (Account), validates the header row and every data row, stores the file to S3, and emails the admin team to verify before any locations are created. Does NOT create locations itself.

Auth: Both — authentication. Lives in the top-level authenticated group (no partner/*, admin/*, or partner-only access). The endpoint scopes the target by the account_id rule: it must be a company row with bundle_id=3 (Account), not soft-deleted, and pass an ownership check, which walks the auth user's company hierarchy. A Partner (bundle_id=1) can target any Account under their tree; a Account user can target Accounts in their own hierarchy.

Rate limit: No rate limit.

Request

  • Body (multipart/form-data):
FieldTypeRequiredNotes
account_idintegeryesMust be an existing, non-deleted account, and belong to the auth user's company hierarchy (an ownership check).
location_filefile (xlsx/xls)yesmimetypes:application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, max 10240 KB. Header row must exactly match the template: location_name, store_id, gbp_name, website, address, city, state, zip, country_code, business_phone, location_user_first_name_optional, location_user_last_name_optional, location_user_email_address_optional, location_user_phone_number_optional.

The endpoint validates each row: address, city, state, zip, business_phone (9-10 digits, no formatting), country_code (must be a known country code), and location_name are required. gbp_name, location_user_phone_number_optional, location_user_email_address_optional (valid email, unique in users, distinct) are optional. Formula values (#NAME?) are rejected.

Response{ data. } envelope. Always HTTP 200 on the happy/validation paths; bad header/empty file returns a badRequest error envelope instead.

  • status (string) — "success" on accepted upload, "error" when per-row validation fails.
  • message (string) — human-readable status text.
  • errors (object, only when status=error) — map keyed by spreadsheet row number (data row index + 2) to an array of error message strings.
Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params
integer
string
Responses

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json