# 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:
- Map existing entries to Fundraiso organisation IDs
- Keep addresses and contact data up to date
- 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.
# Recommended Schedule
| 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.