VolunteerMatch Opportunities API Guide

OUTDATED. PLEASE SEE THIS LINK FOR MOST RECENT DOCUMENTATION.

Introduction

The VolunteerMatch Opportunities API enables you to access and display thousands of volunteer opportunities for your users. Users can search for these opportunities and express interest in specific ones. Once a volunteer expresses interest—or makes a “connection”—we facilitate communication between the volunteer and the nonprofit organization.

You can refer to VolunteerMatch to see how we help volunteers find opportunities.

Notes

VolunteerMatch Attribution

As you implement the VolunteerMatch API, please be sure to include recognition of your partnership with VolunteerMatch. The "Powered by VolunteerMatch" logo should be displayed in each listing; or if all the listings come from VolunteerMatch, the logo may appear in the footer of the page – bottom right corner.

Logo can be downloaded here. Example below

image-20240906-143138.png

Opportunity Connection Type Limitations

  • By default, shift opportunities and passthrough opportunities (provided by our partners) are omitted due to additional UI complexity. As a result, this documentation does not cover the shift-related and passthrough fields. If you are interested in including shift or passthrough opportunities, please contact us at support@volunteermatch.org.

Hide your API Key in Front-End Code

  • For security purposes, your API key should never be written in publicly-accessible front-end code. Please be sure to obscure the API key from the general public.


Search Opportunities Using Filters

Description: Provides functionality for potential volunteers to search for available opportunities.

The VolunteerMatch API offers access to nearly 100k opportunities at any given time. Use the searchOpportunities call to retrieve a list of available opportunities. To enhance the user experience, we recommend implementing additional filters to allow users to refine their search results and find their best opportunity match.

To optimize the retrieval time for search results, we recommend implementing pagination or a "load more" feature. Limit the number of opportunities returned in each request to a maximum of 25. You can control pagination and the number of results by using the pageNumber and numberOfResults fields.

image-20240829-180435.png
Example of Search Opportunity Panel

UI Requirements – Search Filters

  • Location

  • In-Person or Virtual

  • Cause Areas

  • Great For Selections

  • Keywords

  • Additional Filters (optional)

    • Skills

    • Radius

API Field Reference

Opportunity Search Filters

