Back to Developer Home

Storepoint Location Management API

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 →
Important Security Note

This is a private management API intended for server-side integrations. Never expose your authentication token in frontend applications.

Overview

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:

  • Retrieve paginated lists of locations
  • Get detailed information for specific locations
  • Create new locations programmatically
  • Update existing location data
  • Delete locations
  • Access custom field configurations

Authentication

All endpoints require authentication via a private API token in the Authorization header:

Authorization
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.

Base URL

The base URL for all API endpoints is:

Base URL
https://api.storepoint.co/admin/v1

List Locations

Retrieves a paginated list of all active locations for the authenticated locator.

Endpoint
GET /locations

Query Parameters

  • limit optional

    Number of results per page

    Default: 10 Maximum: 500
  • page optional

    Page number

    Default: 1

Example Response

Response
{
    "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
    }
}

Get Single Location

Retrieves detailed information for a specific location.

Endpoint
GET /locations/{id}

Example Response

Response
{
    "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"
    }
}

Create Location

Creates a new location with the provided details.

Endpoint
POST /locations

Request Body

Request
{
    "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"
}

Example Response

Response
{
    "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"
    }
}

Update Location

Updates an existing location. All fields are optional - only provided fields will be updated.

Endpoint
POST /locations/{id}

Request Body

Request
{
    "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"
}

Example Response

Response
{
    "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"
    }
}

Delete Location

Deletes a location.

Endpoint
POST /locations/{id}/delete

Example Response

Response
{
    "success": true,
    "message": "Location deleted successfully"
}

Get Custom Fields

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.

Endpoint
GET /custom_fields

Example Response

Response
{
    "success": true,
    "custom_fields": [
        {
            "id": "cf812sj12", // Field ID - you may use this to set or update custom fields
            "name": "Field Name",
            "type": "text"
        }
    ]
}

Using Custom Fields

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"   
}

Security Best Practices

  • Never use this management API in frontend applications or expose the token in client-side code
  • Store the API token securely in backend environment variables
  • Rotate your API token immediately if it's ever exposed
  • Only share API token access with trusted administrators
  • Monitor API usage in your Developer dashboard for suspicious activity

Error Responses

All endpoints may return the following error responses:

Authentication Error (401)

Response
{
    "error": "error",
    "message": "No locator found"
}

Validation Error (422)

Response
{
    "error": "validation_error",
    "message": "Invalid input data",
    "details": {
        "field_name": ["Error message"]
    }
}

Not Found Error (404)

Response
{
    "error": "not_found",
    "message": "Location not found"
}

Server Error (500)

Response
{
    "error": "error",
    "message": "Error message"
}

Technical Notes

  • All location IDs are prefixed with loc_ followed by random lowercase alphanumeric characters
  • Coordinates should be provided in decimal degrees format
  • Hours can be provided as any text string. Common formats like "24-hour time ranges (HH:MM-HH:MM)" or "closed" are recommended for consistency but not required
  • Tags are case-insensitive and will be stored in lowercase
  • You can adjust tag display case and organize tags into filters/groups in the Tags & Filters area of your dashboard
  • Custom field keys must match the field IDs returned by the Get Custom Fields endpoint
  • All URLs (website, image_url) must include the protocol (https://) unless you are using a relative path