Salesforce Custom Object Mappings — iRaiser Connect

This document describes the mapping between iRaiser (Kentaa) custom Salesforce objects and the iRaiser public API. It is intended for developers building a Salesforce application that replicates the data synchronization currently handled by iRaiser Connect.

API Documentation: https://developer.iraiser.eu/cfp-api/#introduction API Base URL: https://api.kentaa.nl/v1


Table of Contents

  1. Object Hierarchy
  2. General Conventions
  3. Kentaa_Segment__c
  4. Kentaa_Project__c
  5. Kentaa_Company__c
  6. Kentaa_Team__c
  7. Kentaa_Action__c
  8. Kentaa_ActionQuestion__c
  9. Kentaa_Donation__c
  10. Kentaa_NewsletterSubscription__c

1. Object Hierarchy

The iRaiser platform has a hierarchical structure. Parent objects must exist in Salesforce before child objects can be linked.

Site
 └── Segment
      └── Project
           ├── Company
           │    └── Action
           │         ├── ActionQuestion
           │         └── Donation
           └── Team
                └── Action
                     ├── ActionQuestion
                     └── Donation

Lookup cascade rule: When inserting a child object, the direct parent lookup is set, and any higher-level lookups (e.g. Project, Segment) are copied from the parent record already in Salesforce — not resolved from the API. This means parent objects must be synced first.

Donations can be attached to any level: Action, Team, Company, Project, or Segment.

2. General Conventions

Upsert strategy

All objects use upsert on the KentaaId__c external ID field. This ensures idempotent inserts and updates.

KentaaId__c (Object Key)

Each object has a unique KentaaId__c value derived from its API id. The exact format of this key is an implementation detail (e.g. prefixed with the object type). Your implementation should choose a consistent scheme to generate unique external IDs per object type.

Name field

The standard Salesforce Name field is populated as described per object and truncated to 80 characters.

HTML stripping

The description fields from the API may contain HTML. These are stored as plain text in Salesforce (HTML tags stripped).

Date/time handling

Text truncation

Text values are truncated to the field’s defined length before upserting.

Blank values

Fields with blank/nil values are skipped (not sent to Salesforce), except for boolean fields which are always sent.

Where consent fields are mapped, the logic is: - Filter the consents array for consent_status = "granted". - Then find the first consent matching the relevant consent_type (e.g. "terms_conditions" for actions/donations, "newsletter_subscription" for newsletter subscriptions).

Donation filtering

Only donations with payment_status in ["paid", "refunded", "chargedback"] and a non-zero total_amount are synced.


3. Kentaa_Segment__c

Property Value
Salesforce Object Kentaa_Segment__c
Label Kentaa Segment
External ID KentaaId__c
Name field source segment.name
API Endpoint GET /v1/segments/:id
API Docs https://developer.iraiser.eu/cfp-api/#segments

Field Mapping

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID segment.id Unique platform reference.
CreatedAt__c DateTime segment.created_at
UpdatedAt__c DateTime segment.updated_at
Title__c Text(255) segment.title
Description__c LongTextArea(32768) segment.description HTML stripped.
TargetAmount__c Number(18,0) segment.target_amount Target amount in whole units.
EndDate__c DateTime segment.end_date Countdown date (optional).
URL__c LongTextArea(32768) segment.url Page URL.
ExternalReference__c Text(255) segment.external_reference Custom reference (optional).
TotalAmount__c Number(10,2) segment.total_amount Total donated amount.
TotalDonations__c Number(18,0) segment.total_donations Total number of donations.

Relationships

None — Segment is the top-level object.


4. Kentaa_Project__c

Property Value
Salesforce Object Kentaa_Project__c
Label Kentaa Project
External ID KentaaId__c
Name field source project.title
API Endpoint GET /v1/projects/:id
API Docs https://developer.iraiser.eu/cfp-api/#projects

Field Mapping

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID project.id Unique platform reference.
CreatedAt__c DateTime project.created_at
UpdatedAt__c DateTime project.updated_at
Title__c Text(255) project.title
Description__c LongTextArea(32768) project.description HTML stripped.
TargetAmount__c Number(18,0) project.target_amount Target amount in whole units.
EndDate__c DateTime project.end_date Countdown date (optional).
URL__c LongTextArea(32768) project.url Page URL.
ExternalReference__c Text(255) project.external_reference Custom reference (optional).
TotalAmount__c Number(10,2) project.total_amount Total donated amount.
TotalDonations__c Number(18,0) project.total_donations Total number of donations.
Visible__c Checkbox project.visible Is the project visible? Default: true.
Closed__c Checkbox project.closed Is the project closed?

