SHOCAL API

Access local business data for shops, restaurants, and services across the UK. Build amazing local discovery experiences with our comprehensive RESTful API.

Local Businesses

Access profiles, menus, and products from local shops and restaurants.

Reviews & Ratings

Retrieve authentic customer reviews and rating data.

Discounts & Offers

Get active promotions and special offers from vendors.

Trending & Featured

Discover popular and featured local businesses.

Quick Start

Make your first API request in seconds. All requests require authentication via an API key passed as a query parameter.

cURL
curl "https://www.shocal.org/developers/apis/v1/vendors?apikey=YOUR_API_KEY&limit=10"

Base URL

All API requests should be made to:

Base URL
https://www.shocal.org/developers/apis/v1/

Response Format

All responses are returned in JSON format with a consistent structure:

JSON Response
{
    "status": 200,
    "stores": [
        {
            "vendorID": "8",
            "vendorName": "FLOWERS BY SIOBHAN",
            "tagLine": "Family run florist",
            "city": "Manchester"
        }
    ]
}

Ready to get started?

Request API access to start building with SHOCAL data.

Get API Access

Authentication

Learn how to authenticate your API requests using your API key.

API Key Authentication

All API requests must include your API key as a query parameter. Your API key identifies your application and is used to track usage and enforce rate limits.

GET /v1/vendors?apikey=YOUR_API_KEY
Keep your API key secure
Never expose your API key in client-side code or public repositories. Always make API calls from your server.

Code Examples

curl -X GET \
  "https://www.shocal.org/developers/apis/v1/vendors?apikey=YOUR_API_KEY&limit=10" \
  -H "Accept: application/json"
const response = await fetch(
  'https://www.shocal.org/developers/apis/v1/vendors?apikey=YOUR_API_KEY&limit=10',
  {
    method: 'GET',
    headers: { 'Accept': 'application/json' }
  }
);

const data = await response.json();
console.log(data);
<?php
$apiKey = 'YOUR_API_KEY';
$url = "https://www.shocal.org/developers/apis/v1/vendors?apikey={$apiKey}&limit=10";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
import requests

api_key = 'YOUR_API_KEY'
url = f'https://www.shocal.org/developers/apis/v1/vendors?apikey={api_key}&limit=10'

response = requests.get(url)
data = response.json()
print(data)

Authentication Errors

Code Message Description
401 Access denied Invalid API key or key doesn't have access to this endpoint
403 Missing token No API key was provided in the request

Rate Limits

Understand our rate limiting policies to ensure reliable API access.

Current Limits

To ensure fair usage and maintain service quality, we enforce the following rate limits:

60
Requests per minute
1,000
Requests per day
100
Max items per request

Rate Limit Headers

Each API response includes headers to help you track your rate limit status:

Header Description
X-RateLimit-Limit Maximum requests allowed per window
X-RateLimit-Remaining Requests remaining in current window
X-RateLimit-Reset Unix timestamp when the rate limit resets

Handling Rate Limits

When you exceed the rate limit, you'll receive a 429 Too Many Requests response:

429 Response
{
    "status": 429,
    "message": "Too Many Requests"
}
Best Practice
Implement exponential backoff when you receive a 429 response. Wait progressively longer between retries to avoid further rate limiting.

Increasing Your Limits

Need higher rate limits? Contact us at enquiries@shocal.org to discuss enterprise plans with custom limits.

Error Handling

Understand API error responses and how to handle them gracefully.

Error Response Format

Error Response
{
    "status": 401,
    "message": "Access denied"
}

HTTP Status Codes

Code Status Description
200 OK Request was successful.
400 Bad Request The request was malformed or missing required parameters.
401 Unauthorized Invalid API key or insufficient permissions.
403 Forbidden Missing authentication token.
429 Too Many Requests Rate limit exceeded.
500 Internal Error Something went wrong on our end.

Get API Access

Request access to the SHOCAL API to start building with local business data.

Request Access

To obtain API access, please send a request to our team with:

  • Your name and contact details
  • Company name (if applicable)
  • Brief description of your intended use case
  • Expected request volume
Contact: enquiries@shocal.org

List Vendors

Retrieve a paginated list of all active vendors on the platform.

GET /v1/list-vendors

Parameters

