> ## Documentation Index
> Fetch the complete documentation index at: https://docs.northaxiumdata.ca/llms.txt
> Use this file to discover all available pages before exploring further.

# Business Licences

> Active and historical business licence records across Canadian municipalities.

Business licence records cover active and historical licences issued by municipal governments. Use them to identify businesses by category and location, track licence status, and monitor new or expiring licences.

The dataset contains more than 302,000 records from Calgary, Edmonton, Vancouver, Victoria, Burnaby, and Kelowna. It refreshes automatically from official municipal sources.

## List business licences

```
GET /api/v1/licences
```

### Query parameters

<ParamField query="limit" type="integer" default="100">
  Maximum records to return. The upper bound is `500`.
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Number of records to skip for pagination.
</ParamField>

<ParamField query="municipality" type="string">
  One or more comma-separated city slugs: `burnaby`, `calgary`, `edmonton`, `kelowna`, `vancouver`, or `victoria`.
</ParamField>

<ParamField query="q" type="string">
  Partial match across the business name, trade name, address, licence type, and other searchable licence text.
</ParamField>

<ParamField query="licence_type" type="string">
  Partial match on the normalized or source licence type. `category` is accepted as an alias.
</ParamField>

<ParamField query="licence_type_raw" type="string">
  Partial match on the municipality's original licence-type text.
</ParamField>

<ParamField query="status" type="string">
  One of `active`, `expired`, `cancelled`, or `other`.
</ParamField>

<ParamField query="business_name" type="string">
  Partial match on the registered business name. `business` is accepted as an alias.
</ParamField>

<ParamField query="trade_name" type="string">
  Partial match on the business trade name.
</ParamField>

<ParamField query="neighbourhood" type="string">
  Partial match on neighbourhood, ward, or district text where the municipality publishes it.
</ParamField>

<ParamField query="issue_after" type="string">
  Inclusive ISO 8601 licence-issue-date start. `issued_after` is accepted as an alias.
</ParamField>

<ParamField query="issue_before" type="string">
  Inclusive ISO 8601 licence-issue-date end. `issued_before` is accepted as an alias.
</ParamField>

<ParamField query="expiry_after" type="string">
  Inclusive ISO 8601 licence-expiry-date start.
</ParamField>

<ParamField query="expiry_before" type="string">
  Inclusive ISO 8601 licence-expiry-date end.
</ParamField>

<ParamField query="lat" type="number">
  Latitude for proximity search. Provide with `lng` and `radius_km`.
</ParamField>

<ParamField query="lng" type="number">
  Longitude for proximity search. Provide with `lat` and `radius_km`.
</ParamField>

<ParamField query="radius_km" type="number">
  Search radius in kilometres, from `0.1` to `100`.
</ParamField>

<ParamField query="sort_by" type="string" default="expiry_date">
  One of `issue_date`, `issued`, `expiry_date`, `expires`, `updated`, `last_updated`, or `distance`. `distance` requires a complete proximity query.
</ParamField>

<ParamField query="sort_order" type="string" default="desc">
  Either `asc` or `desc`.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.northaxiumdata.ca/api/v1/licences?municipality=calgary&status=active&licence_type=contractor&limit=25" \
    -H "X-API-Key: <your-api-key>"
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api.northaxiumdata.ca/api/v1/licences",
      headers={"X-API-Key": "<your-api-key>"},
      params={
          "municipality": "calgary",
          "status": "active",
          "licence_type": "contractor",
          "limit": 25,
      },
  )
  print(response.json())
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "data": [
      {
        "record_id": "calgary:40659",
        "municipality": "calgary",
        "province": "AB",
        "licence_number_raw": "40659",
        "source_reference": "40659",
        "business_name": "Example Contracting Ltd.",
        "trade_name": null,
        "licence_type_raw": "CONTRACTOR",
        "licence_type": "contractor",
        "business_description": "General contractor",
        "status": "active",
        "address": "123 4 Avenue SW, Calgary, AB",
        "neighbourhood": "Downtown Commercial Core",
        "issue_date": "2025-01-15",
        "expiry_date": "2026-01-14",
        "lat": 51.0491,
        "lng": -114.0713,
        "last_updated": "2026-07-13T06:20:00",
        "distance_km": null
      }
    ],
    "meta": {
      "total": 1,
      "limit": 25,
      "offset": 0,
      "municipality": "calgary",
      "sort_by": "expiry_date",
      "sort_order": "desc",
      "proximity": null
    }
  }
  ```

  ```json 400 theme={null}
  {
    "error": {
      "code": "BAD_REQUEST",
      "message": "status must be one of: active, expired, cancelled, other."
    }
  }
  ```

  ```json 401 theme={null}
  {
    "error": {
      "code": "UNAUTHORIZED",
      "message": "Missing API key. Pass your key in the X-API-Key header."
    }
  }
  ```
</ResponseExample>

### Response fields

| Field                          | Type      | Description                                               |
| ------------------------------ | --------- | --------------------------------------------------------- |
| `record_id`                    | string    | Stable NorthAxium record identifier                       |
| `municipality`                 | string    | City slug                                                 |
| `province`                     | string    | Province abbreviation                                     |
| `licence_number_raw`           | string    | Licence number published by the municipality              |
| `source_reference`             | string    | Source-system record identifier where published           |
| `business_name` / `trade_name` | string    | Registered and trade business names where published       |
| `licence_type_raw`             | string    | Source licence-type text                                  |
| `licence_type`                 | string    | Normalized licence type                                   |
| `business_description`         | string    | Business activity description where published             |
| `status`                       | string    | Normalized licence status                                 |
| `address`                      | string    | Business address where published                          |
| `neighbourhood`                | string    | Neighbourhood, ward, or district where published          |
| `issue_date` / `expiry_date`   | date      | Licence issue and expiry dates where published            |
| `lat` / `lng`                  | number    | Business location coordinates where published             |
| `last_updated`                 | timestamp | NorthAxium record update timestamp                        |
| `distance_km`                  | number    | Distance from the search coordinate for proximity queries |

## Detail and statistics

Retrieve one record by `record_id`:

```
GET /api/v1/licences/{record_id}
```

The detail endpoint also returns `status_raw` and `source_url` when they are published by the municipality.

Get grouped record counts:

```
GET /api/v1/licences/stats?group_by=municipality
```

The `group_by` parameter accepts `municipality`, `province`, `status`, `licence_type`, `neighbourhood`, `issue_year`, or `expiry_year`. The list filters also apply to statistics.

For city-by-city availability, see [Municipal Intelligence Coverage](/permits/coverage).