Relationships

Salesforce Field Type References Resolution
Kentaa_Segment__c Lookup Kentaa_Segment__c Look up the parent Segment record in Salesforce by its KentaaId__c. The parent is determined by project.segment_id from the API.

5. Kentaa_Company__c

Property Value
Salesforce Object Kentaa_Company__c
Label Kentaa Company
External ID KentaaId__c
Name field source company.name
API Endpoint GET /v1/companies/:id
API Docs https://developer.iraiser.eu/cfp-api/#companies

Field Mapping

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID company.id Unique platform reference.
CreatedAt__c DateTime company.created_at
UpdatedAt__c DateTime company.updated_at
Title__c Text(255) company.title
Description__c LongTextArea(32768) company.description HTML stripped.
TargetAmount__c Number(18,0) company.target_amount Target amount in whole units.
EndDate__c DateTime company.end_date Countdown date (optional).
URL__c LongTextArea(32768) company.url Page URL.
ExternalReference__c Text(255) company.external_reference Custom reference (optional).
TotalAmount__c Number(10,2) company.total_amount Total donated amount.
TotalDonations__c Number(18,0) company.total_donations Total number of donations.
Visible__c Checkbox company.visible Is the company visible?
Closed__c Checkbox company.closed Is the company closed?
ActivityName__c Text(255) company.activity.name Activity name (optional).
CompanyPackageTitle__c Text(255) company.package.title Company package title (optional). In the API response this is the package object.

Relationships

Salesforce Field Type References Resolution
Kentaa_Project__c Lookup Kentaa_Project__c Set when parent is a Project.
Kentaa_Segment__c Lookup Kentaa_Segment__c Set when parent is a Segment, or inherited from the Project record.

Parent cascade logic:

Parent type Direct lookup Inherited from parent record
Project Kentaa_Project__c Kentaa_Segment__c
Segment Kentaa_Segment__c

6. Kentaa_Team__c

Property Value
Salesforce Object Kentaa_Team__c
Label Kentaa Team
External ID KentaaId__c
Name field source team.name
API Endpoint GET /v1/teams/:id
API Docs https://developer.iraiser.eu/cfp-api/#teams

Field Mapping

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID team.id Unique platform reference.
CreatedAt__c DateTime team.created_at
UpdatedAt__c DateTime team.updated_at
Title__c Text(255) team.title
Description__c LongTextArea(32768) team.description HTML stripped.
TargetAmount__c Number(18,0) team.target_amount Target amount in whole units.
EndDate__c DateTime team.end_date Countdown date (optional).
URL__c LongTextArea(32768) team.url Page URL.
ExternalReference__c Text(255) team.external_reference Custom reference (optional).
TotalAmount__c Number(10,2) team.total_amount Total donated amount.
TotalDonations__c Number(18,0) team.total_donations Total number of donations.
Visible__c Checkbox team.visible Is the team visible?
Closed__c Checkbox team.closed Is the team closed?

Relationships

Salesforce Field Type References Resolution
Kentaa_Project__c Lookup Kentaa_Project__c Set when parent is a Project.
Kentaa_Segment__c Lookup Kentaa_Segment__c Set when parent is a Segment, or inherited from the Project record.

Parent cascade logic:

Parent type Direct lookup Inherited from parent record
Project Kentaa_Project__c Kentaa_Segment__c
Segment Kentaa_Segment__c

7. Kentaa_Action__c

Property Value
Salesforce Object Kentaa_Action__c
Label Kentaa Action
External ID KentaaId__c
Name field source action.first_name + action.infix + action.last_name (concatenated)
API Endpoint GET /v1/actions/:id
API Docs https://developer.iraiser.eu/cfp-api/#actions

An action represents a personal fundraiser page created by a participant, linked to a project, segment, team, or company.

