# 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.