Keywords: API; API Lookup; API Keys; Endpoints
The Volunteer Impact API allows your organization to securely access profile and activity data from Better Impact for use in external applications and integrations.
This guide is intended for Technical and IT staff responsible for setting up, authenticating, and working with the API.
Getting Started
Sample API Client
A reference client is available in C#:
👉 Better Impact API Client (GitHub)
Authentication
The API uses HTTP Basic Authentication over HTTPS.
Each API key generates a username and password.
These must be passed with every request.
Tip
Better Impact Software Integrations
The four platforms on Better Impact, Volunteer Impact, Donor Impact, Client Impact and Member Impact, fully integrate with each other.
Better Impact also fully integrates with Sterling Volunteers (Fist Advantage) for background checks.
Our software does not fully integrate with other software, however we do offer a JSON-based REST API and Excel/CSV exports. So it's possible that you may be able to use one of these methods to help port your data out and into another system.
⚠️ Our API builds half of the bridge to port your data over and the other half of the bridge, you will need to build. Please check with your organization’s IT department to ask if they can help you with this.
API Endpoints: Listing Users
Organization: https://api.betterimpact.com/v1/organization/users/
Parameters: None
Query parameters
Query parameters
Parameter | Description | Valid Values/Defaults |
page_size | The number of results per page. | 1 to 250 |
page_number | The page number to retrieve. | 0 to * |
include_ | Whether or not to include custom fields in the results. | “true” or “false” |
include_ | Whether or not to include qualifications in the results. | “true” or “false” |
include_ | Whether or not to include membership information in the results. | “true” or “false” |
include_ | Whether or not to include Verified Volunteers background check information in the results. | “true” or “false” |
organization_ids | ENTERPRISE ENDPOINT ONLY. Comma separated list of organization IDs to return results for. This will return all users who belong to any of the organizations passed. | Comma separated list of valid organization IDs (integers) |
modules | A comma separated list of the module members you would like to return. | You may use the full, or short form for the module names: |
admin_status | A comma separated list of the admin statuses you would like to restrict the results to. | active |
client_status | A comma separated list of the client statuses you would like to restrict the results to. | applicant |
donor_status | A comma separated list of the donor statuses you would like to restrict the results to. | prospect |
member_status | A comma separated list of the member statuses you would like to restrict the results to. | applicant |
volunteer_status | A comma separated list of the volunteer statuses you would like to restrict to. | applicant |
updated_since | This parameter will restrict the results to profiles that have changed since the date specified. | DateTimes are required to be in ISO 8601 format (using the format string: “yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss’.’fffffffK”). Please see this documentation for more information: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-round-trip-o-o-format-specifier. |
Response parameters
Response parameters
Property | Type | Description |
Header | Object. See below for properties. | Header information related to paging and result set. |
Users | Array of user objects. See single User section for property descriptions. | A list of the users that match the query parameters. |
Header Properties
Header Properties
Property | Type | Description |
first_item_on_page | integer | The 1 based index of the first item in the returned page of the users collection. |
has_next_page | boolean | True if there is more pages to be returned. |
has_previous_page | boolean | True if there is pages before the returned users collection. |
is_first_page | boolean | True if returned collection is page 1. |
is_last_page | boolean | True if returned collection is the last page. |
last_item_on_page | integer | The 1 based index of the last item in the returned page of the users collection. |
page_count | integer | The number of pages in the users collection. |
page_number | integer | The number of the page returned. |
page_size | integer | The size of the page returned. |
total_items_count | integer | The total number of users that match the query parameters across all pages. |
API Endpoints: Single User
Organization: https://api.betterimpact.com/v1/organization/users/{user_id}
Parameters
Parameters
Parameter | Description |
{user_id} | The user id of the user you wish to retrieve. |
Query parameters: None
Response
Response
A single user document, containing its own fields, as well as membership documents, custom field documents, and qualifications documents.
Qualifications will only be included if your API user credentials have access to the Volunteer module.
Custom Fields will only be included if your API user credentials have access to at least one module that is specified on the custom field (the intersection between your modules and the ones on the custom field.).
User Properties
User Properties
Property | Type | Description / Notes |
user_id | integer | Unique id of user |
first_name | string | First name |
last_name | string | Last name |
legal_first_name | string | Legal first name |
middle_name | string | Middle name |
title | string | Title (salutation) |
suffix | string | Suffix |
pronouns | string | Pronouns |
address_line_1 | string | Line 1 of Address |
address_line_2 | string | Line 2 of Address |
city | string | City |
zip_code | string | Zip Code / Postal Code / Post Code |
state | string | State / Province / County |
country | string | Country |
email_address | string | Email address |
secondary_email_address | string | Secondary email address |
mobile_email_address | string | Mobile email address |
home_phone | string | Home phone number |
work_phone | string | Work phone number |
work_phone_ext | string | Work phone number extension |
cell_phone | string | Cell / Mobile phone number |
phone_preference | string | Phone preference |
twitter_username | string | Twitter username |
linkedIn_profile_url | string | LinkedIn profile URL |
Instagram_username | string | Instagram username |
username | string | If Single Sign On is enabled for this user, this field will contain the SSO username. Otherwise this field will contain the username from our system. |
single_sign_on_enabled | boolean | Whether or not Single Sign On is enabled for the user. |
birthday | string | Birthday in ISO 8601 UTC format (may be null) |
date_created | string | Date profile was created in ISO 8601 UTC format |
date_updated | string | Date profile was last updated in ISO 8601 UTC format |
region | string | Localized Name of the region |
region_code | string | Language code for region |
is_group | boolean | Does this profile represent a group |
group_name | string | Group name |
photo_url_scaled | string | URL of a scaled down version of the user’s photo |
photo_url_original | string | URL of the original user’s photo |
timeclock_qr_code_url | string | URL of the user’s QR code image |
memberships | array of membership objects | See below for properties |
custom_fields | array of custom field objects | See below for properties |
qualifications | array of qualification objects | See below for properties |
background_check_results | array of background check objects | See below for properties |
Membership Properties
Membership Properties
Property | Type | Description / Notes |
organization_member_id | integer | Unique identifier of membership object |
organization_id | integer | Organization Id |
organization_name | string | Organization Name |
date_created | string | Date membership was created in ISO 8601 UTC format |
date_updated | string | Date membership was updated in ISO 8601 UTC format |
is_administrator | boolean | True if user is part of the administrator module in this organization |
administrator_status | string | Localized Status of user in administrator module (may be null) |
administrator_type | string | Localized type (Full, Module, Limited) of administrator (may be null) |
is_client | boolean | True if user is part of the client module in this organization |
client_status | string | Localized status of the user in the client module (may be null) |
client_date_joined | string | Date joined as client in ISO 8601 UTC format (may be null) |
client_last_status_change | string | Date of last client status change in in ISO 8601UTC format (may be null) |
donor_date_joined | string | Date joined as donor in ISO 8601 UTC format (may be null) |
donor_last_status_change | string | Date of last donor status change in in ISO 8601UTC format (may be null) |
member_date_joined | string | Date joined as member in ISO 8601 UTC format (may be null) |
member_last_status_change | string | Date of last member status change in in ISO 8601UTC format (may be null) |
is_donor | boolean | True if user is part of the donor module is this organization |
donor_status | string | Localized status of the user in the donor module (may be null) |
is_member | boolean | True if user is part of the member module is this organization |
member_status | string | Localized status of the user in the member module (may be null) |
is_volunteer | boolean | True if user is part of the volunteer module is this organization |
volunteer_status | string | Localized status of the user in the volunteer module (may be null) |
volunteer_inactive_status_reason | string | Localized volunteer inactive status reason (may be null) |
volunteer_archived_status_reason | string | Localized volunteer archived status reason (may be null) |
volunteer_last_status_change | string | Date of last volunteer status change in in ISO 8601UTC format (may be null) |
volunteer_notes | string | Volunteer Notes (may be null) |
volunteer_application_form | integer | Volunteer Application Form Number (may be null) |
volunteer_date_joined | string | Date joined as volunteer in ISO 8601 UTC format (may be null) |
volunteer_total_hours | number | Total hours logged for volunteer |
Custom Field Properties
Custom Field Properties
Property | Type | Description / Notes |
type | string / constant | Type of custom fields: |
value | yes_no (boolean) | True = yes, False = No |
value_id | integer | For drop_down type custom fields only (the id of the selected value) |
custom_field_id | integer | Custom Field Id |
custom_field_name | string | Custom Field Name |
custom_field_category_id | integer | Custom Field Category Id (may be null) |
custom_field_category_name | string | Custom Field Category Name |
Qualification Properties
Qualification Properties
Property | Type | Description / Notes |
qualification_id | integer | Qualification Id |
qualification_name | string | Qualification Name |
qualification_expires | boolean | True if qualification is an expiring qualification |
value | string | Text of selected qualification level |
value_id | integer | ID of selected qualification level |
expiry_date | string | Expiry date in ISO 8601 UTC format (may be null) |
qualification_category_id | nullable integer | Qualification category id (will be null if there is no category) |
qualification_category_name | nullable string | Qualification category name (will be null if there is no category) |
Background Check Properties
Background Check Properties
Property | Type | Description / Notes |
result_type_id | integer | Result type ID |
result_type_name | string | Result type name |
result_type_expires | boolean | True if result type is an expiring result type |
state | string | Current state of background check for this person |
needs_review_reason | string | String containing the reason that this person needs review (blank if state is not needs review) |
effective_date | date | Date that this background check is effective on |
expiry_date | date | Date that this background check expires (null if it doesn’t expire) |
API Endpoints: Users By ID List
Parameters: None
Query Parameters
Query Parameters
{ids} A comma-separated list of user IDs to retrieve (limit of 250 ids per request).
Response
Response
An array of user documents. See single single-user section for description.
Custom Field Files
Organization: https://api.betterimpact.com/v1/organization/users/{user_id}/custom_fields/{user_custom_field_id}/file
These URLS are specified as the value of the custom field when custom fields are retrieved as part of a single, or list of users.
Parameters
Parameters
Parameter | Description |
{user_id} | The user id of the user the custom field file belongs to |
{user_custom_field_id} | The id of the user custom field value |
Query Parameters: None
Response
Response
The file that was requested, as a byte stream.
API Endpoints: Single Timelog Entry
Parameters
Parameters
{id} The ID of the timelog entry to retrieve.
Query Parameters: None
Response
Response
A single timelog entry document. See below:
Property | Type | Description / Notes |
timelog_entry_id | integer | The ID of the timelog entry |
date_created | string | The date created, in ISO 8601 UTC format |
date_updated | string | The date updated, in ISO 8601 UTC format |
timelog_entry_type | string | One of: “Unknown” – It is not known what type of entry this is, “Logged” – This entry was created by logging the time manually, “Timeclock” – This entry was created while stopping a timeclock, “Automatic” – This entry was created automatically. |
date_worked | string | The date that was worked, in ISO 8601 UTC format |
hours_worked | number | The number of hours worked |
approved | boolean | Whether or not the timelog entry is approved |
clock_start_time | string | The date the clock was started, if this is a “Timeclock” type entry, in ISO 8601 UTC format. (may be null, if there was no timeclock activity for this timelog) |
activity_id | integer | The ID of the activity that this timelog entry is for |
activity_name | string | The name of the activity that this timelog entry is for |
activity_category_id | integer | The ID of the activity category that this timelog entry is for |
activity_category_name | string | The name of the activity category that this timelog entry is for |
activity_report_group_id | integer | The ID of the activity report group (if applicable) that this timelog entry is for (may be null) |
activity_report_group_name | string | The name of the activity report group (if applicable) category that this timelog entry is for |
organization_id | integer | The id of the organization that this timelog entry is for |
organization_name | integer | The name of the organization that this timelog entry is for |
user_id | integer | The id of the user that this timelog entry is for |
first_name | string | The first name of the user that this timelog entry is for |
last_name | string | The last name of the user that this timelog entry is for |
created_by_user_id | integer | The id of the user that created this timelog entry (may be null) |
created_by_first_name | string | The first name of the user that created this timelog entry |
created_by_last_name | string | The last name of the user that created this timelog entry |
recorded_feedback_fields | array of recorded feedback fields objects | See below for properties |
Recorded Feedback Field
Property | Type | Description / Notes |
feedback_field_id | integer | The id of the feedback field |
feedback_field_name | string | The name of the feedback field |
value | string or number | The value of the feedback field. Number fields will be number type, all other feedback fields will be string type |
value_id | integer | The id of the value of the feedback field, if the feedback field is dropdown type (optional, not included for fields that are not dropdown type) |
API Endpoints: Timelog entries by filtering
Parameters: None
Query Parameters
Query Parameters
Property | Type | Description / Notes |
user_ids | Comma separated list of user ids to return results for | Comma separated list of valid user IDs (integers) Default: All users. |
activity_ids | Comma separated list of activity ids to return results for | Comma separated list of valid activity IDs (integers) Default: All activities. |
activity_category_ids | Comma separated list of activity category ids to return results for | Comma separated list of valid activity category IDs (integers) Default: All activity categories. |
activity_report_group_ids | Comma separated list of activity report group ids to return results for | Comma separated list of valid activity report group IDs (integers) Default: All activity report groups |
page_size | The number of results per page. | 1 to 250, Default: 100 |
page_number | The page number to retrieve. | 0 to *, Default: 0 |
include_recorded_feedback_fields | Whether or not to include recorded feedback fields in the results. | “true” or “false”, Default: “true” |
approved | Filter results to approved only. | “true” or “false”, Default: “true” |
updated_since | This parameter will restrict the results to timelog entries that have changed since the date specified. | DateTimes are required to be in ISO 8601 format (using the format string: “yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss’.’fffffffK”). Please see this documentation for more information: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-round-trip-o-o-format-specifier. Default: Empty. |
created_from | This parameter will restrict the results to timelog entries that were created after the date specified. | DateTimes are required to be in ISO 8601 format (using the format string: “yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss’.’fffffffK”). Please see this documentation for more information: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-round-trip-o-o-format-specifier. Default: Empty. |
created_to | This parameter will restrict the results to timelog entries that were created before the date specified. | DateTimes are required to be in ISO 8601 format (using the format string: “yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss’.’fffffffK”). Please see this documentation for more information: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-round-trip-o-o-format-specifier. Default: Empty. |
worked_from | This parameter will restrict the results to timelog entries that were worked after the date specified. | DateTimes are required to be in ISO 8601 format (using the format string: “yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss’.’fffffffK”). Please see this documentation for more information: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-round-trip-o-o-format-specifier. Default: Empty. |
worked_to | This parameter will restrict the results to timelog entries that were worked before the date specified. | DateTimes are required to be in ISO 8601 format (using the format string: “yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss’.’fffffffK”). Please see this documentation for more information: https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings#the-round-trip-o-o-format-specifier. Default: Empty. |
organization_ids | ENTERPRISE ENDPOINT ONLY. Comma separated list of organization IDs to return results for. | This will return all timelog entries that belong to any of the organizations passed. Comma separated list of valid organization IDs (integers) Default: All organizations in the enterprise. |
Response parameters
Response parameters
Property | Type | Description |
Header | Object. See below for properties. | Header information related to paging and result set. |
TimelogEntries | Array of timelog entry objects. See single timelog entry section for property descriptions. | A list of the timelog entries that match the query parameters. |
Header Properties
Header Properties
Property | Type | Description |
first_item_on_page | integer | The 1 based index of the first item in the returned page of the timelog entries collection. |
has_next_page | boolean | True if there is more pages to be returned. |
has_previous_page | boolean | True if there is pages before the returned timelog entries collection. |
is_first_page | boolean | True if returned collection is page 1. |
is_last_page | boolean | True if returned collection is the last page. |
last_item_on_page | integer | The 1 based index of the last item in the returned page of the timelog entries collection. |
page_count | integer | The number of pages in the timelog entries collection. |
page_number | integer | The number of the page returned. |
page_size | integer | The size of the page returned. |
total_items_count | integer | The total number of timelog entries that match the query parameters across all pages. |
API Endpoints: Timelog entries by ID list
Enterprise:
Parameters: None
Query Parameters
Query Parameters
{ids} A comma separated list of timelog entry ids to retrieve (limit of 250 ids per request)
Create API Keys
API keys provide secure access for external applications to interact with your Volunteer Impact data. Each key generates a unique username and password, and access can be scoped by module. Administrators can enable, edit, or delete keys and control which users have permission to manage them.
Go to: Configuration >> Organization Settings >> Security Settings
Scroll down to the API Keys section
Click the [+ Create API Key] button
Optional: Check the “Enabled” box so that the API key will be able to access your account’s information
Check the appropriate Modules checkbox(es). This controls the modules that any applications that use this API key will have access to. For example, by choosing Volunteer, applications that use this key will be able to see Volunteers when listing users.
Click the [Create API Key] button. A username and password will be created for the API Key.
The [Options] button to the left of an existing API Key will give you the ability to Edit or Delete that key.
Note: You can control access to Manage API Keys for Limited Access Admins.
API Lookup
The API Lookup endpoints provide reference data used throughout the Volunteer Impact system, including activity categories, organizations, report groups, qualifications, custom fields, and feedback fields. These endpoints allow applications to retrieve metadata that helps interpret user data, timelog entries, and module-specific information. Access varies by level: some lookups are enterprise-only, others organization-only, ensuring that data is returned within the appropriate scope.
API Endpoints: Lookup Activity Categories
Enterprise: No access. Activity categories are only available at the organization level.
Parameters
Parameters
None.
Query Parameters
Query Parameters
None.
Response
Response
An array of activity category documents. See below.
Property | Type | Description |
activity_category_id | Integer | The ID of the activity category. |
name | String | The name of the activity Category |
API Endpoints: Lookup Organizations
Organization: No access. Organizations are only available at the enterprise level.
Parameters
Parameters
None.
Query Parameters
Query Parameters
None.
Response
Response
An array of organization documents. See below.
Property | Type | Description |
organization_id | Integer | The ID of the organization |
name | String | The name of the organization |
active | Boolean | Whether or not the organization is active |
date_created | DateTime | The datetime when the organization was created, ISO 8601 UTC format. |
date_updated | DateTime | The datetime when the organization was last updated, ISO 8601 UTC format. |
has_administrator_module | Boolean | Whether or not the organization has the administrator module enabled |
has_client_module | Boolean | Whether or not the organization has the client module enabled |
has_donor_module | Boolean | Whether or not the organization has the donor module enabled |
has_member_module | Boolean | Whether or not the organization has the member module enabled |
has_volunteer_module | Boolean | Whether or not the organization has the volunteer module enabled |
enterprise_region_id | Integer | The ID of the region that the enterprise exists in |
enterprise_region_name | String | The name of the region that the enterprise exists in |
API Endpoints: Lookup Activity Report Groups
Organization: No access. Activity report groups are only available at the enterprise level.
Parameters
Parameters
None.
Query Parameters
Query Parameters
None.
Response
Response
An array of activity report group documents. See below.
Property | Type | Description |
activity_report_group_id | Integer | The ID of the activity report group. |
name | String | The name of the activity report group |
API Endpoints: Lookup Qualifications
Paramenters
Paramenters
None.
Query Parameters
Query Parameters
None.
Response
Response
An array of qualification documents. See below.
Property | Type | Description |
qualification_id | Integer | The ID of the qualification |
name | String | The name of the qualification |
expires | Boolean | Whether or not the qualification expires |
match_type | String | The type of match to achieve the qualification. Options are: “exact” and “ranked” |
display_order | Integer | Ascending numeric display order. Allows ordering the list in the same way it is displayed in Better Impact |
belongs_to_enterprise | Boolean | Whether or not the qualification belongs to an enterprise. Enterprise qualifications are shown at the organization level. |
qualification_category_id | nullable integer | Qualification Category ID - Will be null if there is no category |
qualification_category_name | String | Qualification Category name - will be empty string ( "") if there is no category |
qualification_category_display_order | nullable integer | Qualification Category display order - will be null if there is no category |
Qualification option object
Property | Type | Description |
qualification_option_id | Integer | The ID of the qualification option |
description | String | A string that describes the qualification option |
rank | Integer | Which rank this qualification option is (in order) |
API Endpoints: Lookup Custom Fields
Parameters
Parameters
None.
Query Parameters
Query Parameters
None.
Response
Response
An array of custom field documents. See below.
Property | Type | Description |
custom_field_id | Integer | The ID of the custom field |
name | String | The name of the custom field |
display_order | Integer | Ascending numeric display order. Allows ordering the list in the same way it is displayed in Better Impact. The orders start at 1 inside each category. |
belongs_to_enterprise | Boolean | Whether or not this custom field belongs to an enterprise. Enterprise custom fields are shown in the organization list. |
custom_field_category_id | Integer | The ID of the category that this custom field resides in |
custom_field_category_name | String | The name of the category that the custom field resides in. |
custom_field_category_display_order | Integer | Ascending numeric display order. Allows ordering the list in the same way it is displayed in Better Impact |
options | Array of custom field dropdown option objects | See below. Only included for dropdown custom fields. |
Custom field option object
Property | Type | Description |
custom_field_option_id | Integer | The ID of the custom field option |
description | String | A string that describes the custom field option |
API Endpoints: Feedback Fields
Parameters
Parameters
None.
Query Parameters
Query Parameters
None.
Response
Response
An array of feedback field documents. See below.
Property | Type | Description |
feedback_field_id | Integer | The ID of the feedback field |
name | String | The name of the feedback field |
prompt | String | The prompt that is displayed to the volunteer when filling out this feedback field |
active | Boolean | Whether or not this feedback field is active |
required | Boolean | Whether or not this feedback field is required |
belongs_to_enterprise | Boolean | Whether or not this feedback field belongs to an enterprise. Enterprise feedback fields are shown on the organization list |
options | Array of feedback field option objects | See below. Only included for dropdown type feedback fields |
Feedback field option object
Property | Type | Description |
feedback_field_option_id | Integer | The ID of the feedback field option |
description | String | A string that describes the feedback field option |