Field Mapping — Identification & Timestamps

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID action.id Unique platform reference.
CreatedAt__c DateTime action.created_at
UpdatedAt__c DateTime action.updated_at

Field Mapping — Fundraiser Personal Details

Personal details come partly from the action object itself (first_name, infix, last_name) and partly from the owner sub-object. The owner is a subset of the User object.

Salesforce Field Type API Source Notes
FirstName__c Text(255) action.first_name
Infix__c Text(255) action.infix Name infix (optional).
LastName__c Text(255) action.last_name
Email__c Text(255) action.owner.email From the owner object.
Address__c Text(255) User: address Address line 1 (optional).
Address2__c Text(255) User: address2 Address line 2 (optional).
Street__c Text(255) User: street Street name; available when country = NL (optional).
HouseNumber__c Text(255) User: house_number Available when country = NL (optional).
HouseNumberAddition__c Text(255) User: house_number_addition Available when country = NL (optional).
Zipcode__c Text(255) User: zipcode Postal code (optional).
City__c Text(255) User: city City (optional).
Country__c Text(255) User: country ISO 3166-1 alpha-2 code (optional).
Phone__c Text(255) User: phone Phone number (optional).
Gender__c Text(255) User: gender male, female, or neutral (optional).
Birthday__c Date User: birthday ISO 8601 date (optional).
Locale__c Text(2) User: locale Language code, e.g. nl, en (optional).

Important: The action owner object in the API response only contains id, first_name, infix, last_name, email, and avatar_url. The extended fields (address, phone, gender, birthday, etc.) require fetching the full User object via GET /v1/users/:owner_id.

Field Mapping — Action Details

Salesforce Field Type API Source Notes
Title__c Text(255) action.title
Description__c LongTextArea(32768) action.description HTML stripped.
FundraiserPage__c Checkbox action.fundraiser_page Has a fundraiser page?
URL__c LongTextArea(32768) action.url Only populated when fundraiser_page = true.
TargetAmount__c Number(18,0) action.target_amount Target amount in whole units.
EndDate__c DateTime action.end_date Countdown date (optional).
ExternalReference__c Text(255) action.external_reference Custom reference (optional).
ActivityName__c Text(255) action.activity.name Activity name (optional).
Visible__c Checkbox action.visible Is the action visible?
Closed__c Checkbox action.closed Is the action closed?

Field Mapping — Statistics

Salesforce Field Type API Source Notes
TotalAmount__c Number(10,2) action.total_amount Total donated amount.
TotalDonations__c Number(18,0) action.total_donations Total number of donations.

Field Mapping — Team & Participation

Salesforce Field Type API Source Notes
TeamCaptain__c Checkbox action.team_captain Is this fundraiser the team captain?
PreviousParticipations__c Number(18,0) action.previous_participations Number of prior participations (retention).
Salesforce Field Type API Source Notes
ConsentURL__c LongTextArea(32768) consents[].url URL where consent was accepted.
ConsentText__c LongTextArea(32768) consents[].consent_text Accepted consent text.
ConsentTermsConditions__c Text(255) consents[].terms_conditions_version Terms & conditions version.

Selection logic: Filter consents array for consent_status = "granted" AND consent_type = "terms_conditions". Use the first match.

Relationships

Salesforce Field Type References
Kentaa_Team__c Lookup Kentaa_Team__c
Kentaa_Company__c Lookup Kentaa_Company__c
Kentaa_Project__c Lookup Kentaa_Project__c
Kentaa_Segment__c Lookup Kentaa_Segment__c

Parent cascade logic: The action’s parent determines which lookups are set. The parent can be a Team, Company, Project, or Segment (derived from team_id, company_id, project_id, segment_id on the API response). Higher-level lookups are inherited from the parent record in Salesforce.

Parent type Direct lookup Inherited from parent record
Team Kentaa_Team__c Kentaa_Project__c, Kentaa_Segment__c
Company Kentaa_Company__c Kentaa_Project__c, Kentaa_Segment__c
Project Kentaa_Project__c Kentaa_Segment__c
Segment Kentaa_Segment__c

Note: Parent objects must already exist in Salesforce before an action can be linked. The lookup is done by KentaaId__c on the parent record.


8. Kentaa_ActionQuestion__c