OpportunitySearchParamsInput Object (Links to OpportunitySearchParamsInput Schema)

  • location: String

    • Description: Free-form text to indicate location, i.e., location: "san francisco", or location: "94111", or location: "US". Use location: "Non-US" to query for opportunities located in all non-US countries.

  • categories: List of Categories enum (Link to Categories Enum)

    • Description: Supports numerous categories of opportunities, also known as cause areas. For a complete list of available enum values, refer to the Categories Enum Documentation. You can either display all options to your volunteers or map VolunteerMatch cause areas to your own distinctions.

  • keywords: List of Strings

    • Description: Allows for a free-form text search. Performs a keyword search across the following fields of opportunities: title, organization name, description, skills, and categories.

    • Example: keywords = ["education", "volunteering"] searches for opportunities related to education and volunteering.

  • greatFor: List of greatFor enum (Link to GreatFor Enum)

    • Description: Categorizes opportunities based on the target audience, as determined by the nonprofit admin. For a complete list of available enum values, refer to the GreatFor Enum Documentation.

  • returnVirtualAndOnSiteOpps: Boolean

    • Description: Allows users to select between virtual only, in-person only, or both virtual and in-person opportunities.

    • Usage: Set to true to query for both virtual and on-location opportunities based on thelocation input. This input is ignored if virtual is true.

    • Example: returnVirtualAndOnSiteOpps:true allows users to see both types of opportunities.

  • timeslots: List of timeslots enum (Link to Timeslot Enum)

    • Description: Allow users to filter by when they are available to volunteer

  • virtual: Boolean

    • Description: Set to true to include opportunities without a physical location.

  • virtualOrgRegion: String

    • Description: Filters virtual opportunities by the region where the organization is located.

    • Usage: This input is ignored if virtual is false or omitted. Use free-form text such as a state abbreviation or postal code.

    • Example: virtualOrgRegion: "CA" for California or virtualOrgRegion: "94111" for a specific postal code. For US-based locations, it resolves to a state.

  • skills: List of String

    • Description: Allows users to enter an array of strings to perform a text search against the skills needed for opportunities. The filter will return opportunities that match any of the specified skills.

    • Usage: This filter performs a keyword search against the skills associated with opportunities. For example, skills: ["computer", "child care"] will return opportunities with skills related to “Computer,” “Child Care,” “Web Design,” “Web Design / UX,” “Website Programming,” and “Website Project Management.” To view a full list of skills, refer to the Skills Enum Documentation.

  • dateRanges: List of DateRangeDetailInput object

    • Description: Allows users to search for opportunities within specific date ranges. This filter lets you specify start and end dates for the opportunities you want to find, as well as those that are ongoing without fixed start and end dates.

    • Usage: Provide a list of DateRangeDetailInput objects, where each object specifies the start and/or end dates for filtering. Opportunities that match the given date ranges or are ongoing will be included in the results.

  • radius: String

    • Description: Specifies the search radius for opportunities relative to a given location. This field determines the area within which opportunities will be returned based on the original location provided.

    • Supported Values:

      • Number: A numeric value representing the radius in miles (e.g., "25" for a 25-mile radius).

      • City: Search within a specified city (e.g., "San Francisco").

      • Subregion: Search within a subregion or county (e.g., "Los Angeles County").

      • MSA: Search within a Metropolitan Statistical Area (e.g., "San Francisco-Oakland-Hayward").

      • Region: Search within a region or state (e.g., "California" or "TX" for Texas).

      • Country: Search within a specific country (e.g., "USA").

    • Default Behavior:

      • For zip codes, the default radius is 20 miles.

      • When a state is specified, the search radius defaults to the entire state.

    • Usage Examples:

      • radius: "30": Returns opportunities within a 30-mile radius of the specified location.

      • radius: "New York City": Returns opportunities within New York City.

      • radius: "Orange County": Returns opportunities within Orange County.

      • radius: "CA": Returns opportunities within California.

      • radius: "USA": Returns opportunities within the United States.

  • updateSince: String

    • Description: Search for opportunities updated on or after a certain date

Additional filters can be found in the OpportunitySearchParamsInput Schema Documentation.

searchOpportunities GraphQL Query Example

Example Call with required and recommended filters:

This query looks for opportunities with the following criteria:

  • Location: San Francisco, CA

  • Cause area: Animals

  • Great for: Groups, Done in a Day

  • Keywords: Dogs

  • Opportunity Type: In-person AND virtual

query { searchOpportunities( input: { location: "san francisco" categories: ["animals"] greatFor: [groups, doneInADay] keywords: ["dogs"] returnVirtualAndOnSiteOpps: true pageNumber: 1 numberOfResults: 25 } ) { currentPage resultsSize opportunities { datePosted dateRange { endDate endTime ongoing startDate startTime } description id location { city postalCode region } parentOrg { name url } title url } } }

Display Matching Opportunities

Overview

Once the user has provided filter criteria, the next step is to display a list of matching opportunities returned from the searchOpportunities API call.

Pagination

For pagination or to load additional opportunities, make a subsequent searchOpportunities call with the same parameters and update the pageNumber field accordingly. This process will retrieve the next set of opportunities.

The response from the initial searchOpportunities call will include all the necessary and recommended fields for display. Details of these fields are outlined below.

UI Requirements – Search Results Page

  • Opportunity Title, which links to the Opportunity Detail page.

  • Organization Name. Can link to the organization url.

  • Date and Time. Flexible Schedule if Ongoing.

  • Location or Virtual.

  • Opportunity Description.

  • Button, which links to the Opportunity Detail page.

  • (Optional) Images: VolunteerMatch can provide access to a repository of images.

  • Optional: requirements, age groups, cause area, date posted and shifts.

  • "Powered by VolunteerMatch" logo displayed in each listing; or if all the listings come from VolunteerMatch, the logo may appear in the footer of the page – bottom right corner.

