# CRM Integration Guide

This guide walks through a typical integration for a customer who has Swiss foundations with CHE numbers (UIDs) in an existing CMS and wants to:

  1. Map existing entries to Fundraiso organisation IDs
  2. Keep addresses and contact data up to date
  3. Discover newly added organisations

# Phase 1: Initial Mapping

Match your existing CHE/UID numbers to Fundraiso organisation IDs.

Step 1 — Match identifiers

Send your register numbers in batches of up to 100:

POST /v1/match
{
  "type": "register_number",
  "values": ["CHE-123.456.789", "CHE-987.654.321", "CHE-555.666.777"]
}

Each result tells you the status (found or not_found) and the matched organisation with its Fundraiso id and public_id.

TIP

Formats like CHE-123.456.789 and 123456789 are both accepted — the API strips formatting automatically.

Step 2 — Fetch full details

For all matched organisations, fetch the data you need using their public IDs:

GET /v1/organisations?organisation_ids=org_V1StGXR8Z5ab,org_X2YtHWR9Z6cd \
  &extend=contact,address,about,timestamps

Store the Fundraiso public_id (e.g. org_V1StGXR8Z5ab) and the updated_at timestamp in your CMS for future sync.

Permanent IDs

The public_id is the recommended stable identifier for external integrations.

# Phase 2: Continuous Updates

Set up a periodic job (e.g. daily or weekly) to sync changes.

Poll for changes and fetch updated data in one request

Send all your tracked Fundraiso IDs with the timestamp of your last sync:

GET /v1/organisations?organisation_ids=org_V1StGXR8Z5ab,org_X2YtHWR9Z6cd,org_Y3ZuIXS0A7ef \
  &updated_since=2026-02-27T00:00:00Z \
  &extend=address,contact,timestamps \
  &per_page=100

This returns only organisations that changed since your last sync, with full details included. Paginate if there are many updates.

The same works with a list instead of explicit IDs:

GET /v1/organisations?list_id=42 \
  &updated_since=2026-02-27T00:00:00Z \
  &extend=address,contact,timestamps \
  &per_page=100

Update your CMS and save the latest updated_at value from the response as your new sync timestamp.

# Phase 3: Discover New Organisations

Find organisations that have been newly added to Fundraiso.

POST /v1/search
{
  "created_since": "2026-02-01T00:00:00Z",
  "top_level_category": "charity",
  "sort": "updated_at",
  "per_page": 100
}

Combine created_since with filters to narrow results to your area of interest. Paginate through all pages and add relevant organisations to your CMS.

Task Frequency Quota cost
Match identifiers Once (initial setup) 1 per 100 values
Poll for changes Daily or weekly 1 per request + 1 per detail fetch
Discover new orgs Weekly or monthly 1 per page of results

# Other Match Types

If you don't have register numbers, you can also match by:

Your data Match type Notes
Organisation names name Returns up to 3 candidates ranked by relevance
Fundraiso URLs/slugs slug Exact match on current slug
Old Fundraiso IDs id Also detects removed/unpublished organisations
POST /v1/match
{
  "type": "name",
  "values": ["Pro Juventute", "Helvetas"]
}

Name matching returns candidates instead of a single organisation — your system should pick the best match or flag ambiguous results for manual review.