Our Location Management API provides a simple way to programmatically create, update, and manage your Storepoint locator locations. Use it to sync your location data from existing systems, automate updates, or build custom integrations.
Get Started →This is a private management API intended for server-side integrations. Never expose your authentication token in frontend applications.
The Store Locator Management API provides programmatic access to manage your location data for custom location sync workflows and server-side integrations. This API enables you to:
All endpoints require authentication via a private API token in the Authorization header:
Authorization: Bearer YOUR_PRIVATE_API_TOKEN
You can obtain your private API token from the Developer area in your Storepoint Dashboard. This token grants full administrative access to manage your locator configuration and locations - keep it strictly secure and never expose it in frontend code, public repositories, or client-side applications.
You can rotate or revoke API tokens in the Developer area of your dashboard. This is recommended if a token has been compromised or accidentally exposed.
The base URL for all API endpoints is:
https://api.storepoint.co/admin/v1
Retrieves a paginated list of all active locations for the authenticated locator.
GET /locations
limit
optional
Number of results per page
page
optional
Page number
Default: 1{
"success": true,
"locations": [
{
"id": "loc_abc123",
"name": "Store Name",
"address": "123 Main St",
"coordinates": {
"lat": 12.345678,
"lng": -12.345678
},
"description": "Store description",
"tags": ["tag1", "tag2"],
"contact": {
"phone": "555-1234",
"email": "[email protected]",
"website": "https://example.com"
},
"hours": {
"monday": "9:00-17:00",
"tuesday": "9:00-17:00",
"wednesday": "9:00-17:00",
"thursday": "9:00-17:00",
"friday": "9:00-17:00",
"saturday": "10:00-15:00",
"sunday": "closed"
},
"custom_fields": {},
"image_url": "https://example.com/image.jpg"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 100,
"total_pages": 10,
"next": "/admin/v1/locations?page=2",
"previous": null
}
}
Retrieves detailed information for a specific location.
GET /locations/{id}
{
"success": true,
"location": {
"id": "loc_abc123",
"name": "Store Name",
"address": "123 Main St",
"coordinates": {
"lat": 12.345678,
"lng": -12.345678
},
"description": "Store description",
"tags": ["tag1", "tag2"],
"contact": {
"phone": "555-1234",
"email": "[email protected]",
"website": "https://example.com"
},
"hours": {
"monday": "9:00-17:00",
"tuesday": "9:00-17:00",
"wednesday": "9:00-17:00",
"thursday": "9:00-17:00",
"friday": "9:00-17:00",
"saturday": "10:00-15:00",
"sunday": "closed"
},
"custom_fields": {},
"image_url": "https://example.com/image.jpg"
}
}
Creates a new location with the provided details.
POST /locations
{
"name": "Store Name", // Required: Location name
"address": "123 Main St", // Required: Full street address
"coordinates": { // Required
"lat": 12.345678, // Required: Latitude
"lng": -12.345678 // Required: Longitude
},
"description": "Store description", // Optional: HTML allowed
"tags": ["tag1", "tag2"], // Optional: Array of strings
"contact": { // Optional
"phone": "555-1234", // Optional: Phone number
"email": "[email protected]", // Optional: Valid email
"website": "https://example.com" // Optional: Valid URL
},
"hours": { // Optional
"monday": "9:00-17:00", // Optional: Format "HH:MM-HH:MM" or "closed"
"tuesday": "9:00-17:00",
"wednesday": "9:00-17:00",
"thursday": "9:00-17:00",
"friday": "9:00-17:00",
"saturday": "10:00-15:00",
"sunday": "closed"
},
"custom_fields": { // Optional: Key-value pairs matching configured fields
"cf812sj12": "Free parking", // Example: Field ID -> Field Value
"feu3hsw32": "yes",
"hs2372a42": "Available"
},
"image_url": "https://example.com/store-photo.jpg" // Optional: Direct link to image file
}
{
"success": true,
"location": {
"id": "loc_abc123",
"name": "Store Name",
"address": "123 Main St",
"coordinates": {
"lat": 12.345678,
"lng": -12.345678
},
"description": "Store description",
"tags": ["tag1", "tag2"],
"contact": {
"phone": "555-1234",
"email": "[email protected]",
"website": "https://example.com"
},
"hours": {
"monday": "9:00-17:00",
"tuesday": "9:00-17:00",
"wednesday": "9:00-17:00",
"thursday": "9:00-17:00",
"friday": "9:00-17:00",
"saturday": "10:00-15:00",
"sunday": "closed"
},
"custom_fields": {
"cf812sj12": "Free parking",
"feu3hsw32": "yes",
"hs2372a42": "Available"
},
"image_url": "https://example.com/store-photo.jpg"
}
}
Updates an existing location. All fields are optional - only provided fields will be updated.
POST /locations/{id}
{
"name": "Updated Store Name", // Optional: New location name
"address": "123 Main St", // Optional: New street address
"coordinates": { // Optional
"lat": 12.345678, // Optional: New latitude
"lng": -12.345678 // Optional: New longitude
},
"description": "Updated description", // Optional: HTML allowed
"tags": ["updated_tag"], // Optional: New array of strings
"contact": { // Optional
"phone": "555-5678", // Optional: New phone number
"email": "[email protected]", // Optional: New valid email
"website": "https://updated.com" // Optional: New valid URL
},
"hours": { // Optional
"monday": "9:00-18:00", // Optional: Format "HH:MM-HH:MM" or "closed"
"tuesday": "9:00-18:00",
"wednesday": "9:00-18:00",
"thursday": "9:00-18:00",
"friday": "9:00-18:00",
"saturday": "10:00-16:00",
"sunday": "closed"
},
"custom_fields": { // Optional: Key-value pairs matching configured fields
"parking": "Updated parking info", // Example: Field ID -> New Field Value
"wheelchair": "no",
"delivery": "Not available"
},
"image_url": "https://example.com/updated-photo.jpg" // Optional: New direct link to image file
}
{
"success": true,
"location": {
"id": "loc_abc123",
"name": "Updated Store Name",
"address": "123 Main St",
"coordinates": {
"lat": 12.345678,
"lng": -12.345678
},
"description": "Updated store description",
"tags": ["updated_tag"],
"contact": {
"phone": "555-5678",
"email": "[email protected]",
"website": "https://updated-example.com"
},
"hours": {
"monday": "9:00-18:00",
"tuesday": "9:00-18:00",
"wednesday": "9:00-18:00",
"thursday": "9:00-18:00",
"friday": "9:00-18:00",
"saturday": "10:00-16:00",
"sunday": "closed"
},
"custom_fields": {
"parking": "Updated parking info",
"wheelchair": "no",
"delivery": "Not available"
},
"image_url": "https://example.com/updated-store-photo.jpg"
}
}
Deletes a location.
POST /locations/{id}/delete
{
"success": true,
"message": "Location deleted successfully"
}
Retrieves the list of custom fields configured for the locator.
GET /custom_fields
{
"success": true,
"custom_fields": [
{
"id": "field_token",
"name": "Field Name",
"type": "text"
}
]
}
All endpoints may return the following error responses:
{
"error": "error",
"message": "No locator found"
}
{
"error": "validation_error",
"message": "Invalid input data",
"details": {
"field_name": ["Error message"]
}
}
{
"error": "not_found",
"message": "Location not found"
}
{
"error": "error",
"message": "Error message"
}
loc_
followed by random lowercase alphanumeric characters