API Field Reference

Opportunity Search Result

OpportunitySearchResults Object (Link to OpportunitySearchResults Schema)

  • resultsSize: Integer

    • Description: The total number of search results.

  • opportunities: List of OpportunityDetail (Link to OpportunityDetail Schema)

    • Description: The list of matching opportunities.

  • numberOfResults: Integer

    • Description: The number of results returned per page.

  • currentPage: Integer

    • Description: The current page number of the search results.

  • sortCriteria: String

    • Description: The criteria used to sort the search results.

For Each Opportunity Detail

Here is an example response from the searchOpportunities API in the OpportunitySearchResults object. You can extract and display the information from each opportunity as needed.

{ "data": { "searchOpportunities": { "currentPage": 1, "resultsSize": 4, "opportunities": [ { "datePosted": "2024-04-15", "dateRange": { "endDate": null, "endTime": null, "ongoing": true, "startDate": null, "startTime": null }, "description": "<p>Help us save more precious furry lives by fostering a dog in your home in the San Fransico East Bay Area until he/she is adopted to a new loving family.</p>", "id": 85896, "location": { "city": "Oakland", "postalCode": "94621", "region": "CA" }, "parentOrg": { "name": "Furry Friends Rescue", "url": "https://www.volunteermatch.org/search/org23439.jsp" }, "title": "Dog Foster Home - East Bay Area", "url": "https://www.volunteermatch.org/search/opp85896.jsp" }, { "datePosted": "2024-04-09", "dateRange": { "endDate": null, "endTime": null, "ongoing": true, "startDate": null, "startTime": null }, "description": "<p>Chaparral House is a Non-Profit Skilled Nursing Facility in Berkeley dedicated to providing excellent person-centered care to elders.</p><p>If you have a gentle, friendly dog companion that you would like to share with our elder residents--we'd love to talk with you!</p><p>We currently have openings for our lively pet visiting program; for dogs both small &amp; large &amp; in between! Service dogs are great--but not required---however a clean bill of health (including up to date of vaccinations) from your vet is.<br /><br />Please contact us if you are interested in helping out. We have volunteers here every day of the week but not during evening or night time hours. All volunteers are required to provide proof of COVID vaccination and a booster. At this time volunteers are also required to wear masks at our facility.</p>", "id": 3795737, "location": { "city": "Berkeley", "postalCode": "94702", "region": "CA" }, "parentOrg": { "name": "Chaparral House", "url": "https://www.volunteermatch.org/search/org70812.jsp" }, "title": "Pet Visitors for Nursing Home Needed", "url": "https://www.volunteermatch.org/search/opp3795737.jsp" }, { "datePosted": "2024-03-25", "dateRange": { "endDate": "2024-06-29", "endTime": "12:00:00", "ongoing": false, "startDate": "2024-04-27", "startTime": "10:00:00" }, "description": "For the number of folks who visit, Point Isabel is remarkably clean and safe for both dogs and people due to the efforts of EBRPD Rangers and people like YOU!.<br /><br />Help keep it that way by joining us to pick up *stuff* (stray poops; trash) OR by lending a hand with weeding, while enjoying the views and the fun at the world's largest off-leash dog park (aka &quot;Disneyland for Dogs.) <br /><br />Come for 15 minutes or the full two hours -- every weed pulled or piece of *stuff* picked up helps! Bring your own gloves and tools if you have them. PIDO volunteers and the park ranger may also have some you can borrow. And don't forget to ask about our Special Treats for very good dogs -and their owners!<br /><br />*Foxtails are noxious, invasive weeds that are dangerous to dogs. Join volunteers to pull foxtails and other weeds around high-traffic areas such as benches and picnic tables that rangers can't reach with power tools and mowers. Spring and summer intervention are particularly important to preventing foxtails from going to seed and spreading. <br /><br />Rain/muddiness cancels.", "id": 2896398, "location": { "city": "Richmond", "postalCode": "94804", "region": "CA" }, "parentOrg": { "name": "POINT ISABEL DOG OWNERS AND FRIENDS", "url": "null/search/org1061417.jsp" }, "title": "Clean-Up Day at Point Isabel", "url": "https://www.volunteermatch.org/search/opp2896398.jsp" }, { "datePosted": "2024-03-21", "dateRange": { "endDate": "2024-04-21", "endTime": "12:00:00", "ongoing": false, "startDate": "2024-04-21", "startTime": "10:00:00" }, "description": "<strong>Celebrate Earth Day Weekend at Point Isabel Regional Shoreline! </strong>At this work party we'll add dirt around our growing oaks, redwoods, and pines, and fill in holes that could be tripping hazards. <br /><br /><strong>WHO's ORGANIZING THIS</strong>: East Bay Regional Park District (EBRPD) and Point Isabel Dog Owners (PIDO). <br /><br /><strong>WHERE</strong>: The large, flat meadow halfway between the parking lot at 1 Isabel Street,Richmond (near Mudpuppy's Tub and Scrub and the Sit and Stay Cafe) and the smaller parking lot at the end of Rydin Road.<br /><br />The field is bounded by Hoffman Channel at the north, the Bay Trail/USPS Distribution Center on the south, and has the East Bay hills will be to the east and the Golden Gate Bridge to the west. From either parking lot it's a five-minute walk.<br /><br />You won't be able to miss EBRPD's green pickup truck. IF YOU CROSS THE BRIDGE OVER HOFFMAN CHANNEL, YOU'RE GOING THE WRONG WAY.<br /><br /><strong>Parking is a challenge on weekends</strong>. Carpool if you can and give yourself time to find a spot. There are bike racks near Mudpuppy's (1 Isabel Street). Don't bike <em>*through*</em> Point Isabel...that's not allowed, for safety reasons.<br /><br /><strong>WHEN</strong>: Sunday, April 21, 10 to noon. Come for 15 minutes or the whole two hours, every bit helps!<br /><br /><strong>WHAT TO BRING:</strong> Your own water, and gloves and a shovel if you have them. Wheelbarrows, rakes, and hoes could be <strong><em>very</em></strong> handy, although the rangers will bring some. A hat and sunscreen are good.<br /><br /><strong>OTHER THINGS TO KNOW</strong>: Point Isabel has lots of off-leash dogs wandering around. Your friendly dog is welcome but bring water for it and a leash in case you need it.", "id": 3495756, "location": { "city": "Richmond", "postalCode": "94804", "region": "CA" }, "parentOrg": { "name": "POINT ISABEL DOG OWNERS AND FRIENDS", "url": "null/search/org1061417.jsp" }, "title": "Earth Day Weekend: TLC for trees at Point Isabel", "url": "https://www.volunteermatch.org/search/opp3495756.jsp" } ] } } }

