Admin "create verified" import: validates the same Excel file/header/rows, then for each row persists an RsImportLocation record (company_id = account_id, location_name, raw row_data JSON) and dispatches a CreateLocation job to actually create the location asynchronously.
Auth: Both — authentication. In the top-level authenticated group. The endpoint scopes the target by the account_id rule: must be a company row with bundle_id=3 (Account), not soft-deleted, and pass an ownership check. A Partner (bundle_id=1) reaches Accounts under their tree; a Account user reaches Accounts in their own hierarchy.
Rate limit: No rate limit.
Request
- Body (
multipart/form-data):
| Field | Type | Required | Notes |
|---|---|---|---|
account_id | integer | yes | Must be an existing, non-deleted account, and belong to the auth user's hierarchy (an ownership check). Used as company_id. |
location_file | file (xlsx/xls) | yes | mimetypes:application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, max 10240 KB. Same 14-column header template as bulk-upload. |
Per-row rules are identical to POST /api/v1/bulk-upload/locations: required address, city, state, zip, business_phone (9-10 digits), country_code (must be a known country code), location_name. Optional gbp_name, location_user_phone_number_optional, location_user_email_address_optional (valid/unique/distinct email); #NAME? formula values rejected.
Response — { data. } envelope. Validation-failure path returns HTTP 200; bad header/empty file returns an errorResponse (message-only) at HTTP 200.
status(string) — The endpoint saves"success"once rows and jobs dispatched,"error"when per-row validation fails.message(string) — human-readable status text.errors(object, only whenstatus=error) — map keyed by spreadsheet row number (data row index + 2) to arrays of error message strings.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
