Skip to main content

Doing Endpoints

The Doing module manages service planning, volunteer scheduling, task management, and automations. It provides tools for creating service plans with times and positions, assigning volunteers, managing blockout dates, building service order items, connecting to external content providers, and configuring automated workflows with conditions and actions.

Base path: /doing

Plans​

Base path: /doing/plans

MethodPathAuthPermissionDescription
GET/JWT—List all plans for the church
GET/:idJWT—Get a plan by ID
GET/ids?ids=JWT—Get multiple plans by comma-separated IDs
GET/types/:planTypeIdJWT—Get plans by plan type
GET/presenterJWT—Get plans for the next 7 days (presenter view)
GET/public/current/:planTypeIdPublic—Get the current plan for a plan type
POST/JWT—Create or update plans (accepts single object or array)
POST/copy/:idJWT—Copy a plan including positions, times, assignments, and service order items. Body includes copyMode ("none", "positions", "all") and copyServiceOrder (boolean)
POST/autofill/:idJWT—Auto-fill volunteer assignments for a plan. Body: { teams: [{ positionId, personIds }] }
DELETE/:idJWT—Delete a plan and all related times, assignments, positions, and plan items

Example: Copy a Plan​

POST /doing/plans/copy/abc-123
Authorization: Bearer <token>

{
"serviceDate": "2026-03-01T10:00:00.000Z",
"copyMode": "all",
"copyServiceOrder": true
}
{
"id": "def-456",
"churchId": "church-1",
"serviceDate": "2026-03-01T10:00:00.000Z"
}

Plan Types​

Base path: /doing/planTypes

Extends CRUD base class (GET /, GET /:id, POST /, DELETE /:id — no permission checks).

MethodPathAuthPermissionDescription
GET/JWT—List all plan types
GET/:idJWT—Get a plan type by ID
GET/ids?ids=JWT—Get multiple plan types by comma-separated IDs
GET/ministryId/:ministryIdJWT—Get plan types for a ministry
POST/JWT—Create or update plan types
DELETE/:idJWT—Delete a plan type

Plan Items​

Base path: /doing/planItems

Manages service order items (headers, sections, songs, etc.) organized in a parent-child tree structure.

MethodPathAuthPermissionDescription
GET/:idJWT—Get a plan item by ID
GET/ids?ids=JWT—Get multiple plan items by comma-separated IDs
GET/plan/:planIdJWT—Get all plan items for a plan (returns tree structure)
GET/presenter/:churchId/:planIdPublic—Get plan items for presenter view (returns tree structure)
POST/JWT—Create or update plan items
POST/sortJWT—Update sort order for a plan item (re-sorts siblings)
DELETE/:idJWT—Delete a plan item

Plan Feed​

Base path: /doing/planFeed

Provides plan item feeds for the presenter. If no plan items exist, auto-populates from the Lessons.church venue feed using the plan's contentId.

MethodPathAuthPermissionDescription
GET/presenter/:churchId/:planIdPublic—Get plan feed for presenter (auto-populates from venue feed if empty)

Positions​

Base path: /doing/positions

Extends CRUD base class (GET /:id, POST /, DELETE /:id — no permission checks).

MethodPathAuthPermissionDescription
GET/:idJWT—Get a position by ID
GET/ids?ids=JWT—Get multiple positions by comma-separated IDs
GET/plan/ids?planIds=JWT—Get positions for multiple plans by comma-separated plan IDs
GET/plan/:planIdJWT—Get all positions for a plan
POST/JWT—Create or update positions
DELETE/:idJWT—Delete a position

Times​

Base path: /doing/times

MethodPathAuthPermissionDescription
GET/allJWT—List all times for the church
GET/:idJWT—Get a time by ID
GET/plans?planIds=JWT—Get times for multiple plans by comma-separated plan IDs
GET/plan/:planIdJWT—Get all times for a plan
POST/JWT—Create or update times
DELETE/:idJWT—Delete a time

Assignments​

Base path: /doing/assignments

MethodPathAuthPermissionDescription
GET/myJWT—Get assignments for the current user
GET/:idJWT—Get an assignment by ID
GET/plan/ids?planIds=JWT—Get assignments for multiple plans by comma-separated plan IDs
GET/plan/:planIdJWT—Get all assignments for a plan
POST/JWT—Create or update assignments (defaults status to "Unconfirmed")
POST/accept/:idJWT—Accept an assignment (must be the assigned person)
POST/decline/:idJWT—Decline an assignment (must be the assigned person)
DELETE/:idJWT—Delete an assignment

