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",
    "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"
}
                        {
    "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",
    "address": "123 Main St",
    "coordinates": {
        "lat": 12.345678,
        "lng": -12.345678
    },
    "description": "Updated description",
    "tags": ["updated_tag"],
    "contact": {
        "phone": "555-5678",
        "email": "[email protected]",
        "website": "https://updated.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": {
        "cf812sj12": "Updated parking info",
        "feu3hsw32": "no",
        "hs2372a42": "Not available"
    },
    "image_url": "https://example.com/updated-photo.jpg"
}
                            {
    "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": {
            "cf812sj12": "Updated parking info",
            "feu3hsw32": "no",
            "hs2372a42": "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. Use the returned field IDs to identify or set custom fields when getting, creating, or updating locations.
GET /custom_fields
                        {
    "success": true,
    "custom_fields": [
        {
            "id": "cf812sj12", // Field ID - you may use this to set or update custom fields
            "name": "Field Name",
            "type": "text"
        }
    ]
}
                        When creating or updating locations, use the field IDs as keys in the custom_fields object. For example:
"custom_fields": {
    "cf812sj12": "Free street parking",  
    "feu3hsw32": "yes"   
}
                                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