ParameterTypeDescription
apikeyrequired string Your API key for authentication
pageoptional integer Page number (default: 1)
limitoptional integer Results per page, max 100 (default: 20)

Response Fields

FieldTypeDescription
vendorID integer Unique vendor identifier
vendorName string Business name
outcode string Postcode outward code (e.g. M41)
storeThumbnail string URL to vendor cover image
vendorProfile string API URL to get full vendor profile
modified datetime Last updated timestamp

Vendor Profile

Retrieve detailed information about a specific vendor.

GET /v1/vendors

Parameters

ParameterTypeDescription
apikeyrequired string Your API key
vendorIDrequired integer The vendor's unique identifier

Response Fields

FieldTypeDescription
vendorID string Unique vendor identifier
vendorName string Business name
tagLine string Short business description
addressLine1 string Street address
addressLine2 string Additional address line
city string City name
postcode string Full UK postcode
outcode string Postcode outward code
longitude string Geographic longitude
latitude string Geographic latitude
telephone string Contact phone number
categories string Comma-separated category list
storeThumbnail string URL to vendor cover image
deliveryAreas string Comma-separated postcodes served
openingHours object Daily opening hours (monday-sunday)
ratings object Contains ratingScore, ratingReviewTotal, ratingReviewsURL
socialMedia object Social media profile URLs
URLs object Contains products API URL and profile page URL
modified datetime Last updated timestamp

Menu

Retrieve menu items for a specific vendor.

GET /v1/menu

Parameters

ParameterTypeDescription
apikeyrequired string Your API key
vendorIDrequired integer The vendor's unique identifier
pageoptional integer Page number (default: 1)
limitoptional integer Results per page (default: 20)

Response Fields

FieldTypeDescription
vendorID integer Vendor identifier
productID integer Unique product identifier
name string Product name
description string Product description
price number Price in GBP
thumbnail string URL to product thumbnail image
created datetime Creation timestamp
modified datetime Last updated timestamp
viewProduct string API URL to get full product details

Product

Retrieve details for a specific product.

GET /v1/product

Parameters

ParameterTypeDescription
apikeyrequired string Your API key
vendorIDrequired integer The vendor's unique identifier
productIDrequired integer The product's unique identifier

Response Fields

FieldTypeDescription
vendorID integer Vendor identifier
productID integer Unique product identifier
name string Product name
description string Full product description
price number Price in GBP
preparationTime string Estimated preparation time
category string Primary product category
categorySub string Sub-category
thumbnail string URL to product thumbnail
heroImg string URL to full-size product image
created datetime Creation timestamp
modified datetime Last updated timestamp

Reviews

Retrieve customer reviews for a specific vendor.

GET /v1/reviews

Parameters

ParameterTypeDescription
apikeyrequired string Your API key
vendorIDrequired integer The vendor's unique identifier
commentsoptional string Set to "true" to only return reviews with comments
pageoptional integer Page number (default: 1)
limitoptional integer Results per page (default: 20)

Response Fields

FieldTypeDescription
vendorID integer Vendor identifier
reviewID integer Unique review identifier
stars integer Star rating (1-5)
comments string Review text (or "No comments")
created datetime Review submission timestamp

Discounts

Retrieve active discounts and promotions.

GET /v1/discounts

Parameters

ParameterTypeDescription
apikeyrequired string Your API key
pageoptional integer Page number (default: 1)
limitoptional integer Results per page (default: 20)

Response Fields

FieldTypeDescription
vendorID string Vendor identifier
vendor string Vendor name
discountPercentage integer Discount amount as percentage
minSpendRequired string "TRUE" or "FALSE" - whether minimum spend applies
minSpendValue number Minimum spend amount in GBP (if required)
deliveryAreas string Comma-separated postcodes where discount applies

Blogs

Retrieve blog posts and articles.

GET /v1/blogs

Parameters

ParameterTypeDescription
apikeyrequired string Your API key
blogIDoptional integer Specific blog ID (omit to list all)
pageoptional integer Page number (default: 1)
limitoptional integer Results per page (default: 20)

Response Fields

FieldTypeDescription
vendorID string Vendor identifier (author)
blogID string Unique blog post identifier
vendor string Vendor name (author)
title string Blog post title
body string Full blog post content
deliveryAreas string Relevant postcodes for the blog
created datetime Publication timestamp