Crimson and Julep by CMDI are a CRM used by political organizations and nonprofits. Anedot's integration with CMDI sends data collected from Action Pages to their systems.
Connect Anedot to Crimson or Julep
To connect Anedot to Crimson or Julep, follow the steps below:
Before connecting Anedot to Crimson or Julep, be sure to create a donation page for the fundraising account. Skipping this step may cause the Anedot connection to Crimson to fail.
Once that has been completed, access the Settings>Integrations>Directory tab within your fundraising account.
Click the blue + New Connection button in the upper right corner of the Directory.
Select Crimson or Julep from the Directory list.
Select the Action Pages you would like synced with Crimson or Julep. The default is All Pages.
To exclude pages, enter a comma-separated list of the Action Page IDs
Optionally, you can scope the integration to only send team-specific data to Crimson.
Apply your CMDI API Token.
Click the blue Save button to complete!
Once the integration has been connected successfully, the CMDI Data Entry Page will automatically be created.
Data Relays
Anedot only relays data from Donation Pages (balance impacting transactions). Lead Page data cannot be relayed at this time.
The following Custom Fields are supported:
batchno
batchdate
pid
campgncode
chapcode
comment
refno
source_code
trackno
These are primarily for the data entry page. All can be passed as URL Parameters, some may be set on the page as well. Specifically batchno
, batchdate
, source_code
, & pid
are used to pre-populate fields on the form.
If
PID
is included, the page makes a call to an internal crimson/julep endpoint with the PID, which in turn hits the Crimson/Julep People API to get person data to prefill the form.All but
source_code
are included incustom_field_responses
on integration relays.Source_code
is relayed as usual (top-level property),batchdate
corresponds to the donation date.
Field Mapping
Donation Relays
The Anedot Fields match the Submission's Raw Data (unless specified otherwise in parenthesis), and the Crimson Fields match the Request Body relay.
Anedot Field | Crimson/Julep Field |
"donation_created" | event |
created_at (in UTC) | date |
"firstName lastName" | name |
phone | phone |
donations {origin} | origin |
prefix | prefix |
(Donation) status | status |
suffix | suffix |
paymentMethod {type} | payment |
(Donation) id | donation {id} |
anedotFeeAmount (net amt in Donations -> Entries) | donation {fees {anedot_fees {amount} }} |
vendorFeeAmount (net amt in Donations -> Entries) | donation {fees {vendor_fees {amount} }} |
*billing agreement {name} or account {displayName} | donation {fees {vendor_fees {account} }} |
"Donation from" firstName lastName | donation {fees {vendor_fees {description}}} |
actionPagesFund {id} | donation {fund {id} } |
actionPagesFund {name} | donation {fund {name} } |
actionPagesFund {identifier} | donation {fund {identifier} } |
Product Name (Product) | donation {product {name} } |
Internal SKU (Product) | donation {product {identifier} } |
paymentMethod {cardType} | donation {card_type} |
paymentMethod {lastDigits} | donation {card_last_digits} |
donation_project (hidden custom field) otherwise blank | donation {donation_project} |
"paymentMethod {cardMonth} / paymentMethod {cardYear}" | donation {credit_card_expiration} |
referrer | referrer |
(Commitment) frequency | frequency |
lastName | last_name |
"true" or "false" | recurring |
firstName | first_name |
netAmount (x100) | net_amount |
occupation | occupation |
updatedAt (right above utmCodes in Submission Raw Data) | updated_at |
account {id} | account_uid |
middleName | middle_name |
source_code | source_code |
account {name} | account_name |
address {city} | address_city |
donations {checkNumber} | check_number |
netAmount (under Donation - Entries) | event_amount |
employerName | employer_name |
(Action Page) id | action_page_id |
address {line1} | address_line_1 |
address {line2} | address_line_2 |
address {region} | address_region |
(Commitment) id | commitment_uid |
created_at (in UTC) | processed_date |
address {country} | address_country |
actionPage {name} | action_page_name |
referrer_to_form | |
donations {amount} (x100) | amount_in_dollars |
address {postalCode} | address_postal_code |
Transactions Side-drawer Payment Method | payment_description |
customFieldResponses {multiple fields} | customfield_responses {_multiple fields} |
(Commitment) schedule_until | commitment_recurring_until |
Tip: The fund name in the relay is the Billing Agreement name. If the Billing Agreement name is left blank, the Anedot Account Name will be displayed.
Example Payloads
Request Headers
{
"User-Agent": "Anedot-Hookshot/ae49a5d",
"X-Request-Id": "3f99e54b-03d5-44f2-8062-c2561fff4af1",
"X-Integration-Id": "97a64ea7-ee1a-4389-8db6-5e35e7106421",
"X-Integration-Event": "donation_completed",
"X-Request-Signature": "f9c15a4bfda0f5662b0281bc3059885ed9c69ced91f55229d3c50fb39c1b64b7"
}
Request Body
{
"event": "donation_completed",
"payload": {
"date": "2023-01-05 16:58:04 UTC",
"name": "Anna Dote",
"email": "[email protected]",
"phone": "2252501301",
"origin": "hosted",
"prefix": "",
"status": "completed",
"suffix": "",
"payment": "credit_card",
"donation": {
"id": "d3fc8b4dd68300ed3bb4e",
"fees": {
"anedot_fees": {
"amount": "1.22"
},
"vendor_fees": [{
"amount": "1.25",
"account": "Vendor Account Name",
"description": "Donation from Anna Dote"
}]
},
"fund": {
"id": "ec082bf5-b1ed-48e5-b2ba-1c322c308b75",
"name": "General Fund",
"identifier": "141252"
},
"products": [{
"name": "Sticker",
"internal_identifier": "001"
}],
"card_type": "visa",
"card_last_digits": "4242",
"donation_project": "",
"credit_card_expiration": "02/2023"
},
"referrer": "https://anedot-sandbox.com/accounts/ab4ca5ac57b628c89d080/transactions/new",
"frequency": "once",
"last_name": "Dote",
"recurring": "false",
"first_name": "Anna",
"net_amount": "21.78",
"occupation": "",
"updated_at": "2023-01-05 16:58:04 UTC",
"account_uid": "ab4ca5ac57b628c89d080",
"middle_name": "",
"source_code": "",
"account_name": "Anedot",
"address_city": "New Orleans",
"check_number": "",
"event_amount": "23.00",
"employer_name": "",
"action_page_id": "fd6f6939-57a2-458f-a238-603624cc98be",
"address_line_1": "123 Anedot Way",
"address_line_2": "",
"address_region": "LA",
"commitment_uid": "",
"processed_date": "2023-01-05 16:58:04 UTC",
"address_country": "US",
"action_page_name": "Donation Page 1",
"referrer_to_form": "",
"amount_in_dollars": "23.0",
"address_postal_code": "99999",
"payment_description": "Visa •••• 4242",
"custom_field_responses": {},
"commitment_recurring_until": ""
}
}
Request Body (Success)
"request catcher <h1>request catcher</h1> No requests have been received yet :( <span class=\"code\"> curl -X POST -d 'Hello World!' https://<span>requestcatcher.com</span>/test </span> <a href=\"https://m.do.co/c/fd00053f4fc6\ " target=\"_blank\">Hosted on DigitalOcean. Get a $200 credit and support Request Catcher.</a> !function(e,a,t,n,g,c,o){e.GoogleAnalyticsObject=g,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,c=a.createElement(t),o=a.getElementsByTagName(t)[0],c.async=1,c.src=\"//www.google-analytics.com/analytics.js\",o.parentNode.insertBefore(c,o)} .(window,document,\"script\",0\"ga\"),ga(\"create\",\"UA-55875288-1\",\"auto\"),ga(\"send\",\"pageview\")); "