Display Opportunity Details

Overview

Each result in opportunities returned from the search result should link to an Opportunity Detail page. This page should include:

  • Comprehensive information about the opportunity.

  • A button allowing users to express their interest in the opportunity.

Time-Saving Approach

Instead of creating your own opportunity detail page, you can redirect users directly to the VolunteerMatch site using the url field. Note that this approach will not allow you to track the number of connections made through your API.

Example Opportunity Detail Page Display

The "Powered by VolunteerMatch" logo should be displayed on this page.

API Field Reference

OpportunityDetail Object (Link to OpportunityDetail Schema)

Create a Connection

Overview

In order for a volunteer to express interest or sign up for an opportunity in the VolunteerMatch network, the volunteer must be a member of the VM system. Setting up the member record and making the subsequent connection can be made with a single API call: createConnection. For simplicity we will make the following assumptions:

  • The API Partner will verify the volunteer's email address

  • The API Partner will require the volunteer to agree to VolunteerMatch’s Terms of Use.

  • Username and password will be managed by the API Partner, and should not be sent with user information when making a connection

  • The volunteer will be signed in with VolunteerMatch's API partner, and the partner will pass VolunteerMatch the required data below to connect the user.

Once a volunteer finds an opportunity and is signed in, he or she expresses interest or signs up by clicking a button and the VolunteerMatch API facilitates the connection to the nonprofit when the createConnection mutation is called. Note that, if an opportunity has shifts, a volunteer should be able to express interest or sign up in multiple shift IDs with one connection request.

