Collecting Form Data

DAFpay can auto-populate the donor contact fields or your platform can pass donor information directly into the onDonationRequest.

Option 1: Express Checkout

Chariot offers “Express Checkout” where the Chariot Connect modal pulls the donor’s name, email, phone and address information from their account with the DAF provider. This allows for “one-click” checkout experiences and removes the need for a donor to fill out a lengthy form before making a DAF donation. The user always has the ability to review their information and make changes before submission.

Placement Requirement

DAFpay’s Express Checkout feature only works when the button is placed at the top of a donation form (before the donor’s contact details are collected).

Automatically Active

No action is required to enable Express Checkout. If no donor information is provided in the onDonationRequest, the contact fields will be automatically populated from the DAF provider.

To test the Express Checkout functionality, visit https://secure.dafpay.com/demo and ensure the “Express” toggle is enabled, which will place DAFpay at the top of the form, ahead of the contact fields.

Donation Amount

If your platform opts for Express Checkout, you will still need to utilize the onDonationRequest to pass in the amount from your donation form to the DAFpay modal. See below for a list of potential onDonationRequest parameters that can be utilized (even when Express Checkout is active).

Option 2: Pre-Populated Data

You can pass form information to Chariot before launching a Connect session. To provide this information, leverage the onDonationRequest function from the Chariot element.

Leveraging The onDonationRequest

If DAFpay (or other payment options) appear after the amount and contact fields on your donation form, ensure that the collected information is passed into the onDonationRequest. This will allow the fields to be properly recorded by Chariot’s system and displayed correctly on the DAFpay modal.

Avoid Asynchronous Actions

If your platform performs something asynchronously during the onDonationRequest, there can be a disconnect between the user clicking the button and the modal actually launching. As a result, the browser will flag DAFpay as a popup and block it from launching.

1// get the element from the DOM
2const chariot = document.getElementById("chariot")
3
4// provide a callback that returns the donation data
5chariot.onDonationRequest(async () => {
6 return {
7 amount: 25000, //this is $250.00 USD
8 firstName: "Michael",
9 lastName: "Scott",
10 email: "michaelScott@theoffice.com",
11 address: {
12 line1: "123 Main St",
13 line2: "Suite 4",
14 city: "New York",
15 state: "NY",
16 postalCode: "12345"
17 },
18 designation: "My Special Designation",
19 metadata: {
20 fundraiserTag: "marathon"
21 },
22 }
23})

The given donation data must match the following schema to be accepted by Chariot:

ParameterDescriptionType
amountThe donation amount in cents. e.g., for a $20 donation, enter 2000.

If this value is not passed in, Chariot will use the user’s account balance to recommend a donation amount. This can lead to significantly larger donation amounts.
number (optional)
firstNameThe donor’s first name. Maximum length: 255 characters.string (optional)
lastNameThe donor’s last name. Maximum length: 255 characters.string (optional)
emailThe donor’s email address. Must be in email format. Maximum length: 255 characters.string (optional)
phoneThe donor’s phone number. Please provide the phone number with the country code and without special characters. Maximum length: 255 characters.string (optional)
noteA note the donor wants to send to the nonprofit. Maximum length: 400 characters.string (optional)
anonymousIndicates if this donation should be sent anonymously (default: false)boolean (optional)
designationThe designation to include on the grant. If this is left blank, “Where needed most” will be used. Note that including a custom designation may cause the grant approval process to take longer. Designations over 100 characters will be truncated. Maximum length: 255 characters.string (optional)
addressThe donor’s address: line1, line2, city, state, postalCode. Maximum length: 255 characters.object (optional)
metadataAn object with a set of name-value pairs. You can use this object to include any miscellaneous information you want to tie to the workflow session.object (optional)
fundIdThe ID of the preselected DAF provider.

If this value is provided, the donor will not be shown the default DAF dropdown and will instead be taken straight to that DAF’s login.
string (optional)
frequencyThe recurring frequency of the DAF grant (if it’s a recurring gift). This parameter allows the following possible enum values: ONE_TIME, MONTHLY. If not provided, the grant will default to a ONE_TIME grant. For more information on recurring donations, please see the section belowstring (optional)
Data Validation

To prevent request failures, any inputs exceeding the maximum allowed length will be automatically truncated.

