Canvassing
How to send canvassing donations and recurring plans into Fundraise Up through the API.
Canvassing — also called face-to-face or F2F fundraising — happens in person, where representatives talk with people on the street, at events, or door to door to ask for donations, most often as recurring gifts.
Whether your canvassers work from a dedicated app, a CRM, or another internal tool, Fundraise Up's API lets them record donations and recurring plans directly in your account.
This article shows how to set up your Fundraise Up account for canvassing and how to build the integration.
Check whether Tap to Donate covers your need
Before building a canvassing integration, check whether Tap to Donate covers your need. Tap to Donate is Fundraise Up's no-code in-person donation product: your team installs the Fundraise Up mobile app on an iPhone or Android phone, which turns the device into a contactless terminal. The supporter taps a card, phone, or watch against the device to give.
Tap to Donate does not require a card reader or any integration work, and donations land in your Fundraise Up account in the same way online donations do.
Tap to Donate handles many of the same scenarios as canvassing — door-to-door collection, event tables, volunteer-led campaigns. If your program runs on your own staff and operates in the United States, Tap to Donate is likely the simpler choice. It's currently invite-only — contact your Customer Success Manager or support@fundraiseup.com to get access.
Use the API integration described in the rest of this article when:
- An outside canvassing agency runs your program on their own software and devices.
- You run canvassing in-house but need a custom app built by your development team.
- Your program operates outside the United States, where Tap to Donate isn't available yet.
You can also run both side by side — Tap to Donate for events your own team works, the API for an agency-run program. Both feed into the same Fundraise Up account.
How the API integration works
Canvassing integrations are custom-built. Your canvassing agency, or your in-house developers, build the system the canvasser uses to record supporter details and capture payment — typically a web or mobile app running on a tablet or phone. That app sends each completed donation to Fundraise Up through the API. Fundraise Up creates the recurring plan, sends the receipt, stores the supporter record, and surfaces the donation in your reporting.
Each donation moves through these steps:
- The canvasser enters the supporter's contact info, donation amount, and frequency in the app.
- The app collects the supporter's card details and tokenizes them through Stripe. Fundraise Up processes all payments through Stripe, so the app uses Stripe's SDKs to handle card data. Card data goes from the device to Stripe directly and never passes through Fundraise Up.
- The app sends a request to Fundraise Up's API with the Stripe payment token, the supporter's contact info, the campaign ID, the amount, and — for a recurring plan — the frequency.
- Fundraise Up records the donation, creates the recurring plan if one was requested, and sends a confirmation back to the app.
- The supporter automatically receives a receipt by email from Fundraise Up. You can suppress this if the app sends its own confirmation.
Setup prerequisites
To complete the setup steps in this article, you need:
- The Organization Administrator role in Fundraise Up — required to create API keys.
- A Stripe account already connected to your Fundraise Up account.
Step 1: Create a dedicated campaign
Create a separate campaign for canvassed donations. Mixing canvassing into a campaign that also collects online donations makes reporting and stewardship harder — canvassed supporters have different acquisition costs, different retention patterns, and usually need their own welcome series.
To create the campaign:
- Go to Campaigns and click New campaign.
- Select Create a new campaign with default settings.
- Enter an internal name that identifies the campaign for your team — for example, Canvassing — F2F program. This name is not visible to supporters.
- Select the default language for the campaign.
- Click Create a campaign.
See Campaign setup for the full set of campaign configuration options.
After the campaign exists, three areas need attention before the canvassing app starts sending donations.
Under the campaign's Settings tab:
- Frequencies. A campaign in Fundraise Up supports up to two donation frequencies — for example, one-time and monthly. If your offer includes more than two, create one campaign per frequency pair and route donations to the matching campaign. For example, Campaign A for one-time and monthly, Campaign B for quarterly and annually.
- Designations. Every donation must include a designation ID in the API request — Fundraise Up does not fill one in from the campaign settings. The ID can be any designation in your account, whether or not it is linked to this campaign. Pick the designation that canvassed donations should be attributed to, and have the canvassing app send that ID on every donation. See Designations.
Under the campaign's Emails tab:
- Plan receipt and Installment receipt. Customize these for the canvassing context. Plan receipt is the first email a canvassed supporter receives after signing up — for most canvassing programs this serves as the welcome message. Installment receipt is sent on every subsequent recurring charge. If you also accept one-time canvassing donations, customize One-time receipt as well. See Emails.
- If the canvassing app sends its own confirmation, set Email sending to Disabled on the corresponding Fundraise Up email template to avoid sending two confirmations to the supporter for the same donation.
Once the campaign is configured, collect the IDs the developer will need in Step 3:
- The Campaign ID, in the format
FUNXXXXXXXX. Find it under the campaign's name when you open the campaign. - The Designation ID, in the format
EXXXXXXX. Find it in Designations.
Step 2: Create an API key
The canvassing app authenticates to Fundraise Up with an API key. To create one:
- Go to Settings > API keys.
- Click Create API key.
- Enter a descriptive name, for example Canvassing integration.
- Under Live data, select the Donations: Write permission. If the app also needs to read donation status back from Fundraise Up, also select Donations: Read.
- Select the same permissions under Test data if you plan to test in test mode first.
- Click Create API key.
- Copy the key and store it somewhere secure. The Dashboard shows the key only once.
If you use subaccounts, generate the key from the specific subaccount that should receive the canvassed donations.
Step 4: Tokenize the card with Stripe
Fundraise Up runs payment processing through Stripe. Before the canvassing app can create a donation in Fundraise Up, it must hand the supporter's card off to Stripe and get back a token Fundraise Up can charge.
Two Stripe objects are needed for each donation:
- A Payment Method — the tokenized representation of the supporter's card. The canvassing app collects the card using one of Stripe's SDKs (Stripe.js for web, the Stripe iOS SDK, the Stripe Android SDK, or other platform SDKs). The SDK sends the card data directly to Stripe and returns an ID that starts with
pm_. - A Setup Intent — Stripe's mechanism for saving the Payment Method with the permission needed to charge it later. For a recurring plan, this off-session authorization lets Fundraise Up charge every future installment without the supporter being present. The app confirms the Setup Intent with the Payment Method and gets back an ID that starts with
seti_.
Both the Payment Method and the Setup Intent must be created using the Stripe account connected to the organization's Fundraise Up account. Tokens from any other Stripe account will not work.
For implementation details, see Stripe's Setup Intent documentation.
The app passes both IDs to the Fundraise Up API in the next step.
Step 5: Create donations
Donations are created by sending a POST request to https://api.fundraiseup.com/v1/donations. The same endpoint handles one-time and recurring donations — include a recurring_plan object for a recurring plan, omit it for a one-time donation.
The code samples below are illustrative and show the canvassing-specific patterns. For the complete request and response schema — including every field, type, and constraint — see the Create a donation endpoint in the API reference.
Recurring donations
The most common canvassing outcome is a monthly recurring gift. Add a recurring_plan object with the frequency value. The API recognizes these frequency values: daily, weekly, biweekly, every4weeks, monthly, bimonthly, quarterly, semiannual, and annual. Only the frequencies enabled on the target campaign are accepted — a frequency the campaign does not support returns an error. Configure the campaign frequencies in Step 1.
1curl -X POST https://api.fundraiseup.com/v1/donations \
2 -H "Authorization: Bearer YOUR_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "amount": "25.00",
6 "currency": "usd",
7 "campaign": "FUNXXXXXXXX",
8 "designation": "EXXXXXXX",
9 "payment_method": {
10 "stripe": {
11 "payment_method_id": "pm_card_visa",
12 "setup_intent_id": "seti_1OsI2pHUtU5Pnu8bXXXXXXXX"
13 }
14 },
15 "supporter": {
16 "first_name": "Alex",
17 "last_name": "Garcia",
18 "email": "alex.garcia@example.com",
19 "phone": "+15555550100",
20 "address": {
21 "line1": "123 Main St",
22 "city": "Boston",
23 "region": "MA",
24 "postal_code": "02108",
25 "country": "us"
26 }
27 },
28 "recurring_plan": {
29 "frequency": "monthly"
30 }
31 }'The first installment is charged immediately. Fundraise Up handles every installment after that, including retries on failure.
One-time donations
Same shape, no recurring_plan block:
1curl -X POST https://api.fundraiseup.com/v1/donations \
2 -H "Authorization: Bearer YOUR_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "amount": "100.00",
6 "currency": "usd",
7 "campaign": "FUNXXXXXXXX",
8 "designation": "EXXXXXXX",
9 "payment_method": {
10 "stripe": {
11 "payment_method_id": "pm_card_visa",
12 "setup_intent_id": "seti_1OsI2pHUtU5Pnu8bXXXXXXXX"
13 }
14 },
15 "supporter": {
16 "first_name": "Alex",
17 "last_name": "Garcia",
18 "email": "alex.garcia@example.com"
19 }
20 }'The response contains the donation object, including the Fundraise Up donation ID, the supporter ID, and — if a plan was created — the recurring plan ID. The canvassing app should store the donation ID for later lookups or reconciliation.
Required fields
These fields are required for every donation, whether one-time or recurring:
amount— string, decimal in the format{NNN}[.nn]("99.99"for USD)currency— lowercase ISO 4217 code ("usd","cad","gbp").campaign— your campaign ID.designation— the designation ID the donation should be attributed to.payment_method.stripe.payment_method_id— Stripe PaymentMethod ID. The samples above usepm_card_visa, a Stripe test token — replace with a real PaymentMethod ID returned by the Stripe SDK for live donations.payment_method.stripe.setup_intent_id— Stripe SetupIntent ID.supporter.email,supporter.first_name,supporter.last_name.
For recurring donations, also required:
recurring_plan.frequency— one of the allowed frequency values.
Optional fields
A few optional fields commonly used in canvassing implementations:
fee_amount— string, positive decimal in the format{NNN}[.nn]. The amount of processing fees covered by the supporter. Don't calculate this — callGET /v1/donations/feewith the donation amount and currency, then pass the returnedfee_amountvalue in the POST request body. Use this when canvassers ask supporters to cover fees.skip_thank_you_email— boolean. Whentrue, Fundraise Up does not send the receipt email for the first installment of a recurring plan. Available for recurring donations only — sending this parameter on a one-time donation returns an error. The request must also include the supporter'semailparameter. Use this when the canvassing app sends its own immediate confirmation and you want to avoid duplicate emails.supporter.phone— string, maximum 20 characters. The supporter's phone number.supporter.address— object. The supporter's mailing address. If the app sends an address,city,line1, andpostal_codeare required within it;country,line2, andregionare optional. Values are stored exactly as sent and not validated.comment— string. Free-form note from the supporter, captured by the canvasser if relevant.questions— array of objects. Lets the canvassing app submit answers to mandatory campaign questions on the supporter's behalf. Questions must be pre-created in Settings > Questions — see Questions. Each entry needs:id(string, formatQXXXXXXX) — the question ID from Settings > Questions.- One answer field, depending on the question type:
checked(boolean) — for Single checkbox questionsdate(string, formatYYYY-MM-DD) — for Date questionsoptions(array of strings) — for Multiple checkboxes questionstext(string, max 256 characters) — for Text box, Text line, Select one option, and Dropdown menu questions
For full details on every field, see the Create a donation endpoint in the API reference.
For sub-channel reporting — tracking donations by vendor, team, region, or canvasser, including the vendor's internal donation IDs — see “How to track donations across vendors and teams” below.
How to track donations across vendors and teams
If you work with more than one canvassing vendor, or you want to track results by team, region, shift, or canvasser, pass those values through the utm object on each donation.
1"utm": {
2 "campaign": "fall_2026_drive",
3 "content": "boston_team_3",
4 "medium": "f2f",
5 "source": "vendor_name",
6 "term": "downtown_route"
7}All five UTM fields are optional. The values appear on the donation record and in exports, so you can break canvassing results down by any segment that matters to you.
For tracking dimensions UTM does not cover, use custom fields. The most common canvassing use is passing the vendor's internal donation ID on every donation, which lets you reconcile Fundraise Up records against the vendor's reports. Other common uses include canvasser IDs, team codes, and shift identifiers. Define each custom field on the campaign in the Dashboard (Campaigns > [Your campaign] > Settings > Custom fields), then pass values as an array of {name, value} objects:
1"custom_fields": [
2 { "name": "vendor_donation_id", "value": "VND-2026-1024" },
3 { "name": "canvasser_id", "value": "C-1024" }
4]The name must match the custom field name configured on the campaign exactly.
Rate limits
The Fundraise Up API limits requests to 8 per second and 128 per minute per API key. Canvassing programs with many simultaneous canvassers can hit these limits during peak signup periods.
The canvassing app should handle 429 Too Many Requests responses with exponential backoff and retry the failed donation. See the API reference for current limits.
Step 6: Test before you go live
Before turning the integration on for live donations, run end-to-end tests using the Test data API key and Stripe test cards.
Verify the following:
- A monthly recurring donation creates a recurring plan with the right frequency and amount.
- A one-time donation appears on the correct campaign in your test environment.
- The designation maps correctly on the donation record.
- A declined card returns an error and does not create a donation in Fundraise Up.
- Welcome and receipt emails go out, and the email content fits the canvassing context. If the canvassing app sets
skip_thank_you_email: true, confirm that Fundraise Up suppresses the email. - The supporter record carries the contact info, UTM values, and any custom fields the canvassing app submitted.
- Multi-campaign frequency routing — if you set it up — sends each donation to the right campaign.
When everything works, switch the canvassing app to the Live data API key.
Track canvassing donations in your Dashboard
To see only canvassed donations in your Dashboard, go to Donations and apply two filters: your canvassing campaign, and source API. The same filters work on Insights for trends and totals, and on exports for week-over-week reporting.
UTM values and custom fields submitted by the canvassing app appear on individual donation records. In exports, each UTM value and each custom field becomes its own column — useful for breaking results down by vendor, team, region, or canvasser.
For active recurring plans from canvassing, go to Recurring and filter by your canvassing campaign to see plans, their status, and their next installment date.
Common questions
Will canvassed supporters get the Donor Portal?
Yes. They are recurring supporters like any other, with the same Donor Portal access, the same ability to update payment details, and the same cancellation path.
Can supporters cancel their canvassing recurring plan themselves?
F2F has a high early-churn rate, and self-service cancellation can amplify that. Fundraise Up gives you two options for Recurring donation cancellation under Settings > Donor Portal: let supporters cancel in the Donor Portal after retention attempts, or require them to contact your organization or submit a feedback form — you can customize the instructions they see. The setting applies to all recurring supporters, not just canvassed ones. See Configure your Donor Portal.
What if the supporter is already donating to us online?
When the canvassing app submits a donation, Fundraise Up matches the supporter to existing records by email, so a supporter who already gives online doesn't get a duplicate record — the canvassed donation lands on the same supporter profile. If they sign up for a recurring plan through canvassing while already having an online recurring plan, both plans exist side by side.
What happens when a card declines at signup?
The API returns an error and no donation is created in Fundraise Up. The canvassing app surfaces the error to the canvasser, who can ask the supporter for a different card.
Does the API support ACH and bank debits?
Yes, ACH Direct Debit is supported alongside cards, Apple Pay, and Google Pay. For canvassing, cards are usually the practical choice — ACH adds days between the canvass and a settled donation, which delays reporting and CRM sync.
Can we use one campaign for both canvassing and online giving?
You can, but reporting and stewardship suffer for it. We recommend a dedicated canvassing campaign.
What if we switch canvassing vendors?
Generate a new API key for the new vendor and revoke the old one in Settings > API keys. Donations and recurring plans created under the old key stay in your account, and Fundraise Up continues to process active recurring plans regardless of the key that created them.