Display the Interest Form and Enable Users to Express Interest

We recommend partners implement a form or modal to collect and submit this information, improving the user experience. The form can collect information such as contact information, availability, and any additional requirements requested by the organization. Once the form is submitted, the createConnection call transfers the data to the organization's system for further action.

When a volunteer expresses interest in an opportunity, they should be connected to the organization seamlessly. A button on the previous page should link to a modal where the volunteer’s information is gathered and sent to the nonprofit admin.

Required Connection Data:

The following fields are required for ALL createConnection calls:

  • Volunteer email (primary key)

  • Opportunity ID

  • Array of Shift IDs (optional, if applicable)

  • Answers to any required custom questions (searchOpportunities/customFields)

  • Comments to the organization (if supplied by volunteer)

The following fields are only required for a new volunteer, defined as an email address that has never connected to a volunteer opportunity before:

  • Volunteer First name

  • Volunteer Last name

  • Volunteer Zip code

  • Volunteer Country (default will be US)

  • Volunteer Phone number (Optional) will be shared with nonprofit, if provided

  • Volunteer Accepts VolunteerMatch Terms of Use (True)

UI Requirements – Connection Screen

This modal can be divided into following sections:

  • Notification Text

    • Inform the volunteer that their information will be sent to the organization.

  • Information Collection

    • Display and collect any necessary information from the volunteer, including personal details and any additional questions that the organization may request.

    • Capture the Personal Details of the Volunteer

      You will need to gather all the information required from the volunteer to create a connection.

      For the volunteer information section, we recommend using free text input fields to capture personal details such as First Name, Email, Zip Code, and additional fields like Last Name, Phone Number, or Country.

    • Prompt the Volunteer to Answer Opportunity-Specific Questions

      Some opportunities require specific questions to be answered before a connection can be made by the volunteer.

      You can retrieve these questions (if any) using the searchOpportunities call → opportunities → opportunity: OpportunityDetail object → customFields: List of CustomFieldDetail objects. Display them in the interest form for the volunteer to complete.

  • Consent Checkbox

    • A checkbox to inform the user that their information will be sent to VolunteerMatch and that they agree to the Terms of Use and Privacy Policy.

  • Submit Button

    • A button to complete the interest form. Pressing this button should call the createConnection API function.

Connection Screen: Sample UI displaying Custom Questions, shifts and spots available per shift for an opportunity that limits number of connections

Creating the Connection

Now that you’ve gathered the required information, it’s time to create the connection and send the data back to VolunteerMatch using the createConnection call.

Once the connection is made, the volunteer will receive an email from VolunteerMatch confirming that the organization admin has been notified. The organization admin will also receive an email from VolunteerMatch with the volunteer’s contact information.

To achieve this, construct a ConnectionDetailInput object with the necessary fields. We recommend linking this call to the action of the volunteer clicking the button you added to confirm their interest in the opportunity.

createConnection GraphQL Query Example

Example createConnection call

mutation { createConnection( input: { comments: "VolunteerMatch is the best!" replies: { id: 25493, values: ["Yes"] } oppId: 258682 volunteer: { acceptTermsAndConditions: true email: "name@volunteermatch.org" firstName: "Jane" lastName: "Doe" zipCode: "55555" } } ) { volunteer { id } } }

API Field Reference

ConnectionDetailInput Object (Links to ConnectionDetailInput Schema)

Connection Confirmation Screen

Direct Connect Opportunities

There are some opportunities where we want to direct the user directly to a registration link provided by the nonprofit. You can identify these opportunities by the following criteria: redirectUrl is NOT NULL ANDconnection_type is NOT ‘passthrough.' For these opportunities, you still want to create the connection with the createConnection call, but then you should redirect the user to the redirectUrl. We suggest adding this redirect in the UI on the connection confirmation screen by letting the user know they need to complete registration at another site.

