Project vs. Project Date — the mental model
The clearest analogy is a recurring meeting:The Project endpoints
Two paths in this list relate to Project Dates (
/projects/today and /projects/date/{id}) rather than Projects themselves. The next sections distinguish them.
The Project resource
List shape (ProjectResource)
GET /projects returns an array of ProjectResource objects — the metadata describing the volunteer opportunity:
Detail shape (ProjectDetailResource)
GET /projects/{id} returns a ProjectDetailResource — a superset of ProjectResource plus the operational policy fields:
The
all_dates and next_date fields are particularly useful for partner integrations — they let you read the Project’s schedule without separate Project Date fetches.
Listing projects
cURL
Available filters
The
dates_before and dates_after filters are distinctive — they filter Projects by the timing of their Project Dates, not by the Project’s own creation or update time. Useful for “Projects with shifts coming up this month” queries.
Common list patterns
Currently active and published projects:JavaScript
JavaScript
JavaScript
Fetching a single project
cURL
ProjectDetailResource with full policy fields and scheduled dates.
JavaScript
Creating a project
cURL
id for subsequent updates.
Updating a project
cURL
PUT /projects/{id} is a full replacement — the request body must contain every field that should persist. Fields omitted from the request may be set to default values or null.
The GET-then-PUT pattern
For partial updates, fetch the current record, modify the fields you need, then PUT the full record back:JavaScript
Project Date endpoints
Two endpoints expose Project Dates:
There’s no
GET /project-dates/{id} or similar — Project Dates are accessed through the Project path or through “today” view only.
GET /projects/today
Returns a list of HappeningResource objects — Project Dates scheduled for today:
The VOMO term “Happening” is used internally for a Project Date.
HappeningResource is the schema; Project Date is the conceptual name. Both refer to the same thing.GET /projects/date/{id}
Returns a specific Project Date with full detail including the participants:
JavaScript
Participants on a Project Date
The participants embedded in a Project Date response use theParticipant schema:
Participant is the display representation; ParticipationResource (returned on UserDetailResource.participations) is the record representation with timing and verification details. The two are related but distinct.
Common Project workflows
Build a “today” dashboard
JavaScript
Pull a Project’s full schedule
JavaScript
all_dates field on ProjectDetailResource provides the full schedule without separate Project Date fetches.
Find Projects with capacity
JavaScript
Sync Projects to an external system
JavaScript
updated_after filter combined with links.next pagination produces a clean incremental sync.
What can’t be done via the API
Most of these are intentional — they preserve the customer’s organizer-controlled scheduling and check-in workflow. Partner integrations that need to push participation data into VOMO should coordinate with VOMO’s admin team for alternative paths.
See Understand Write Limitations.
A reference Project client
JavaScript
Where to go next
Groups
The User-organizing resource — Groups and Group Members.
Users
The User resource — including the participations embedded in user details.
The Volunteer Data Model
The full data model context.
Create or Update a Project
The workflow walkthrough for Project writes.