Barazas
For developers

The Barazas API

Read your own programme, speakers and delegates into your own systems. A key, a secret, and five read-only endpoints.

Getting a key

Keys are generated in your portal by a client admin. Each one is scoped: you choose what it may read when you create it, and that cannot be widened afterwards without creating a new one.

  1. Sign in to your portal and open API keys.
  2. Name the key after what it is for, and tick only the scopes that thing needs.
  3. Copy the key and the secret.

The secret is shown once, at the moment the key is created. It cannot be recovered afterwards, only replaced. Store it where your application reads its configuration from, not in a message to yourself.

Every key expires, and none may last longer than a year (365 days). Plan for rotation: create the replacement, move your application onto it, then revoke the old one. A key that has expired answers with 401 exactly as a revoked one does.

Authentication

HTTP Basic. The key is the username, the secret is the password.

Every request looks like this
curl https://barazas.com/api/v1/client/events \
  -u "bzk_live_xxxxxxxx:YOUR_SECRET"

Some hosts strip the Authorization header before it reaches the application. If yours does, send the same two values as headers instead:

curl https://barazas.com/api/v1/client/events \
  -H "X-Api-Key: bzk_live_xxxxxxxx" \
  -H "X-Api-Secret: YOUR_SECRET"

Send requests from your server, never from a browser. A key in front-end JavaScript is a key published to everyone who opens the page.

Postman collection

Every endpoint below, as a collection you can import into Postman and send in a minute. It is generated from this API itself each time it is downloaded, so it cannot describe an endpoint that no longer exists or name a scope that has changed.

Download the collection

  1. In Postman, choose Import and select the downloaded file.
  2. Open the collection’s Variables tab and fill in apiKey and apiSecret.
  3. Set eventSlug to one of your events, then send Events to check the key works.

The collection ships with the credential fields empty, and that is how it should leave your machine. Fill them in your own Postman environment rather than in the collection, and do not commit a filled-in collection or share it into a workspace: a secret in a collection file is a secret in every copy of it.

Scopes

A key may only read what it was granted. Asking for anything else returns 403 and names the scope that was missing.

Scope Grants
events:read Events: names, dates, venue, counts Default
programme:read Programme: sessions and their speakers Default
speakers:read Speakers: the published line-up Default
attendees:read Delegates: names, organisation, country, status
attendees:pii Delegates’ personal data: email, phone, ID document Personal data

attendees:pii returns email addresses, phone numbers and identity document numbers. Grant it only to a key used by a system that needs them, and never to one whose credentials sit in a website template.

Endpoints

All paths are relative to https://barazas.com/api/v1. Everything is read-only, and only events in your organisation’s current active period are reachable.

GET /client/events events:read

Your events in the current active period, with counts of sessions, speakers and delegates.

GET /client/events/{event} events:read

One event. Accepts either the slug or the numeric id.

GET /client/events/{event}/programme programme:read

Sessions in running order, each with its speakers, plus the list of days and the event’s timezone.

GET /client/events/{event}/speakers speakers:read

The published line-up: name, role, organisation, country, biography and photograph.

GET /client/events/{event}/attendees attendees:read

The guest list, paginated. Personal fields appear only if the key holds attendees:pii.

Query parameters: status, search, per_page, page

GET /client/attendees/{attendee}/files/{field} attendees:pii

One uploaded answer to an extra question, such as an identification document or a passport photograph. Needs attendees:pii.

An example response

GET /client/events/summit-2026/programme
{
  "data": [
    {
      "id": 41,
      "title": "Official Opening Ceremony",
      "type": "ceremony",
      "track": null,
      "starts_at": "2026-10-22T08:30:00+03:00",
      "ends_at": "2026-10-22T10:00:00+03:00",
      "day": "2026-10-22",
      "speakers": [
        { "id": 9, "name": "Dr Amara Kone", "organization": "National Research Agency" }
      ]
    }
  ],
  "meta": { "days": ["2026-10-22", "2026-10-23"], "timezone": "Africa/Nairobi" }
}

Pagination

Only the delegate list paginates. Pass page and per_page; per_page defaults to 50 and is capped at 200.

"meta": {
  "current_page": 1,
  "last_page": 7,
  "per_page": 50,
  "total": 312,
  "personal_data_included": false
}

personal_data_included says whether the response carried personal fields. It is there so an empty email is distinguishable from a withheld one.

Errors

Status What it means
401 No credentials, or the key and secret do not match. The same answer is given for a key that does not exist, one that has been revoked, and a wrong secret.
403 The key is valid but was not granted the scope this endpoint needs.
404 No such event in your current active period. Also returned for an event belonging to another organisation, so that guessing tells you nothing.
429 Too many requests. The limit is 120 a minute per key.

A 403 names what was missing and what the key does hold, so the fix does not require a support conversation:

{
  "message": "This key does not have the attendees:read scope.",
  "required_scope": "attendees:read",
  "granted_scopes": ["programme:read", "speakers:read"]
}

Rate limits

120 requests a minute per key. If you are drawing a programme onto a public page, cache the response rather than calling on every page view: the programme changes a few times a week, not a few times a second.

What the API does not do

Stated plainly, so you do not spend an afternoon looking for it:

  • Nothing writes. There is no way to create or change an event, a session or a delegate. A key that could change an event is a key that could cancel one.
  • Past periods are unreachable. A key only ever sees the active one.
  • Nothing about payments, invoices or your subscription is exposed.

If you need something that is not here, tell us what you are building.