# Advertising: API reference

2 endpoints. Base URL `https://princegeorgepulse.ca/api/v1`. Conventions (envelope, paging, fields, formats, limits) are on the [overview](https://princegeorgepulse.ca/developers/). [All endpoints](https://princegeorgepulse.ca/developers/reference/).

## GET /api/v1/ads {#get-ads}

Paid ad campaigns running today, with their placements.

Every paid placement on the site is labelled “Sponsored”. This lists the campaigns live today (UTC date) so anyone can see who is advertising where. Filter with `placement` (for example home-top, feed-inline, category:plumbers).

- Cache: 1 min
- Source: [PG Pulse advertising (paid placements, always labelled on the site)](https://princegeorgepulse.ca/advertise/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)
- Paginated: `limit` (default 50, max 200) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `placement` | query | string | Only campaigns that may run in this placement. Example: `home-top`. |
| `limit` | query | integer | Items per page (default 50, max 500 unless noted). Example: `20`. |
| `offset` | query | integer | Items to skip. Use `links.next` to page. Example: `0`. |

Also accepts `fields` (sparse fieldset) and `format` (`json`, `md`, `csv`).

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/ads"
```

**Example response** (trimmed)

```json
{
  "data": [],
  "meta": {
    "source": "PG Pulse advertising (paid placements, always labelled on the site)",
    "sourceUrl": "https://princegeorgepulse.ca/advertise/",
    "updatedAt": "2026-10-16T10:48:24.318Z",
    "ageSec": 0,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)",
    "day": "2026-10-16",
    "total": 0,
    "count": 0,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/ads",
    "next": null,
    "docs": "/developers/reference/advertising/#get-ads"
  }
}
```

## GET /api/v1/ads/featured-listings {#get-ads-featured-listings}

Directory listings featured (sponsored) today.

Slugs of businesses that pay for a featured listing. They rank first in their categories and carry a “Featured” badge. Details: /api/v1/businesses/{slug}.

- Cache: 5 min
- Source: [PG Pulse advertising (paid placements, always labelled on the site)](https://princegeorgepulse.ca/advertise/)
- Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)
- Paginated: `limit` (default 100, max 500) and `offset`; also `format=csv`

| Parameter | In | Type | Description |
| --- | --- | --- | --- |
| `limit` | query | integer | Items per page (default 50, max 500 unless noted). Example: `20`. |
| `offset` | query | integer | Items to skip. Use `links.next` to page. Example: `0`. |

Also accepts `fields` (sparse fieldset) and `format` (`json`, `md`, `csv`).

**Example request**

```bash
curl "https://princegeorgepulse.ca/api/v1/ads/featured-listings"
```

**Example response** (trimmed)

```json
{
  "data": [],
  "meta": {
    "source": "PG Pulse advertising (paid placements, always labelled on the site)",
    "sourceUrl": "https://princegeorgepulse.ca/advertise/",
    "updatedAt": "2026-10-16T10:48:24.319Z",
    "ageSec": 0,
    "license": "CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)",
    "attribution": "PG Pulse (princegeorgepulse.ca)",
    "total": 0,
    "count": 0,
    "limit": 100,
    "offset": 0
  },
  "links": {
    "self": "/api/v1/ads/featured-listings",
    "next": null,
    "docs": "/developers/reference/advertising/#get-ads-featured-listings"
  }
}
```