Property Value
Salesforce Object Kentaa_ActionQuestion__c
Label Kentaa Action Question
External ID KentaaId__c
Name field source question.question (the question text)
API Source action.questions[] array on the Action object
API Docs https://developer.iraiser.eu/cfp-api/#actions

Action questions are sign-up form questions answered by the fundraiser when creating an action. They are available as the questions array on the action API response.

Filtering: Questions with an empty/blank answer are skipped and not synced to Salesforce.

Field Mapping

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID Composite: action.id + question.id Composite key, e.g. ActionQuestion_{action_id}.{question_id}.
QuestionKentaaId__c Text(50), External ID question.id Prefixed, e.g. Question_{question_id}.
CreatedAt__c DateTime question.created_at
UpdatedAt__c DateTime question.updated_at
Question__c LongTextArea(32768) question.question The question text.
Answer__c LongTextArea(32768) question.answer The fundraiser’s answer.

Relationships

Salesforce Field Type References Resolution
Kentaa_Action__c Lookup Kentaa_Action__c Look up the action record in Salesforce by its KentaaId__c.

9. Kentaa_Donation__c

Property Value
Salesforce Object Kentaa_Donation__c
Label Kentaa Donation
External ID KentaaId__c
Name field source donation.company if present, otherwise donation.first_name + donation.infix + donation.last_name
API Endpoint GET /v1/donations/:id
API Docs https://developer.iraiser.eu/cfp-api/#donations

Filtering: Only donations with payment_status in ["paid", "refunded", "chargedback"] and a non-zero total_amount are synced.

Field Mapping — Identification & Timestamps

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID donation.id Unique platform reference.
CreatedAt__c DateTime donation.created_at
UpdatedAt__c DateTime donation.updated_at

Field Mapping — Donor Details

Salesforce Field Type API Source Notes
FirstName__c Text(255) donation.first_name Optional.
Infix__c Text(255) donation.infix Optional.
LastName__c Text(255) donation.last_name Optional.
Company__c Text(255) donation.company Company name (optional).
Email__c Text(255) donation.email Optional.
Phone__c Text(255) donation.phone Optional.
Gender__c Text(255) donation.gender male, female, or neutral (optional).
Birthday__c DateTime donation.birthday ISO 8601 (optional). Note: stored as DateTime, not Date.
Locale__c Text(2) donation.locale Language code (optional).

Field Mapping — Donor Address

Address fields come from the address sub-object on the donation. Only populated if donation.address is present.

Salesforce Field Type API Source Notes
Address__c Text(255) donation.address.address Address line 1.
Address2__c Text(255) donation.address.address2 Address line 2 (optional).
Street__c Text(255) donation.address.street NL only (optional).
HouseNumber__c Text(255) donation.address.house_number NL only (optional).
HouseNumberAddition__c Text(255) donation.address.house_number_addition NL only (optional).
Zipcode__c Text(255) donation.address.zipcode
City__c Text(255) donation.address.city
Country__c Text(255) donation.address.country ISO 3166-1 alpha-2.

Field Mapping — Payment Details

Salesforce Field Type API Source Notes
Currency__c Text(3) donation.currency ISO 4217 code (e.g. EUR).
Amount__c Number(10,2) donation.donation_amount The donated amount (excluding fees).
TransactionCosts__c Number(10,2) donation.transaction_costs Extra contributed transaction costs (optional).
TotalAmount__c Number(10,2) donation.total_amount Total amount including fees and registration fee.
ReceivableAmount__c Number(10,2) donation.receivable_amount Amount after processing/platform fees.
InvoiceNumber__c Text(255) donation.invoicenumber Invoice reference number.
PaymentDate__c DateTime donation.payment_status_at Timestamp of the last payment status change.
PaymentMethod__c Text(255) donation.payment_method Payment method used.
PaymentStatus__c Text(255) donation.payment_status paid, refunded, chargedback, etc.
TransactionId__c Text(255) donation.transaction_id PSP transaction ID.
AccountIBAN__c Text(255) donation.account_iban Donor IBAN (optional).
AccountBIC__c Text(255) donation.account_bic Donor BIC (optional).
AccountName__c Text(255) donation.account_name Account holder name (optional).

Field Mapping — Additional Fields

