Saltar al contenido principal

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/JWTList all plans for the church
GET/:idJWTGet a plan by ID
GET/ids?ids=JWTGet multiple plans by comma-separated IDs
GET/types/:planTypeIdJWTGet plans by plan type
GET/presenterJWTGet plans for the next 7 days (presenter view)
GET/public/current/:planTypeIdPublicGet the current plan for a plan type
POST/JWTCreate or update plans (accepts single object or array)
POST/copy/:idJWTCopy a plan including positions, times, assignments, and service order items. Body includes copyMode ("none", "positions", "all") and copyServiceOrder (boolean)
POST/autofill/:idJWTAuto-fill volunteer assignments for a plan. Body: { teams: [{ positionId, personIds }] }
DELETE/:idJWTDelete 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/JWTList all plan types
GET/:idJWTGet a plan type by ID
GET/ids?ids=JWTGet multiple plan types by comma-separated IDs
GET/ministryId/:ministryIdJWTGet plan types for a ministry
POST/JWTCreate or update plan types
DELETE/:idJWTDelete 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/:idJWTGet a plan item by ID
GET/ids?ids=JWTGet multiple plan items by comma-separated IDs
GET/plan/:planIdJWTGet all plan items for a plan (returns tree structure)
GET/presenter/:churchId/:planIdPublicGet plan items for presenter view (returns tree structure)
POST/JWTCreate or update plan items
POST/sortJWTUpdate sort order for a plan item (re-sorts siblings)
DELETE/:idJWTDelete 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/:planIdPublicGet 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/:idJWTGet a position by ID
GET/ids?ids=JWTGet multiple positions by comma-separated IDs
GET/plan/ids?planIds=JWTGet positions for multiple plans by comma-separated plan IDs
GET/plan/:planIdJWTGet all positions for a plan
POST/JWTCreate or update positions
DELETE/:idJWTDelete a position

Times

Base path: /doing/times

MethodPathAuthPermissionDescription
GET/allJWTList all times for the church
GET/:idJWTGet a time by ID
GET/plans?planIds=JWTGet times for multiple plans by comma-separated plan IDs
GET/plan/:planIdJWTGet all times for a plan
POST/JWTCreate or update times
DELETE/:idJWTDelete a time

Assignments

Base path: /doing/assignments

MethodPathAuthPermissionDescription
GET/myJWTGet assignments for the current user
GET/:idJWTGet an assignment by ID
GET/plan/ids?planIds=JWTGet assignments for multiple plans by comma-separated plan IDs
GET/plan/:planIdJWTGet all assignments for a plan
POST/JWTCreate or update assignments (defaults status to "Unconfirmed")
POST/accept/:idJWTAccept an assignment (must be the assigned person)
POST/decline/:idJWTDecline an assignment (must be the assigned person)
DELETE/:idJWTDelete 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/:idJWTGet a blockout date by ID
GET/ids?ids=JWTGet multiple blockout dates by comma-separated IDs
GET/myJWTGet blockout dates for the current user
GET/upcomingJWTGet all upcoming blockout dates for the church
POST/JWTCreate or update blockout dates (defaults personId to current user if not provided)
DELETE/:idJWTDelete a blockout date

Tasks

Base path: /doing/tasks

MethodPathAuthPermissionDescription
GET/JWTGet open tasks for the current user
GET/:idJWTGet a task by ID
GET/closedJWTGet closed tasks for the current user
GET/timeline?taskIds=JWTGet timeline data for tasks by comma-separated task IDs
GET/directoryUpdate/:personIdJWTGet directory update task for a person
POST/JWTCreate or update tasks. Add ?type=directoryUpdate to handle directory update tasks (auto-uploads photos)
POST/loadForGroupsJWTLoad tasks for specific groups. Body: { groupIds: [], status: "Open" }

Automations

Base path: /doing/automations

MethodPathAuthPermissionDescription
GET/JWTList all automations for the church
GET/:idJWTGet an automation by ID
GET/checkPublicTrigger a check of all automations
POST/JWTCreate or update automations
DELETE/:idJWTDelete an automation

Actions

Base path: /doing/actions

Actions define what happens when an automation is triggered.

MethodPathAuthPermissionDescription
GET/:idJWTGet an action by ID
GET/automation/:idJWTGet all actions for an automation
POST/JWTCreate or update actions
DELETE/:idJWTDelete an action

Conditions

Base path: /doing/conditions

Conditions define the criteria that trigger an automation.

MethodPathAuthPermissionDescription
GET/:idJWTGet a condition by ID
GET/automation/:idJWTGet all conditions for an automation
POST/JWTCreate or update conditions
DELETE/:idJWTDelete a condition

Conjunctions

Base path: /doing/conjunctions

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

MethodPathAuthPermissionDescription
GET/:idJWTGet a conjunction by ID
GET/automation/:idJWTGet all conjunctions for an automation
POST/JWTCreate or update conjunctions
DELETE/:idJWTDelete 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/JWTList all content provider auths
GET/:idJWTGet a content provider auth by ID
GET/ids?ids=JWTGet multiple content provider auths by comma-separated IDs
GET/ministry/:ministryIdJWTGet all content provider auths for a ministry
GET/ministry/:ministryId/:providerIdJWTGet auth record for a specific ministry and provider
POST/JWTCreate or update content provider auths
DELETE/:idJWTDelete 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/browseJWTBrowse content provider files. Body: { ministryId, providerId, path }
POST/getPresentationsJWTGet presentations from a content provider. Body: { ministryId, providerId, path }
POST/getPlaylistJWTGet a playlist from a content provider. Body: { ministryId, providerId, path, resolution }
POST/getInstructionsJWTGet instructions for a content item. Body: { ministryId, providerId, path }
POST/getExpandedInstructionsJWTGet expanded instructions for a content item. Body: { ministryId, providerId, path }