Example: Accept an Assignment​

POST /doing/assignments/accept/assign-123
Authorization: Bearer <token>
{
"id": "assign-123",
"personId": "person-456",
"positionId": "pos-789",
"planId": "plan-abc",
"status": "Accepted"
}

Blockout Dates​

Base path: /doing/blockoutDates

Extends CRUD base class (GET /:id, DELETE /:id — no permission checks).

MethodPathAuthPermissionDescription
GET/:idJWT—Get a blockout date by ID
GET/ids?ids=JWT—Get multiple blockout dates by comma-separated IDs
GET/myJWT—Get blockout dates for the current user
GET/upcomingJWT—Get all upcoming blockout dates for the church
POST/JWT—Create or update blockout dates (defaults personId to current user if not provided)
DELETE/:idJWT—Delete a blockout date

Tasks​

Base path: /doing/tasks

MethodPathAuthPermissionDescription
GET/JWT—Get open tasks for the current user
GET/:idJWT—Get a task by ID
GET/closedJWT—Get closed tasks for the current user
GET/timeline?taskIds=JWT—Get timeline data for tasks by comma-separated task IDs
GET/directoryUpdate/:personIdJWT—Get directory update task for a person
POST/JWT—Create or update tasks. Add ?type=directoryUpdate to handle directory update tasks (auto-uploads photos)
POST/loadForGroupsJWT—Load tasks for specific groups. Body: { groupIds: [], status: "Open" }

Automations​

Base path: /doing/automations

MethodPathAuthPermissionDescription
GET/JWT—List all automations for the church
GET/:idJWT—Get an automation by ID
GET/checkPublic—Trigger a check of all automations
POST/JWT—Create or update automations
DELETE/:idJWT—Delete an automation

Actions​

Base path: /doing/actions

Actions define what happens when an automation is triggered.

MethodPathAuthPermissionDescription
GET/:idJWT—Get an action by ID
GET/automation/:idJWT—Get all actions for an automation
POST/JWT—Create or update actions
DELETE/:idJWT—Delete an action

Conditions​

Base path: /doing/conditions

Conditions define the criteria that trigger an automation.

MethodPathAuthPermissionDescription
GET/:idJWT—Get a condition by ID
GET/automation/:idJWT—Get all conditions for an automation
POST/JWT—Create or update conditions
DELETE/:idJWT—Delete a condition

Conjunctions​

Base path: /doing/conjunctions

Conjunctions link multiple conditions together in an automation (AND/OR logic).

MethodPathAuthPermissionDescription
GET/:idJWT—Get a conjunction by ID
GET/automation/:idJWT—Get all conjunctions for an automation
POST/JWT—Create or update conjunctions
DELETE/:idJWT—Delete a conjunction

Content Provider Auths​

Base path: /doing/contentProviderAuths

Extends CRUD base class (GET /, GET /:id, POST /, DELETE /:id — no permission checks).

Manages OAuth authentication records for external content providers (e.g., presentation software integrations).

MethodPathAuthPermissionDescription
GET/JWT—List all content provider auths
GET/:idJWT—Get a content provider auth by ID
GET/ids?ids=JWT—Get multiple content provider auths by comma-separated IDs
GET/ministry/:ministryIdJWT—Get all content provider auths for a ministry
GET/ministry/:ministryId/:providerIdJWT—Get auth record for a specific ministry and provider
POST/JWT—Create or update content provider auths
DELETE/:idJWT—Delete a content provider auth

Provider Proxy​

Base path: /doing/providerProxy

Proxies requests to external content providers (e.g., ProPresenter, EasyWorship). Handles token refresh automatically when tokens expire.

MethodPathAuthPermissionDescription
POST/browseJWT—Browse content provider files. Body: { ministryId, providerId, path }
POST/getPresentationsJWT—Get presentations from a content provider. Body: { ministryId, providerId, path }
POST/getPlaylistJWT—Get a playlist from a content provider. Body: { ministryId, providerId, path, resolution }
POST/getInstructionsJWT—Get instructions for a content item. Body: { ministryId, providerId, path }
POST/getExpandedInstructionsJWT—Get expanded instructions for a content item. Body: { ministryId, providerId, path }