Skip to main content
The Volunteer API (commonly referred to internally as the VOMO API) gives partner integrations programmatic access to a customer’s volunteer management data in VOMO — their Users, Projects, Groups, Campaigns, Organizations, Forms, and Certificates. It’s the third of the three Virtuous APIs, alongside CRM+ and Raise, and it’s the most distinct of the three in conventions, scope, and design. This page covers what the API is for, how it differs from the other two Virtuous APIs, and what partner integrations typically build against it.

What VOMO is

VOMO is Virtuous’s volunteer engagement platform. Customers use it to:
  • Recruit and manage volunteer Users
  • Plan and run Projects (specific volunteer opportunities)
  • Organize Groups of volunteers around recurring activities or affinities
  • Track Participations when volunteers show up to Project Dates
  • Group Projects under longer-running Campaigns
  • Manage Forms that volunteers complete (waivers, signups, profile data)
  • Award Certificates for completed training or achievements
  • Operate as part of an Organization family (parent-child organization hierarchies)
The API exposes these resources for read access (heavy) and a limited surface of write operations.

At a glance

How Volunteer differs from CRM+ and Raise

If you’ve worked with CRM+ or Raise, several Volunteer conventions will look different. Understanding the differences upfront prevents bugs.

Naming conventions are snake_case

Volunteer uses snake_case everywhere — query parameters (name_like, created_before, updated_after) and response properties (first_name, last_name, created_at, user_status). This is consistent throughout the API but differs from CRM+ (PascalCase) and Raise (mixed PascalCase on /list, camelCase on /query). For partners building integrations against multiple Virtuous APIs:
JavaScript
Each API is internally consistent; the inconsistency is across APIs. See Conventions across the three APIs below.

Pagination uses a different envelope

CRM+ and Raise use { list, total } and { items, total } envelopes respectively. Volunteer uses a richer Laravel-style envelope with three top-level fields:
The links field provides direct URLs for paging navigation — partners can follow links.next rather than constructing URLs manually. See Pagination for the full pattern.

No webhooks — polling is the only path

Unlike CRM+ and Raise (which both have webhook subscription APIs), Volunteer has no webhook surface at all. Partner integrations that need to react to changes in Volunteer data must poll — typically by querying with the updated_after filter on resources that support it. This shapes the integration architecture significantly. The “Webhooks and Events” group in the CRM+ and Raise docs is replaced by Polling and Sync in the Volunteer docs.

Mostly read, limited writes

The API is dominated by GET endpoints. The write endpoints that do exist: Most notably, there’s no write endpoint for Participations. Partners can read participation records (returned nested on User and Project Date responses) but cannot create or modify them through the API. Partners who need to record participations programmatically must coordinate with VOMO’s admin team for an alternative path. See Understand Write Limitations for the complete picture.

URL-versioned

Volunteer’s path includes a /v1/ segment: https://api.vomo.org/v1/users. This is different from Raise (which is unversioned) and CRM+ (which uses unversioned /api/ paths). The presence of /v1/ suggests a future /v2/ may exist someday and existing integrations would have a migration path. For now, all integrations use /v1/. See Versioning and Backward Compatibility.

The resource model

The eight resource families and how they relate: The central relationships: See The Volunteer Data Model for the full reference.

What partner integrations build against the Volunteer API

Common partner integration patterns: Most of these are read-heavy. Volunteer’s API surface is well-suited to feeding data outward into other systems. What the API is not typically used for:
  • Recording new participations — no write endpoint exists
  • Managing volunteer scheduling — Project Dates are read-only; scheduling happens in the VOMO admin UI
  • Volunteer self-service — the API isn’t designed for direct exposure to volunteers; build a partner-controlled portal layer instead
  • Webhook-driven real-time sync — no webhooks exist

Conventions across the three Virtuous APIs

A quick reference for partners building against multiple APIs: The three APIs were built by different teams at different times (some pre-acquisition by Virtuous). The differences reflect those histories. The v2 platform overhaul is expected to reconcile many of these inconsistencies, but until then, integrations target each API on its own terms.

What’s documented here

The Volunteer documentation covers: Notably absent (compared to CRM+ and Raise):
  • No “Webhooks” group — replaced by Polling and Sync, since Volunteer has no webhook surface.
  • Fewer recipes — the smaller API surface produces fewer distinct integration shapes.

What’s in the spec but flagged for review

The Volunteer OpenAPI spec has several gaps the documentation team is aware of and that partner integrations should know about: These are documented inline on the relevant reference pages with <Warning> callouts. Until the spec is updated, the patterns on this page describe what to expect from the live API.

Where to go next

Quickstart

A minimal end-to-end example — get a token, list users, parse the response.

Authentication

How to obtain a Bearer token and use it on every request.

The Volunteer Data Model

The full resource model with all eight families and their relationships.

Conventions across APIs

The cross-API reference for partners building against multiple Virtuous products.
Last modified on May 22, 2026