Popular Parameters
  • Metadata: Allows you to associate the payment or session with any data in your system (i.e., Form ID, Campaign Name).
  • Anonymous: Indicate if a donor has chosen to give anonymously on your donation form so the donation can be properly anonymized by the DAF provider.

Disabling Connect

To prevent the DAFpay button from launching until form validation is performed, pass false to the onDonationRequest.

Capturing Grant Intents

When a user completes a Chariot Connect session you will receive a grant intent.

Create Grant Route

After you submit your own donation form, do not forget to call the Create Grant API to complete the transaction.

Most workflows proceed as follows:

  1. Listen for the CHARIOT_SUCCESS event to receive the grant intent after a Chariot Connect session.
    • If you would like to collect any additional information from the user (i.e., Fee Coverage Prefences) you can do so at this step. However, if the Chariot Connect session is the last step in your donation form this is not necessary.
  2. Submit your own donation form before converting the grant intent into a completed grant.
  3. Have your backend call Chariot’s Create Grant API to complete the grant (and capture the grant intent).

Submitting your own donation form before calling Chariot’s Create Grant ensures consistency between your system and Chariot. See Loading Screen section below.

1// get the element from the DOM
2const chariot = document.getElementById('chariot');
3
4chariot.addEventListener('CHARIOT_SUCCESS', ({ detail }) => {
5 // Record the grant intent information so that you can
6 // capture the transaction once your form is submitted.
7});

Response Objects

1 {
2 "workflowSessionId":"79e772be-547d-4c9c-8b76-4ac4ed4c441a", //Id of the Connect session
3 "grantIntent": {
4 "userFriendlyId": "100020", //The user-friendly identifier for the grant intent
5 "fundId": "bbf485dd-a056-4a9d-89a8-06e201cdbf7f", //Id of the donor advised fund
6 "amount": 2000, //The grant amount expressed in units of cents; USD only
7 "metadata": {} // The same metadata object that was passed in the onDonationRequest callback referenced above
8 }
9 }
Event NameDescriptionMetadata Type
CHARIOT_INITThe init event is called when the Chariot Connect script is initialized and ready to be run. This is useful to be able to know when Chariot Connect is initialized and ready to be used.No metadata is provided for this event.
CHARIOT_SUCCESSThe success event contains a final summary of the Connect workflow session. It contains the workflow session id and relevant donation information.

Once you receive the success event don’t forget to complete the transaction by calling the Create Grant or Create Recurring Grant route based on the grant intent data.
OnSuccessMetadata
CHARIOT_EXITThe exit event is called when a user exits without successfully completing the flow, when an error occurs during the flow, or when a user confirms an unintegrated grant.OnExitMetadata

Exit Reasons

Exit ReasonDescription
USER_EXITUser exited the flow.
UNINTEGRATED_DAFDAF is not integrated with Chariot.
UNINTEGRATED_GRANT_CONFIRMEDUnintegrated grant confirmed with Chariot.
CID_NOT_FOUNDConnect Identifier is not found.
INELIGIBLE_ORGANIZATIONThis Organization is not eligible to receive DAF donations.
CREDENTIALS_ERRORInvalid credentials.
INVALID_CARDInvalid card number.
TFA_ERRORTwo-factor authentication error.
ZERO_AMOUNTGrant amount is zero.
SERVICE_DEACTIVATEDNonprofit’s Connect is deactivated (active = false).
ACCESS_RESTRICTEDUser’s DAF sponsor account electronic access is restricted.
EIN_NOT_FOUNDDAF sponsor does not support grants to the Nonprofit.
CONNECTION_FAILEDConnection to the DAF sponsor failed.
SESSION_NOT_FOUNDUser session is not found and may have expired.
CUSTOM_ERRORCustom error.
INTERNAL_ERRORInternal error.
INSTITUTION_DOWN_ERRORDAF sponsor institution is down; user should try again later.
NO_CHARITABLE_ACCOUNTSDonor has no charitable accounts in the logged in account.
INVALID_PRESELECTED_DAFPreselected DAF is invalid.
INACTIVE_CARDInactive card.
RECURRING_NOT_SUPPORTEDRecurring grants are not supported by this DAF
UNINTEGRATED_DAF_NOT_SUPPORTEDUnintegrated DAF is not supported by DAFpay

Donation Amount Changes

Accounting For Changes Within a Session