UI Requirements

  • A Success message

  • Opportunity Title

  • Organization Name

  • Date & Time

  • Location or Virtual

  • "Powered by VolunteerMatch" logo

Confirmation Email Sent to Volunteer – Managed by VolunteerMatch

  • Contains the same information as on the confirmation screen, and additionally the contact information for the volunteer coordinator at the nonprofit.

  • May include a custom email message to the volunteer from the nonprofit, if the VolunteerMatch Member feature is active.

  • May include an attachment from the nonprofit, if the VolunteerMatch Member features is active.

  • The email will be sent to the volunteer by VolunteerMatch, and it can be updated to include your logo, ask your partner manager for assistance.

 

 

Retrieve Connections (Optional)

Congratulations, you’ve set up the VolunteerMatch API! The final step is to retrieve information on the connections you’ve created using the getConnections call.

This call provides detailed information about the connections users have made with VolunteerMatch opportunities. It can help you gather data on:

  • The total number of connections

  • The total number of connections within a specific timeframe

  • The number of people connected with opportunities in different cause areas

  • The total number of connections in a particular area

  • The total number of connections with a specific organization

  • And more!

Note: We recommend that each company has its own API key. The getConnections call will only retrieve connections made with that specific API key. If multiple companies share the same API key, the data will be aggregated among all companies using that key.

UI Reference

Examples of interfaces you can build

Sample UI 1: A list view of all connections made within a date range.

We suggest you display only the essential data for each connection and implement a View link that takes your user to a Detail page per connection --

 

Sample UI 2: A detailed view of a single Connection.

We suggest you navigate user to this Detail page from a List view page per sample above.

getConnections GraphQL Query Example

Example getConnections call

The following query retrieves the number of connections in California with the cause category “Animals” created in 2023.

API Field Reference

Connections Search Filters

GetConnectionsParamsInput (Links to GetConnectionsParamsInput Schema)

Connections Search Results

GetConnectionsResult (Links to GetConnectionsResult Schema)

How to Develop and Test

  • All development and testing must be done on our stage environment (stage.volunteermatch.org) using a stage API Key.

  • Connections made in this environment will not be sent to our nonprofit partners and protects them from SPAM.

  • Note that our stage database contains test data, and is not representative of our live network. Testing or demoing connection functionality on production quality data can only be made using special systems. VolunteerMatch will provide this upon request when you are ready to release.

  • If a client key is NO longer active, the following response will be returned: 401 Your API key is inactive.

FAQs

Why does my API call return a different number of opportunities than the same search on volunteermatch.org?

Depending on your API key, there may be some types of opportunities that are not delivered via the API. These discrepancies may be due to the following reasons:

  • "Passthrough" Connection Type Opportunities: Some opportunities from partner feeds redirect to different websites, such as Idealist. While these opportunities are visible on our public site, they are not shared via the API. If you would like access to these opportunities through the API, please contact VolunteerMatch support at support@volunteermatch.org.

  • Opportunities with Shifts: Your API key might have a constraint that prevents the retrieval of shift-related opportunities. To access these opportunities, you will need to have this constraint removed. Note that once this feature is enabled, additional UI adjustments may be necessary to support shift-related opportunities.

I have other opportunities native to my site, and I’d like to integrate VolunteerMatch opportunities with my other opportunities so they appear as one catalog. How can I do this?

You can integrate VolunteerMatch opportunities with your own opportunities by following these steps:

  • Initial Data Ingestion: Use the searchOpportunities API call to fetch all VolunteerMatch opportunities with your need and ingest them into your catalog. This will populate your catalog with the current list of opportunities.

  • Update Mechanism: Use the searchOpportunities call with the updateSince filter field to retrieve opportunities that have been updated since your last request. Note that the searchOpportunities call will only return active opportunities.

  • Scheduled Updates: Alternatively, you can set up a batch job to run daily. This job can fetch selected opportunities by their IDs and update their content in your catalog accordingly.

By implementing these methods, you can ensure that your catalog remains up-to-date with the latest opportunities from VolunteerMatch and your own site.