# Data API Endpoints
# Organisation Identifiers
Every organisation has a public ID — a stable, non-sequential identifier in the format org_ followed by 12 alphanumeric characters (e.g. org_V1StGXR8Z5ab).
You can use public IDs anywhere the API accepts an organisation identifier:
GET /v1/organisations/org_V1StGXR8Z5ab
GET /v1/organisations/org_V1StGXR8Z5ab/people
GET /v1/organisations?organisation_ids=org_V1StGXR8Z5ab,org_X2YtHWR9Z6cd
Numeric IDs and slugs continue to work. We recommend storing the public_id as your primary reference to Fundraiso organisations.
# Search Organisations
Discover organisations via full-text search with filters and pagination. For fetching known organisations by ID, use List Organisations instead.
POST /v1/search
Parameters:
| Parameter | Type | Description |
|---|---|---|
query | string | Full-text search (optional) |
top_level_category | string | Filter by category (e.g. charity, foundation) |
domicil_country | string | Filter by country of domicile (ISO 3166-1 alpha-2 code, e.g. CH) |
created_since | datetime | Only organisations created after this date |
updated_since | datetime | Only organisations updated after this date |
sort | string | Sort by updated_at, funding_date, or id |
page | integer | Page number (default: 1) |
per_page | integer | Results per page (max 100, default: 20) |
Example — find recently created foundations:
POST /v1/search
{
"created_since": "2026-01-01T00:00:00Z",
"top_level_category": "charity",
"sort": "updated_at",
"per_page": 50
}
Response:
{
"data": [
{
"id": 123,
"public_id": "org_V1StGXR8Z5ab",
"name": "Example Foundation",
"slug": "example-foundation",
"type": "foundation",
"language": "de",
"city": "Zurich",
"country": "CH",
"excerpt": "Supporting education and research...",
"_links": { "self": "/v1/organisations/org_V1StGXR8Z5ab" }
}
],
"meta": {
"total": 42,
"current_page": 1,
"per_page": 50,
"last_page": 1
}
}
# Match Organisations
Batch-match your existing identifiers to Fundraiso organisation IDs. Useful for CRM reconciliation.
POST /v1/match
Parameters:
| Parameter | Type | Description |
|---|---|---|
type | string | Required. One of: id, name, slug, register_number |
values | string[] | Required. Array of values to match (max 100) |
# Match types
| Type | Lookup | Statuses | Best for |
|---|---|---|---|
id | Direct DB lookup | found, not_found, unpublished | Validating old ID lists, detecting removed orgs |
slug | Direct DB lookup | found, not_found | Matching by URL slug |
name | Elasticsearch fuzzy search | found, not_found | Fuzzy name matching, returns up to 3 candidates |
register_number | Elasticsearch term search | found, not_found | CHE/UID numbers (e.g. CHE-123.456.789) |
Example — match by register number:
POST /v1/match
{
"type": "register_number",
"values": ["CHE-123.456.789", "CHE-987.654.321"]
}
Response:
{
"data": [
{
"input": "CHE-123.456.789",
"status": "found",
"organisation": {
"id": 123,
"public_id": "org_V1StGXR8Z5ab",
"name": "Example Foundation",
"slug": "example-foundation",
"type": "foundation",
"language": "de",
"city": "Zurich",
"country": "CH"
}
},
{
"input": "CHE-987.654.321",
"status": "not_found",
"organisation": null
}
],
"meta": {
"total_input": 2,
"total_found": 1,
"total_not_found": 1
}
}
# Get Organisation Details
Fetch full details for a single organisation by public ID, numeric ID, or slug.
GET /v1/organisations/org_V1StGXR8Z5ab?extend=contact,address,about,timestamps
Available sections (comma-separated in extend):
| Section | Package | Fields |
|---|---|---|
contact | core-org | website, email, phone |
address | core-org | street, postal_code, city, country, etc. |
about | core-org | description, founding_date |
timestamps | core-org | created_at, updated_at, published_at |
register | advanced-org | status, legal_form, source |
financials | financials | asset_size_class, asset_size_1k_valuation |
counts | varies | people, activities, fundings counts |
Use extend=all to get all sections your package allows.
# List Organisations (bulk)
Fetch multiple organisations in one request. Combine with updated_since for incremental sync — see the CRM Integration Guide for a complete example.
GET /v1/organisations?organisation_ids=org_V1StGXR8Z5ab,org_X2YtHWR9Z6cd \
&extend=address,contact
| Parameter | Type | Description |
|---|---|---|
organisation_ids | string | Comma-separated public IDs or numeric IDs (max 100). Can mix both formats. |
list_id | integer | Alternative: get orgs from a Fundraiso list |
updated_since | datetime | Only return organisations updated after this timestamp. Useful for incremental sync. |
extend | string | Sections to include (see above) |
page | integer | Page number |
per_page | integer | Results per page (max 100) |
# Lists
GET /v1/lists # Your lists
GET /v1/lists/{id} # List metadata with org IDs
GET /v1/lists/{id}/items # List items with full org data (requires core-org)
# Sub-resources
GET /v1/organisations/org_V1StGXR8Z5ab/people # Board members (requires advanced-org)
GET /v1/organisations/org_V1StGXR8Z5ab/fundings # Funding records (requires financials)
GET /v1/organisations/org_V1StGXR8Z5ab/activities # Activities (requires advanced-org)
All sub-resource endpoints accept a public ID, numeric ID, or slug as the organisation identifier. All support page and per_page pagination.