Please note that the donation amount passed into DAFpay from your platform may change within the DAFpay modal for various reasons. To ensure accuracy, always use the information provided in the onSuccessMetadata from Chariot when calling the Create Grant route.

If a donor tries to submit a grant request for an amount that exceeds their current account balance, Connect will alert the donor and suggest the donor to adjust the donation amount to the available account balance.

Additionally, if a Donor Advised Fund platform has a minimum donation requirement, Connect will alert donors of this requirement and suggest the donor to alter the donation size to match the minimum threshold for submission.

Loading Screen

Occasionally, there may be a delay between clicking “Donate” on DAFpay and being redirected to the organization’s confirmation page. To provide an intuitive user experience, make sure to implement an intermediary loading screen to notify the donor that their gift is being processed and that they should avoid navigating away from the page during this time.

This loading screen should be displayed between the time you receive the CHARIOT_SUCCESS event and the time your systems have successfully processed the grant by calling the Create Grant route.

Loading screen example

Unintegrated DAF Providers

Unintegrated Grants represent a donors intention to donate from a DAF provider that DAFpay is not yet integrated with.

Unintegrated grants will be marked with an unknown status.

  • Use the List Unintegrated Grants API to access details such as gift amount, DAF provider name, and donor information.
  • You can simulate the Unintegrated Grants flow on our demo page by selecting The Boston Foundation.
Opting Out of Unintegrated Grants

If your platform does not want to support unintegrated grants, DAFpay can redirect donors back to your donation form to select a different payment method (if the donor chooses an unsupported provider). Please let the Chariot team know if you would like to disable Unintegrated Grants for your platform.

Handling unsupported DAF providers differently within DAFpay. Left: Allow donors to record a Grant Intent; Right: Return donors to your donation form.

If unintegrated grants are enabled, the modal automatically closes after the user enters their donation information allowing you to record the gift intent in your system. When the modal closes, the CHARIOT_EXIT event will fire with the exit reason UNINTEGRATED_GRANT_CONFIRMED.

Unintegrated Grants Confirmation Page

In the thank you page for unintegrated grants you should render the data provided from CHARIOT_EXIT (tracking ID, nonprofit EIN, nonprofit name, and link to the DAF provider) so the donor is aware of the remaining steps to complete their donation. Make sure to offer the ability for a donor to copy the tracking ID (including the “Tracking ID” prefix) directly on your confirmation page.

Unintegrated Grant Confirmation Page

DAFpay will also send an email directly to the donor reiterating the instructions.

Unintegrated Grant Donor Instructions Email

Recurring Donations

Recurring donations are a powerful way to generate consistent revenue streams for nonprofits and they make up a large majority of the DAF grants that are distributed to charity each year. Chariot enables a donor to not only initiate a one-time grant, but also allows donors to initiate MONTHLY recurring grants through their Donor Advised Fund.

Managing Recurrence Schedule

When a recurring donation is made via DAFpay, it indicates that the donation was set up as a monthly recurring donation. However, the actual recurrence is managed by the DAF provider. If the donor wishes to cancel or modify the recurrence, they must do so through their DAF provider portal. As a result, Chariot is not notified when a recurrence is canceled or updated. Therefore, we only record the initial grant with a monthly frequency and do not create a new grant each month in our system.

When a user completes a Chariot Connect session for a recurring donation, instead of receiving a grantIntent as part of the CHARIOT_SUCCESS event, you will receive a recurringGrantIntent.

1 {
2 "workflowSessionId":"79e772be-547d-4c9c-8b76-4ac4ed4c441a", //Id of the Connect session
3 "recurringGrantIntent": {
4 "userFriendlyId": "100020", //The user-friendly identifier for the grant intent
5 "fundId": "bbf485dd-a056-4a9d-89a8-06e201cdbf7f", //Id of the donor advised fund
6 "amount": 2000, //The grant amount expressed in units of cents; USD only
7 "frequency": "MONTHLY", // The frequency of the recurring schedule for the donation
8 "metadata": {} // The same metadata object that was passed in the onDonationRequest callback referenced above
9 }
10 }

After you submit your own donation form, don’t forget to call the Create Recurring Grant API to complete the transaction.

Create Recurring Grant API

If your platform enables recurring donations through Chariot, you will need to differentiate which of Chariot’s APIs you use to capture the donation based on the information of the CHARIOT_SUCCESS event.

Built with