Skip to content
Core API
Esc
navigateopen⌘Jpreview
On this page

Reading data

Select fields, filter and sort results, paginate, and include related resources.

Every readable resource supports both a collection and an individual record request:

GET /api/core/organizations/{organization_id}/{resource}
GET /api/core/organizations/{organization_id}/{resource}/{id}

GET /api/core/organizations/{organization_id}/events/{event_id}/{resource}
GET /api/core/organizations/{organization_id}/events/{event_id}/{resource}/{id}

Selecting response fields

Response fields are selected by the token scope, not by each API call. There is no caller-controlled fields[...] parameter. To receive another field, ask an organization administrator to add it to Readable fields for that resource’s scope.

This matters when troubleshooting apparently incomplete responses: a valid response containing only id is possible when no other read fields are selected.

Filters

Filters are ordinary query parameters and use underscored names:

curl --get \
  --url "https://api.brella.io/api/core/organizations/30/events/319986/leads" \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: YOUR_TOKEN" \
  --data-urlencode "sponsor_id=103705" \
  --data-urlencode "created_from=2026-08-01T00:00:00Z" \
  --data-urlencode "created_to=2026-08-31T23:59:59Z"

Only filters selected in the token scope are applied. Other resource-specific query parameters are ignored. The one exception is a filter declared as required by the resource: comparison_event_ids for organization event benchmarks is always required and applied.

Filter behavior:

  • equality filters match the supplied value;
  • _from filters are inclusive lower bounds (>=);
  • _to filters are inclusive upper bounds (<=);
  • values may be scalars or arrays of scalar values;
  • enum filters reject invalid enum values with 400;
  • nested objects are not valid filter values; and
  • an unknown value handled by a custom filter may produce an empty result rather than an error, as noted in the relevant resource.

For multiple values, use repeated array parameters where supported, or the comma-separated format explicitly documented for benchmark comparison IDs:

?status[]=invited&status[]=joined
?comparison_event_ids=101,102,103

Sorting

Only abuse-reports currently declares named sorts:

?sort=latest_instance
?sort=report_count

Both are descending and use record ID as a stable tie-breaker. An unrecognized sort value leaves the normal ascending-ID order in place.

Pagination

Collection endpoints are paginated in ascending record-ID order unless a declared sort is used.

?page[number]=2&page[size]=50
  • Default page size: 30 [may change prior to release]
  • Maximum page size: 100
  • Values at or below zero use the default page size.

Pagination metadata is returned at the document level:

{
  "meta": {
    "total_count": 245,
    "total_pages": 5,
    "current_page": 2
  }
}

Use a comma-separated include query parameter. The requested names are the underscored association names listed in this reference and must also be enabled in the scope:

?include=registrant,created_by_registrant,custom_fields

Without include, configured relationships are still represented by JSON:API linkage, but the related objects are not placed in the top-level included array. Unknown, unconfigured, and disallowed include names are ignored.

An association can have a different response name. For example, request include=created_by_registrant; the response relationship is created-by-registrant. Each included object contains id plus the association fields selected in the scope.

Nullable relationships are valid. For example, a lead can have created-by-registrant.data: null when it was created without a creator registrant, even if that association and all of its fields are correctly configured.

Last updated on August 21, 2026