Skip to main content
All CollectionsIntegrations
Crimson and Julep by CMDI
Crimson and Julep by CMDI
Updated over a week ago

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:

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

  2. Once that has been completed, access the Settings>Integrations>Directory tab within your fundraising account.

  3. Click the blue + New Connection button in the upper right corner of the Directory.

  4. Select Crimson or Julep from the Directory list.

  5. Select the Action Pages you would like synced with Crimson or Julep. The default is All Pages.

    1. To exclude pages, enter a comma-separated list of the Action Page IDs

    2. Optionally, you can scope the integration to only send team-specific data to Crimson.

  6. Apply your CMDI API Token.

  7. 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 in custom_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

email

email

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\")); "

Did this answer your question?