Capabilities
Projects & Engagements
List, create, update, archive, and manage canonical project/engagement identity, members, and settings without exposing raw GUI-shaped project JSON.
Interfaces
REST exposes the Customer → Engagement → Project hierarchy read-only from the top, plus bounded project identity, lifecycle, member, and settings commands with explicit confirmation and idempotency.
MCP can use the same public project API for lifecycle/member/settings operations; the legacy list_projects resolver remains available for lightweight discovery.
GraphQL exposes project reads plus explicit project, status, archive, member, and settings command mutations.
Project lifecycle, membership, and settings command facts emit through the durable webhook outbox.
Required scopes
projects:readAPI key scoperequiredprojects:writeAPI key scoperequiredagent:readAPI key scoperequiredExamples
List customers — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/customers" \
-H "Authorization: Bearer $DS_API_KEY"Retrieve a customer — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/customers/cust_abc123" \
-H "Authorization: Bearer $DS_API_KEY"List engagements — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/engagements" \
-H "Authorization: Bearer $DS_API_KEY"Retrieve an engagement — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/engagements/eng_abc123" \
-H "Authorization: Bearer $DS_API_KEY"List engagement projects — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/engagements/eng_abc123/projects" \
-H "Authorization: Bearer $DS_API_KEY"List projects — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/projects" \
-H "Authorization: Bearer $DS_API_KEY"Create a project — view in REST API reference
curl -X POST "https://www.digitalstack360.com/api/v1/projects" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-create-acme-v1" \
-H "Content-Type: application/json" \
-d '{"name":"Acme replatform","client_name":"Acme","workflow_mode":"guided","confirm":true}'Retrieve a project — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/projects/proj_abc123" \
-H "Authorization: Bearer $DS_API_KEY"Update project identity — view in REST API reference
curl -X PATCH "https://www.digitalstack360.com/api/v1/projects/proj_abc123" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-update-acme-v1" \
-H "Content-Type: application/json" \
-d '{"client_name":"Acme Inc.","confirm":true}'Update project status — view in REST API reference
curl -X POST "https://www.digitalstack360.com/api/v1/projects/proj_abc123/status" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-status-acme-v1" \
-H "Content-Type: application/json" \
-d '{"status":"active","confirm":true}'Archive a project — view in REST API reference
curl -X POST "https://www.digitalstack360.com/api/v1/projects/proj_abc123/archive" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-archive-acme-v1" \
-H "Content-Type: application/json" \
-d '{"confirm":true}'List project members — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/projects/proj_abc123/members" \
-H "Authorization: Bearer $DS_API_KEY"Add project member — view in REST API reference
curl -X POST "https://www.digitalstack360.com/api/v1/projects/proj_abc123/members" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-member-add-v1" \
-H "Content-Type: application/json" \
-d '{"user_id":"user_123","role":"viewer","confirm":true}'Update project member — view in REST API reference
curl -X PATCH "https://www.digitalstack360.com/api/v1/projects/proj_abc123/members/pmem_123" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-member-update-v1" \
-H "Content-Type: application/json" \
-d '{"role":"editor","confirm":true}'Remove project member — view in REST API reference
curl -X DELETE "https://www.digitalstack360.com/api/v1/projects/proj_abc123/members/pmem_123" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-member-remove-v1"Get project settings — view in REST API reference
curl -X GET "https://www.digitalstack360.com/api/v1/projects/proj_abc123/settings" \
-H "Authorization: Bearer $DS_API_KEY"Update project settings — view in REST API reference
curl -X PATCH "https://www.digitalstack360.com/api/v1/projects/proj_abc123/settings" \
-H "Authorization: Bearer $DS_API_KEY" \
-H "Idempotency-Key: project-settings-update-v1" \
-H "Content-Type: application/json" \
-d '{"ticket_prefix":"ACME","confirm":true}'GraphQL examples
projects:readRead visible projects and engagement identity fields.
query Projects($first: Int, $status: String) {
projects(first: $first, status: $status) {
nodes {
id
name
clientName
status
commercialEngagementId
updatedAt
}
truncated
}
}projects:writeCreate one canonical project/engagement identity.
mutation CreateProject($input: CreateProjectInput!) {
createProject(input: $input) {
ok
project { id name status createdAt }
eventType
idempotencyReplayed
errors { code message path }
}
}projects:writeAdd or update membership through confirmed project commands.
mutation AddProjectMember($input: AddProjectMemberInput!) {
addProjectMember(input: $input) {
ok
project { id name }
member { id userId role }
eventType
errors { code message path }
}
}Webhook emits
project.createdAvailableA canonical project/engagement was created.
Resource: project
project_idstatuscreated_atproject.updatedAvailableCanonical project identity or relationship fields changed.
Resource: project
project_idchanged_fieldsupdated_atproject.status_changedAvailableA project lifecycle status changed without archiving.
Resource: project
project_idfrom_statusto_statusoccurred_atproject.archivedAvailableA project was archived through a confirmed command.
Resource: project
project_idfrom_statusto_statusoccurred_atproject.member_addedAvailableA project member was added or upserted.
Resource: project
project_idmember_iduser_idroleoccurred_atproject.member_updatedAvailableA project member role changed.
Resource: project
project_idmember_iduser_idroleoccurred_atproject.member_removedAvailableA project member was removed.
Resource: project
project_idmember_iduser_idoccurred_atproject.settings_updatedAvailableProject settings changed.
Resource: project
project_idchanged_fieldsupdated_atAll webhook events use the shared v1 envelope, signed delivery, and minimal payload rule. Fetch by resource id for expanded data.
System boundaries
Systems commonly integrated with this capability. Each row states the boundary and its native status; it does not transfer canonical authority to the connected system.
DigitalStack owns
- • Canonical project/engagement identity, lifecycle status, visibility, members, and bounded settings
- • Project-to-commercial engagement/opportunity relationships as explicit references
- • Confirmed project command audit and webhook facts
Source systems own
- • CRM/PSA opportunity lifecycle before promotion
- • Provider-native delivery boards and schedules unless explicitly imported into DigitalStack authority
- • GUI quick-start scaffolding, blueprint initialization, and email notifications
Typical integration patterns
CRM / PSADigitalStack