Spaza Shop Registry API
Search registered spaza shops, verify registrations, check health inspections, and trading permits. Covers all nine South African provinces with data sourced from DALRRD, municipal registries, and DTI.
Base URL
Authentication
Include your Spaza API key in the Authorization header.
curl -H "Authorization: Bearer db_spaza_live_YOUR_KEY" \
https://api.crimate.net/v1/spaza/shopsEndpoints
/v1/spaza/shopsList registered spaza shops with optional filters by province, municipality, and status
Parameters: province, municipality, status (registered/pending/suspended), category, page, per_page
Example
GET /v1/spaza/shops?province=gauteng&status=registered/v1/spaza/shops/{registrationNumber}Get detailed information for a specific shop by its registration number
Parameters: registrationNumber (required, path)
Example
GET /v1/spaza/shops/SPZ-GP-2025-00142/v1/spaza/shops/searchSearch shops by owner name, trading name, or address
Parameters: q (required), province, municipality, page, per_page
Example
GET /v1/spaza/shops/search?q=sunshine+traders&province=western_cape/v1/spaza/shops/nearbyFind registered shops near a geographic coordinate within a given radius
Parameters: lat (required), lon (required), radius_km (default 2), status
Example
GET /v1/spaza/shops/nearby?lat=-26.2041&lon=28.0473&radius_km=3/v1/spaza/inspectionsList health and safety inspections for shops
Parameters: registration_number, province, result (pass/fail/pending), from (YYYY-MM-DD), to (YYYY-MM-DD), page, per_page
Example
GET /v1/spaza/inspections?registration_number=SPZ-GP-2025-00142/v1/spaza/permitsList trading permits and licences for registered shops
Parameters: registration_number, province, permit_type, status (valid/expired/revoked), page, per_page
Example
GET /v1/spaza/permits?province=kwazulu_natal&status=valid/v1/spaza/statsDataset statistics (total shops, provinces, inspections, latest update)
Parameters: None
Example
GET /v1/spaza/statsResponse Examples
Shop detail response:
{
"shop": {
"registration_number": "SPZ-GP-2025-00142",
"trading_name": "Sunshine Traders",
"owner_name": "Thabo Mokoena",
"province": "gauteng",
"municipality": "City of Johannesburg",
"address": "42 Main Road, Soweto, 1804",
"lat": -26.2679,
"lon": 27.8546,
"status": "registered",
"registration_date": "2025-04-12",
"category": "general_dealer",
"last_inspection": {
"date": "2026-01-20",
"result": "pass",
"inspector": "Environmental Health Unit"
},
"permits": [
{
"permit_type": "trading_licence",
"status": "valid",
"expiry_date": "2027-04-11"
}
]
}
}Try It
Enter your Spaza API key to make a live request. Generate a key in the dashboard.
Try It
Make a live API call from your browser
curl -H "Authorization: Bearer db_spaza_live_YOUR_KEY" \
"https://crimate.net/v1/spaza/stats"Data Sources
DALRRD
Department of Agriculture, Land Reform and Rural Development. Maintains the national spaza shop registration database including food handling compliance records and health certificates.
Municipal Registries
Local municipality business registration systems across all nine provinces. Provides trading licences, zoning approvals, and environmental health inspection records for informal and formal retail outlets.
DTI
Department of Trade, Industry and Competition. Provides business registration records, CIPC entity data, and compliance status for registered traders.
Rate Limits
| Tier | Price | Rate Limit | Daily Quota | Monthly Quota |
|---|---|---|---|---|
| Free | R0/mo | 10 req/min | 100 | 1,000 |
| Starter | R1,999/mo | 60 req/min | 5,000 | 50,000 |
| Pro | R4,999/mo | 300 req/min | Unlimited | 500,000 |
Error Codes
All error responses follow a consistent JSON format:
{
"error": "error_code",
"message": "Human-readable description."
}| Status | Error Code | Description |
|---|---|---|
| 400 | invalid_request | The request body or query parameters are malformed. |
| 401 | unauthorized | Missing or invalid API key. |
| 403 | no_subscription | No active subscription for this API product. |
| 403 | quota_exceeded | Daily or monthly quota exceeded. |
| 404 | not_found | The requested resource does not exist. |
| 429 | rate_limit_exceeded | Too many requests. Check X-RateLimit-Remaining header. |
| 500 | internal_error | An unexpected server error occurred. |