Salesforce Field Type API Source Notes
Message__c LongTextArea(32768) donation.message Personal message from the donor (optional).
Newsletter__c Checkbox donation.newsletter Newsletter opt-in.
Countable__c Checkbox donation.countable Included in parent-level counters. Default: true.
RegistrationFee__c Checkbox donation.registration_fee Is this a registration fee payment?
RegistrationFeeAmount__c Number(10,2) donation.registration_fee_amount Registration fee amount (optional).
StartDonation__c Checkbox donation.start_donation Used as a “start donation” in the sign-up form.
ExternalReference__c Text(255) Entity’s external_reference The external_reference of the entity (target) the donation was made to.
Salesforce Field Type API Source Notes
ConsentURL__c LongTextArea(32768) consents[].url URL where consent was accepted.
ConsentText__c LongTextArea(32768) consents[].consent_text Accepted consent text.
ConsentTermsConditions__c Text(255) consents[].terms_conditions_version Terms & conditions version.

Selection logic: Filter consents for consent_status = "granted" AND consent_type = "terms_conditions". Use the first match.

Relationships

Salesforce Field Type References Notes
TargetKentaaId__c Text(50), External ID Stores the KentaaId__c of the entity the donation was made to (the donation target).
Kentaa_Action__c Lookup Kentaa_Action__c
Kentaa_Team__c Lookup Kentaa_Team__c
Kentaa_Company__c Lookup Kentaa_Company__c
Kentaa_Project__c Lookup Kentaa_Project__c
Kentaa_Segment__c Lookup Kentaa_Segment__c

Target cascade logic: The donation’s target entity determines which lookups are set. The target is determined by the most specific ID present on the donation (action_id > team_id > company_id > project_id > segment_id). Higher-level lookups are inherited from the target record in Salesforce.

Target type Direct lookup Inherited from target record
Action Kentaa_Action__c Kentaa_Team__c, Kentaa_Project__c, Kentaa_Segment__c
Team Kentaa_Team__c Kentaa_Project__c, Kentaa_Segment__c
Company Kentaa_Company__c Kentaa_Project__c, Kentaa_Segment__c
Project Kentaa_Project__c Kentaa_Segment__c
Segment Kentaa_Segment__c

10. Kentaa_NewsletterSubscription__c

Property Value
Salesforce Object Kentaa_NewsletterSubscription__c
Label Kentaa Newsletter Subscription
External ID KentaaId__c
Name field source newsletter_subscription.email
API Endpoint GET /v1/newsletter-subscriptions
API Docs https://developer.iraiser.eu/cfp-api/#newsletter-subscriptions

Field Mapping

Salesforce Field Type API Source Notes
KentaaId__c Text(50), Unique, External ID newsletter_subscription.id Unique platform reference.
CreatedAt__c DateTime newsletter_subscription.created_at
UpdatedAt__c DateTime newsletter_subscription.updated_at
FirstName__c Text(255) newsletter_subscription.first_name
Infix__c Text(255) newsletter_subscription.infix Optional.
LastName__c Text(255) newsletter_subscription.last_name
Email__c Text(255) newsletter_subscription.email
Locale__c Text(2) newsletter_subscription.locale Language code.
ExternalReference__c Text(255) Entity’s external_reference The external_reference of the entity this subscription is associated with.
Salesforce Field Type API Source Notes
ConsentURL__c LongTextArea(32768) consents[].url URL where consent was accepted.
ConsentText__c LongTextArea(32768) consents[].consent_text Accepted consent text.
ConsentTermsConditions__c Text(255) consents[].terms_conditions_version Terms & conditions version.

Selection logic: For newsletter subscriptions, filter consents for consent_status = "granted" AND consent_type = "newsletter_subscription". Use the first match.

Relationships

Salesforce Field Type References Resolution
Kentaa_Project__c Lookup Kentaa_Project__c Set when the entity is a Project.
Kentaa_Segment__c Lookup Kentaa_Segment__c Set when the entity is a Segment, or inherited from the Project record.

Entity resolution: A newsletter subscription has an entity with entity_type and entity_id. The entity can be a Project or Segment. Look up the corresponding record in Salesforce by KentaaId__c.

Entity type Direct lookup Inherited from entity record
Project Kentaa_Project__c Kentaa_Segment__c
Segment Kentaa_Segment__c