Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Bezal Public Categories API
description: 'Search Bezal''s local business directory, view public business profiles, and send
service requests to businesses.
## Authentication
Pass your API key in the Authorization header (or in X-API-Key):
```
Authorization: Bearer bzl_your_key_here
```
Read endpoints (search, business details, categories, health, this spec) work without a key
and are limited per IP. Write endpoints (requests) require a valid API key.
Get a key at https://bezal.ai/developers/keys.
## What a business record contains
Every business record has the same public shape. Contact details depend on the provider''s
Bezal plan:
- Always: id, name, category, city, state, avg_rating, review_count, tier, quote_request_url
- Pro, Business and Premium plans: phone, website, address, zip, hours, photos, lat, lng
- Business and Premium plans: description
- Free and unclaimed listings: upgrade_note
quote_request_url is the business''s public Bezal profile, where a person can send a request.
## Rate limiting
Each key has a daily request limit, and anonymous callers have a daily limit per IP.
When a limit is exceeded, the API returns 429.'
version: 1.1.0
contact:
name: Bezal API Support
url: https://bezal.ai/developers
servers:
- url: https://bezal.ai/api/v1
description: Production
tags:
- name: Categories
paths:
/categories:
get:
operationId: listCategories
summary: List all categories
description: Returns all business categories sorted alphabetically.
responses:
'200':
description: Category list
content:
application/json:
schema:
type: object
required:
- categories
properties:
categories:
type: array
items:
$ref: '#/components/schemas/Category'
'401':
$ref: '#/components/responses/InvalidKey'
'429':
$ref: '#/components/responses/RateLimited'
'500':
$ref: '#/components/responses/ServerError'
tags:
- Categories
components:
responses:
ServerError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Internal server error
InvalidKey:
description: The API key is missing, malformed or inactive
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitError'
example:
error: Invalid API key
RateLimited:
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimitError'
example:
error: Rate limit exceeded
schemas:
RateLimitError:
type: object
required:
- error
properties:
error:
type: string
tier:
type: string
requests_today:
type: integer
limit:
type: integer
Category:
type: object
required:
- name
- slug
properties:
name:
type: string
slug:
type: string
Error:
type: object
required:
- error
properties:
error:
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: bzl_...
apiKeyHeader:
type: apiKey
in: header
name: X-API-Key