AtlasWork, planned itself.

    The AI-native, all-in-one work platform. Tasks, projects, CRM, contracts, and analytics in one calm workspace.

    System status
    • SSO
    • SCIM
    • Two-factor sign-in
    • Audit log

    Product

    • Overview
    • PDF tools
    • Diagram tools
    • People & HR
    • Integrations
    • Marketplace
    • Pricing

    Resources

    • Guides
    • Glossary
    • Compare
    • Docs
    • API reference
    • Support
    • Changelog
    • Status

    Company

    • About
    • Careers
    • Press
    • Contact

    Legal & trust

    • Trust center
    • Security
    • Privacy
    • Terms
    • DPA
    • GDPR
    • SLA
    • Refunds
    • Google API data
    Atlas, a product by wrxstack.com·© 2026 wrxstack·All rights reserved
    PrivacyTermsSecurityStatus

    You are in control of your cookies

    Atlas uses strictly necessary cookies to keep you signed in. With your consent, we add anonymized product analytics, conversion attribution, and remembered preferences. Change your mind any time at /privacy/cookies.

    Off until you agree · Change it any time

    • Necessaryalways on
    • Analyticsopt-in
    • Marketingopt-in
    • Preferencesopt-in
    Skip to documentation
    Docs
    Back to Atlas

    Start here

    • Overview

    Developer

    • REST API guide
    • Authentication
    • API reference
    • MCP (AI agents)
    • MCP tools reference
    • SDKs
    • Quick actions
    • Changelog

    Webhooks

    • Overview
    • Quickstart
    • Events
    • Payloads and headers
    • Security and signing
    • Delivery and retries
    • Managing via API

    Connect

    • Connectors
    • Integrations

    Product

    • Collaboration and chat
    • Signing in and security
    • Client portal

    Reference

    • Glossary
    • Keyboard shortcuts
    • Module reference

    Reference

    Quick actions reference

    A single source of truth for what each business workspace owns, which UI controls trigger it, which analytics ids track it, and how API and MCP actions must validate the same work.

    Atlas ships 314 quick actions across 88 workspaces, of which 198 are live today. Each one is triggered from the product, tracked by an analytics id, and mirrored by an API route and an MCP tool that enforce the same rules.


    What is a quick action?

    A quick action is one unit of work you can trigger three ways (by hand, over the API, or through an AI agent) each of which runs the exact same validated operation.

    From the product

    Click a button, run it from the command palette, or fire a keyboard shortcut. Every control carries an analytics id so you can trace it.

    Over the REST API

    Call the matching route with the same required fields and bounds. See the API reference for request and response shapes.

    Through an AI agent

    Ask an agent in plain language. The MCP tool enforces identical validation, tenancy, and RBAC before it acts.

    Maturity

    Live
    Shipping in the product, API, and MCP with parity enforced.
    Guarded
    Live but gated behind an entitlement, flag, or role.
    Configured
    Available once the workspace finishes a setup step.
    Needs proof
    Contract is defined; the runtime tool is still landing.

    Parity rule

    One action, three surfaces

    Any UI action listed here must have matching app API and MCP semantics: same required fields, same numeric and date bounds, same tenant and RBAC checks, same privacy posture, same traceability, and structured errors that name the field or action to fix. MCP entries marked planned are contract targets until the runtime tool is shipped.

    Action catalogue

    Every quick action, grouped by workspace. Each row lists the UI control, its analytics id, the mirroring API route, the MCP target, and the shared validation contract.

    314 actions across 88 workspaces

    Growth Hub

    Module guide

    5 actions · 3 live, 2 guarded, 0 configured

    Open standalone business modules

    Live

    Module cards, list cards, quick starts, and business module nav

    Analytics

    growth-suite.nav.*growth-suite.lane.*.opengrowth-suite.lists.*

    App API

    Route-only

    MCP target

    planned: atlas_modules_listplanned: atlas_modules_open

    Validation

    Navigation-only action; no mutable payload.

    Growth Hub is a cross-module command center. It must route users into CRM, Contract Hub, Document Sign, or PDF Studio without owning their records.

    Review business governance posture

    Guarded

    Governance tab

    Analytics

    growth-suite.subnav.growth-governance

    App API

    /growth-suite/governance

    MCP target

    planned: atlas_growth_suite_governance_summary

    Validation

    Read-only aggregate response; no raw customer notes, PDF text, or provider payloads.

    Used to explain RBAC, delegated access, audit, and evidence posture across modules.

    Search Growth Hub action catalog

    Live

    Growth Hub action search, category filters, API/MCP details, validation notes, and route links

    Analytics

    growth-hub.action-catalog.searchgrowth-hub.action-catalog.category.*

    App API

    /docs/actions/growth-suite/governance

    MCP target

    planned: atlas_growth_hub_actions_listplanned: atlas_growth_hub_actions_describe

    Validation

    Catalog-only action; no mutable payload.Every listed hub action must include UI control, validation, API route or navigation boundary, and MCP tool metadata.

    Makes Growth Hub operable as a command center: users can search dashboard, module launcher, lists, governance, analytics, and optional handoff actions without guessing which module owns the work.

    Review Growth Hub summary, evidence, and object search

    Live

    Growth Hub summary cards, object search, and evidence export controls

    Analytics

    growth-suite.summary.*growth-suite.objects.searchgrowth-suite.evidence.export

    App API

    /growth-suite/summary/growth-suite/objects/search/growth-suite/evidence/export.jsonl

    MCP target

    atlas_growth_summary_getplanned: atlas_growth_suite_objects_search

    Validation

    Read-only aggregate posture for summary calls.Object search results are tenant-scoped and snippet-bounded.Evidence export emits retained aggregate proof, not raw provider payloads.

    Closes the Growth Hub command-center readback routes that operators use to inspect summary posture, searchable CRM/PDF/signing objects, and retained evidence bundles.

    Run guided rescue, signer reminder, and PDF risk actions

    Guarded

    Growth Hub action catalog buttons and guarded recommendation drawers

    Analytics

    growth-suite.actions.*growth-suite.next-best-action.*

    App API

    /growth-suite/actions/agreements/{id}/remind-signers/growth-suite/actions/at-risk-accounts/{id}/recover/growth-suite/actions/pdf/{id}/review-risk/growth-suite/actions/stale-deals/{id}/rescue

    MCP target

    atlas_growth_crm_at_risk_account_actions_applyatlas_growth_crm_stale_deal_actions_applyplanned: atlas_growth_suite_guided_actions_run

    Validation

    Target record must exist in the active tenant.Every mutating action is explicit, bounded, and evidence-stamped.Signer reminders and recovery actions cannot expose provider secrets or raw PDF text.

    Groups the cross-module next-best-action endpoints for stale deals, at-risk accounts, signer reminders, and PDF risk review so action docs track the live controls instead of leaving route drift hidden.

    Sales CRM

    Module guide

    6 actions · 5 live, 1 guarded, 0 configured

    Create CRM account

    Live

    Account name field and Create button

    Analytics

    growth-suite.crm.create-account.*

    App API

    /growth-suite/crm/accounts

    MCP target

    atlas_growth_crm_accounts_create

    Validation

    Required bounded account name.Tenant-scoped write authorization.

    Creates a native Atlas account record without requiring Salesforce or HubSpot.

    Create CRM deal

    Live

    Account picker, deal name, amount, expected close picker, and Create button

    Analytics

    growth-suite.crm.create-deal.*

    App API

    /growth-suite/crm/deals

    MCP target

    atlas_growth_crm_deals_create

    Validation

    Required CRM account id.Required bounded deal name.Required non-negative money draft converted to integer cents.Required after-now expected-close ISO instant.

    Deal creation is intentionally customer-scoped. PDF, signing, and contract links stay optional.

    Log customer activity

    Live

    Account/deal pickers, activity note, and Log button

    Analytics

    growth-suite.crm.create-activity.*growth-suite.crm.activity.*

    App API

    /growth-suite/crm/activities

    MCP target

    atlas_growth_crm_activities_create

    Validation

    Required activity subject.At least one valid CRM account or deal reference.Bounded text payload.

    Activity logs attach to CRM context only and do not create PDF/signing side effects.

    Dry-run import, commit, rollback, and merge duplicates

    Guarded

    Import and Merge tabs

    Analytics

    growth-suite.crm.import.*growth-suite.crm.duplicate-governance.*

    App API

    /growth-suite/crm/imports/dry-run/growth-suite/crm/imports/commit/growth-suite/crm/imports/:id/rollback/growth-suite/crm/duplicates/*

    MCP target

    atlas_growth_crm_imports_validateatlas_growth_crm_imports_applyatlas_growth_crm_import_review_items_resolveatlas_growth_crm_import_rollbacks_previewatlas_growth_crm_import_rollbacks_applyatlas_growth_crm_duplicate_merges_previewatlas_growth_crm_duplicates_mergeatlas_growth_crm_duplicate_merges_bulk_previewatlas_growth_crm_duplicates_bulk_merge

    Validation

    Dry-run before mutation.Expected fingerprint/package hash on commit or merge.Idempotent import and rollback behavior.

    Bulk CRM changes must keep conflict review and rollback visible before destructive decisions.

    Search CRM action catalog

    Live

    CRM action search, category filters, API/MCP details, validation notes, and route links

    Analytics

    sales-crm.action-catalog.searchsales-crm.action-catalog.category.*

    App API

    /growth-suite/crm/*

    MCP target

    planned: atlas_crm_actions_listplanned: atlas_crm_actions_describe

    Validation

    Catalog-only action; no mutable payload.Every listed CRM action must include UI control, validation, API route or navigation boundary, and MCP tool metadata.

    Makes Sales CRM operable as a standalone workspace: users can search account, contact, deal, activity, forecast, import, merge, rollback, and optional handoff actions without knowing the page layout.

    Run sales forecast v2

    Live

    Forecast command center and Monte Carlo forecast action

    Analytics

    sales.forecast.v2.*growth-suite.crm.forecast-v2.*

    App API

    /v1/sales/forecast/v2

    MCP target

    planned: atlas_sales_forecast_v2_run

    Validation

    Forecast inputs are tenant-scoped aggregate pipeline records.Money values are integer cents.Scenario output is evidence-stamped and deterministic under fixtures.

    Maps the v2 sales forecast endpoint that supports the CRM forecast command center.

    Contract Hub

    Module guide

    2 actions · 1 live, 1 guarded, 0 configured

    Create and manage contract packets

    Guarded

    Packet builder, lifecycle header, obligation ledger, and approval panels

    Analytics

    growth-suite.contracts.packet-builder.*growth-suite.contracts.header.*

    App API

    /growth-suite/contracts/*

    MCP target

    planned: atlas_contracts_packets_createplanned: atlas_contracts_packets_update

    Validation

    Date-only fields use Atlas date picker payloads.Money and packet metadata use bounded schemas.High-risk actions require RBAC and audit reason.

    Contract Hub can reference CRM, signing, and PDF records, but contract lifecycle is standalone.

    Search Contract Hub action catalog

    Live

    Contract action search, category filters, API/MCP details, validation notes, and route links

    Analytics

    contract-hub.action-catalog.searchcontract-hub.action-catalog.category.*

    App API

    /growth-suite/contracts/*/growth-suite/approvals/*

    MCP target

    planned: atlas_contracts_actions_listplanned: atlas_contracts_actions_describe

    Validation

    Catalog-only action; no mutable payload.Every listed contract action must include UI control, validation, API route or navigation boundary, and MCP tool metadata.

    Makes Contract Hub operable as a standalone lifecycle workspace: users can search packets, renewals, approvals, obligations, redlines, remediation, evidence, and optional handoffs without depending on CRM navigation.

    Document Sign

    Module guide

    3 actions · 2 live, 0 guarded, 1 configured

    Prepare and route signing envelope

    Configured

    Envelope form, recipient fields, routing controls, send/reminder buttons

    Analytics

    growth-suite.agreements.create-envelope.*growth-suite.agreements.routing*

    App API

    /growth-suite/agreements/envelopes/*

    MCP target

    planned: atlas_sign_envelopes_createplanned: atlas_sign_envelopes_send

    Validation

    Required envelope title and signer email.Opaque signing tokens only.Provider-backed send remains disabled until credentials and scopes are configured.

    Document Sign owns signer routing and audit evidence, not PDF editing.

    Search Document Sign action catalog

    Live

    Signing action search, category filters, API/MCP details, validation notes, and route links

    Analytics

    document-sign.action-catalog.searchdocument-sign.action-catalog.category.*

    App API

    /growth-suite/agreements/*

    MCP target

    planned: atlas_sign_actions_listplanned: atlas_sign_actions_describe

    Validation

    Catalog-only action; no mutable payload.Every listed signing action must include UI control, validation, API route or navigation boundary, and MCP tool metadata.

    Makes Document Sign operable as a standalone signing workspace: users can search envelopes, recipients, sessions, templates, fields, lifecycle, evidence, and optional handoffs without using Sales CRM.

    Complete public signing ceremony and certificate download

    Live

    Public signing view, decline/sign buttons, and certificate download

    Analytics

    growth-suite.signing.public.*document-sign.public-ceremony.*

    App API

    /growth-suite/signing/*

    MCP target

    planned: atlas_signing_public_ceremony_status

    Validation

    Opaque token only; no tenant ids in the public route.Sign/decline mutations require ceremony state validation.Certificate downloads return evidence artifacts only after authorization checks.

    Maps the public signing token route family, including ceremony reads, sign/decline decisions, and completion certificate download.

    PDF Studio

    Module guide

    11 actions · 7 live, 3 guarded, 1 configured

    Create or upload standalone PDF

    Live

    PDF name, page count, risk flag, source upload, and optional connected workflow expander

    Analytics

    growth-suite.pdf.create-document.*growth-suite.pdf.upload-source.*

    App API

    /growth-suite/pdf/documents/growth-suite/pdf/documents/:id/upload-ticket

    MCP target

    planned: atlas_pdf_documents_createplanned: atlas_pdf_documents_upload_source

    Validation

    Required bounded PDF name.Whole-number page count only.PDF upload must be non-empty and type-checked.CRM/deal/envelope ids stay null unless the user explicitly chooses them.

    This is the key standalone PDF boundary: no customer, deal, contract, or signing context is required.

    Run PDF operation

    Guarded

    Document workbench operation buttons

    Analytics

    growth-suite.pdf.queue-*growth-suite.pdf.run-operation

    App API

    /growth-suite/pdf/operations/growth-suite/pdf/operations/queue

    MCP target

    atlas_pdf_operations_createatlas_pdf_queued_operations_list

    Validation

    Operation-specific payload schema.Source readiness checks before mutation.Unsafe permanent redaction fails closed.Returns operation ids/status and artifact metadata, not raw PDF bytes.

    Covers organize, edit, annotate, OCR, extract, redact, protect, compare, convert, compress, sign, and export workflows.

    Search PDF tool catalog

    Live

    PDF tool search, category filters, API/MCP details, and route links

    Analytics

    pdf-studio.tool-catalog.searchpdf-studio.tool-catalog.category.*

    App API

    /growth-suite/pdf/documents/*/growth-suite/pdf/operations/*

    MCP target

    planned: atlas_pdf_tools_listplanned: atlas_pdf_tools_describe

    Validation

    Catalog-only action; no mutable payload.Every listed PDF tool must include UI control, validation, API route, and MCP tool metadata.

    Makes PDF Studio operable like a standalone PDF website: users can search for merge, split, OCR, redact, forms, stamps, compression, export, and evidence without knowing where Atlas placed the button.

    Preview, comment, review, and export artifacts

    Live

    Preview source, comments, download source/artifacts, split packages, and evidence rows

    Analytics

    growth-suite.pdf.preview-sourcegrowth-suite.pdf.comments.*growth-suite.pdf.download-*

    App API

    /growth-suite/pdf/documents/:id/source/growth-suite/pdf/operations/:id/artifact

    MCP target

    planned: atlas_pdf_documents_previewplanned: atlas_pdf_comments_createplanned: atlas_pdf_artifacts_download

    Validation

    Artifact access is authenticated.Comments are bounded text.Download posture returns authorized artifacts and hash/evidence metadata.

    Export remains file-first; optional signing/contract/CRM handoff is an explicit navigation decision.

    Manage PDF stamp assets, templates, and annotation cleanup

    Guarded

    Stamp asset library, template editor, thumbnail actions, and bulk cleanup preview

    Analytics

    growth-suite.pdf.stamp-assets.*growth-suite.pdf.stamp-templates.*

    App API

    /growth-suite/pdf/stamp-assets/*/growth-suite/pdf/stamp-templates/*/growth-suite/pdf/stamp-annotations/*

    MCP target

    planned: atlas_pdf_stamp_assets_manageplanned: atlas_pdf_stamp_templates_manage

    Validation

    Uploads use signed tickets and finalized metadata.Archive/restore operations are reversible and audit-stamped.Bulk annotation removal requires preview before mutation.

    Covers the PDF Studio stamp-library route family: upload tickets, versions, thumbnails, archive/restore, template CRUD, and bulk annotation cleanup.

    Review PDF redaction/security readiness and provider callbacks

    Guarded

    PDF security readiness panel and sanitizer operation status

    Analytics

    growth-suite.pdf.security-readiness.*growth-suite.pdf.redaction-readiness.*

    App API

    /growth-suite/pdf/redaction/readiness/growth-suite/pdf/security/readiness/growth-suite/provider-webhooks/pdf/operations/*

    MCP target

    atlas_pdf_security_readiness_getatlas_pdf_redaction_readiness_get

    Validation

    Readiness responses are aggregate and omit raw PDF bytes.Provider callbacks are operation-scoped and secret-verified.Sanitizer results persist evidence posture without leaking source contents.

    Keeps PDF security and redaction readiness routes visible in the action registry while treating provider callback execution as a guarded integration boundary.

    PDF form data API: export, import, and flatten

    Live

    REST API with the pdf:write scope taking a base64 PDF; the Fill and edit forms screen fills forms in the browser instead

    Analytics

    docs.actions.registry.pdf-studio.forms-api

    App API

    POST /v1/pdf-forms/exportPOST /v1/pdf-forms/export-fdfPOST /v1/pdf-forms/importPOST /v1/pdf-forms/import-fdfPOST /v1/pdf-forms/flatten

    MCP target

    No agent tool

    Validation

    pdfBase64 is required, must be valid base64, must not be empty, and must be at most 50 MB; larger input is refused with 413.import takes 1 to 5000 values, each with a name of 1 to 512 characters and a value of at most 64 KB or a list of at most 1024 strings.fdfBase64 for import-fdf is required and at most 2 MB.An XFA form, a malformed FDF, or a value a field cannot hold is refused with 422 and a message for the person.At most 3 PDF operations run at once per workspace; a fourth is refused with 429.The caller needs the PDF Studio export permission and the pdf:write scope.

    These routes read every form field with its type, options, and value, export the same data as an FDF file, fill a form from JSON values or an FDF file, and flatten a form so its fields become fixed content. Import and flatten answer JSON that includes the filled PDF and a report of any values that were ignored and why. Field names and values are never logged.

    Summarize, question, or extract tables from a PDF

    Configured

    PDF editor Ask AI panel: summarize button, extract tables button, question field with ask button, and a streamed answer

    Analytics

    pdf-canvas-editor.tool.intelligence

    App API

    POST /v1/pdf-intelligence/summarizePOST /v1/pdf-intelligence/askPOST /v1/pdf-intelligence/extract-tables

    MCP target

    No agent tool

    Validation

    pdfBase64 is required, must be valid base64, must not be empty, and must be at most 50 MB.question is at most 2000 characters, and ask refuses an empty question with 422.Size and validation errors are returned as normal HTTP errors before the stream starts.A failure during the stream ends with an error event that says only whether a retry may help, never the raw error.The caller needs the PDF Studio view permission and the pdf:read scope.

    A person opens the Ask AI panel in the PDF editor to get a summary, an answer to a question, or the document's tables as text, each grounded only in the file and streamed as server-sent events. The routes need the model provider to be configured; without it they say that document questions are unavailable. When the person leaves, the stream stops so no further model work is spent.

    Convert a file with a server conversion job

    Live

    PDF Studio conversion tools (for example PDF to Word): file drop, use URL, convert, live progress, cancel, keep result, and download

    Analytics

    pdf-studio.convert.*

    App API

    POST /v1/pdf-jobs/ticketPOST /v1/pdf-jobs/{jobId}/startGET /v1/pdf-jobsGET /v1/pdf-jobs/{jobId}GET /v1/pdf-jobs/{jobId}/eventsGET /v1/pdf-jobs/{jobId}/downloadPOST /v1/pdf-jobs/{jobId}/cancelPOST /v1/pdf-jobs/{jobId}/archiveDELETE /v1/pdf-jobs/{jobId}

    MCP target

    No agent tool

    Validation

    operation is one of pdf-to-docx, pdf-to-xlsx, pdf-to-pptx, docx-to-pdf, xlsx-to-pdf, pptx-to-pdf, html-to-pdf, or pdf-a.filename is required and at most 255 characters; contentType is required and at most 255 characters; sizeBytes is a whole number of zero or more.A file larger than the configured limit is refused with 413 at the ticket and again at start, where the stored size is checked.Start refuses with 409 when the upload never arrived, with 503 when the conversion service is unavailable, and with 429 when too many conversions are running for the workspace.Options: dpi 36 to 600, jpegQuality 1 to 100, ocrLang 2 to 32 characters, pageRange at most 200 characters, password at most 256 characters.The job list takes limit 1 to 100 (default 25) and a date-time cursor.Download refuses with 409 before the job succeeds and with 404 once the result is deleted; only a finished, unexpired result can be kept.A job from another workspace answers 404, never 403.

    A person picks a file, the server issues an upload ticket for object storage, the browser uploads the file directly, and then the job starts, streams progress, and offers a time-limited download link. Reading needs the PDF Studio view permission and pdf:read, creating and starting need export and pdf:write, cancel and keep need update, and delete needs the delete permission. Results are removed 24 hours after they are created unless kept, and the routes answer 503 when object storage is not configured.

    Stamp Bates numbers on a PDF

    Live

    Bates numbering screen: file picker, prefix, suffix, start number, digits, position, font size, number preview, and stamp button

    Analytics

    pdf_studio_bates

    App API

    POST /v1/pdf-legal/bates

    MCP target

    No agent tool

    Validation

    pdfBase64 is required, must be valid base64, must not be empty, and must be at most 50 MB.prefix and suffix are at most 32 characters each.start is a whole number from 0 to 1,000,000,000,000; digits is 1 to 12; fontSize is 4 to 72.position must be one of the supported stamp positions.At most 3 PDF operations run at once per workspace; a fourth is refused with 429.The caller needs the PDF Studio export permission and the pdf:write scope.

    A person stamps gapless, sequential Bates numbers across every page of a document on the server, so the run is deterministic and citable, and downloads the stamped PDF. The route refuses invalid settings and unreadable files with 422 and an oversized file with 413. The prefix and the file content are never logged.

    PDF legal operations API: extract, split, compare, sign, verify

    Live

    REST API with the pdf:write scope taking base64 PDFs

    Analytics

    docs.actions.registry.pdf-studio.legal-operations-api

    App API

    POST /v1/pdf-legal/extract-pagesPOST /v1/pdf-legal/splitPOST /v1/pdf-legal/comparePOST /v1/pdf-legal/signature/verifyPOST /v1/pdf-legal/signature/sign

    MCP target

    No agent tool

    Validation

    Every input PDF must be valid base64, not empty, and at most 50 MB.extract-pages takes 1 to 100 page ranges, each with a start and end of at least 1.split takes an optional pagesPerDocument from 1 to 500.compare needs both leftPdfBase64 and rightPdfBase64.sign takes reason, location, and contact of at most 240 characters each, and an optional certification level of 1, 2, or 3.sign answers 501 when no signing identity is configured, 503 when a configured timestamp authority cannot be reached, and never returns an unsigned or untimestamped document as signed.At most 3 PDF operations run at once per workspace; a fourth is refused with 429.The caller needs the PDF Studio export permission and the pdf:write scope.

    These routes extract page ranges as a new PDF, split one PDF into many, produce a structured text comparison of two PDFs, verify the digital signatures in a PDF, and sign or certify a PDF when the server has a signing identity. Invalid page ranges, broken files, and bad signatures are refused with 422 and a message for the person. No filename, page text, signer name, or signing reason is logged.

    HR Suite - Payroll

    Module guide

    8 actions · 8 live, 0 guarded, 0 configured

    Run payroll, draft cycles, and emit payslips

    Live

    Payroll runs page, draft/approve buttons, payslip detail drawer

    Analytics

    hr.payroll.run.*hr.payroll.payslip.*

    App API

    /v1/hr/payroll/*

    MCP target

    planned: atlas_hr_payroll_runs_listplanned: atlas_hr_payroll_payslips_emit

    Validation

    Tenant-scoped payroll authorization with HR/Finance role check.Monetary amounts persisted as integer cents.Payslip artifacts are evidence-stamped before release.

    Covers payroll run lifecycle (draft, calc, approve, post) and individual payslip read/release endpoints under /v1/hr/payroll.

    Manage requisitions, candidates, and offers

    Live

    Hiring pipeline board, candidate drawers, offer composer

    Analytics

    hr.hiring.requisition.*hr.hiring.candidate.*hr.hiring.offer.*

    App API

    /v1/hr/hiring/*

    MCP target

    planned: atlas_hr_hiring_requisitions_listplanned: atlas_hr_hiring_offers_send

    Validation

    Bounded text on candidate fields.Tenant-scoped recruiter authorization.Offer ISO instants validated as after-now.

    Hiring controllers under /v1/hr/hiring cover requisitions, candidates, stages, interviews, and offers across the recruitment lifecycle.

    Manage employee directory and profile updates

    Live

    Employee directory, profile drawer, status toggles

    Analytics

    hr.employees.*

    App API

    /v1/hr/employees/*

    MCP target

    atlas_hr_employees_listatlas_hr_employees_get

    Validation

    Tenant-scoped HR authorization.PII redaction respects viewer role.Bounded employee profile fields.

    Directory endpoints under /v1/hr/employees cover read, search, profile updates, and lifecycle status changes for staff records.

    Request, approve, and audit leave balances

    Live

    Leave request form, approver queue, balance summaries

    Analytics

    hr.leave.request.*hr.leave.approve.*

    App API

    /v1/hr/leave/*

    MCP target

    atlas_hr_leave_requests_createatlas_hr_leave_requests_approve

    Validation

    ISO date range with after-now semantics.Tenant-scoped leave policy authorization.Balance enforcement prevents negative accruals.

    Leave endpoints under /v1/hr/leave cover request submission, approval, balance lookup, and audit-trail surfaces.

    Run performance cycles and 1:1 reviews

    Live

    Cycle calendar, review forms, feedback drawer

    Analytics

    hr.performance.cycle.*hr.performance.review.*

    App API

    /v1/hr/performance/*

    MCP target

    atlas_hr_performance_cycles_listplanned: atlas_hr_performance_reviews_submit

    Validation

    Tenant-scoped manager authorization.Bounded narrative fields.Visibility rules respect reviewer/employee scopes.

    Performance endpoints under /v1/hr/performance cover review cycles, peer feedback, manager comments, and calibration steps.

    Submit expense reimbursements and approvals

    Live

    Reimbursement composer, receipts uploader, approver queue

    Analytics

    hr.reimbursements.submit.*hr.reimbursements.approve.*

    App API

    /v1/hr/reimbursements/*

    MCP target

    planned: atlas_hr_reimbursements_createplanned: atlas_hr_reimbursements_approve

    Validation

    Monetary amounts persisted as integer cents.Tenant-scoped approver authorization.Receipt attachments validated and virus-scanned.

    Reimbursement endpoints under /v1/hr/reimbursements cover submission, receipt upload, approver workflow, and payout linkage.

    File and resolve HR helpdesk tickets

    Live

    Ticket composer, message thread, status tracker

    Analytics

    hr.tickets.*

    App API

    /v1/hr/tickets/*

    MCP target

    planned: atlas_hr_tickets_createatlas_hr_tickets_reply

    Validation

    Tenant-scoped HR helpdesk authorization.Bounded subject/body text.Status transitions respect ticket state machine.

    HR Helpdesk endpoints under /v1/hr/tickets cover ticket creation, replies, status updates, and admin assignment.

    Administer HR policies and configuration

    Live

    HR admin console, policies tab, config panels

    Analytics

    hr.admin.policies.*hr.admin.config.*

    App API

    /v1/hr/admin/*

    MCP target

    planned: atlas_hr_admin_policies_listplanned: atlas_hr_admin_policies_update

    Validation

    Tenant-scoped HR admin role enforcement.Policy text bounded and audit-stamped.Config changes emit evidence rows.

    HR admin endpoints under /v1/hr/admin cover policy CRUD, working-hour rules, leave catalog, and other tenant-wide HR config.

    Projects

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Browse, plan, and execute project workstreams

    Live

    Projects list, project board, plan view, settings drawer

    Analytics

    projects.*projects.board.*

    App API

    /v1/projects/*/projects/{id}/*/projects/{projectId}/*

    MCP target

    atlas_projects_listatlas_projects_getatlas_projects_update

    Validation

    Tenant-scoped project authorization.Bounded project metadata fields.Status transitions audit-logged.

    Projects controllers under /v1/projects (and legacy /projects) cover project CRUD, plan/board reads, status changes, member assignment, and document linkage.

    Tasks

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Create, schedule, and complete tasks

    Live

    Task list, planner, detail drawer, scheduler quick actions

    Analytics

    tasks.*tasks.auto-schedule.*

    App API

    /v1/tasks/*/tasks/{id}/*/tasks/{taskId}/*/tasks/auto-schedule/*

    MCP target

    atlas_tasks_createatlas_tasks_updateplanned: atlas_tasks_schedule

    Validation

    Tenant-scoped task authorization.Due dates validated as ISO instants.Dependency cycles rejected at write time.

    Task endpoints under /v1/tasks, /tasks/{id}, /tasks/{taskId}, and /tasks/auto-schedule cover the full task lifecycle including dependencies and planner.

    CRM Core

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    CRM core read/write API surface

    Live

    CRM list, deal pipeline, contact drawer, account profile

    Analytics

    crm.accounts.*crm.deals.*crm.contacts.*

    App API

    /v1/crm/*

    MCP target

    atlas_crm_accounts_listatlas_crm_deals_listatlas_crm_contacts_list

    Validation

    Tenant-scoped CRM authorization.Monetary fields persisted as integer cents.Bounded text fields on accounts/deals/contacts.

    CRM endpoints under /v1/crm cover the core accounts/deals/contacts/activities CRUD that powers Sales CRM and Growth Hub flows.

    Contracts API

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Contract Hub native API endpoints

    Live

    Contracts list, contract drawer, clause library, evidence panel

    Analytics

    contracts.*

    App API

    /v1/contracts/*

    MCP target

    atlas_contracts_listatlas_contracts_getatlas_contracts_update

    Validation

    Tenant-scoped contract authorization.Monetary clauses persisted as integer cents.Effective/expiry ISO instants validated.

    Contracts endpoints under /v1/contracts cover the native Contract Hub surface: contract CRUD, clauses, parties, evidence, and lifecycle transitions.

    Integrations

    Module guide

    2 actions · 1 live, 0 guarded, 1 configured

    Manage integration connectors and webhooks

    Live

    Integration directory, connector cards, OAuth callbacks

    Analytics

    integrations.*

    App API

    /v1/integrations/*/v1/connectors/*

    MCP target

    atlas_connectors_listatlas_connectors_oauth_startatlas_connectors_events_listatlas_connectors_connections_testatlas_connectors_connections_revokeatlas_connectors_linear_teams_listatlas_connectors_linear_issues_listatlas_connectors_linear_issues_createatlas_connectors_linear_issues_updateatlas_connectors_linear_issues_comments_createatlas_connectors_linear_webhooks_createatlas_connectors_microsoft365_inbox_messages_listatlas_connectors_microsoft365_mail_sendatlas_connectors_microsoft365_mail_subscriptions_createatlas_connectors_microsoft365_mail_subscriptions_getatlas_connectors_microsoft365_teams_listatlas_connectors_microsoft365_teams_channels_listatlas_connectors_microsoft365_channel_messages_sendatlas_connectors_microsoft365_chat_messages_sendatlas_connectors_granola_notes_listatlas_connectors_granola_notes_getatlas_connectors_granola_folders_listatlas_connectors_granola_status_getatlas_connectors_granola_syncatlas_connectors_granola_webhooks_createatlas_connectors_granola_webhooks_deleteplanned: atlas_integrations_listplanned: atlas_connectors_installplanned: atlas_connectors_credentials_save

    Validation

    Tenant-scoped admin authorization for install/remove.OAuth state cookie validated.Webhook payloads HMAC-verified.

    Integrations and connector endpoints under /v1/integrations and /v1/connectors cover the full third-party connector lifecycle (install, configure, sync, remove), with live MCP readback/OAuth-start coverage, admin-gated connection-targeted test/disconnect tools, and Linear, Microsoft 365 and Granola provider actions. Secret-bearing credential save remains REST-only until the MCP secret-input policy is formalized, which is why the Granola credential route has no tool.

    WhatsApp delivery and reply webhook receiver

    Configured

    Inbound webhook registered with WhatsApp per workspace; the platform calls it with signed delivery receipts and replies

    Analytics

    docs.actions.registry.integrations.whatsapp-webhook-receiver

    App API

    GET /v1/whatsapp/webhook/{tenantId}POST /v1/whatsapp/webhook/{tenantId}

    MCP target

    No agent tool

    Validation

    The subscription handshake answers the challenge only when hub.verify_token matches the configured verify token; otherwise it is refused with 403.Each delivery must carry an x-hub-signature-256 header that matches an HMAC-SHA256 of the raw body; a missing or wrong signature is refused with 403.The check fails closed: with no app secret configured, every delivery is refused.The workspace is taken from the URL, never from the payload; a URL without one is refused with 400.The response carries only the count of events received.

    WhatsApp calls this route once to verify the subscription and then for every delivery receipt and inbound reply, so the workspace can mark sent messages delivered, read, or failed and record opt-in and opt-out replies. The route is public because the caller holds no Atlas credential, so the signature over the raw body is the whole of the authentication. Receipts for message ids the workspace does not know are ignored.

    Identity - Me

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Self-service identity, profile, and preferences

    Live

    Profile page, preferences, identity dashboard

    Analytics

    me.*profile.me.*

    App API

    /v1/me/*/profile/me/*

    MCP target

    planned: atlas_me_getplanned: atlas_me_update

    Validation

    Caller-scoped authorization (no tenant impersonation).Bounded profile fields.Preference toggles audit-logged.

    Self-service endpoints under /v1/me and /profile/me cover the signed-in user's profile, preferences, sessions, and identity-affecting reads.

    Tenant Admin

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Tenant-level admin operations

    Live

    Admin console, settings panel, audit drawer

    Analytics

    admin.*

    App API

    /v1/admin/*/v1/account/*/v1/settings/*

    MCP target

    planned: atlas_admin_settings_getplanned: atlas_admin_settings_update

    Validation

    Tenant-scoped admin role enforcement.Settings writes emit audit evidence.Bounded config fields.

    Tenant admin endpoints under /v1/admin, /v1/account, and /v1/settings cover settings, account profile, billing-adjacent reads, and audit history.

    Set how record reference numbers are formatted

    Live

    Settings, Reference series: per record kind editor for prefix, suffix, separator, padding, year, month, reset cadence, and next number, with live preview, save, and discard

    Analytics

    reference-series.savereference-series.discard

    App API

    GET /v1/reference-seriesPATCH /v1/reference-series/{seriesId}POST /v1/reference-series/preview

    MCP target

    atlas_route_get_v1_reference_seriesatlas_route_patch_v1_reference_series_by_seriesidatlas_route_post_v1_reference_series_preview

    Validation

    name is 1 to 120 characters; prefix and suffix at most 12 characters; separator at most 3 characters.padding is 0 to 12; includeYear is 0 to 2; resetCadence is NEVER, YEARLY, or MONTHLY; startAt is 0 to 1,000,000; nextNumber is 0 to 100,000,000.An update with no fields is refused with Nothing to update.Moving the next number backwards is refused with 409, because it would issue references that already exist.A shape that would produce the same references as another record kind is refused with 409.A series id from another workspace answers 404.Editing needs the OWNER or ADMIN role and the team admin permission; reading allows any member, including guests.

    An administrator shapes the readable reference numbers that records receive, previews sample references before saving, and saves the series. Listing and previewing need the team view permission, while saving needs the team admin permission and an owner or administrator role. The route is not tied to any premium module, because every workspace has records that need a reference.

    Meetings

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Schedule, join, and document meetings

    Live

    Meetings calendar, room drawer, transcript panel

    Analytics

    meetings.*

    App API

    /meetings/{id}/*

    MCP target

    atlas_meetings_listatlas_meetings_get

    Validation

    Tenant-scoped meeting authorization.ISO instants validated for scheduling.Transcript redaction respects viewer role.

    Meeting endpoints under /meetings/{id} cover the meeting lifecycle: details, participants, recordings, and transcripts.

    Wiki

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Browse, edit, and version wiki pages

    Live

    Wiki tree, page editor, version history

    Analytics

    wiki.pages.*

    App API

    /wiki/pages/*

    MCP target

    atlas_wiki_pages_listatlas_wiki_pages_get

    Validation

    Tenant-scoped wiki space authorization.Bounded title/body fields.Version history immutable.

    Wiki endpoints under /wiki/pages cover page CRUD, hierarchy moves, version snapshots, and collaborative cursors.

    Wiki page search API

    Live

    REST API and agent tools with a token that carries the wiki:read scope

    Analytics

    docs.actions.registry.wiki.page-search-api

    App API

    GET /wiki/search

    MCP target

    atlas_route_get_wiki_search

    Validation

    An empty or blank q returns an empty list.limit is clamped to between 1 and 100 and defaults to 30.Deleted and archived pages are excluded.The caller needs the projects view permission and the wiki:read scope.

    This route searches the workspace wiki for pages whose title or body contains the query text, ignoring case, newest updated first. It reads only the caller's workspace and never returns deleted or archived pages. It changes nothing.

    Blog

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Author, publish, and audit blog posts

    Live

    Blog composer, publish queue, audit drawer

    Analytics

    blog.posts.*

    App API

    /blog/posts/*

    MCP target

    planned: atlas_blog_posts_listplanned: atlas_blog_posts_publish

    Validation

    Tenant-scoped blog author authorization.Bounded title/body fields.Publish ISO instants validated.

    Blog endpoints under /blog/posts cover post drafts, publishing, scheduling, and revision history for tenant-owned content.

    Goals

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Track goals, OKRs, and key results

    Live

    Goals tree, key-result editor, check-in drawer

    Analytics

    goals.*

    App API

    /goals/goals/{id}/goals/{id}/rollup

    MCP target

    atlas_goals_listatlas_goals_getatlas_goals_rollup_getplanned: atlas_goals_check_in

    Validation

    Tenant-scoped goal authorization.Bounded title/description fields.Progress percentages clamped to 0-100.

    Goals endpoints under /goals/{id} cover goal lifecycle, key-result updates, check-ins, and reporting rollups.

    Goals and key results REST API

    Live

    REST API with a personal access token that carries the goals:read, goals:write, or goals:delete scope

    Analytics

    docs.actions.registry.goals.goals-rest-api

    App API

    GET /v1/goalsPOST /v1/goalsGET /v1/goals/{id}PATCH /v1/goals/{id}DELETE /v1/goals/{id}GET /v1/goals/{id}/rollup

    MCP target

    atlas_route_delete_v1_goals_by_idatlas_route_get_v1_goalsatlas_route_get_v1_goals_by_idatlas_route_get_v1_goals_by_id_rollupatlas_route_patch_v1_goals_by_idatlas_route_post_v1_goals

    Validation

    Kind is OBJECTIVE or KEY_RESULT; a Key Result needs a parentId, and the parent must be an Objective.Title is required and at most 240 characters; the description is at most 5,000 characters; the unit is at most 32 characters; target and current values are finite numbers.Status is ACTIVE, COMPLETED, or ABANDONED; a completed or abandoned goal cannot move to another status.A goal cannot align to itself, and a referenced project or alignment goal must exist in the workspace.Update must change at least one field.A goal in another workspace answers 404.

    These public routes list, read, create, update, and delete objectives and key results with rolled-up progress, and return the rollup tree under a goal. Reading needs goals:read, changes need goals:write, and deleting needs goals:delete. Every create, update, and delete is recorded in the audit log. The Goals screen uses the session routes of the same service.

    Marketplace

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Browse and install marketplace apps

    Live

    Marketplace directory, app drawer, install button

    Analytics

    marketplace.*

    App API

    /v1/marketplace/*

    MCP target

    planned: atlas_marketplace_apps_listplanned: atlas_marketplace_apps_install

    Validation

    Tenant-scoped admin authorization for install.App manifest signature verified.OAuth scope changes audit-logged.

    Marketplace endpoints under /v1/marketplace cover app directory listing, app detail, install, and lifecycle audit hooks.

    Compliance

    Module guide

    1 actions · 0 live, 1 guarded, 0 configured

    Compliance posture reads and audits

    Guarded

    Compliance dashboard, audit drawer, evidence panel

    Analytics

    compliance.*

    App API

    /v1/compliance/*/v1/privacy/*

    MCP target

    planned: atlas_compliance_posture_getplanned: atlas_compliance_audits_list

    Validation

    Read-only aggregate response; no raw PII.Tenant-scoped compliance role enforcement.Evidence references hashed.

    Compliance endpoints under /v1/compliance and /v1/privacy cover posture summaries, audit history, DSAR workflow, and evidence reads.

    Webhooks

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Manage outbound webhooks and deliveries

    Live

    Webhook registry, delivery log, retry drawer

    Analytics

    webhooks.*

    App API

    /v1/webhooks/*/v2/webhooks/*

    MCP target

    atlas_webhooks_listatlas_webhooks_deliveries_replay

    Validation

    Tenant-scoped webhook authorization.HMAC signing key rotated on rotate request.Delivery retries bounded with backoff.

    Webhook endpoints under /v1/webhooks and /v2/webhooks cover endpoint registration, delivery log, signing key rotation, and replay actions.

    Access Control

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Manage roles, ACLs, and access reviews

    Live

    Access console, role editor, ACL inspector

    Analytics

    access.*custom-roles.*

    App API

    /v1/access/*/custom-roles/growth-suite/*

    MCP target

    atlas_access_snapshot_getatlas_access_catalog_getatlas_access_audit_events_listatlas_access_modules_enableatlas_access_modules_disableatlas_access_members_inviteatlas_access_invites_revokeatlas_access_invites_acceptatlas_access_member_roles_updateatlas_access_member_grants_setatlas_access_member_grants_revokeatlas_access_members_removeatlas_access_suite_updateatlas_access_workspace_provision

    Validation

    Tenant-scoped admin role enforcement.Role mutations emit audit evidence.Wildcard grants rejected on the wire.

    Access endpoints under /v1/access and /custom-roles cover access snapshots, module enablement, invites, member roles, grants, suite changes, provisioning, custom-role authoring, and access review reporting.

    Limit workspace access to approved networks

    Live

    Settings, Security, IP allowlist: add entry form with address or CIDR block and label, entry list, and remove button on each

    Analytics

    settings.ip-allowlist.entry.addsettings.ip-allowlist.entry.removeip_allowlist_entry_added

    App API

    GET /v1/security/ip-allowlistPOST /v1/security/ip-allowlistDELETE /v1/security/ip-allowlist/{id}

    MCP target

    No agent tool

    Validation

    cidr is required, 1 to 64 characters, and must be a valid IPv4 or IPv6 address or CIDR block; anything else is refused with 400.label is at most 120 characters.Unknown body fields are refused.An entry id from another workspace answers 404.Session only, for owners and administrators with the team admin permission.

    An owner or administrator lists, adds, and removes the network addresses allowed to reach the workspace. Once at least one entry is enabled, every request from an address outside the list is refused with 403, including requests made with tokens; with no enabled entries access is open. Every change is written to the audit log.

    AI Platform

    Module guide

    3 actions · 0 live, 3 guarded, 0 configured

    Manage AI providers, models, and runs

    Guarded

    AI providers console, model registry, run inspector

    Analytics

    ai.*ai-providers.*

    App API

    /v1/ai/*/v1/ai-providers/*

    MCP target

    planned: atlas_ai_providers_listplanned: atlas_ai_runs_describe

    Validation

    Tenant-scoped admin role for provider config.Secrets never returned in clear text.Run logs PII-redacted by default.

    AI platform endpoints under /v1/ai and /v1/ai-providers cover provider registry, model catalog, run history, and prompt template administration.

    Review AI observability providers, summaries, and traces

    Guarded

    AI observability provider table, summary cards, and trace explorer

    Analytics

    ai-observability.*ai-providers.observability.*

    App API

    /v1/ai-observability/*

    MCP target

    planned: atlas_ai_observability_readback

    Validation

    Trace payloads are redacted before UI readback.Provider summaries are aggregate-only.No prompts, provider keys, or raw model responses are returned.

    Closes the AI observability route family for provider status, aggregate summaries, and trace readback.

    Local intelligence API: search, recommend, capture, summarize, generate

    Guarded

    Ask Atlas bar, natural language capture card, summarize drawer, and recommendations on the tasks, projects, and dashboard screens; REST API with the intelligence scopes

    Analytics

    intelligence.credits_exhausted

    App API

    POST /v1/intelligence/searchPOST /v1/intelligence/recommendPOST /v1/intelligence/capturePOST /v1/intelligence/summarizePOST /v1/intelligence/generate

    MCP target

    atlas_ai_documents_searchatlas_ai_items_recommendatlas_ai_text_captureatlas_ai_text_generateatlas_ai_text_summarize

    Validation

    search: query is 1 to 1000 characters, at most 200 candidates each with an id of at most 128 and text of at most 8000 characters, and limit 1 to 50.recommend: forUserId is required, at most 5000 interactions with weights from 0 to 1000, and limit 1 to 50.capture: text is 1 to 4000 characters.summarize: text is 1 to 20000 characters and maxSentences is 1 to 10.generate: prompt is 1 to 8000 characters, system at most 4000, maxTokens 1 to 2048, and an optional JSON schema constrains the output.Unknown body fields are refused.The workspace must hold the intelligence module entitlement; capture needs intelligence:write and the others need intelligence:read.Each call is metered against the workspace intelligence credits and is refused with 429 when they are exhausted.

    These routes run Atlas's own models on the server to rank candidates by meaning, recommend next items from interactions, extract dates and entities from a sentence, summarize text, and generate text that can be constrained to a JSON schema. Each call is scoped to the caller's workspace, traced, and metered against its credits. They are refused when the workspace lacks the intelligence entitlement or has used up its credits.

    OAuth Platform

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Run the OAuth 2.0 authorization server

    Live

    OAuth consent screens, app dashboards, scope grants

    Analytics

    oauth.*

    App API

    /v2/oauth/*

    MCP target

    planned: atlas_oauth_apps_listplanned: atlas_oauth_grants_revoke

    Validation

    Strict OAuth 2.1/2.0 conformance.Refresh-token rotation with replay detection.Scope grants emit consent evidence.

    OAuth platform endpoints under /v2/oauth cover authorization, token, refresh, revoke, introspect, and discovery for tenant-managed apps.

    Review and end an app's access to your account

    Live

    Settings, Connected apps: assistant apps card listing each approved app with its scopes and dates, and an end access button

    Analytics

    settings.oauth-revocation.assistant.end

    App API

    GET /v1/connected-appsPOST /v1/connected-apps/{clientId}/revoke

    MCP target

    No agent tool

    Validation

    clientId is required and at most 128 characters.Session only: no token, including a token held by one of the listed apps, may list or end approvals.The list covers only the caller's own active grants in the current workspace, and skips apps that have been deactivated.Ending access revokes every access and refresh token the caller holds for that app in the workspace, and answers once the revocation is stored.

    A signed-in person sees the apps and AI assistants they approved through Sign in with Atlas, with the scopes granted, when they first approved, and when the app last received a token, and can end any one of them. Both routes are limited to the caller's own grants in their own workspace and need the pats:manage scope on a session. The revoke route answers with the number of tokens it revoked, which is zero for an app the caller never approved.

    SCIM Directory Sync

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    SCIM v2 user and group provisioning

    Live

    SCIM connector, directory sync console, audit drawer

    Analytics

    scim.*

    App API

    /scim/v2/*

    MCP target

    planned: atlas_scim_users_listplanned: atlas_scim_groups_list

    Validation

    SCIM token authorization with tenant binding.Provisioning ops audit-logged.PATCH operations validated against schema.

    SCIM endpoints under /scim/v2 implement RFC 7644 user/group provisioning, group membership patches, and audit reads for enterprise IdPs.

    Connectors

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Legacy connector administration

    Live

    Connector list, install drawer, status badges

    Analytics

    connectors.*

    App API

    /v1/connectors/*

    MCP target

    atlas_connectors_listatlas_connectors_oauth_startatlas_connectors_events_listatlas_connectors_connections_testatlas_connectors_connections_revokeatlas_connectors_linear_teams_listatlas_connectors_linear_issues_listatlas_connectors_linear_issues_createatlas_connectors_linear_issues_updateatlas_connectors_linear_issues_comments_createatlas_connectors_linear_webhooks_createatlas_connectors_microsoft365_inbox_messages_listatlas_connectors_microsoft365_mail_sendatlas_connectors_microsoft365_mail_subscriptions_createatlas_connectors_microsoft365_mail_subscriptions_getatlas_connectors_microsoft365_teams_listatlas_connectors_microsoft365_teams_channels_listatlas_connectors_microsoft365_channel_messages_sendatlas_connectors_microsoft365_chat_messages_sendatlas_connectors_granola_notes_listatlas_connectors_granola_notes_getatlas_connectors_granola_folders_listatlas_connectors_granola_status_getatlas_connectors_granola_syncatlas_connectors_granola_webhooks_createatlas_connectors_granola_webhooks_deleteplanned: atlas_connectors_statusplanned: atlas_connectors_credentials_save

    Validation

    Tenant-scoped admin authorization.OAuth refresh tokens encrypted at rest.Status pings rate-limited.

    Legacy connector endpoints under /v1/connectors cover install/uninstall, status pings, config reads, and now live MCP-backed catalog/OAuth-start/event readback, connection-targeted test/disconnect, plus Linear, Microsoft 365 and Granola provider operations.

    Privacy

    Module guide

    3 actions · 2 live, 1 guarded, 0 configured

    Privacy posture, consent, and DSAR workflow

    Guarded

    Privacy console, DSAR queue, consent drawer

    Analytics

    privacy.*

    App API

    /v1/privacy/*

    MCP target

    atlas_route_get_v1_privacy_policyplanned: atlas_privacy_dsar_listplanned: atlas_privacy_consent_log

    Validation

    Tenant-scoped privacy officer authorization.DSAR fulfilment emits cryptographic evidence.Consent records immutable.

    Privacy endpoints under /v1/privacy cover data-subject access requests, consent log reads, retention policy queries, and right-to-erasure workflows.

    Set how long each module keeps its data

    Live

    Settings, Data retention: one row per module with a days field or keep forever, and a save button

    Analytics

    settings.data-retention.policy.saveretention_policy_saved

    App API

    GET /v1/retention/policiesPUT /v1/retention/policies

    MCP target

    No agent tool

    Validation

    module must be one of the purgeable modules.retentionDays is a positive whole number of at most 36,500, or null to keep forever.A window shorter than a module's compliance floor is refused with 400 rather than quietly raised.Unknown body fields are refused.Owners and administrators only; reading needs the audit log view permission and saving needs the audit log export permission.

    An owner or administrator sees one retention row for every module that can be purged and sets how many days its records are kept, or keeps them forever. Every change is written to the audit log and applies only to the caller's workspace. Records under an active legal hold are not purged.

    Place or release a legal hold

    Live

    Settings, Data retention: legal hold form with name, reason, and scope, a list of holds, and a release button on each

    Analytics

    settings.data-retention.legal-hold.createsettings.data-retention.legal-hold.releaselegal_hold_created

    App API

    GET /v1/retention/legal-holdsPOST /v1/retention/legal-holdsPOST /v1/retention/legal-holds/{id}/release

    MCP target

    No agent tool

    Validation

    name is required and 1 to 200 characters; reason is at most 1000 characters.scopeType is TENANT, MODULE, or ENTITY, and defaults to TENANT.MODULE scope needs a module; ENTITY scope needs both entityType (at most 64 characters) and entityId (at most 128 characters).The list is paged and can be limited to active holds.A hold from another workspace answers 404.Owners and administrators only; reading needs the audit log view permission and changes need the audit log export permission.

    An owner or administrator places a legal hold on the whole workspace, one module, or one record so that retention purges skip it, and later releases it. Releasing records who released the hold and when, and every change is written to the audit log. The routes read and change only the caller's workspace.

    Automations

    Module guide

    3 actions · 3 live, 0 guarded, 0 configured

    Author and run tenant automation scripts

    Live

    Automation editor, run history, trigger drawer

    Analytics

    automations.*

    App API

    /automations/scripts/*

    MCP target

    atlas_automations_scripts_listatlas_automations_scripts_createatlas_automations_scripts_getatlas_automations_scripts_updateatlas_automations_scripts_disableatlas_automations_scripts_runatlas_automations_scripts_runs_list

    Validation

    Tenant-scoped admin authorization for write.Script source bounded and sandboxed.Run logs PII-redacted.

    Automation script endpoints under /automations/scripts cover script CRUD, manual triggers, run history, and trigger schedules.

    Automation rules REST API

    Live

    REST API with a personal access token that carries the automations:read or automations:write scope

    Analytics

    docs.actions.registry.automations.rules-rest-api

    App API

    GET /v1/automationsPOST /v1/automationsGET /v1/automations/builder/catalogPOST /v1/automations/from-templateGET /v1/automations/{id}PATCH /v1/automations/{id}DELETE /v1/automations/{id}POST /v1/automations/{id}/enablePOST /v1/automations/{id}/disablePOST /v1/automations/{id}/runGET /v1/automations/{id}/runsGET /v1/automations/{id}/versionsPOST /v1/automations/{id}/revert/{version}

    MCP target

    atlas_automations_createatlas_automations_deleteatlas_automations_disableatlas_automations_enableatlas_automations_getatlas_automations_listatlas_automations_runatlas_automations_runs_listatlas_automations_templates_applyatlas_automations_templates_listatlas_automations_updateatlas_automations_versions_listatlas_automations_versions_restore

    Validation

    Name is required and at most 120 characters; the trigger is an audit event pattern of 1 to 100 characters.Between 1 and 10 actions: set_field, apply_label, notify_user, call_webhook, or set_engagement_rag.set_field targets Task or Project; when the rule runs, only whitelisted fields are written (Task: status, priority, dueOn, startsOn, title, description; Project: status, name, ownerId).notify_user needs a title of at most 240 characters and an optional body of at most 2,000 characters; set_engagement_rag needs a known dimension and one of GREEN, AMBER, RED, or GREY.Update must change at least one field.From template: an unknown templateId or a missing required parameter answers 400; parameter values are at most 500 characters.Run history: status filter is succeeded, partial, or failed, and limit is 1 to 200 (default 50).Revert needs a version of 1 or more; an unknown automation or version answers 404.

    These public routes create, edit, enable, disable, run, and delete the workspace's audit-event automation rules, and read their run and version history, through the same service as the Settings Automations screen. Reading needs automations:read and every change needs automations:write, with the public API rate limits and Idempotency-Key replay applied. A manual run answers 202 with the run outcome, and a revert is forward only: it applies the older snapshot as a new version rather than rewriting history. Rules are scoped to the caller's workspace, and an id from another workspace answers 404.

    Script automations REST API

    Live

    REST API with a personal access token that carries the automations:read or automations:write scope

    Analytics

    docs.actions.registry.automations.script-automations-rest-api

    App API

    GET /v1/automations/scriptsPOST /v1/automations/scriptsGET /v1/automations/scripts/{id}PUT /v1/automations/scripts/{id}DELETE /v1/automations/scripts/{id}POST /v1/automations/scripts/{id}/runGET /v1/automations/scripts/{id}/runs

    MCP target

    atlas_automations_scripts_createatlas_automations_scripts_disableatlas_automations_scripts_getatlas_automations_scripts_listatlas_automations_scripts_runatlas_automations_scripts_runs_listatlas_automations_scripts_update

    Validation

    Name is required and at most 120 characters; language is js or python; source is required and at most 50,000 characters.timeoutMs is an integer from 1,000 to 60,000 (default 30,000).Trigger is cron (a valid cron expression of at most 120 characters and a timezone, default UTC), event (a valid event pattern of at most 200 characters), or webhook (an optional secret of 16 to 128 characters).Update must supply at least one field; name, language, source, active, and timeoutMs are applied.Read, update, delete, run, and run history need the caller to own the script or be a workspace OWNER or ADMIN; anyone else gets the same 404 as an unknown id.Run history: status filter is queued, running, success, failed, or timeout, and limit is 1 to 200 (default 50).

    These public routes create, read, update, deactivate, and run script automations, and read their run history, through the same service as the Scripts screen. Reading needs automations:read and every change needs automations:write. Creating a webhook-triggered script returns its webhook secret once, the run route queues a manual run and answers 202 with the run id, and DELETE deactivates the script rather than deleting it. The list returns every script automation in the caller's workspace, while the per-script routes enforce ownership.

    Reporting

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Report deliveries, status, and email pipelines

    Live

    Report scheduler, delivery log, email pipeline drawer

    Analytics

    reports.*status.*

    App API

    /v1/report-deliveries/*/v1/status/*/v1/email/*

    MCP target

    planned: atlas_reports_deliveries_listatlas_status_summary_get

    Validation

    Tenant-scoped reporting role enforcement.Email delivery webhook signatures verified.Status reads are aggregate-only.

    Reporting endpoints under /v1/report-deliveries, /v1/status, and /v1/email cover scheduled report fan-out, status posture, and email delivery telemetry.

    Agent Governance

    Module guide

    1 actions · 0 live, 1 guarded, 0 configured

    Govern agent runs, approvals, and policies

    Guarded

    Approvals queue, policy editor, run inspector

    Analytics

    agent-governance.*

    App API

    /agent-governance/approvals/*

    MCP target

    planned: atlas_agent_governance_approvals_listplanned: atlas_agent_governance_approve

    Validation

    Tenant-scoped agent governance authorization.Approval transitions audit-logged.Policy diff persisted with evidence stamp.

    Agent governance endpoints under /agent-governance/approvals cover approval queue management, policy edits, and audit reads for agent decisions.

    Appointments

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Schedule and manage appointments

    Live

    Appointment calendar, drawer, reschedule action

    Analytics

    appointments.*

    App API

    /appointments/{id}/*

    MCP target

    atlas_booking_appointments_listatlas_booking_appointments_reschedule

    Validation

    Tenant-scoped appointment authorization.ISO instant validation for booking.Conflict checks against owner availability.

    Appointment endpoints under /appointments/{id} cover appointment booking, reschedule, cancel, and confirmation flows.

    Review, reschedule, cancel, remind, and no-show appointments

    Live

    Appointment drawer, reschedule flow, cancel/no-show/reminder actions

    Analytics

    appointments.*booking.appointments.*

    App API

    /v1/appointments/v1/appointments/*

    MCP target

    atlas_booking_appointments_listatlas_booking_appointments_getatlas_booking_appointments_updateatlas_booking_appointments_rescheduleatlas_booking_appointments_cancelatlas_booking_appointments_remindatlas_booking_appointments_no_show_mark

    Validation

    Appointment reads are tenant-scoped.Reschedule/reminder/no-show mutations validate state transitions.Calendar side effects stay queued and evidence-tracked.

    Captures the v1 appointment lifecycle route family used by the booking and scheduling surfaces.

    Data Residency

    Module guide

    1 actions · 0 live, 1 guarded, 0 configured

    Manage tenant data residency and region

    Guarded

    Residency console, region pinning, evidence drawer

    Analytics

    data-residency.*

    App API

    /v1/data-residency/*

    MCP target

    atlas_route_get_v1_data_residencyatlas_route_get_v1_data_residency_regionsatlas_governance_data_residency_policy_getatlas_governance_data_residency_audit_events_listplanned: atlas_data_residency_set

    Validation

    Super-admin or tenant-admin role enforcement.Region changes emit evidence chain.Cross-region writes blocked unless explicitly allowed.

    Data residency endpoints under /v1/data-residency cover tenant region pinning, residency posture, and migration evidence reads.

    eSign API

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    eSign envelope API endpoints

    Live

    Envelope composer, signer drawer, evidence panel

    Analytics

    esign.*

    App API

    /v1/esign/*

    MCP target

    planned: atlas_esign_envelopes_listplanned: atlas_esign_envelopes_send

    Validation

    Tenant-scoped esign authorization.Envelope payload size bounded.Signer verification respects identity policy.

    eSign endpoints under /v1/esign cover envelope CRUD, signer order, status updates, evidence reads, and webhook callbacks for the Document Sign module.

    HR Suite - Operations

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    HR operational sub-modules (onboarding, policies, probations, attendance, etc.)

    Live

    HR console sub-tabs for onboarding, policies, probations, role changes, attendance, holidays, letters, departments, locations, performance, reports, statutory, exit interviews, documents, emergency contacts, employment records, org chart

    Analytics

    hr.ops.*

    App API

    /v1/hr/onboarding/*/v1/hr/policies/*/v1/hr/probations/*/v1/hr/role-changes/*/v1/hr/attendance/*/v1/hr/departments/*/v1/hr/holidays/*/v1/hr/letters/*/v1/hr/locations/*/v1/hr/perf/*/v1/hr/reports/*/v1/hr/statutory/*/v1/hr/exit-interviews/*/v1/hr/documents/*/v1/hr/emergency-contacts/*/v1/hr/employment-records/*/v1/hr/org-chart/*

    MCP target

    planned: atlas_hr_ops_listplanned: atlas_hr_ops_describe

    Validation

    Tenant-scoped HR authorization across all ops modules.Sensitive HR documents gated by role policy.Statutory data exports audit-logged.

    HR operational endpoints cover onboarding workflows, policies, probations, role changes, attendance, holidays, letters, departments, locations, performance reviews, statutory reports, exit interviews, documents, emergency contacts, employment records, and org chart reads.

    Platform - Auth

    Module guide

    3 actions · 3 live, 0 guarded, 0 configured

    Auth surface: login, password, 2FA, OAuth, SSO callbacks

    Live

    Login, signup, password reset, OAuth + SSO callback pages

    Analytics

    auth.*

    App API

    /auth/*/v1/auth/*/v1/oauth/*

    MCP target

    planned: atlas_auth_statusplanned: atlas_auth_logout

    Validation

    Anti-brute-force rate limiting.CSRF tokens on state-changing routes.OAuth callback state cookies validated.

    Auth endpoints under /auth, /v1/auth, and /v1/oauth cover login, signup, password reset, OAuth providers, SSO callbacks, and session bootstrap.

    Sign in with a passkey

    Live

    Sign-in page: Sign in with a passkey button, and saved passkeys offered in the email field where the browser supports it

    Analytics

    auth.method.passkey

    App API

    GET /auth/providersPOST /auth/passkeys/authentication/optionsPOST /auth/passkeys/authentication/verify

    MCP target

    No agent tool

    Validation

    The options request may carry an email of at most 320 characters, which is ignored: sign-in offers discoverable credentials only, so the answer is the same for every address.The browser answer is checked for shape (base64url fields with fixed ceilings, type public-key), then against a one-use challenge, the relying party, the allowed origins and user verification.A signature counter that does not move forward is recorded in the owner's audit trail and the sign-in is refused; two answers racing on one counter cannot both pass.Every failure gets the same 401 answer.next is at most 2048 characters and is kept only when it is a path on this site.Both routes are limited to 60 requests per network address per 5 minutes (429).Passkeys work only on the main product address: a request through a firm's portal address or from another browser origin is refused with 403.The button appears only when GET /auth/providers reports passkey as true.

    These public routes sign a person in with a passkey saved on their device. A successful sign-in returns the same session, and sets the same refresh cookie, as a password sign-in, and asks for no separate two-step code. The sign-in page remembers that the person last used a passkey.

    Sign in with a link sent by email

    Live

    Sign-in page: Email me a sign-in link, resend and change email; the link page at /auth/link with continue and cancel when the link is opened in another browser, and ask for a new link when it has expired

    Analytics

    auth.magic-link.sendauth.magic-link.change-emailauth.magic-link.confirm-cancelauth.magic-link.request-new

    App API

    POST /auth/email-link/requestPOST /auth/email-link/consume

    MCP target

    No agent tool

    Validation

    email must be a valid address; next is at most 2048 characters and is kept only when it is a path on this site; intent is LOGIN.The request answers 202 with the same body whether or not the address has an account, and shares the email code's limits: 3 per address per 10 minutes and 15 per network address per hour (429).token must be exactly 43 base64url characters; a link works once and for 15 minutes, and an unknown, used or expired link gets one 401 answer.A link opened in a browser other than the one that asked for it signs nobody in until the person confirms; confirm must then be true.Opening links is limited to 30 per network address per 10 minutes (429).The option appears only when GET /auth/providers reports magicLink as true, which needs real email delivery.

    These public routes send a one-use sign-in link to an address and turn the opened link into a session, with the same refresh cookie a password sign-in sets. The request sets a short-lived cookie in the browser that asked, so a link opened there signs in at once and a link opened anywhere else asks the person to confirm first.

    Platform - Notifications

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Read and manage your notifications

    Live

    Notification bell, preferences panel, push subscription drawer

    Analytics

    notifications.*

    App API

    /notifications/*/notification-preferences/*/notification-prefs/*/push/*/v1/push/*

    MCP target

    atlas_notifications_listatlas_notifications_digest_getatlas_notifications_snooze_presets_listatlas_notifications_preferences_getatlas_notifications_preferences_updateatlas_notifications_read_markatlas_notifications_unread_markatlas_notifications_archiveatlas_notifications_restoreatlas_notifications_snoozeatlas_notifications_read_bulk_markatlas_notifications_read_bulk_archiveatlas_route_get_push_vapid_public_keyatlas_route_get_v1_push_vapid_public_key

    Validation

    Caller-scoped feed reads.Preference toggles audit-logged.Push subscription tokens validated and rotated.

    Notification endpoints under /notifications, /notification-preferences, /notification-prefs, /push and /v1/push cover the in-app feed, preference toggles, and push notification subscription lifecycle.

    Platform - Calendar

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    View and manage your calendar

    Live

    Calendar page, grid preferences toggles, availability drawer

    Analytics

    calendar.*

    App API

    /calendar/*/calendar-grid-preferences/*/availability/*/auto-schedule/*

    MCP target

    atlas_me_calendar_grid_preferences_getatlas_me_calendar_grid_preferences_setatlas_calendar_events_listplanned: atlas_calendar_event_create

    Validation

    Tenant-scoped calendar authorization.ISO instant validation for events.Conflicts surfaced against owner availability.

    Calendar endpoints under /calendar, /calendar-grid-preferences, /availability, and /auto-schedule cover the unified calendar view, event CRUD, grid preferences, availability windows, and auto-schedule planner.

    Calendar settings, connections, and sync REST API

    Live

    REST API with a personal access token that carries the calendar:read or calendar:write scope

    Analytics

    docs.actions.registry.platform-calendar.calendar-rest-api

    App API

    GET /v1/calendar/settingsPUT /v1/calendar/settingsGET /v1/calendar/providersGET /v1/calendar/connectionsDELETE /v1/calendar/connections/{id}GET /v1/calendar/eventsGET /v1/calendar/external-tasksGET /v1/calendar/holidaysPOST /v1/calendar/sync-task/{taskId}

    MCP target

    atlas_calendar_connections_deleteatlas_calendar_connections_listatlas_calendar_events_listatlas_calendar_external_tasks_listatlas_calendar_holidays_listatlas_calendar_providers_listatlas_calendar_settings_getatlas_calendar_settings_updateatlas_calendar_tasks_sync

    Validation

    Settings: countryCode is a two-letter country code; weekendDays is up to 7 day numbers from 0 to 6, deduplicated and sorted.Holidays: year is an integer from 1970 to 2100; countryCode is optional and defaults to the workspace setting.Events: start and end are required dates and end must be after start.A connection can only be removed by the person who owns it; any other id answers 404.Syncing a task needs a task in the caller's workspace that has a due date; otherwise the request answers 404 or 400.The holiday feed answers 503 when the upstream lookup fails.

    These public routes read and update the workspace calendar preferences, list configured providers and the caller's own connected calendars, disconnect one, read external events and tasks from those calendars, list public holidays, and push a task as an event to every connected calendar. Reading needs calendar:read and changes need calendar:write. Events, external tasks, and task sync return results only when the caller has connected a calendar, and task sync reports the outcome per provider. The calendar settings screen uses the session routes of the same service.

    Platform - Search

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Search across everything in Atlas

    Live

    Command bar, saved views, search results page

    Analytics

    search.*

    App API

    /search/*/v1/search/*/v1/unified-search/*/v1/cross-tool-search/*/frecency/*/saved-views/*/task-saved-filters/*

    MCP target

    atlas_me_saved_views_listatlas_me_saved_views_createatlas_me_saved_views_updateatlas_me_saved_views_deleteatlas_me_saved_views_sharing_setplanned: atlas_search_query

    Validation

    Tenant-scoped search indexes.Filter expressions parsed safely.Cross-tool joins respect per-module ACLs.

    Search endpoints under /search, /v1/search, /v1/unified-search, /v1/cross-tool-search, /frecency, /saved-views, and /task-saved-filters cover unified search, frecency ranking, saved views, and per-module filter persistence.

    Platform - Onboarding

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    New-user onboarding checklist and tenant bootstrap

    Live

    Onboarding wizard, checklist, tenant setup screens

    Analytics

    onboarding.*

    App API

    /onboarding/*

    MCP target

    atlas_onboarding_getplanned: atlas_onboarding_complete

    Validation

    Caller-scoped checklist reads.Tenant bootstrap operations idempotent.Initial admin role assignment audit-logged.

    Onboarding endpoints under /onboarding cover the new-user wizard, tenant bootstrap, initial admin assignment, and checklist progression reads.

    Platform - Presence + Live

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Realtime presence, live cursors, and sync channels

    Live

    Avatar stack, live cursor overlay, sync indicator

    Analytics

    presence.*

    App API

    /presence/*/live/*/sync/*/share/*

    MCP target

    planned: atlas_presence_subscribe

    Validation

    Caller-scoped presence channels.Tokens for live/share endpoints time-bound.Sync deltas size-bounded.

    Presence endpoints under /presence, /live, /sync, and /share cover realtime presence broadcast, live cursors, sync channel reads, and ephemeral share links.

    Platform - Feedback

    Module guide

    5 actions · 3 live, 2 guarded, 0 configured

    User feedback capture, inspiration, and morning briefing

    Live

    Feedback widget, inspiration panel, morning briefing card

    Analytics

    feedback.*

    App API

    /v1/feedback/*/inspiration/*/morning-briefing/*/digest/*/focus-coaching/*

    MCP target

    planned: atlas_feedback_submit

    Validation

    Bounded feedback payload size.PII scrubbed from analytics fanout.Caller-scoped briefing reads.

    Feedback and personalization endpoints under /v1/feedback, /inspiration, /morning-briefing, /digest, and /focus-coaching cover user feedback submission, daily inspiration, briefings, digests, and focus coaching prompts.

    Answer the satisfaction survey

    Guarded

    Onboarding page satisfaction widget: score buttons 0 to 10, optional comment, submit, skip comment, and close

    Analytics

    nps_submitted

    App API

    POST /v1/growth/nps

    MCP target

    No agent tool

    Validation

    score is required and is a whole number from 0 to 10.comment, when given, is trimmed and at most 2000 characters.surface, when given, is at most 64 characters and defaults to app.The detractor, passive, or promoter category is computed on the server from the score and cannot be set by the caller.The workspace must hold the CRM module entitlement, and the caller needs the growth:write scope.

    A signed-in person rates Atlas from 0 to 10 and may add a comment, and the server stores the response against their workspace and user with a computed category. The route is self-service for the caller's own workspace and is refused when the workspace lacks the required module entitlement. It does not itself enforce the 90-day survey interval; the eligibility routes report that interval.

    Share the workspace referral link

    Live

    Onboarding page referral card: referral link, copy button, and share button with click, signup, and credit counts

    Analytics

    referral_shared

    App API

    GET /v1/growth/referral

    MCP target

    No agent tool

    Validation

    The caller must be signed in and carry the growth:read scope.The workspace referral code is created on first read and reused afterwards.

    A signed-in person reads the workspace referral code with its click count, signup count, and earned credit, and copies or shares a signup link that carries it. The route only reads, or creates the code once, for the caller's own workspace. It never exposes another workspace's code or totals.

    Product feedback, survey eligibility, and referral API

    Guarded

    REST API with the growth:read or growth:write scope; the growth-status routes accept a personal access token and agent tools

    Analytics

    docs.actions.registry.platform-feedback.feedback-and-referral-api

    App API

    POST /v1/growth/feedbackGET /v1/growth/nps/eligibilityPOST /v1/growth/referral/redeemGET /v1/growth-status/nps-eligibilityGET /v1/growth-status/referral

    MCP target

    atlas_growth_nps_eligibility_getatlas_growth_referral_summary_get

    Validation

    sentiment is required and is one of positive, neutral, or negative.note is at most 2000 characters, surface at most 64, and route at most 500.A referral code is 4 to 32 letters, digits, or hyphens, and is matched without regard to case.Redeeming an unknown code, the workspace's own code, or a second code for the same workspace answers ok: false with a reason instead of crediting.Survey eligibility allows one response every 90 days per person.Submitting feedback and redeeming a referral need the CRM module entitlement and the growth:write scope.

    These routes record a quick positive, neutral, or negative feedback pulse, report whether the caller may answer the satisfaction survey yet, redeem another workspace's referral code, and read the referral summary and survey eligibility through the token-friendly growth-status surface. Every route is scoped to the caller's own user and workspace. A successful redemption credits the referring workspace once and is refused for self-referral or a repeat.

    Open a support request

    Live

    Support page form: subject, message, category, product area, priority, email, name, company, phone, optional attachment, and submit button

    Analytics

    support_submit

    App API

    POST /v1/support

    MCP target

    No agent tool

    Validation

    subject is 3 to 200 characters and message is 10 to 8000 characters.email is required, must be a valid address, and is at most 320 characters.category, productArea, and priority must be known values; priority is low, normal, high, or urgent and defaults to normal.contactName and contactCompany are at most 160 characters, contactPhone at most 80, and route at most 500.An attachment is a base64 data URL of at most 3,000,000 characters with a name of at most 200 characters.The browser user agent is stored only as a short hash when the caller does not send one.

    Anyone, including a signed-out visitor, opens a support request from the public support page or a help entry point. The route needs no credential, stores the request, and notifies the Atlas support team by email when email is configured. Reading, answering, and updating requests are separate routes restricted to Atlas staff.

    Platform - Billing

    Module guide

    5 actions · 4 live, 0 guarded, 1 configured

    Billing, plan, and rate-limit tier management

    Live

    Billing console, plan picker, rate-limit drawer

    Analytics

    billing.*

    App API

    /v1/billing/*/v1/rate-limit-tiers/*

    MCP target

    planned: atlas_billing_summary

    Validation

    Tenant-admin authorization.Monetary fields stored as integer cents.Plan changes audit-logged.

    Billing endpoints under /v1/billing and /v1/rate-limit-tiers cover plan subscription, invoice reads, and rate-limit tier overrides.

    Apply a coupon at checkout

    Live

    Settings, Billing, checkout flow: coupon code field and apply button above the pay button

    Analytics

    coupon_appliedcheckout.pay

    App API

    POST /v1/coupons/validate

    MCP target

    No agent tool

    Validation

    code is required; an empty code is refused with 400.The discount is computed on the server from the same pricing catalog that checkout uses, so the client total is never trusted.An unknown, inactive, or expired coupon is answered as invalid with a reason.A coupon limited to one plan, one currency, or a minimum order is refused for any other selection.A coupon the workspace has already used, or one that has reached its redemption limit, is refused.Session only, for owners, administrators, and members with the billing view permission and the billing:read scope.

    During checkout a person types a coupon code and the server prices the selected plan, cycle, modules, and currency, then reports whether the coupon applies and what it takes off. The route accepts only a signed-in session from an owner, administrator, or member who can view billing. It does not redeem the coupon; it only reports validity and the discount for the quoted order.

    Workspace entitlements read API

    Live

    Read by the app shell to show or lock modules and features; callable with the profile:read scope

    Analytics

    docs.actions.registry.platform-billing.entitlements-read-api

    App API

    GET /v1/entitlements

    MCP target

    No agent tool

    Validation

    The caller must be signed in, and the route reads only the caller's own workspace.Read only: it changes nothing.

    This route returns the effective entitlements of the caller's workspace: which modules and features its plan and any grants allow, and its limits. The web app uses it to hide or lock surfaces when the signed-in session does not already carry the entitlement set. It is a self-service route for the caller's own workspace and cannot read another workspace.

    Payment provider webhook receiver

    Configured

    Inbound webhook called by the payment provider from its own servers; no Atlas credential, authenticated by its signature

    Analytics

    docs.actions.registry.platform-billing.payments-webhook-receiver

    App API

    POST /v1/payments/webhooks/{provider}

    MCP target

    No agent tool

    Validation

    provider must name one of the configured payment providers; any other value is refused with 400.The signature is verified over the raw request bytes with a constant-time comparison; a missing, mismatched, or replayed signature is refused with 401.A body that cannot be parsed after the signature check is refused with 400.Events are deduplicated by event id, so a repeated delivery is acknowledged without being applied twice.A processing failure is recorded and still acknowledged with 200, so the provider does not retry a poison event forever.

    The payment provider calls this route to report billing events for a workspace, and it is the only place where a paid plan or module is granted to a workspace. The route is public because the provider holds no Atlas credential, so the signature over the raw body is the whole of the authentication. Signatures, secrets, and payloads are never logged.

    Compare plans and get a price

    Live

    Plans page: tier, cycle, module, currency, and tax number selectors, plan recommender with team size and goals, live quote, and checkout button

    Analytics

    plans.checkoutplan_configuredplan_viewed

    App API

    GET /v1/pricing/catalogPOST /v1/pricing/quotePOST /v1/pricing/recommend

    MCP target

    No agent tool

    Validation

    quote: tierId is required and at most 40 characters; cycle is monthly or annual; bundleId at most 40 characters; at most 32 modules and 8 add-ons; currency is INR or USD; gstin at most 20 characters.recommend: teamSize is a whole number from 1 to 100000; cycle is monthly or annual; at most 20 goals of at most 40 characters; freeText at most 2000 characters.A selection the pricing engine cannot price is refused with 400 and names the field.No credential is required.

    Anyone, signed in or not, reads the effective plan catalog, gets a quote for a plan, cycle, modules, add-ons, and currency, and asks for a recommended plan from team size and goals. All price arithmetic happens on the server from one catalog, so the page and checkout never disagree about a price. The catalog is the built-in default unless Atlas staff have saved an override.

    Platform - Observability

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Health, readiness, metrics, observability endpoints

    Live

    Status page, internal metrics dashboard

    Analytics

    observability.*

    App API

    /health/*/ready/*/metrics/*/observability/*/v1/health/*/.well-known/*

    MCP target

    atlas_server_health_check

    Validation

    Unauthenticated probes return minimal payloads.Metrics scopes restricted to internal callers.Well-known endpoints exclude tenant-scoped data.

    Observability endpoints under /health, /ready, /metrics, /observability, /v1/health, and /.well-known cover health probes, readiness gates, Prometheus metrics, and well-known discovery documents.

    Platform - Public Surfaces

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Public marketing, blog, and unauthenticated share surfaces

    Live

    Public blog, public share links, marketing pages

    Analytics

    public.*

    App API

    /public/*/public-blog/*/public-shares/*

    MCP target

    atlas_blog_public_posts_listatlas_blog_public_json_feed_getatlas_blog_public_rss_feed_getatlas_blog_public_sitemap_getplanned: atlas_public_share_get

    Validation

    No tenant identifiers leaked in payloads.Share tokens HMAC-verified and revocable.Public pages rate-limited per IP.

    Public endpoints under /public, /public-blog, and /public-shares cover marketing pages, public blog reads, and unauthenticated share token lookups for documents, dashboards, and previews.

    Daily inspiration feed

    Live

    Called by the browser extension popup and new tab page for the daily quote and wallpaper; shuffle=true asks for a fresh pick

    Analytics

    docs.actions.registry.platform-public.inspiration-today-feed

    App API

    GET /v1/inspiration/today

    MCP target

    atlas_route_get_v1_inspiration_today

    Validation

    No credential is required; the bundle is the same for every workspace.shuffle accepts true, 1, or yes to bypass the cache; any other value returns the cached bundle.The route always answers 200; a failed upstream source leaves that field null.

    This route returns the day's inspiration bundle, such as a quote and a wallpaper, from public sources, cached for several hours unless a shuffle is requested. It is an alias of the unprefixed inspiration route kept for browser extension builds that already call the /v1 path. It holds no workspace data and needs no sign-in.

    Time Tracking

    Module guide

    3 actions · 2 live, 1 guarded, 0 configured

    Time entries, workload, and focus sessions

    Live

    Time entry drawer, workload view, focus timer

    Analytics

    time-tracking.*

    App API

    /time-entries/*/workload/*/focus-sessions/*

    MCP target

    atlas_time_entries_listatlas_time_entries_running_getatlas_time_entries_startatlas_time_entries_stopatlas_time_entries_createatlas_time_entries_updateatlas_time_entries_deleteatlas_time_entries_submitatlas_time_entries_daily_totals_getatlas_time_entries_project_totals_getatlas_time_entries_exportatlas_workload_calculateatlas_workload_overallocations_listatlas_workload_day_tasks_listatlas_workload_capacity_listatlas_workload_capacity_setatlas_focus_sessions_listatlas_focus_sessions_createatlas_focus_sessions_delete

    Validation

    Tenant-scoped time entry authorization.Duration validated against ISO instants.Workload aggregates bounded per user/day.

    Time tracking endpoints under /time-entries, /workload, and /focus-sessions cover time entry CRUD, workload allocations, and focus session reads tied to the planner.

    Review and decide time approvals

    Guarded

    Time approval inbox, detail drawer, approve/reject buttons

    Analytics

    time-approvals.*time-tracking.approvals.*

    App API

    /time-approvals/time-approvals/*/time-entries/*/request-approval

    MCP target

    atlas_time_entries_submitatlas_time_approvals_listatlas_time_approvals_getatlas_time_approvals_review

    Validation

    Reviewer authorization enforced per approval.Decision comments are bounded text.Approval decisions are immutable evidence once posted.

    Covers manager-facing time approval reads and approve/reject decisions.

    Time entries and timer REST API

    Live

    REST API with a personal access token that carries the time:read, time:write, or time:delete scope

    Analytics

    docs.actions.registry.time-tracking.time-entries-rest-api

    App API

    GET /v1/time-entriesPOST /v1/time-entriesPATCH /v1/time-entries/{id}DELETE /v1/time-entries/{id}POST /v1/time-entries/{id}/stopGET /v1/time-entries/runningPOST /v1/time-entries/start

    MCP target

    atlas_route_delete_v1_time_entries_by_idatlas_route_get_v1_time_entriesatlas_route_get_v1_time_entries_runningatlas_route_patch_v1_time_entries_by_idatlas_route_post_v1_time_entriesatlas_route_post_v1_time_entries_by_id_stopatlas_route_post_v1_time_entries_start

    Validation

    Description is at most 500 characters; taskId and projectId are optional and at most 64 characters each.A completed entry needs startsAt and endsAt, and endsAt must be strictly after startsAt.A referenced task or project must exist in the caller's workspace, otherwise the request answers 404.Update must change at least one field and keep the end after the start.Starting a timer stops the caller's running timer in this workspace first; a timer running in another workspace answers 409.Stopping a timer that has already stopped returns it unchanged.Entries belong to one person: another person's entry answers 404.

    These public routes let a person list their time entries, log a completed entry, start and stop a timer, read the running timer, and edit or delete their own entries. Reading needs time:read, changes need time:write, and deleting needs time:delete. The duration is always computed on the server from the start and end times. The Time Tracking screen uses the session routes of the same service.

    Forms Engine

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Build, publish, and collect forms

    Live

    Form builder, attribute panel, formula editor, label picker

    Analytics

    forms.*

    App API

    /forms/*/field-policies/*/custom-attributes/*/formula-fields/*/labels/*

    MCP target

    atlas_route_get_forms_public_by_slugatlas_forms_listplanned: atlas_forms_submit

    Validation

    Tenant-scoped form authorization.Custom field validation rules enforced server-side.Formula expressions sandboxed.

    Forms engine endpoints under /forms, /field-policies, /custom-attributes, /formula-fields, and /labels cover form CRUD, submission, field policy management, custom attributes, formula fields, and labels across modules.

    Intake forms and task approvals REST API

    Live

    REST API with a personal access token that carries the forms:read or forms:write scope

    Analytics

    docs.actions.registry.forms-engine.forms-rest-api

    App API

    GET /v1/formsPOST /v1/formsPATCH /v1/forms/{id}DELETE /v1/forms/{id}GET /v1/forms/{id}/submissions.csvPOST /v1/forms/approvals/{taskId}/requestPOST /v1/forms/approvals/{taskId}/decide

    MCP target

    atlas_forms_approvals_requestatlas_forms_approvals_reviewatlas_forms_createatlas_forms_deleteatlas_forms_listatlas_forms_updateatlas_route_get_v1_forms_by_id_submissions_csv

    Validation

    Create needs a projectId in the caller's workspace, a name of at most 120 characters, a description of at most 5,000 characters, 1 to 40 fields, and a titleField that names one of the fields.Field keys start with a lowercase letter and use lowercase letters, digits, and underscores (at most 49 characters); labels are at most 120 characters; at most 20 options of 120 characters.Field kinds are text, textarea, email, number, select, multi_select, checkbox, date, datetime, url, phone, rating, file_url, or section.Update must change at least one field, and a new titleField must name a declared field.An approval decision body needs approve as true or false.A form in another workspace answers 404.

    These public routes list, create, edit, and delete intake forms that turn each submission into a task on a project, export up to 1,000 submissions as CSV, and request or record an approval on a task. Reading needs forms:read and every change needs forms:write. The approval routes set the task's approval state to pending, approved, or rejected and record who decided; they apply no role or state check beyond the scope. Public form schema and submission routes are not part of this surface.

    Booking Engine

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Booking pages, meeting types, blackouts, webhooks, hosts, questions

    Live

    Booking page editor, meeting type drawer, host availability matrix

    Analytics

    booking.*

    App API

    /booking-pages/*/booking-meeting-types/*/booking-webhooks/*/booking-blackouts/*/booking-page-hosts/*/booking-questions/*/booking-analytics/*/scheduling-rules/*

    MCP target

    atlas_booking_blackouts_listatlas_booking_blackouts_createatlas_booking_blackouts_updateatlas_booking_blackouts_deleteatlas_route_get_booking_pages_public_by_slugatlas_route_get_booking_pages_public_by_slug_slotsplanned: atlas_booking_pages_listplanned: atlas_booking_pages_book

    Validation

    Tenant-scoped booking authorization.Booking time-window validation against host availability.Webhook secrets HMAC-verified on outbound deliveries.

    Booking engine endpoints under /booking-pages, /booking-meeting-types, /booking-webhooks, /booking-blackouts, /booking-page-hosts, /booking-questions, /booking-analytics, and /scheduling-rules cover booking page CRUD, meeting types, blackout windows, webhook fan-out, host configuration, intake questions, analytics, and scheduling rules.

    Review public booking meeting types and intake questions

    Live

    Public booking page meeting-type selector and question form

    Analytics

    booking.public.meeting-types.*booking.public.questions.*

    App API

    /public-booking-meeting-types/*/public-booking-questions/*

    MCP target

    atlas_route_get_public_booking_meeting_types_by_slugatlas_route_get_public_booking_questions_by_slugplanned: atlas_booking_public_metadata_get

    Validation

    Public reads are cacheable and slug-scoped.No tenant-private attendee data is returned.Question definitions are bounded before rendering.

    Covers unauthenticated booking metadata reads used by public booking pages before an appointment is created.

    Release Notes

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Release notes feed and changelog

    Live

    Release notes page, changelog widget

    Analytics

    release-notes.*

    App API

    /release-notes/*

    MCP target

    atlas_route_get_release_notesatlas_route_get_release_notes_adminatlas_route_get_release_notes_feed_jsonatlas_route_get_release_notes_latest_for_meatlas_route_post_release_notesatlas_route_patch_release_notes_by_idatlas_route_delete_release_notes_by_idatlas_route_post_release_notes_by_id_publishatlas_route_post_release_notes_by_id_dismiss

    Validation

    Read-only across tenants.Authoring restricted to platform admins.Bounded markdown payload size.

    Release notes endpoints under /release-notes cover the public changelog, in-app release notes panel, and admin authoring surface.

    Review public changelog entries and RSS feed

    Live

    Customer changelog page, entry detail, and RSS subscription

    Analytics

    changelog.public.*release-notes.rss.*

    App API

    /v1/changelog/v1/changelog/*

    MCP target

    atlas_changelog_listatlas_changelog_rss_feed_get

    Validation

    Published-only reads on public routes.RSS output is cacheable and secret-free.Slug detail reads do not expose draft metadata.

    Covers the public changelog list, slug detail, and RSS feed routes added for customer-facing release notes.

    Workspaces

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Workspaces, teams, tenants, tenant branding

    Live

    Workspace switcher, team admin, tenant settings, branding panel

    Analytics

    workspaces.*

    App API

    /workspaces/*/v1/workspaces/*/teams/*/tenants/*/v1/tenant/*/v1/tenants/*/v1/tenant-branding/*

    MCP target

    atlas_workspace_listatlas_workspace_createatlas_me_workspaces_listatlas_workspace_branding_getatlas_workspace_branding_updateatlas_workspace_chrome_branding_getatlas_workspace_chrome_branding_updateplanned: atlas_workspaces_switch

    Validation

    Tenant-scoped workspace authorization.Branding assets size-bounded.Cross-tenant joins forbidden.

    Workspace endpoints under /workspaces, /v1/workspaces, /teams, /tenants, /v1/tenant, /v1/tenants, and /v1/tenant-branding cover workspace CRUD, team admin, tenant settings, and branding management.

    Profile + Me

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Profile, me, user theme, habits, daily notes, journal

    Live

    Profile page, theme picker, habits tracker, daily notes panel

    Analytics

    profile-platform.*

    App API

    /profile/*/me/*/user-theme/*/habits/*/daily-notes/*/journal-reviews/*

    MCP target

    atlas_me_theme_preferences_getatlas_me_theme_preferences_setplanned: atlas_profile_getplanned: atlas_profile_update

    Validation

    Caller-scoped reads.Bounded profile fields.Theme tokens validated against design system.

    Profile and personal endpoints under /profile, /me, /user-theme, /habits, /daily-notes, and /journal-reviews cover the signed-in user profile, theme preferences, habits tracker, daily notes, and journal reviews.

    SSO

    Module guide

    3 actions · 3 live, 0 guarded, 0 configured

    SSO configuration and callbacks

    Live

    SSO admin console, IdP metadata upload

    Analytics

    sso.*

    App API

    /v1/sso/*

    MCP target

    planned: atlas_sso_config_get

    Validation

    Tenant-admin authorization.SAML metadata signature verified.Just-in-time provisioning audit-logged.

    SSO endpoints under /v1/sso cover SAML/OIDC configuration, IdP metadata upload, JIT provisioning, and SSO callback handling.

    Sign in with single sign-on from your work email

    Live

    Sign-in page: Use single sign-on button, work email field, continue, back to sign in, and the return page that finishes the sign-in

    Analytics

    auth.method.ssoauth.sso.backauth.sso.return-back

    App API

    POST /auth/sso/discoverGET /v1/sso/{tenantSlug}/login

    MCP target

    No agent tool

    Validation

    email must be a valid address.The address domain matches only exactly, after lower casing and conversion to punycode, and only a domain a workspace has verified with a DNS record; a subdomain matches only when it was verified itself.The workspace must have a SAML connection that is not disabled; when no single workspace matches, the answer is 404 single sign-on is not set up for this address.The answer names only the workspace slug and the SAML start address, never the workspace name.Lookups are limited to 20 per network address per 10 minutes (429).The option appears only when GET /auth/providers reports sso as true, which needs single sign-on enabled on the server and at least one workspace with SAML on a verified domain.

    This public route finds the workspace whose verified email domain serves a work address and returns where its SAML sign-in starts; the sign-in page then sends the person there, and the identity provider returns them to /auth/sso to finish. It is for people whose workspace signs them in through its own identity provider.

    Verify your email domains for single sign-on

    Live

    Settings, Security, single sign-on domains card: domain field and add button, the TXT record name and value with copy buttons, verify now, and remove

    Analytics

    settings.security.sso-domains.domainsettings.security.sso-domains.addsettings.security.sso-domains.copy-namesettings.security.sso-domains.copy-valuesettings.security.sso-domains.verifysettings.security.sso-domains.removesettings.security.sso-domains.remove-confirmsettings.security.sso-domains.retry

    App API

    GET /v1/settings/sso/domainsPOST /v1/settings/sso/domainsPOST /v1/settings/sso/domains/{id}/verifyDELETE /v1/settings/sso/domains/{id}

    MCP target

    No agent tool

    Validation

    domain is trimmed and must then be 1 to 253 characters and a plain domain such as example.com, with no scheme, path or wildcard, or the request is refused with 400.A domain this workspace has already added is refused with 409.Verification looks for a TXT record at _atlas-sso.<domain> holding the value shown, records the result either way, and fails when another workspace has already verified the same domain.A domain id is 1 to 64 characters; an id from another workspace answers 404.Owners and administrators only: reading needs view access to SSO settings, and adding, verifying and removing need admin access.Session only: a personal access token or an OAuth access token is refused with 403.

    An owner or administrator claims the email domains their people sign in with and proves the workspace owns each one with a DNS record. Only a verified domain is used by single sign-on discovery, because an unproven domain would let one workspace send another company's people to its own identity provider. The workspace is always the session's own, adding and verifying are written to the audit log, and a removed domain stops matching at once.

    Two-Factor Auth

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Two-factor authentication enrollment and challenge

    Live

    Two-factor enrollment screen, recovery codes drawer

    Analytics

    two-factor.*

    App API

    /v1/two-factor/*

    MCP target

    planned: atlas_two_factor_status

    Validation

    Caller-scoped reads.TOTP secret never logged.Recovery code regeneration audit-logged.

    Two-factor endpoints under /v1/two-factor cover TOTP enrollment, challenge verification, and recovery code management for end users.

    Add, rename and remove your passkeys

    Live

    Settings, Security, Passkeys card: add a passkey, confirm with your password or an emailed code, name it, then rename or remove each passkey in the list

    Analytics

    settings.security.passkeys.addsettings.security.passkeys.email-codesettings.security.passkeys.use-passwordsettings.security.passkeys.add.cancelsettings.security.passkeys.add.continuesettings.security.passkeys.renamesettings.security.passkeys.rename.savesettings.security.passkeys.rename.cancelsettings.security.passkeys.removesettings.security.passkeys.remove.confirm

    App API

    GET /auth/passkeysPOST /auth/passkeys/registration/optionsPOST /auth/passkeys/registration/verifyPATCH /auth/passkeys/{id}DELETE /auth/passkeys/{id}POST /auth/email-otp/request

    MCP target

    No agent tool

    Validation

    Adding a passkey first asks for the password (1 to 1024 characters) or a 6-digit code emailed to the account address; with neither the request is refused with 403, and a wrong one with 401.Those re-checks are limited to 10 per account per 10 minutes.A passkey name is trimmed and must then be 1 to 64 characters with no control characters; on registration an empty name is treated as no name.The browser answer is checked for shape (base64url fields with fixed ceilings, type public-key) and then for meaning by the WebAuthn library, against a one-use challenge.An account holds at most 20 passkeys (409), and a passkey already registered is refused with 409.A passkey id is 1 to 64 characters; renaming or removing a passkey that is not the caller's own answers the same 404 as one that does not exist.Adding, renaming and removing are refused for an impersonation session.Passkeys work only on the main product address: a request through a firm's portal address or from another browser origin is refused with 403, and a server without passkeys configured answers 503.A personal access token or an OAuth access token is refused with 403; only a signed-in browser session reaches these routes.

    These routes let a signed-in person manage their own passkeys from security settings: list them with when each was added and last used, add one after proving it is them again, rename one, and remove one. Adding a passkey adds a way into the account, which is why it needs a fresh password or emailed code rather than the age of the session. A passkey signs a person in without a separate two-step code, because it already proves possession of the device and the person's verification on it.

    Sessions

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Active session management and revoke

    Live

    Sessions panel in profile/security settings

    Analytics

    sessions.*

    App API

    /v1/sessions/*

    MCP target

    planned: atlas_sessions_listplanned: atlas_sessions_revoke

    Validation

    Caller-scoped reads.Session revoke audit-logged.Stale sessions garbage-collected on schedule.

    Session endpoints under /v1/sessions cover active session listing, single-session revoke, and bulk revoke flows tied to the security console.

    Personal Access Tokens

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Personal access tokens and API key management

    Live

    Tokens page in profile/security settings

    Analytics

    pats.*

    App API

    /v1/pats/*/v1/access-tokens/*

    MCP target

    atlas_pats_listatlas_pats_createatlas_pats_rotateatlas_pats_revoke

    Validation

    Caller-scoped reads.Token plaintext returned only on creation or rotation.Scope restrictions enforced server-side.

    Token endpoints under /v1/pats and /v1/access-tokens cover personal access token creation, rotation, revoke, scope edit, and listing.

    Audit + Activity

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Audit log, activity feed, audit events

    Live

    Audit log explorer, activity feed widget

    Analytics

    audit.*

    App API

    /v1/audit-log/*/audit-events/*/activity-feed/*

    MCP target

    planned: atlas_audit_log_query

    Validation

    Tenant-admin authorization for raw audit reads.Time-range bounded queries.Audit events immutable; no DELETE handler.

    Audit endpoints under /v1/audit-log, /audit-events, and /activity-feed cover audit log search, activity feed reads, and exportable audit event streams for compliance reviews.

    Stream the audit log to a security event system

    Live

    Settings, Security, SIEM export: destination form with format, secret token, enabled switch, and event filter; save and remove buttons; delivery log with load more

    Analytics

    settings.siem-export.config.savesettings.siem-export.config.removesettings.siem-export.deliveries.load-moresiem_export_saved

    App API

    GET /v1/audit-events/siem-exportPUT /v1/audit-events/siem-exportDELETE /v1/audit-events/siem-exportGET /v1/audit-events/siem-export/deliveries

    MCP target

    No agent tool

    Validation

    destinationUrl is required, must be a URL, and is at most 2000 characters.The destination must pass the outbound URL safety check; an address that resolves to a private or internal network is refused with 400.format is one of json, splunk_hec, or cef, and defaults to json.secretToken, when given, is 8 to 512 characters; leaving it out keeps the stored token and sending null clears it.eventFilter holds at most 100 action prefixes of 1 to 128 characters each; an empty list forwards every audit event.Unknown body fields are refused.The delivery log is keyset paged, newest first.

    An owner or administrator configures where the workspace audit feed is sent, in which format, and which actions are included, then reads the log of delivery attempts. Reads need the audit log view permission and the workspace:read scope; saving and removing need the audit log export permission and the workspace:manage scope, and every change is written to the audit log. The secret token is never returned, only whether one is set, and each workspace has at most one configuration.

    Analytics

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Analytics surface and A/B tests

    Live

    Analytics dashboards, A/B test console

    Analytics

    analytics.*

    App API

    /v1/analytics/*/v1/email-ab-tests/*

    MCP target

    planned: atlas_analytics_query

    Validation

    Tenant-scoped analytics queries.PII never returned in raw form.A/B test allocation deterministic and audit-logged.

    Analytics endpoints under /v1/analytics and /v1/email-ab-tests cover aggregate analytics queries, dashboards, and A/B test allocation/reads.

    Reports

    Module guide

    4 actions · 3 live, 1 guarded, 0 configured

    Reports surface, email templates, SEO

    Live

    Reports console, email template editor, SEO admin

    Analytics

    reports.*

    App API

    /v1/reports/*/v1/email-templates/*/v1/seo/*/v1/themes/*

    MCP target

    atlas_docs_seo_config_getplanned: atlas_reports_render

    Validation

    Tenant-scoped reporting authorization.Email template variables sanitized.SEO settings validated against domain ownership.

    Reports and editorial endpoints under /v1/reports, /v1/email-templates, /v1/seo, and /v1/themes cover scheduled reports, email template authoring, SEO admin, and theme management.

    Create, review, and revoke public dashboards

    Guarded

    Public dashboard sharing controls and revoke action

    Analytics

    public-dashboards.*reports.public-share.*

    App API

    /v1/public-dashboards/v1/public-dashboards/*

    MCP target

    planned: atlas_public_dashboards_listplanned: atlas_public_dashboards_revoke

    Validation

    Share tokens are opaque.Public dashboards expose configured aggregate data only.Revocation is immediate and audit-stamped.

    Covers public dashboard listing, creation, and token revocation for shareable reporting surfaces.

    Insights reporting REST API

    Live

    REST API with a personal access token that carries the reports:read scope

    Analytics

    docs.actions.registry.reports-platform.insights-rest-api

    App API

    GET /v1/insights/datasetsPOST /v1/insights/queryGET /v1/insights/reportsPOST /v1/insights/reports/runGET /v1/insights/reports/{id}POST /v1/insights/reports/{id}/runGET /v1/insights/reports/{id}/export.csvGET /v1/insights/dashboardsGET /v1/insights/dashboards/{id}POST /v1/insights/dashboards/{id}/render

    MCP target

    atlas_insights_adhoc_reports_runatlas_insights_dashboards_getatlas_insights_dashboards_listatlas_insights_dashboards_renderatlas_insights_datasets_listatlas_insights_queries_runatlas_insights_reports_exportatlas_insights_reports_getatlas_insights_reports_listatlas_insights_reports_run

    Validation

    Every route needs only the reports:read scope and none of them changes data.Ad hoc queries and reports name a dataset of at most 64 characters, at most 3 dimensions, 8 measures, and 20 filters, and a row limit of at most 1,000.An unknown dataset, a filter on a field the dataset does not allow, or an invalid date range answers 400.The report list is paged and sorts by updatedAt, createdAt, or name.Saved reports and dashboards are owned by one person: another person's id answers 404.

    These public routes let a token list, read, run, and export saved report definitions and dashboards, and run ad hoc aggregation queries, for business intelligence and agent callers. Every query runs scoped to the caller's workspace, and the CSV export returns a saved report's result as a file attachment. The POST routes only run queries, so they stay available in a read-only view-as session. Creating and editing reports and dashboards is not offered here.

    BI dataset and report export API

    Live

    REST API with a personal access token that carries the reports:read or reports:write scope, returning JSON or CSV

    Analytics

    docs.actions.registry.reports-platform.bi-export-api

    App API

    GET /v1/bi/datasetsPOST /v1/bi/queryPOST /v1/bi/query.csvGET /v1/bi/reports/{id}GET /v1/bi/reports/{id}/export.csv

    MCP target

    No agent tool

    Validation

    dataset is required and at most 64 characters.A query takes at most 3 dimensions, 8 measures, and 20 filters.limit, when given, is a positive whole number of at most 1000.A saved report id is required; an id that does not belong to the workspace answers 404.Every query runs through the workspace-scoped reporting engine, so a token reads only its own workspace data.

    These routes let BI tools and scheduled extract jobs discover the reporting datasets, run an ad hoc aggregation, or pull a saved report, as JSON or as a CSV attachment. Every route needs the reports export permission; reading datasets and saved reports needs the reports:read scope, and running an ad hoc query needs reports:write. A saved report from another workspace is reported as not found.

    Webhooks

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Webhook endpoints, deliveries, watchers

    Live

    Webhook endpoints console, delivery log

    Analytics

    webhooks.*

    App API

    /v1/webhook-endpoints/*/v1/webhook-deliveries/*/v1/watch/*

    MCP target

    planned: atlas_webhook_endpoints_listplanned: atlas_webhook_deliveries_replay

    Validation

    Tenant-admin authorization for endpoint changes.Webhook secrets returned only on creation/rotation.Delivery payloads HMAC-signed.

    Webhook endpoints under /v1/webhook-endpoints, /v1/webhook-deliveries, and /v1/watch cover webhook configuration, delivery log inspection, and watch subscriptions used by external integrators.

    Integrations - Extras

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Integration extras: inbound email, slack, voice, AI models

    Live

    Integration directory, inbound email config, slack admin, AI model picker

    Analytics

    integrations-extra.*

    App API

    /integrations/*/inbound-email/*/v1/slack/*/v1/ai-models/*/v1/voice/*

    MCP target

    planned: atlas_integrations_extra_list

    Validation

    Tenant-admin authorization for install/remove.Inbound email DKIM verification enforced.AI model selection respects governance policy.

    Integration extras under /integrations, /inbound-email, /v1/slack, /v1/ai-models, and /v1/voice cover inbound email parsing, Slack admin, AI model selection, and voice transcription endpoints.

    Task Platform Extras

    Module guide

    4 actions · 3 live, 1 guarded, 0 configured

    Task extras: templates, relations, saved filters, comments

    Live

    Task drawer, templates picker, relations panel

    Analytics

    tasks-extra.*

    App API

    /tasks/*/task-templates/*/task-relations/*/template-library/*/templates/*/comments/*

    MCP target

    atlas_tasks_templates_listplanned: atlas_tasks_relations_list

    Validation

    Tenant-scoped task authorization.Templates bounded in size and field count.Relation cycles rejected at write time.

    Task platform extras under /tasks, /task-templates, /task-relations, /template-library, /templates, and /comments cover task templates, relations between tasks, the cross-module template library, and comments across resources.

    Run bulk task, label, and comment mutations

    Guarded

    Bulk action bar, label picker, and comment composer

    Analytics

    bulk.tasks.*bulk.labels.*bulk.comments.*

    App API

    /v1/bulk/*

    MCP target

    planned: atlas_bulk_tasks_updateplanned: atlas_bulk_labels_apply

    Validation

    Bulk targets are capped and tenant-scoped.Mutation payloads are operation-specific and idempotent.Bulk comments are bounded and audit-visible.

    Maps the shared bulk operation endpoints that power multi-select task, label, and comment workflows.

    Review focus coaching suggestions

    Live

    My Work focus coaching panel and suggestion cards

    Analytics

    focus-coaching.*my-work.focus-coaching.*

    App API

    /v1/focus-coaching/*

    MCP target

    atlas_focus_coaching_suggestions_list

    Validation

    Suggestions are caller-scoped.Response text is bounded and deterministic under fixtures.No raw calendar/provider payloads are exposed.

    Maps the focus coaching suggestion endpoint used by My Work and planning guidance surfaces.

    Review task type catalog and task-type detail

    Live

    Task type settings list and type detail drawer

    Analytics

    task-types.*settings.task-types.*

    App API

    /v1/task-types/v1/task-types/*/v1/projects/*/task-types/v1/projects/*/task-types/*

    MCP target

    atlas_tasks_types_listatlas_tasks_types_getatlas_projects_task_types_listatlas_projects_task_types_getatlas_projects_task_types_by_id_get

    Validation

    Catalog reads are tenant-scoped.Type keys are normalized before lookup.Task-type metadata is bounded and safe for command palette indexing.

    Covers global and project-scoped task type catalog/list/key/id readback endpoints.

    Project Platform Extras

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Project extras: risks, milestones, status updates, dependencies, stakeholders, initiatives, portfolios, cycles, board columns

    Live

    Project drawer subtabs and board configuration

    Analytics

    projects-extra.*

    App API

    /projects/*/project-risks/*/v1/project-risks/*/project-milestones/*/project-status-updates/*/project-dependencies/*/v1/project-dependencies/*/project-stakeholders/*/initiatives/*/portfolios/*/cycles/*/board-columns/*

    MCP target

    atlas_projects_risks_listplanned: atlas_projects_milestones_list

    Validation

    Tenant-scoped project authorization.Risk and milestone payloads bounded.Dependency cycles rejected.

    Project platform extras under /projects, /project-risks, /v1/project-risks, /project-milestones, /project-status-updates, /project-dependencies, /v1/project-dependencies, /project-stakeholders, /initiatives, /portfolios, /cycles, and /board-columns cover risks, milestones, status updates, dependencies, stakeholders, initiatives, portfolios, cycles, and board column configuration.

    Goals Platform

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Goals catalog and goal operations

    Live

    Goals dashboard, goal drawer

    Analytics

    goals.*

    App API

    /goals/*

    MCP target

    atlas_goals_listatlas_goals_getplanned: atlas_goals_create

    Validation

    Tenant-scoped goal authorization.Goal target metrics validated.Progress updates audit-logged.

    Goals platform endpoints under /goals cover the full goal catalog: CRUD, progress updates, alignment with cycles, and team scoping.

    Meetings Platform

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Meetings, meeting insights, video attachments

    Live

    Meetings list, meeting detail, insights drawer

    Analytics

    meetings.*

    App API

    /meetings/*/v1/meetings/*/v1/meeting-insights/*/v1/video-attachments/*

    MCP target

    atlas_meetings_listplanned: atlas_meetings_summarize

    Validation

    Tenant-scoped meeting authorization.Recording access gated by participant ACL.AI summaries flagged as machine-generated.

    Meetings endpoints under /meetings, /v1/meetings, /v1/meeting-insights, and /v1/video-attachments cover meeting CRUD, AI-powered insights, transcripts, and video attachment uploads.

    Wiki Platform

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Wiki pages, presence, collaboration

    Live

    Wiki editor, page tree, collaboration cursors

    Analytics

    wiki.*

    App API

    /v1/wiki/*/v1/wiki-presence/*/v1/wiki-collab/*

    MCP target

    atlas_wiki_pages_listatlas_wiki_pages_getatlas_wiki_pages_createatlas_wiki_pages_updateatlas_wiki_pages_deleteatlas_wiki_pages_publishatlas_wiki_pages_comments_createatlas_wiki_pages_tags_setatlas_wiki_pages_searchatlas_wiki_graph_get

    Validation

    Tenant-scoped wiki authorization.Realtime collab payloads HMAC-signed.Bounded page size.

    Wiki platform endpoints under /v1/wiki, /v1/wiki-presence, and /v1/wiki-collab cover wiki page CRUD, realtime presence, and collaborative edit broadcast.

    Blog Platform

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Internal blog authoring and reads

    Live

    Blog editor, blog list

    Analytics

    blog.*

    App API

    /blog/*

    MCP target

    planned: atlas_blog_posts_list

    Validation

    Tenant-scoped authoring authorization.Published reads cacheable; drafts caller-scoped.Bounded post body size.

    Blog endpoints under /blog cover internal blog post authoring, publishing, and reads across the tenant.

    Automations Platform

    Module guide

    1 actions · 0 live, 1 guarded, 0 configured

    Automation scripts, triggers, runs

    Guarded

    Automations console, run history, script editor

    Analytics

    automations.*

    App API

    /automations/*

    MCP target

    atlas_automations_listatlas_automations_createatlas_automations_getatlas_automations_updateatlas_automations_deleteatlas_automations_enableatlas_automations_disableatlas_automations_runs_listatlas_automations_templates_listatlas_automations_templates_applyatlas_automations_scripts_listatlas_automations_scripts_createatlas_automations_scripts_getatlas_automations_scripts_updateatlas_automations_scripts_disableatlas_automations_scripts_runatlas_automations_scripts_runs_list

    Validation

    Tenant-admin authorization to author scripts.Scripts sandboxed and runtime-bounded.Run history audit-logged.

    Automations platform endpoints under /automations cover script authoring, trigger configuration, run history, and operational reads for the no-code automation surface.

    Custom Roles

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Custom roles authoring and assignment

    Live

    Custom roles console

    Analytics

    custom-roles.*

    App API

    /custom-roles/*

    MCP target

    planned: atlas_custom_roles_list

    Validation

    Tenant-admin authorization.Role definitions validated against permission schema.Assignment changes audit-logged.

    Custom roles endpoints under /custom-roles cover role definition CRUD, permission scoping, and assignment management across modules.

    Undo + Trash + Quick Links

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Undo entries, trash recovery, quick links, shortcuts

    Live

    Undo toast, trash explorer, quick links menu, keyboard shortcuts dialog

    Analytics

    undo.*

    App API

    /undo-entries/*/v1/trash/*/quick-links/*/v1/shortcuts/*

    MCP target

    atlas_me_quick_links_listatlas_me_quick_links_createatlas_me_quick_links_updateatlas_me_quick_links_deleteatlas_trash_items_listatlas_trash_items_restoreatlas_trash_items_deleteplanned: atlas_undo_history

    Validation

    Caller-scoped reads.Undo windows time-bounded.Trash retention enforced per tenant policy.

    Undo and recovery endpoints under /undo-entries, /v1/trash, /quick-links, and /v1/shortcuts cover undo stack reads, trash recovery, quick links, and keyboard shortcut definitions.

    Inbox + Scheduler Drift

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Scheduler drift feed and mute state

    Live

    Drift feed widget, mute drawer

    Analytics

    inbox.*

    App API

    /today-scheduler-drift-feed/*/scheduler-drift-mute-state/*/appointments/*

    MCP target

    atlas_me_scheduler_drift_mutes_getatlas_me_scheduler_drift_mutes_setatlas_me_scheduler_drift_mutes_resetplanned: atlas_scheduler_drift_feed

    Validation

    Caller-scoped feed reads.Mute windows time-bounded.Bounded payload size on feed fetch.

    Inbox and scheduler drift endpoints under /today-scheduler-drift-feed, /scheduler-drift-mute-state, and /appointments cover the today drift feed, mute state controls, and appointment notifications shown on the planner.

    Notification inbox API

    Live

    REST API and agent tools with a personal access token that carries the inbox:read or inbox:write scope

    Analytics

    docs.actions.registry.inbox-platform.inbox-api

    App API

    GET /v1/inboxPOST /v1/inbox/{id}/readPOST /v1/inbox/{id}/unreadPOST /v1/inbox/read-all

    MCP target

    atlas_route_get_v1_inboxatlas_route_post_v1_inbox_by_id_readatlas_route_post_v1_inbox_by_id_unreadatlas_route_post_v1_inbox_read_all

    Validation

    limit is a positive whole number of at most 200 and defaults to 50.q, when given, is 1 to 120 characters and matches title and body without regard to case.projectId, actorId, and cursor must be valid ids; since and before must be dates.kinds is a comma-separated list of notification kinds of at most 64 characters each.A notification id must be a valid id; a notification that does not belong to the caller answers 404.

    These routes let a token or agent read the caller's notification inbox with filters, cursor paging, and an unread count, mark one notification read or unread, and mark everything read. Every route is scoped to the calling person, so nobody can read or change another person's notifications. Reading needs inbox:read and the three mark routes need inbox:write.

    PDF Studio Platform

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    PDF studio API surface (extras)

    Live

    PDF studio editor, OCR drawer, convert pipeline

    Analytics

    pdf-platform.*

    App API

    /v1/pdf/*/v1/pdf-studio/*/v1/pdf-secure/*/v1/pdf-convert/*/v1/pdf-ocr/*

    MCP target

    planned: atlas_pdf_platform_status

    Validation

    Tenant-scoped pdf authorization.OCR jobs runtime-bounded.Secure shares HMAC-signed and revocable.

    PDF platform endpoints under /v1/pdf, /v1/pdf-studio, /v1/pdf-secure, /v1/pdf-convert, and /v1/pdf-ocr cover PDF tooling APIs, secure share links, conversion pipelines, and OCR job orchestration.

    Docs Platform

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Generated docs surface: Postman, OpenAPI references

    Live

    Docs portal, Postman download buttons

    Analytics

    docs-platform.*

    App API

    /v1/docs/*/v1/postman-environment.json/v1/postman.json

    MCP target

    atlas_docs_api_reference_getatlas_docs_postman_collection_getatlas_docs_postman_environment_get

    Validation

    No tenant-scoped data in generated docs.Generated artifacts cacheable.Postman environment templates exclude live secrets.

    Docs platform endpoints under /v1/docs, /v1/postman-environment.json, and /v1/postman.json cover generated documentation portals, Postman environment exports, and OpenAPI reference artifacts.

    Extension Errors

    Module guide

    2 actions · 2 live, 0 guarded, 0 configured

    Browser extension error capture

    Live

    Extension error console (internal)

    Analytics

    extension-errors.*

    App API

    /v1/extension-errors/*

    MCP target

    planned: atlas_extension_errors_list

    Validation

    Caller-scoped error submission.Bounded error payload size.Sensitive headers stripped.

    Extension error endpoints under /v1/extension-errors cover browser extension crash and exception ingest, replay, and internal review for extension stability monitoring.

    Browser extension analytics event intake

    Live

    Called by the Atlas browser extension, which posts each buffered analytics event with the signed-in person's credential

    Analytics

    docs.actions.registry.extension-errors.extension-analytics-events

    App API

    POST /v1/extension-events

    MCP target

    No agent tool

    Validation

    id is required and at most 64 characters.at is required and must be an ISO date-time.event is required and at most 120 characters; surface is required and at most 64 characters.extensionVersion, when given, is at most 32 characters; props is an optional object.The caller must be signed in, hold the API view permission, and carry the profile:read scope.

    The browser extension sends each product analytics event here, and the server records it against the caller's workspace and user and answers 204 without a body. Events are kept in a bounded in-process buffer and written as one structured log line each, not stored in the database. Malformed or oversized events are refused with a validation error.

    Client Delivery

    Module guide

    90 actions · 33 live, 56 guarded, 1 configured

    Browse the engagement register and open an engagement

    Guarded

    Engagement register: sort control, view switch, load more button, retry on a failed read, and the engagement link that opens the engagement workspace

    Analytics

    delivery-engagement-opendelivery-engagements-sortdelivery-engagements-viewdelivery-engagements-load-moredelivery-engagements-error-retry

    App API

    GET /v1/engagementsGET /v1/engagements/{id}

    MCP target

    atlas_delivery_engagements_getatlas_delivery_engagements_list

    Validation

    Filters are optional: status, type and fee model must be one of their fixed lists; RAG is GREEN, AMBER, RED or GREY; health band is STRONG, STABLE, WATCH, CRITICAL or UNKNOWN.startsAfter and endsBefore must be ISO date-time values; the search text is at most 200 characters.sort is one of recent, created, name or ends; the cursor is an opaque string of at most 500 characters; limit is a whole number from 1 to 200.Archived engagements are left out unless includeArchived is true; soft-deleted engagements are never returned.The engagement id must be a non-empty string; an id from another workspace, a deleted engagement, or one hidden by an information barrier or restricted access returns the same 404.

    These routes list the engagements in the workspace page by page and return one engagement record. They require a signed-in OWNER, ADMIN or MEMBER of a workspace whose plan includes Client Delivery, view access to the client-delivery module, and the delivery:read scope for a token; a portal guest is refused. Engagements walled off by an information barrier, or marked restricted when the caller holds no access grant, are left out of the list and answer 404 on the single read, exactly as an id that never existed.

    Engagement record API

    Guarded

    REST API and agent tools with a personal access token that carries the delivery:read or delivery:write scope

    Analytics

    docs.actions.registry.client-delivery.engagement-record-api

    App API

    GET /v1/engagements/summaryGET /v1/engagements/myPATCH /v1/engagements/{id}DELETE /v1/engagements/{id}

    MCP target

    atlas_delivery_engagements_deleteatlas_delivery_engagements_summary_getatlas_delivery_engagements_updateatlas_delivery_my_engagements_list

    Validation

    The update body is strict: status, code and audience cannot be sent, and an unknown field is refused.name is 1 to 200 characters, summary at most 4000, deliveryModel at most 24, currency a three-letter code; dates are ISO date-time values or null.confidentiality is STANDARD, RESTRICTED or HIGHLY_RESTRICTED.An If-Match version that differs from the stored version returns 409 and asks the caller to reload.An update that changes no value writes nothing and bumps no version.Delete is a soft delete that requires the OWNER or ADMIN role and releases the engagement code for reuse.Changing restrictedAccessOnly needs the OWNER or ADMIN role; an update that sends the flag back unchanged does not.

    Summary returns portfolio counts by status and the number at risk, my returns up to 100 live engagements where the caller is partner, manager, QA reviewer or PMO lead, PATCH edits the engagement record, and DELETE soft deletes it. All four need a workspace whose plan includes Client Delivery and an OWNER, ADMIN or MEMBER role: reads need view access and delivery:read, PATCH needs update access and delivery:write, and DELETE needs delete access, delivery:write and the OWNER or ADMIN role. Restricting an engagement or lifting its restriction also needs the OWNER or ADMIN role, because it changes who can read the record. Engagements hidden by an information barrier or restricted access are excluded from the counts and from my, and a write to one answers 404, the same answer as an id from another workspace.

    Start a new engagement from a playbook

    Guarded

    New engagement wizard: client, commercials, team, playbook and review steps, the playbook chooser, and the create button

    Analytics

    delivery-new-formdelivery-new-engagement-step-clientdelivery-new-engagement-step-commercialsdelivery-new-engagement-step-playbookdelivery-new-engagement-step-reviewdelivery-new-engagement-playbook-choosedelivery-new-engagement-submit

    App API

    POST /v1/engagementsPOST /v1/engagements/{engagementId}/apply-template

    MCP target

    atlas_delivery_engagements_createatlas_delivery_engagements_templates_apply

    Validation

    accountId, code, name, type and feeModel are required; code is at most 32 characters and name at most 200.type and feeModel must each be one of their fixed lists; summary is at most 4000 characters; currency is a three-letter code and defaults to USD.startsOn and endsOn are ISO date-time values; confidentiality is STANDARD, RESTRICTED or HIGHLY_RESTRICTED.The client account must exist in this workspace, or the request returns 404.The code must not be used by another live engagement, or the request returns 409.The playbook slug is required and at most 120 characters; an unknown slug returns 404.A playbook is refused on an engagement that already has phases, with a separate refusal when a playbook was already applied.Creating an engagement with restrictedAccessOnly set to true needs the OWNER or ADMIN role, checked before the client account is read.

    The first route creates an engagement record for a client account, audits it and adds it to search; the second copies a playbook (the workspace copy when one exists, otherwise the built-in) into the new engagement's phases, workstreams, deliverables, responsibility matrix, RAID starters, meetings, information requests, closure items and checks. Both need a workspace whose plan includes Client Delivery and an OWNER, ADMIN or MEMBER role with delivery:write; creating needs create access and applying a playbook needs admin access on the client-delivery module, because it writes across many registers with no undo. Applying refuses an engagement that already holds work, and an engagement hidden by an information barrier or restricted access answers 404.

    Move an engagement through its lifecycle and set its RAG rating

    Guarded

    Engagement workspace lifecycle panel: status move buttons with a reason, RAG rating form, archive with confirmation, and restore

    Analytics

    delivery-lifecycledelivery-lifecycle-movesdelivery-lifecycle-open-ragdelivery-lifecycle-save-ragdelivery-lifecycle-rag-reasondelivery-lifecycle-archivedelivery-lifecycle-confirm-archivedelivery-lifecycle-restore

    App API

    POST /v1/engagements/{id}/transitionPOST /v1/engagements/{id}/ragPOST /v1/engagements/{id}/archivePOST /v1/engagements/{id}/restore

    MCP target

    atlas_delivery_engagements_archiveatlas_delivery_engagements_rag_setatlas_delivery_engagements_restoreatlas_delivery_engagements_transition

    Validation

    to must be a lifecycle status; reason is optional and 1 to 600 characters when sent.A move not allowed by the lifecycle table returns 400; a move to the current status changes nothing.Entering ACCEPTANCE requires an accepted sales to delivery handoff.Entering MOBILISING returns 409 with the full blockers list until every required acceptance check and legal instrument is settled.A RAG change requires a reason of 1 to 600 characters and at least one rating dimension, each GREEN, AMBER, RED or GREY.Restore finds archived engagements; the other routes find only live, unarchived ones.

    These routes move an engagement between lifecycle statuses, record a RAG rating with its reason and author, archive an engagement out of the register and search, and restore it. They need a workspace whose plan includes Client Delivery, an OWNER, ADMIN or MEMBER role, update access on the client-delivery module and the delivery:write scope. Every write is audited, closing an engagement records a separate closed event, and an engagement hidden by an information barrier or restricted access answers 404.

    Check whether an engagement may close, and reopen a closed one

    Guarded

    Engagement workspace closure tab: readiness banner with blockers and warnings, and the reopen panel with a required reason

    Analytics

    delivery-closure-readydelivery-closure-not-readydelivery-closure-blockerdelivery-closure-warningdelivery-engagement-reopendelivery-engagement-reopen-reasondelivery-engagement-reopen-submit

    App API

    GET /v1/engagements/{engagementId}/closure/readinessPOST /v1/engagements/{engagementId}/closure/reopen

    MCP target

    atlas_delivery_engagements_closure_readiness_getatlas_delivery_engagements_reopen

    Validation

    Readiness counts open access provisions, open information requests and deliverables not yet accepted, and returns the stored checklist when one has been seeded.The reopen body is strict and requires a reason of 1 to 600 characters.Reopen requires the OWNER or ADMIN role, checked in the service as well as at the route.A terminated or cancelled engagement cannot be reopened (409); any status other than CLOSED returns 409.Reopening moves the engagement to IN_CLOSURE, clears the closed date, keeps the original closure reason, and writes a timeline entry and an audit record.

    Readiness tells a partner whether an engagement may close today and lists each blocker and warning; reopen puts a closed engagement back into closure. Both need a workspace whose plan includes Client Delivery and an OWNER, ADMIN or MEMBER role; readiness needs view access and delivery:read, and reopen needs admin access, delivery:write and the OWNER or ADMIN role. An engagement hidden by an information barrier or restricted access answers 404 before anything is read.

    Write, customise and reset engagement playbooks

    Guarded

    Playbook library and editor: category filter and search, new playbook form, customise, collection editors for each section, save, reset to built-in, and remove with confirmation

    Analytics

    delivery-templates-carddelivery-templates-searchdelivery-templates-filter-categorydelivery-templates-newdelivery-templates-createdelivery-template-customisedelivery-template-savedelivery-template-resetdelivery-template-remove

    App API

    GET /v1/engagements/templatesPOST /v1/engagements/templatesGET /v1/engagements/templates/{slug}PATCH /v1/engagements/templates/{slug}DELETE /v1/engagements/templates/{slug}PUT /v1/engagements/templates/{slug}/collections/{collection}POST /v1/engagements/templates/{slug}/customisePOST /v1/engagements/templates/{slug}/reset

    MCP target

    atlas_delivery_templates_collections_setatlas_delivery_templates_createatlas_delivery_templates_deleteatlas_delivery_templates_forkatlas_delivery_templates_getatlas_delivery_templates_listatlas_delivery_templates_resetatlas_delivery_templates_update

    Validation

    Create requires slug (at most 120 characters), category from the ten playbook categories, name (1 to 200), headline (1 to 400), detail (1 to 20000) and typicalDurationWeeks (0 to 520).The slug must be lower-case letters and digits separated by single hyphens, and must not match a built-in or an existing workspace playbook.Update accepts name, headline, detail and typicalDurationWeeks with the same limits, and only on a playbook this workspace owns.A collection is one of phases, workstreams, deliverables, raci, raidStarters, meetings, infoRequests, closureItems, statusReportSections or checks; the body holds at most 500 items and every rule violation is returned at once.Customise is refused when the workspace already has a copy; reset is refused for a playbook with no built-in behind it.Remove is refused for a customised built-in, which must be reset instead.

    These routes read the playbook library (the built-in playbooks merged with this workspace's own and customised copies), write a playbook from nothing, take an editable copy of a built-in, edit its fields and collections, reset a copy to the built-in, and remove a playbook the workspace wrote. Reads need view access and delivery:read; every write needs admin access on the client-delivery module, delivery:write and the OWNER or ADMIN role, because a playbook shapes every engagement started from it. All routes need a workspace whose plan includes Client Delivery, and engagements already started are not changed.

    See open work across every engagement

    Guarded

    Delivery home tiles and recent engagements, and the firm-wide RAID, meetings, requests, actions, approvals and exports screens with a link to each engagement

    Analytics

    delivery-home-tile-totaldelivery-home-tile-at-riskdelivery-home-tile-closingdelivery-home-engagement-opendelivery-raid-engagement-opendelivery-meetings-engagement-opendelivery-requests-engagement-opendelivery-actions-engagement-opendelivery-approvals-engagement-opendelivery-exports-engagement-open

    App API

    GET /v1/engagements/rollup/portfolioGET /v1/engagements/rollup/raidGET /v1/engagements/rollup/meetingsGET /v1/engagements/rollup/info-requestsGET /v1/engagements/rollup/actionsGET /v1/engagements/rollup/approvalsGET /v1/engagements/rollup/exports

    MCP target

    atlas_delivery_rollup_actions_listatlas_delivery_rollup_approvals_listatlas_delivery_rollup_exports_listatlas_delivery_rollup_info_requests_listatlas_delivery_rollup_meetings_listatlas_delivery_rollup_portfolio_getatlas_delivery_rollup_raid_items_list

    Validation

    Every read is scoped to the caller's workspace and excludes soft-deleted rows.The portfolio rollup returns the counters and the 20 most recently updated live engagements.The register rollups return at most 100 rows each and set truncated when more exist.The RAID rollup lists only open items (OPEN, MITIGATING, IN_PROGRESS, MONITORING); approvals list change requests in SUBMITTED, IMPACT_ASSESSMENT or UNDER_REVIEW.Each row carries the engagement code and name, or null when that engagement cannot be read.Engagements behind an information barrier, and restricted engagements the caller holds no grant for, are left out of every rollup and of the portfolio counts; export jobs that belong to no engagement are kept.

    These read-only routes gather open work across all engagements in the workspace: the portfolio counters, open RAID items, meetings, information requests, follow-up actions, change requests awaiting approval, and export jobs. They need a workspace whose plan includes Client Delivery, an OWNER, ADMIN or MEMBER role, view access on the client-delivery module and the delivery:read scope; a portal guest is refused. Rows of engagements the caller may not see are excluded in the query, so they neither appear nor count. They accept no parameters and change nothing.

    Revoke a client portal invitation

    Guarded

    Engagement workspace people tab: portal invitations panel with a revoke button on each invitation

    Analytics

    delivery-portal-invite-revokedelivery-portal-invites-guide

    App API

    DELETE /v1/engagements/portal-invites/{token}

    MCP target

    No agent tool

    Validation

    The token must belong to an invitation issued by this workspace for an engagement the caller may see; an engagement behind an information barrier, or a restricted one the caller holds no grant for, returns the same 404 as an unknown token.Revoking an invitation that is already revoked changes nothing and returns it unchanged.

    This route revokes a portal invitation so its token can no longer be accepted, and records an audit entry the first time. It needs a workspace whose plan includes Client Delivery, an OWNER, ADMIN or MEMBER role, update access on the client-delivery module and the delivery:write scope. A token issued by another workspace, or one for an engagement the caller may not see, answers 404 without saying which.

    Configure follow-up rules and reporting officers for the firm

    Live

    Delivery settings: a switch, lead days field and reset button for each follow-up rule, and the reporting officers picker with a save button

    Analytics

    delivery-settingsdelivery-rule-enableddelivery-rule-lead-daysdelivery-rule-resetdelivery-officer-save

    App API

    GET /v1/client-delivery/configPATCH /v1/client-delivery/configGET /v1/client-delivery/config/reporting-officersPATCH /v1/client-delivery/config/reporting-officers

    MCP target

    No agent tool

    Validation

    followUpRules maps a rule key (1 to 64 characters) to an override with enabled and leadDays, or to null to return the rule to its default.An unknown rule key returns 400, and the whole patch is checked before anything is written.leadDays is a whole number from 0 to 3650 and is refused on a rule that fires on a condition rather than a date.Reporting officers are sent as the whole list of at most 20 user ids, each at most 64 characters; an empty list is allowed and duplicates are collapsed.Writes require the OWNER or ADMIN role and are audited.

    These routes read and change the firm-wide follow-up rules (which reminders run and how many days ahead) and the list of appointed money laundering reporting officers. Reads are open to an OWNER, ADMIN or MEMBER with view access on the client-delivery module and delivery:read; writes need admin access, delivery:write and the OWNER or ADMIN role, because turning off a rule or appointing an officer is an administrative decision. A portal guest is refused, and each write is recorded in the audit log.

    Override follow-up rules for one engagement

    Live

    Engagement workspace follow-ups tab: rules toggle, a switch and reset button for each rule on this engagement

    Analytics

    delivery-engagement-rules-toggledelivery-engagement-rule-enableddelivery-engagement-rule-resetdelivery-follow-ups-rules-read-failed

    App API

    GET /v1/client-delivery/config/engagements/{engagementId}PATCH /v1/client-delivery/config/engagements/{engagementId}

    MCP target

    No agent tool

    Validation

    The engagement id must be a non-empty string.The patch body follows the same rules as the firm setting: known rule keys only, leadDays 0 to 3650 on date rules only, and null to clear an override.The write requires the OWNER or ADMIN role and is audited.An engagement from another workspace, a deleted engagement, or one hidden by an information barrier or restricted access returns 404.

    The read returns each follow-up rule as it applies to one engagement, combining the firm setting with that engagement's overrides; the write changes those overrides. Reads need an OWNER, ADMIN or MEMBER role with view access and delivery:read; the write needs admin access, delivery:write and the OWNER or ADMIN role. An engagement the caller cannot see answers 404 before its configuration is read.

    Use the firm's reporting cadence when composing a status report

    Live

    Status report composer: the cadence choice, prefilled from the firm setting, and its read failure notice

    Analytics

    delivery-status-compose-cadencedelivery-status-compose-cadence-read-failed

    App API

    GET /v1/client-delivery/config/reporting-cadence

    MCP target

    No agent tool

    Validation

    Returns the effective cadence (WEEKLY, FORTNIGHTLY, MONTHLY or AD_HOC) and day of week (1 to 7), falling back to the product defaults when nothing is stored or a stored value is not recognised.stored reports whether the firm has a settings record at all.

    This read-only route returns how often the firm reports and on which day, so the status report composer proposes the right period. It needs an OWNER, ADMIN or MEMBER role, view access on the client-delivery module and delivery:read; a portal guest is refused. The cadence is firm-wide, and no engagement-level override exists.

    Client Delivery vocabulary API

    Live

    REST API and agent tools with a personal access token that carries the delivery:read scope

    Analytics

    docs.actions.registry.client-delivery.vocabulary-api

    App API

    GET /v1/client-delivery/config/vocabulary

    MCP target

    atlas_delivery_vocabulary_get

    Validation

    Takes no parameters and returns the fixed lists: follow-up rules with their kind, subject type and default lead days, and the follow-up kinds, statuses and channels.

    This read-only route returns the closed sets used by Client Delivery follow-ups, so an integration or agent tool reads them instead of keeping its own copy. It needs an OWNER, ADMIN or MEMBER role, view access on the client-delivery module and delivery:read; a portal guest is refused.

    Set up a recurring meeting forum and schedule its sittings

    Guarded

    Engagement Meetings tab: forum list with add forum, edit, stand down or reactivate, delete, preview upcoming dates, schedule a sitting, and the terms of reference editor

    Analytics

    delivery-forums-*delivery-meetings-forum-add

    App API

    GET /v1/engagements/{engagementId}/meeting-seriesPOST /v1/engagements/{engagementId}/meeting-seriesPATCH /v1/engagements/{engagementId}/meeting-series/{childId}DELETE /v1/engagements/{engagementId}/meeting-series/{childId}POST /v1/engagements/{engagementId}/meeting-series/{childId}/previewGET /v1/engagements/{engagementId}/meeting-series/{childId}/terms-of-referencePUT /v1/engagements/{engagementId}/meeting-series/{childId}/terms-of-referencePOST /v1/engagements/{engagementId}/meetings/from-series/{seriesId}

    MCP target

    atlas_delivery_engagements_meeting_series_createatlas_delivery_engagements_meeting_series_deleteatlas_delivery_engagements_meeting_series_listatlas_delivery_engagements_meeting_series_previewatlas_delivery_engagements_meeting_series_terms_getatlas_delivery_engagements_meeting_series_terms_setatlas_delivery_engagements_meeting_series_updateatlas_delivery_engagements_series_meetings_create

    Validation

    Forum name is required and at most 200 characters; description and terms of reference are at most 20000 characters.Kind is one of the sixteen meeting kinds (for example KICKOFF, STEERING_COMMITTEE, QBR, CHANGE_BOARD, AD_HOC) and defaults to AD_HOC.Quorum policy is NONE, MIN_COUNT, MIN_PERCENT, NAMED_ROLES, or NAMED_PEOPLE; minimum count is 1 to 200 and minimum percent is 1 to 100.Default duration is 5 to 1440 minutes (default 60); minutes due hours is 1 to 8760 (default 48); time zone is at most 64 characters (default UTC).On edit, a nullable field sent as null is cleared and a field left out is unchanged.Preview count is 1 to 200 in the request and the service returns at most 52 dates; a forum with no cadence rule returns an empty list rather than an error.Scheduling a sitting requires scheduledAt as a date and time; title is at most 240 characters, occurrence key at most 48, and duration 5 to 1440 minutes.Scheduling a sitting of a forum that has been stood down is refused with 409.A second sitting with the same occurrence key in one forum is refused with 409, including when two requests race.Deleting a forum that still has meetings is refused with 409; standing it down (active false) keeps its history.Every route is scoped to the workspace and to the engagement; a forum on another engagement returns 404.

    These routes keep the standing forums of an engagement, such as a steering committee or a weekly status call, with their chair, secretary, quorum rule, minutes approval settings, and terms of reference. A person can preview the dates a forum's cadence produces, marked where a sitting already exists, and create one sitting from the forum with everything except the date taken from it. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, view access for reads and preview, create access to add a forum or a sitting, update access to edit or save terms of reference, and delete access to remove a forum; a token needs the delivery read or delivery write scope. An engagement behind an information barrier or restricted to named people is refused before it is read, and a guest from the client portal cannot call these routes.

    Schedule an engagement meeting and record that it was held

    Guarded

    Engagement Meetings tab: meeting register with calendar toggle, open and delete actions; meeting workspace with details form, Start, Hold, record as held afterwards, Cancel, and bind or unbind a calendar meeting

    Analytics

    delivery-meetings-open-*delivery-meetings-delete-*delivery-meetings-calendar-toggledelivery-meeting-workspacedelivery-meeting-details-savedelivery-meeting-startdelivery-meeting-holddelivery-meeting-backfill-holddelivery-meeting-canceldelivery-meeting-binddelivery-meeting-unbind

    App API

    GET /v1/engagements/{engagementId}/meetingsPOST /v1/engagements/{engagementId}/meetingsGET /v1/engagements/{engagementId}/meetings/calendarGET /v1/engagements/{engagementId}/meetings/{childId}PATCH /v1/engagements/{engagementId}/meetings/{childId}DELETE /v1/engagements/{engagementId}/meetings/{childId}POST /v1/engagements/{engagementId}/meetings/{childId}/startPOST /v1/engagements/{engagementId}/meetings/{childId}/holdPOST /v1/engagements/{engagementId}/meetings/{childId}/cancelPOST /v1/engagements/{engagementId}/meetings/{childId}/bind-meetingPOST /v1/engagements/{engagementId}/meetings/{childId}/unbind-meeting

    MCP target

    atlas_delivery_engagements_meetings_calendar_getatlas_delivery_engagements_meetings_cancelatlas_delivery_engagements_meetings_createatlas_delivery_engagements_meetings_deleteatlas_delivery_engagements_meetings_getatlas_delivery_engagements_meetings_held_markatlas_delivery_engagements_meetings_linkatlas_delivery_engagements_meetings_listatlas_delivery_engagements_meetings_startatlas_delivery_engagements_meetings_unlinkatlas_delivery_engagements_meetings_update

    Validation

    Meeting title is required and at most 240 characters; purpose is at most 600 characters and location at most 200.Scheduled and held times must be date and time values; duration is 1 to 1440 minutes; quorum required count is 1 to 200.A forum (seriesId) given on create must belong to this engagement, or the request returns 404.The list filters by meeting status, minutes status, and forum, and returns at most 500 rows.The calendar requires from and to; the end must fall after the start and the window covers at most 400 days.Start, Hold, and Cancel follow the meeting transition table; a move the table does not allow is refused with 409. Holding records NO_QUORUM instead of HELD when quorum was not met.Cancel takes an optional reason of at most 600 characters, which is written to the audit log.A meeting whose minutes have been circulated or approved cannot be deleted (409); cancel it instead.Binding requires a calendar meeting id of 1 to 64 characters; a meeting already bound is refused with 409, a calendar meeting already bound to another engagement meeting is refused with 409, and one from another workspace returns 404.Unbinding a meeting that is not bound is refused with 400.Status changes, edits, and binding are refused with 409 once the minutes are approved.

    These routes list, create, read, edit, and delete the meetings of one engagement, show them on a calendar window, and move a meeting through its life from scheduled to in progress, held, or cancelled. A meeting can be bound to a calendar meeting in the workspace so its provenance is recorded, and unbound again as a deliberate act. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and view, create, update, or delete access on Client Delivery for the matching action, with the delivery read or delivery write scope on a token. Every lookup is scoped to the workspace and the engagement, so a meeting on another engagement or workspace returns 404, and an engagement behind an information barrier is refused before it is read.

    Build a meeting agenda and capture outcomes, risks, decisions, and actions

    Guarded

    Meeting workspace agenda: add item, move up or down, timebox, record outcome, mark decided, defer, remove, and the capture bar that raises a RAID item, a decision, or an action from an item; carried forward items from the previous sitting

    Analytics

    delivery-meetings-agenda-*delivery-meeting-agenda-decideddelivery-meeting-agenda-deferdelivery-meetings-capturedelivery-meetings-capture-kinddelivery-meetings-capture-canceldelivery-meeting-capture-save

    App API

    GET /v1/engagements/{engagementId}/meetings/{childId}/agendaPOST /v1/engagements/{engagementId}/meetings/{childId}/agendaPATCH /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}DELETE /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}POST /v1/engagements/{engagementId}/meetings/{childId}/agenda/reorderPOST /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}/deferPOST /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}/outcomePOST /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}/raise-raidPOST /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}/raise-decisionPOST /v1/engagements/{engagementId}/meetings/{childId}/agenda/{itemId}/convert-to-taskGET /v1/engagements/{engagementId}/meetings/{childId}/carried-forward

    MCP target

    atlas_delivery_engagements_meeting_agenda_items_convertatlas_delivery_engagements_meeting_agenda_items_createatlas_delivery_engagements_meeting_agenda_items_deferred_markatlas_delivery_engagements_meeting_agenda_items_deleteatlas_delivery_engagements_meeting_agenda_items_listatlas_delivery_engagements_meeting_agenda_items_reorderatlas_delivery_engagements_meeting_agenda_items_updateatlas_delivery_engagements_meeting_agenda_outcomes_recordatlas_delivery_engagements_meeting_carried_items_listatlas_delivery_engagements_meeting_decisions_logatlas_delivery_engagements_meeting_raid_items_log

    Validation

    Agenda item title is required and at most 300 characters; description is at most 20000 characters.A RAID item or deliverable linked on a new agenda item must belong to this engagement, or the request returns 404.Purpose is DECIDE, DISCUSS, INFORM, APPROVE, REVIEW, or ESCALATE; timebox is 1 to 600 minutes; status on edit is PENDING, COVERED, DEFERRED, or DROPPED.Reorder takes 1 to 200 item ids and must name every live item on the agenda exactly once, or it is refused with 400.Recording an outcome requires outcome text of 1 to 20000 characters.Deferring takes an optional reason of at most 600 characters and is refused with 409 when the item is no longer open.Raising a RAID item requires kind RISK, ASSUMPTION, ISSUE, or DEPENDENCY and a title of at most 300 characters; probability and impact are 1 to 5.Raising a decision requires a title of at most 300 characters and marks the agenda item as decided.Converting to an action requires a title of at most 300 characters; the body is at most 2000 characters; it is assigned to the caller when no assignee is given.Every agenda change and capture is refused with 409 once the minutes are approved; an item that is not on this meeting returns 404.

    These routes build and run the agenda of one engagement meeting and turn what was said into records: a capture creates a real RAID item or decision on the engagement register, or an action item on the engagement follow-ups, and links it back to the agenda item. The carried forward read lists what the previous sitting of the same forum left unfinished so the chair can pick it up. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and view, update, create, or delete access on Client Delivery for the matching action, with the delivery read or delivery write scope on a token. The meeting workspace records outcomes through the agenda item edit; the separate outcome route is available to API callers and applies the same freeze rule.

    Record who attended a meeting and the votes they cast

    Guarded

    Meeting workspace attendance list: add attendee, change role, mark attendance, send a delegate, remove; motion and voter fields to cast a vote

    Analytics

    delivery-meetings-attendance-*delivery-meetings-attendee-adddelivery-meeting-attendance-delegatedelivery-meeting-attendance-delegate-senddelivery-meetings-motiondelivery-meetings-voter

    App API

    GET /v1/engagements/{engagementId}/meetings/{childId}/attendeesPOST /v1/engagements/{engagementId}/meetings/{childId}/attendeesPATCH /v1/engagements/{engagementId}/meetings/{childId}/attendees/{itemId}DELETE /v1/engagements/{engagementId}/meetings/{childId}/attendees/{itemId}POST /v1/engagements/{engagementId}/meetings/{childId}/attendees/{itemId}/attendancePOST /v1/engagements/{engagementId}/meetings/{childId}/attendees/{itemId}/delegateGET /v1/engagements/{engagementId}/meetings/{childId}/votesPOST /v1/engagements/{engagementId}/meetings/{childId}/votes

    MCP target

    atlas_delivery_engagements_meeting_attendance_recordatlas_delivery_engagements_meeting_attendee_delegates_assignatlas_delivery_engagements_meeting_attendees_addatlas_delivery_engagements_meeting_attendees_listatlas_delivery_engagements_meeting_attendees_removeatlas_delivery_engagements_meeting_attendees_updateatlas_delivery_engagements_meeting_votes_listatlas_delivery_engagements_meeting_votes_record

    Validation

    Party type is USER, CLIENT_CONTACT, or EXTERNAL; label is at most 200 characters and email must be a valid address of at most 320 characters.Role is CHAIR, SECRETARY, MEMBER, OBSERVER, PRESENTER, or GUEST.The same party can appear once per meeting, in their own right or as a delegate; a duplicate is refused with 409.Attendance status is INVITED, ACCEPTED, DECLINED, TENTATIVE, ATTENDED, APOLOGIES, ABSENT, DELEGATED, or PARTIAL, with an optional note of at most 600 characters.A delegate cannot send a delegate, and a member can have only one substitute at a time; both are refused with 409.A vote requires a motion of 1 to 600 characters, a current (not removed) attendee on this meeting, and a vote of FOR, AGAINST, ABSTAIN, or VETO; rationale is at most 600 characters. An agenda item named on the vote must be on this meeting, or the request returns 404.Each vote recomputes the tally for its motion and stores whether the motion carried.Attendance and votes cannot change once the minutes are approved (409); an attendee who is not on this meeting returns 404.

    These routes keep the attendance list of one engagement meeting, including roles, voting rights, delegates standing in for members, and the recorded attendance status that the quorum rule reads. Votes are cast against a motion by a named attendee and the tally is stored with each vote. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and view, update, or delete access on Client Delivery for the matching action, with the delivery read or delivery write scope on a token. A meeting on another engagement or workspace returns 404, and an engagement behind an information barrier is refused before it is read.

    Write, circulate, and approve meeting minutes

    Guarded

    Meeting workspace minutes panel: minutes editor and Save, Import notes, Circulate, Approve, Reject, Dispute with a reason, Republish, version comparison toggle, minutes sheet and Print; Approve shortcut in the meeting register

    Analytics

    delivery-meeting-minutes-*delivery-meetings-minutes-bodydelivery-meetings-minutes-reasondelivery-meeting-import-notesdelivery-meeting-circulatedelivery-meeting-approvedelivery-meetings-approve-*delivery-meeting-republishdelivery-meeting-diff-toggledelivery-meeting-print

    App API

    GET /v1/engagements/{engagementId}/meetings/{childId}/minutesPOST /v1/engagements/{engagementId}/meetings/{childId}/minutesPUT /v1/engagements/{engagementId}/meetings/{childId}/minutesPOST /v1/engagements/{engagementId}/meetings/{childId}/minutes/circulatePOST /v1/engagements/{engagementId}/meetings/{childId}/minutes/approvePOST /v1/engagements/{engagementId}/meetings/{childId}/minutes/rejectPOST /v1/engagements/{engagementId}/meetings/{childId}/minutes/disputePOST /v1/engagements/{engagementId}/meetings/{childId}/minutes/republishGET /v1/engagements/{engagementId}/meetings/{childId}/minutes/versionsGET /v1/engagements/{engagementId}/meetings/{childId}/minutes/diffPOST /v1/engagements/{engagementId}/meetings/{childId}/import-granola

    MCP target

    atlas_delivery_engagements_meeting_minutes_compareatlas_delivery_engagements_meeting_minutes_draftatlas_delivery_engagements_meeting_minutes_getatlas_delivery_engagements_meeting_minutes_importatlas_delivery_engagements_meeting_minutes_updateatlas_delivery_engagements_meeting_minutes_versions_list

    Validation

    Minutes plain text is at most 200000 characters.An empty save leaves unstarted minutes not started; a save on circulated minutes returns them to draft and stops the approval clock.Every status change follows the minutes transition table; a move the table does not allow is refused with 409.Circulation takes an optional due time of 1 to 8760 hours and a note of at most 1000 characters, and is refused with 400 when neither the forum nor the meeting names an approver.Approval takes an optional comment of at most 1000 characters and is refused with 409 when the current approval round has already been decided.Reject and dispute each require a reason of 1 to 1000 characters.Approved minutes are frozen with a snapshot and hash; any later change is refused with 409 until they are republished, and only approved minutes can be republished (409 otherwise).Importing notes requires a meeting bound to a calendar meeting synced from a Granola note (400 otherwise), refuses minutes that have already been circulated (409), and refuses to overwrite existing text unless replaceExistingMinutes is true (409).The minutes are scoped to the workspace and the engagement; a meeting elsewhere returns 404.

    These routes hold the formal minutes of an engagement meeting: save a draft, import the notes of a synced Granola meeting, circulate for approval with a due time, and approve, reject, or dispute. Approval freezes the record with a snapshot of the agenda, attendance, and votes and a hash, adds an entry to the engagement timeline, and republishing opens a new version without touching the approved one; the versions and diff reads show how the record changed. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and view or update access on Client Delivery, with the delivery read or delivery write scope on a token. The meeting workspace saves through the PUT route; the POST draft route is kept for API callers and saves, then circulates when circulate is true.

    Raise a question or request on an engagement and see it answered

    Guarded

    Engagement Threads tab: open and breached filters, add thread form with kind, thread list, thread detail with first response, answer, close with reason, and reopen

    Analytics

    delivery-threads-*delivery-thread-*

    App API

    GET /v1/engagements/{engagementId}/threadsPOST /v1/engagements/{engagementId}/threadsPOST /v1/engagements/{engagementId}/threads/{childId}/respondPOST /v1/engagements/{engagementId}/threads/{childId}/answerPOST /v1/engagements/{engagementId}/threads/{childId}/closePOST /v1/engagements/{engagementId}/threads/{childId}/reopen

    MCP target

    atlas_delivery_engagements_threads_answeratlas_delivery_engagements_threads_closeatlas_delivery_engagements_threads_createatlas_delivery_engagements_threads_first_response_recordatlas_delivery_engagements_threads_listatlas_delivery_engagements_threads_reopen

    Validation

    Title is required and at most 300 characters; body is at most 20000 characters.Kind is QUESTION, CLARIFICATION, INFORMATION_REQUEST, DATA_REQUEST, BLOCKER, REVIEW_COMMENT, ESCALATION, or COMPLAINT; severity is LOW, MEDIUM, HIGH, or CRITICAL.Response target (slaHours) is 1 to 8760 hours.A subject needs both subjectType and subjectId or neither (400), and a subject that is given must belong to this engagement.A workstream given on a new thread must belong to this engagement, or the request returns 404.The list filters by status, open only, breached only, and owner, returns at most 500 rows per page, and pages with a cursor.An answer requires a summary of 1 to 20000 characters; closing requires a reason of 1 to 400 characters.The first response time is stamped once and never overwritten.Only a closed, answered, or withdrawn thread can be reopened (400 otherwise), and each reopen is counted.A thread on another engagement or workspace returns 404.

    These routes keep the question and request threads of one engagement, measure first response and resolution against the response target, and mark a thread as breached when the target passes. Reopening a thread increments a count, which shows questions that were closed before they were answered. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and view, create, or update access on Client Delivery for the matching action, with the delivery read or delivery write scope on a token. An engagement behind an information barrier or restricted to named people is refused before it is read.

    Map engagement stakeholders and log contact with them

    Guarded

    Engagement Stakeholders tab: add stakeholder form, power and interest grid grouped by strategy, overdue contact flags, and the interactions panel with channel, subject, and sentiment

    Analytics

    delivery-stakeholders-*delivery-stakeholder-*delivery-interaction-logdelivery-interactions-error

    App API

    GET /v1/engagements/{engagementId}/stakeholdersPOST /v1/engagements/{engagementId}/stakeholdersGET /v1/engagements/{engagementId}/stakeholders/{childId}/interactionsPOST /v1/engagements/{engagementId}/stakeholders/{childId}/interactions

    MCP target

    atlas_delivery_engagements_stakeholder_interactions_listatlas_delivery_engagements_stakeholder_interactions_logatlas_delivery_engagements_stakeholders_listatlas_delivery_engagements_stakeholders_set

    Validation

    Party type is USER, CLIENT_CONTACT, or EXTERNAL; a user needs a user id, a client contact needs a contact id, and an external party needs an email address (400 otherwise).The same party is updated rather than added twice on one engagement.Power, interest, and influence are 1 to 5; support level is -2 to 2; sentiment is CHAMPION, SUPPORTIVE, NEUTRAL, SCEPTICAL, or OPPOSED.Strategy is MANAGE_CLOSELY, KEEP_SATISFIED, KEEP_INFORMED, or MONITOR; when it is not given, it is derived from power and interest.Contact cadence is 1 to 365 days; organisation and label are at most 200 characters and title at most 160.An interaction requires a channel of 1 to 40 characters and a subject of 1 to 300 characters; duration is 0 to 1440 minutes.Last contact moves only forward, so logging an older conversation does not make a stakeholder look more recently contacted.A stakeholder that is not on this engagement returns 404, both when an interaction is logged and when the interactions are listed; the interaction list returns at most 200 rows.

    These routes keep the stakeholder map of one engagement, with power, interest, sentiment, engagement strategy, and flags such as decision maker or signatory, and record each contact so the last and next contact dates are derived rather than typed. Logging an interaction with a sentiment also updates the stakeholder's current sentiment. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and view or update access on Client Delivery, with the delivery read or delivery write scope on a token. An engagement behind an information barrier or restricted to named people is refused before it is read.

    Add a person to an engagement team

    Guarded

    Engagement People tab, team panel: side, role, name, email, share email with client, and Add

    Analytics

    delivery-team-adddelivery-team-errordelivery-people-team-*

    App API

    GET /v1/engagements/{engagementId}/teamPOST /v1/engagements/{engagementId}/team

    MCP target

    atlas_delivery_engagements_team_members_addatlas_delivery_engagements_team_members_list

    Validation

    Side is FIRM, CLIENT, or THIRD_PARTY.Role is one of sixteen engagement roles, for example ENGAGEMENT_PARTNER, ENGAGEMENT_MANAGER, CONSULTANT, CLIENT_SPONSOR, or SUBCONTRACTOR.Party type is USER, CLIENT_CONTACT, or EXTERNAL; a user needs a user id, a client contact needs a contact id, and an external party needs an email address (400 otherwise).Allocation is a whole percentage from 0 to 100.A workstream given must belong to this engagement, or the request returns 404; this is checked before the duplicate check.The same party holding the same role on the same workstream while still active is refused with 409.Sharing a team member's email with the client is off unless it is set.

    These routes list and add the people on one engagement, firm side, client side, and third party, with their role, workstream, allocation, and whether they are key personnel. The identity used to detect duplicates is derived on the server rather than accepted from the caller. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, view access to list and create access to add, with the delivery read or delivery write scope on a token. An engagement on another workspace, deleted, or behind an information barrier returns a refusal before any row is read.

    Give a person access to a restricted engagement, or take it away

    Guarded

    Engagement People tab, access grants panel: person, reason, expiry, workstream scope, Grant, and Revoke

    Analytics

    delivery-access-grant-*delivery-access-grantsdelivery-access-grants-emptydelivery-access-grants-read-error

    App API

    GET /v1/engagements/{engagementId}/access-grantsPOST /v1/engagements/{engagementId}/access-grantsDELETE /v1/engagements/{engagementId}/access-grants/{childId}

    MCP target

    atlas_delivery_engagements_access_grants_listatlas_delivery_engagements_access_grants_revoke

    Validation

    User id is required; reason is required and at most 400 characters.Expiry must be a date and time when given.Workstream scope is at most 200 workstream ids; duplicates are removed before saving.Every workstream in the scope must belong to this engagement, or the request returns 404.A second live grant for the same person on the same engagement is refused with 409.Revoking a grant that is already revoked does not create a second record; it only finishes any cleanup a previous attempt left undone.A grant on another engagement returns 404.

    These routes list, create, and revoke record-level access grants on an engagement that is restricted to named people. Revoking a grant records it on the engagement timeline in the same transaction and then closes the person's access on every transport: their guest membership, their current session, and their open realtime connection. Callers need admin access on the Client Delivery module as well as the workspace role Owner, Admin, or Member and the Client Delivery module on the workspace plan, with the delivery read or delivery write scope on a token. An engagement behind an information barrier is refused, and every grant and revocation is written to the audit log with its reason.

    Invite a client contact to the engagement portal

    Guarded

    Engagement People tab, portal invites panel: contact picker, access role, Issue invite, copy link, and the invitation list

    Analytics

    delivery-portal-invite-issuedelivery-people-portal-invites-*delivery-people-portal-invite-copy

    App API

    GET /v1/engagements/{engagementId}/portal-invitesPOST /v1/engagements/{engagementId}/portal-invites

    MCP target

    atlas_delivery_engagements_portal_invites_list

    Validation

    The body passes a strict request validation schema: crmContactId is required and 1 to 64 characters, accessRole is GUEST or RESTRICTED_GUEST and defaults to GUEST, and any other field is refused with 400.The engagement must be visible to the caller before anything is minted or charged: an engagement on another workspace, one that does not exist, one behind an information barrier, or a restricted engagement with no live grant for the caller returns 404.Issuing charges a guest seat against the workspace plan limit before the token is created, and is refused when the plan has no guest seat left; a contact who already holds a live seat in the workspace is not charged again.An invitation expires 14 days after it is issued.The list applies the same visibility rule (404 for an engagement the caller may not see) and returns only invitations for this engagement in the caller's workspace, newest first, each marked outstanding, accepted, expired, or revoked.

    These routes issue a client portal invitation for one contact on one engagement and list the invitations already issued. Issuing returns the acceptance link and reports whether the email was sent, failed, could not be sent because the contact has no address, or could not be sent because email is not configured, and the link can be copied and handed over in every case. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, update access to issue and view access to list, with the delivery write or delivery read scope on a token. Both routes first check that the caller may see the engagement, so an engagement behind an information barrier, or restricted to named people without a grant for the caller, returns the same 404 as one that does not exist, and no seat is charged. Every issue is written to the audit log.

    Track access to client systems and revoke it with evidence

    Guarded

    Engagement Ways of working tab, access provisions panel: system, access level, Add, and Revoke with evidence

    Analytics

    delivery-access-adddelivery-access-revokedelivery-access-revoke-opendelivery-access-errordelivery-ways-of-working-access-provisions-*

    App API

    GET /v1/engagements/{engagementId}/access-provisionsPOST /v1/engagements/{engagementId}/access-provisionsPOST /v1/engagements/{engagementId}/access-provisions/{childId}/revoke

    MCP target

    atlas_delivery_engagements_access_provisions_listatlas_delivery_engagements_access_provisions_recordatlas_delivery_engagements_access_provisions_revoke

    Validation

    System name is required and at most 120 characters; access level is at most 80 characters and notes at most 20000.Granted and expiry times must be date and time values when given.A team member named on a provision must belong to this engagement, or the request returns 404.Revoking requires evidence text of 1 to 200 characters.A provision on another engagement returns 404.The list returns a live count of provisions that were granted and never revoked.

    These routes record the access each team member was given to client systems on one engagement and its revocation, so closing the engagement can check that nothing is still live. Revocation stores who revoked it, when, and the evidence, and writes an audit entry. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, view access to list, create access to add, and update access to revoke, with the delivery read or delivery write scope on a token. An engagement behind an information barrier or restricted to named people is refused before it is read.

    Share an engagement document with the client, or withdraw it

    Guarded

    Engagement Requests tab, request detail: share or withdraw toggle on each attached document

    Analytics

    delivery-attachment-share

    App API

    POST /v1/engagements/{engagementId}/attachments/{childId}/sharePOST /v1/engagements/{engagementId}/attachments/{childId}/unshare

    MCP target

    atlas_delivery_engagements_attachments_share_revoke

    Validation

    The attachment must belong to this engagement in the caller's workspace and not be deleted, or the request returns 404.Sharing is refused with 400 until the file has finished uploading and been verified.Withdrawing is always allowed, including for a document that is already withdrawn.A repeated instruction is recorded in the audit log as having changed nothing.

    These routes decide whether an engagement document appears in the client portal by setting its audience to client or internal. Withdrawing a document removes it from the client's view but does not delete the file, and a client who already downloaded it still holds it. Callers need the workspace role Owner, Admin, or Member, the Client Delivery module on the workspace plan, and update access on Client Delivery, with the delivery write scope on a token. An engagement behind an information barrier or restricted to named people is refused before it is read.

    Review the financial picture of an engagement and freeze a snapshot

    Guarded

    Engagement Commercials tab: burn, effort and margin cards, the snapshot list, and the Take snapshot button; the Economics tab shows the same computed figures

    Analytics

    delivery-commercials-deriveddelivery-commercials-snapshot*delivery-economics-*

    App API

    GET /v1/engagements/{engagementId}/commercialsGET /v1/engagements/{engagementId}/commercials/burnGET /v1/engagements/{engagementId}/commercials/effortGET /v1/engagements/{engagementId}/commercials/profitabilityGET /v1/engagements/{engagementId}/commercials/snapshotsPOST /v1/engagements/{engagementId}/commercials/snapshots

    MCP target

    atlas_delivery_engagements_commercials_burn_getatlas_delivery_engagements_commercials_effort_getatlas_delivery_engagements_commercials_getatlas_delivery_engagements_commercials_profitability_getatlas_delivery_engagements_financial_snapshots_list

    Validation

    The optional asOf query value must be an ISO date and time.The optional eacFormula must be AC_PLUS_REMAINING, BAC_OVER_CPI, or AC_PLUS_REMAINING_OVER_CPI_SPI.A snapshot source must be SCHEDULED, MANUAL, or REPORT, and defaults to MANUAL.A snapshot is stored once per engagement, day, and source: a second capture on the same day and source replaces the first.The snapshot list returns at most 200 rows, newest first.The engagement must exist in the caller's workspace and must not be hidden from the caller by an information barrier or restricted access, or the request returns 404.

    The summary, burn, effort, and profitability reads compute the engagement's financial picture on demand from budgets, time, expenses, and billing milestones, so the figures are never stale. Capturing a snapshot freezes that picture for a day and source so a figure quoted to a client stays quotable later, and the capture is written to the audit log. Workspace owners, admins, and members may read and capture; guests are refused with 403, and a token needs the delivery:read scope to read and delivery:write to capture. The routes sit behind the Client Delivery entitlement.

    Set up rate cards and grade rates for an engagement

    Guarded

    Engagement Commercials tab, Rate cards panel: New rate card form, per-card Add rate form (grade, bill rate, cost rate), and the Show cost rates switch

    Analytics

    delivery-commercials-rate-card*delivery-commercials-new-rate-card*delivery-commercials-upsert-rate-entry*delivery-commercials-rate-entry*

    App API

    GET /v1/engagements/{engagementId}/commercials/rate-cardsPOST /v1/engagements/{engagementId}/commercials/rate-cardsGET /v1/engagements/{engagementId}/commercials/rate-cards/{childId}/entriesPOST /v1/engagements/{engagementId}/commercials/rate-cards/{childId}/entries

    MCP target

    atlas_delivery_engagements_rate_card_entries_listatlas_delivery_engagements_rate_cards_createatlas_delivery_engagements_rate_cards_list

    Validation

    A rate card name is required and is at most 200 characters.effectiveFrom is a required ISO date and time; an effectiveTo before effectiveFrom is refused with 400.Currency is a three-letter code and defaults to USD; geography is at most 80 characters.A rate entry needs a grade of at most 48 characters and a bill rate with at most two decimal places.Unit is HOUR or DAY and defaults to HOUR; an entry is replaced when the card already has the same grade and unit.Cost rates are returned only when withCost=true is asked for by a workspace owner or admin.The entries routes accept only a rate card that belongs to this engagement or applies workspace-wide; a card of another engagement returns the same 404 as a card that does not exist.

    These routes list the rate cards that apply to an engagement, including workspace-wide cards, create a card, and add or replace the bill and cost rate for a grade on a card. Workspace owners, admins, and members may read; only owners and admins may create a card or set a rate, because rates are a partner decision, and everyone else is refused with 403. Cost rates are hidden from members even when they ask for them. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Plan an engagement budget

    Guarded

    Engagement Commercials tab, Budgets panel: New budget form, Edit form for planned cost and revenue, and Remove with confirmation

    Analytics

    delivery-commercials-budget*delivery-commercials-new-budget*delivery-commercials-edit-budget*

    App API

    GET /v1/engagements/{engagementId}/commercials/budgetsPOST /v1/engagements/{engagementId}/commercials/budgetsPATCH /v1/engagements/{engagementId}/commercials/budgets/{childId}DELETE /v1/engagements/{engagementId}/commercials/budgets/{childId}

    MCP target

    atlas_delivery_engagements_budgets_list

    Validation

    Scope is ENGAGEMENT, PHASE, WORKSTREAM, or DELIVERABLE and defaults to ENGAGEMENT.A PHASE, WORKSTREAM, or DELIVERABLE budget must name the id of its phase, workstream, or deliverable, or it is refused with 400.Planned cost, planned revenue, and management reserve are amounts with at most two decimal places.Planned effort is a whole number of minutes from 0 to 100,000,000; contingency is a percentage with at most two decimal places.A note is at most 20,000 characters.Editing or removing a budget that is not on this engagement returns 404; removal is a soft delete.Any phase, workstream, or deliverable id given on create must belong to this engagement, whatever the scope, or the request returns 404.

    These routes list, create, edit, and remove the budgets an engagement is measured against, at engagement, phase, workstream, or deliverable level. Workspace owners, admins, and members may read; only owners and admins may create, edit, or remove a budget, and others are refused with 403. A token needs delivery:read to read and delivery:write to change, and the routes sit behind the Client Delivery entitlement.

    Record an engagement expense and take it through approval

    Guarded

    Engagement Commercials tab, Expenses panel: status filter, New expense form, Edit form, and Submit, Approve, Reject with a reason, and Reimburse actions

    Analytics

    delivery-commercials-expense*delivery-commercials-new-expense*delivery-commercials-edit-expense*

    App API

    GET /v1/engagements/{engagementId}/commercials/expensesPOST /v1/engagements/{engagementId}/commercials/expensesPATCH /v1/engagements/{engagementId}/commercials/expenses/{childId}POST /v1/engagements/{engagementId}/commercials/expenses/{childId}/submitPOST /v1/engagements/{engagementId}/commercials/expenses/{childId}/approvePOST /v1/engagements/{engagementId}/commercials/expenses/{childId}/rejectPOST /v1/engagements/{engagementId}/commercials/expenses/{childId}/reimburse

    MCP target

    atlas_delivery_engagements_expenses_createatlas_delivery_engagements_expenses_disburseatlas_delivery_engagements_expenses_listatlas_delivery_engagements_expenses_submitatlas_delivery_engagements_expenses_update

    Validation

    incurredOn is a required ISO date and time, description is required and at most 300 characters, and amount has at most two decimal places.Category is one of TRAVEL, ACCOMMODATION, SUBSISTENCE, MILEAGE, SUBCONTRACTOR, SOFTWARE, DATA, PRINTING, ENTERTAINMENT, or OTHER, and defaults to OTHER.A claim marked as a policy breach must give a reason of at most 600 characters, or it is refused with 400; the breach is recorded, not blocked.An edit must change at least one field, and only a DRAFT or REJECTED claim can be edited.Status moves follow a fixed table: DRAFT to SUBMITTED, SUBMITTED to APPROVED or REJECTED, REJECTED to SUBMITTED, APPROVED to REIMBURSED; any other move is refused with 400.A rejection needs a reason of 1 to 600 characters.Nobody can approve a claim they incurred themselves.The list filters by status, billable, and policy breach and returns at most 500 rows (200 by default).A receipt attachment given on create or edit must belong to this engagement, or the request returns 404.

    These routes record expenses against an engagement, with the foreign exchange rate stamped at entry, and move each claim through submission, approval or rejection, and reimbursement. Workspace owners, admins, and members may list, create, edit, and submit; only owners and admins may approve, reject, or reimburse, and an approver can never approve their own claim. A token needs delivery:read or delivery:write, and the routes sit behind the Client Delivery entitlement.

    Track billing milestones from earned to paid

    Guarded

    Engagement Commercials tab, Billing panel: New milestone form and per-milestone actions to mark earned, invoiced with an invoice reference, or paid, and to dispute, hold, or write off with a reason

    Analytics

    delivery-commercials-billing*delivery-commercials-milestone*delivery-commercials-new-milestone*

    App API

    GET /v1/engagements/{engagementId}/commercials/billing-milestonesPOST /v1/engagements/{engagementId}/commercials/billing-milestonesPOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/mark-earnedPOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/mark-invoicedPOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/mark-paidPOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/disputePOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/holdPOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/write-off

    MCP target

    atlas_delivery_engagements_billing_milestones_createatlas_delivery_engagements_billing_milestones_disputed_markatlas_delivery_engagements_billing_milestones_held_markatlas_delivery_engagements_billing_milestones_invoiced_markatlas_delivery_engagements_billing_milestones_listatlas_delivery_engagements_billing_milestones_paid_mark

    Validation

    A milestone name is required and at most 200 characters, and the amount has at most two decimal places.Trigger is DATE, DELIVERABLE_ACCEPTED, MILESTONE_REACHED, PERCENT_COMPLETE, ON_SIGNATURE, MONTHLY_IN_ARREARS, or MANUAL, and defaults to MANUAL; a trigger percent is 0 to 100.Sequence is 1 to 9999 and defaults to the next number after the last milestone.Marking invoiced needs an invoice reference of 1 to 64 characters.Dispute and hold need a reason of 1 to 600 characters; a write-off needs a reason and a value no larger than the milestone amount.Status moves follow a fixed table: PENDING to EARNED, HELD, or WRITTEN_OFF; EARNED to INVOICED, HELD, or WRITTEN_OFF; INVOICED to PAID, DISPUTED, or WRITTEN_OFF; DISPUTED to PAID, INVOICED, or WRITTEN_OFF; HELD to EARNED or WRITTEN_OFF. Any other move is refused with 400.A milestone that is not on this engagement returns 404.A trigger deliverable given on create must belong to this engagement, or the request returns 404.

    These routes keep the engagement's billing milestones and move each one through earned, invoiced, and paid, with dispute, hold, and write-off as recorded exceptions. The invoice reference is free text from the finance system; Atlas does not raise invoices. Every move is written to the audit log, and the first time a milestone is earned a milestone reached event is recorded. Owners, admins, and members may list, mark earned, dispute, and hold; only owners and admins may create a milestone, mark it invoiced or paid, or write it off. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Record revenue recognition events and the onerous contract provision

    Guarded

    Engagement Revenue tab: Record event form (type, date it occurred, basis), Attach to milestone control, and the onerous provision form (raised, amount, basis)

    Analytics

    delivery-revenue-*

    App API

    GET /v1/engagements/{engagementId}/commercials/revrec-eventsPOST /v1/engagements/{engagementId}/commercials/revrec-eventsPOST /v1/engagements/{engagementId}/commercials/billing-milestones/{childId}/revrec-eventPOST /v1/engagements/{engagementId}/commercials/onerous-provision

    MCP target

    atlas_delivery_engagements_revenue_events_list

    Validation

    eventType is one of eleven trigger types, for example MILESTONE_ACCEPTED, DELIVERABLE_SIGNED_OFF, PERIOD_END, GO_LIVE, or TERMINATION.occurredAt is a required ISO date and time and cannot be in the future.When a subject type and id are given, the subject must belong to this engagement; a subject id without a subject type is refused with 404.Amount has at most two decimal places and basis is at most 20,000 characters.Attaching needs an eventId; both the event and the milestone must be on this engagement, or the request returns 404.The onerous provision needs raised (true or false) and a basis of 1 to 20,000 characters; a raised provision also needs an amount.The event list filters by event type and returns at most 500 rows (200 by default).An evidence attachment given on an event must belong to this engagement, or the request returns 404.

    These routes record the events that make a fee recognisable, attach a recorded event to the billing milestone it supports, and raise or release the onerous contract provision on the engagement. Each write is recorded in the audit log, and releasing a provision clears its amount but still requires a stated basis. Owners, admins, and members may list, record, and attach events; only owners and admins may set the provision. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Track regulatory obligations and their deadlines on an engagement

    Guarded

    Engagement Obligations tab, Regulatory panel: regime picker with Seed, custom obligation form, due soon list, and Met, Waive with a reason, and status actions

    Analytics

    delivery-regulatory-*

    App API

    GET /v1/engagements/{engagementId}/regulatory-obligationsPOST /v1/engagements/{engagementId}/regulatory-obligationsPOST /v1/engagements/{engagementId}/regulatory-obligations/{childId}/statusGET /v1/engagements/{engagementId}/regulatory-obligations/duePOST /v1/engagements/{engagementId}/regulatory-obligations/seed

    MCP target

    atlas_delivery_engagements_regulatory_obligations_createatlas_delivery_engagements_regulatory_obligations_due_listatlas_delivery_engagements_regulatory_obligations_generateatlas_delivery_engagements_regulatory_obligations_listatlas_delivery_engagements_regulatory_obligations_transition

    Validation

    Seeding takes 1 to 30 regime names of at most 64 characters each; an unknown regime adds nothing.Seeding is idempotent on regime and obligation text: existing obligations are skipped and never reopened.A custom obligation needs a regime (at most 64 characters), obligation text (at most 20,000), and a trigger (at most 200); dueWithinHours is 0 to 87,600.An explicit dueAt wins over the due date computed from triggeredAt and dueWithinHours.Status is OPEN, IN_PROGRESS, MET, WAIVED, or BREACHED.Marking MET is refused with 400 when the obligation requires evidence and no evidence attachment is given or already held.WAIVED is refused with 400 without a reason.The due window is 1 to 8,760 hours (168 by default) and also returns obligations already overdue; obligations already MET or WAIVED are left out.An evidence attachment given with a status change must belong to this engagement, or the request returns 404.

    These routes seed the obligations a set of regulatory regimes places on an engagement, record obligations the library does not carry, list them soonest deadline first, show what falls due in a window, and move each obligation's status. Every seed, record, and status change is written to the audit log. Workspace owners, admins, and members may use them; guests are refused with 403. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Record the client purchase order and draw it down

    Guarded

    Engagement Commercials tab, Procurement panel: Start or Edit form (purchase order number, value, supplier registration, invoicing details) and the Draw down form with amount and note

    Analytics

    delivery-procurement*delivery-commercials-procurement-*

    App API

    GET /v1/engagements/{engagementId}/procurementPOST /v1/engagements/{engagementId}/procurementPOST /v1/engagements/{engagementId}/procurement/consume

    MCP target

    atlas_delivery_engagements_procurement_consumption_recordatlas_delivery_engagements_procurement_getatlas_delivery_engagements_procurement_set

    Validation

    Purchase order number is at most 64 characters and value has at most two decimal places; currency is a three-letter code.Supplier registration status is NOT_STARTED, REQUESTED, IN_PROGRESS, REGISTERED, or REJECTED.The warning threshold is 1 to 100 percent and defaults to 80; payment terms are 0 to 365 days.A billing contact email must be a valid email address of at most 320 characters.A draw down amount has at most two decimal places; a negative amount releases value, and consumed value never goes below zero.Drawing down before a procurement record exists returns 404.

    These routes read and save the client's procurement record for an engagement, with the remaining purchase order headroom computed on each response, and draw the purchase order down. The first draw that crosses the warning threshold raises a high commercial risk on the engagement RAID register, once only. Workspace owners, admins, and members may use them; guests are refused with 403. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Set approval bands and preview who must approve a value

    Guarded

    Engagement Commercials tab, Authority panel: Add band form (subject, threshold, approver, second approver) and the Preview chain form with subject and value

    Analytics

    delivery-authority*delivery-commercials-authority-*

    App API

    GET /v1/engagements/{engagementId}/authorityPOST /v1/engagements/{engagementId}/authorityGET /v1/engagements/{engagementId}/authority/derive-chain

    MCP target

    atlas_delivery_engagements_authority_chain_getatlas_delivery_engagements_authority_list

    Validation

    Subject is DISCOUNT, WRITE_OFF, CHANGE_REQUEST, SIGN_OFF, EXPENSE, or CONTRACT.thresholdFrom is required with at most two decimal places; a thresholdTo must be above thresholdFrom.A band must name its approver by role or by user.A band can apply to the whole workspace (tenantWide) instead of this engagement only.The chain preview needs a subject and a numeric value and writes nothing.

    These routes list the delegation of authority bands that apply to an engagement, including workspace-wide bands, add a band, and derive the approval chain a given value would need so it can be seen before anything is raised. Workspace owners, admins, and members may list and preview; only owners and admins may add a band, and others are refused with 403. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Add a subcontractor to an engagement

    Guarded

    Engagement People tab, Team panel: Subcontractors list and the add form with name, company, and contract status

    Analytics

    delivery-people-team-subcontractors-*delivery-subcontractor-adddelivery-subcontractors-error

    App API

    GET /v1/engagements/{engagementId}/subcontractorsPOST /v1/engagements/{engagementId}/subcontractors

    MCP target

    atlas_delivery_engagements_subcontractors_list

    Validation

    partyLabel is required and at most 200 characters; partyEmail must be a valid email address.Contract status is NOT_STARTED, REQUESTED, IN_NEGOTIATION, EXECUTED, EXPIRED, or TERMINATED, and defaults to NOT_STARTED.Rate and cost rate have at most two decimal places; the margin is computed from them, not typed.Role defaults to CONSULTANT and currency to USD.A workstream given must belong to this engagement, or the request returns 404.

    These routes list the subcontractors delivering on an engagement and add one, recording contract status, rates, insurance and NDA dates, and whether flow-down clauses are confirmed. Workspace owners, admins, and members may list; only owners and admins may add, and others are refused with 403. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Record the legal instruments an engagement rests on

    Guarded

    Engagement Acceptance tab, Instruments panel: kind, status, and required controls with the Record button

    Analytics

    delivery-acceptance-instruments-*delivery-instrument-recorddelivery-instruments-error

    App API

    GET /v1/engagements/{engagementId}/legal-instrumentsPOST /v1/engagements/{engagementId}/legal-instruments

    MCP target

    atlas_delivery_engagements_legal_instruments_list

    Validation

    Kind is required and is one of sixteen instrument kinds, for example MSA, SOW, NDA, DPA, or ENGAGEMENT_LETTER.Status is NOT_REQUIRED, REQUESTED, IN_NEGOTIATION, EXECUTED, EXPIRED, or WAIVED, and defaults to REQUESTED.One instrument is kept per kind: saving a kind that already exists updates it.Notice days are 0 to 3,650; party and signatory names are at most 200 characters; notes are at most 20,000.A signed copy attachment must belong to this engagement, and a contract or signing envelope must belong to the caller's workspace; otherwise the request returns 404.

    These routes list the contracts and other legal instruments recorded on an engagement and create or update one per kind, with its status, dates, signatories, and governing law. Workspace owners, admins, and members may use them; guests are refused with 403, and an engagement hidden from the caller returns 404. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Control how a deliverable is handled, released, and recalled

    Guarded

    Engagement Working papers tab, Document handling panel: Add and Edit form, Verify redaction, Confirm insider entry, Release, and Recall with a reason

    Analytics

    delivery-handling-*delivery-working-papers-document-handling-*

    App API

    GET /v1/engagements/{engagementId}/document-handlingPOST /v1/engagements/{engagementId}/document-handlingPOST /v1/engagements/{engagementId}/document-handling/{childId}/confirm-insider-entryPOST /v1/engagements/{engagementId}/document-handling/{childId}/recallPOST /v1/engagements/{engagementId}/document-handling/{childId}/releasePOST /v1/engagements/{engagementId}/document-handling/{childId}/verify-redaction

    MCP target

    atlas_delivery_engagements_document_handling_listatlas_delivery_engagements_document_handling_setatlas_delivery_engagements_document_handling_withdraw

    Validation

    A handling record cannot be changed after its document is released; recall it first.Verifying a redaction is refused until the redaction layer is flattened.Release is refused while any blocker stands: an unflattened or unverified redaction, unscrubbed metadata, or inside information with a required insider list entry that is not confirmed.Release is also refused while a benchmark in the deliverable has no competition-law review.A document cannot be released twice, and only a released document can be recalled.A recall needs a reason of 1 to 20,000 characters.Marking locations hold at most 20 entries of at most 48 characters.The deliverable version named on a handling record must be a version of a live deliverable on this engagement, or the request returns 404.

    These routes keep the handling record for each deliverable version: classification, distribution limits, redaction and metadata scrubbing, and inside information flags, and they list each record with the blockers that would stop its release. Release and recall are written to the audit log, and a recalled document keeps its release date so the record shows it went out. Owners, admins, and members may list, save, verify, release, and recall; only owners and admins may confirm an insider list entry. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Read the suspicious activity reports filed on an engagement

    Guarded

    Engagement Screening tab: suspicious activity section with the filed reports, shown only to the appointed reporting officer

    Analytics

    delivery-sar-*delivery-screening-sar-error

    App API

    GET /v1/engagements/{engagementId}/suspicious-activity

    MCP target

    No agent tool

    Validation

    Only a user named as a reporting officer in the workspace's Client Delivery settings receives the reports.Any other reader receives isReportingOfficer false and an empty list, never a refusal, so the response does not reveal whether a report exists.For the reporting officer, an engagement with no acceptance file returns 404.Every read, including a read by someone who is not the officer, is written to the audit log without the report contents.

    This route returns the suspicious activity reports filed against checks on an engagement, with each check, kind, reference, and filing date. It answers every permitted reader in the same shape so the screen cannot tip anybody off: a reader who is not the appointed officer is told so and given an empty list. Workspace owners, admins, and members may call it with the delivery:read token scope; guests are refused with 403, and the route sits behind the Client Delivery entitlement.

    Define the escalation ladder for an engagement

    Guarded

    Engagement Ways of working tab: escalation ladder with the add rung form (level, description, trigger, response time)

    Analytics

    delivery-escalation-*

    App API

    GET /v1/engagements/{engagementId}/escalation-pathsPOST /v1/engagements/{engagementId}/escalation-paths

    MCP target

    atlas_delivery_engagements_escalation_paths_createatlas_delivery_engagements_escalation_paths_list

    Validation

    Level is a whole number from 1 to 10, and a level already defined on the engagement is refused with 400.Description is required and at most 300 characters; a trigger condition is at most 400.Response time is 1 to 8,760 hours.Notify channels hold at most 10 entries of at most 40 characters.

    These routes list the engagement's escalation ladder, lowest level first, and add a rung naming who on the firm and client side it goes to and how quickly a response is due. Workspace owners, admins, and members may use them; guests are refused with 403, and an engagement hidden from the caller returns 404. The routes need the delivery:read or delivery:write token scope and sit behind the Client Delivery entitlement.

    Build and edit the engagement plan

    Guarded

    Engagement workspace Plan tab: add item form with kind picker, edit item dialog (title, dates, duration, percent complete), row move up and down, row delete, convert row to task, adopt tasks dialog, bulk select with shift by days, Gantt and card views, and the plan export button

    Analytics

    delivery-plan-*delivery-gantt-*

    App API

    GET /v1/engagements/{engagementId}/planPOST /v1/engagements/{engagementId}/planPATCH /v1/engagements/{engagementId}/plan/items/{childId}DELETE /v1/engagements/{engagementId}/plan/items/{childId}POST /v1/engagements/{engagementId}/plan/items/reorderPOST /v1/engagements/{engagementId}/plan/items/{childId}/convert-to-taskPOST /v1/engagements/{engagementId}/plan/from-tasksPOST /v1/engagements/{engagementId}/plan/bulk-shiftGET /v1/engagements/{engagementId}/plan/ganttGET /v1/engagements/{engagementId}/plan/export

    MCP target

    atlas_delivery_engagements_plan_exportatlas_delivery_engagements_plan_gantt_getatlas_delivery_engagements_plan_getatlas_delivery_engagements_plan_items_convertatlas_delivery_engagements_plan_items_createatlas_delivery_engagements_plan_items_deleteatlas_delivery_engagements_plan_items_importatlas_delivery_engagements_plan_items_moveatlas_delivery_engagements_plan_items_reorderatlas_delivery_engagements_plan_items_update

    Validation

    A plan item title is required and at most 300 characters; kind is one of TASK, MILESTONE, SUMMARY or GATE.Duration is a whole number of days from 0 to 3650; constraint type is one of ASAP, ALAP, SNET, SNLT, FNET, FNLT, MSO or MFO; dates are ISO date-times.An edit must send at least one field, and percent complete is a whole number from 0 to 100.A SUMMARY item cannot hold a task, on create, on edit, or when converted to a task.A task linked to a single new plan item must exist in the project the engagement runs in, or the request returns 404 (an engagement with no project holds no task); a task or milestone already adopted into the plan cannot be adopted a second time.A parent row, phase or workstream must belong to the same engagement, and a row cannot be placed under itself or under one of its own descendants.Deleting a row that still has rows beneath it is refused with a conflict.A reorder names 1 to 1000 rows with positions from 0 to 100000, and a row listed twice is refused.Adopting tasks takes 1 to 200 task ids, every task must exist in the project the engagement runs in, and the engagement must have a project.A bulk shift names 1 to 1000 rows and a non-zero whole number of days from -3650 to 3650; if any row has no planned dates nothing is moved.The list returns at most 1000 rows per request and can be filtered to one workstream or to critical rows only.

    These routes read and write the rows of an engagement plan: list, create, edit, delete and reorder rows, adopt existing project tasks into the plan, turn a plan row into a project task, shift many rows by a number of days, and read the plan as a Gantt view or as an export. Callers need the client-delivery module entitlement, a workspace role of OWNER, ADMIN or MEMBER, and module access of view, create, update or delete to match the action; a token needs the delivery:read scope to read and delivery:write to change anything. An engagement in another workspace, or one the caller is held off by an information barrier or by restricted access without a grant, answers 404, and converting a row to a task is refused when the call carries no user.

    Link plan items and reschedule the plan

    Guarded

    Engagement workspace Plan tab: dependencies panel (from, to, type, lag, hard link, check, create, delete), critical path filter, float ceiling filter, recompute button, and the replan panel with reschedule and level preview and apply

    Analytics

    delivery-plan-dependenc*delivery-plan-reschedule-*delivery-plan-level-*delivery-plan-recompute-*delivery-plan-float-ceiling-*delivery-plan-filter-critical

    App API

    GET /v1/engagements/{engagementId}/plan/dependenciesPOST /v1/engagements/{engagementId}/plan/dependenciesPATCH /v1/engagements/{engagementId}/plan/dependencies/{childId}DELETE /v1/engagements/{engagementId}/plan/dependencies/{childId}POST /v1/engagements/{engagementId}/plan/dependencies/validateGET /v1/engagements/{engagementId}/plan/critical-pathGET /v1/engagements/{engagementId}/plan/floatPOST /v1/engagements/{engagementId}/plan/recomputePOST /v1/engagements/{engagementId}/plan/reschedulePOST /v1/engagements/{engagementId}/plan/level

    MCP target

    atlas_delivery_engagements_critical_path_getatlas_delivery_engagements_critical_path_refreshatlas_delivery_engagements_plan_dependencies_createatlas_delivery_engagements_plan_dependencies_deleteatlas_delivery_engagements_plan_dependencies_listatlas_delivery_engagements_plan_dependencies_updateatlas_delivery_engagements_plan_dependencies_validateatlas_delivery_engagements_plan_float_listatlas_delivery_engagements_plan_leveling_runatlas_delivery_engagements_plan_reschedule

    Validation

    A dependency needs fromPlanItemId and toPlanItemId; type is one of FS, SS, FF or SF; lag is a whole number of days from -365 to 365; a note is at most 400 characters.Both ends must be live plan items on the same engagement, and an item cannot depend on itself.A dependency that would close a loop is refused and the refusal names the loop.A dependency edit must send at least one field.The validate route runs the same checks as the create without writing anything.Reschedule and level default to a proposal that writes nothing; applying requires the expectedFingerprint the proposal reported, and a plan that changed since the proposal is refused with a conflict.A reschedule start date is a calendar day written as YYYY-MM-DD.The float read accepts a maximum float from -3650 to 3650 days and a limit from 1 to 1000.

    These routes manage the links between plan items and the schedule computed from them: list, add, edit, check and remove dependencies, read the critical path and each row's float, recompute the critical path, and propose or apply a reschedule or a resource levelling pass. Reads need module view access and the delivery:read scope, and changes need module update or delete access and the delivery:write scope, all behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. The critical path read never recomputes, a dependency that does not exist on the engagement answers 404, and an engagement the caller cannot see answers 404.

    Capture plan baselines and track milestone slip

    Guarded

    Engagement workspace Plan tab: baselines panel (open a baseline, set current with a reason, delete with confirmation), variance figures on the plan cards, and the milestone trend panel with its capture button

    Analytics

    delivery-plan-baseline-*delivery-plan-trend-capturedelivery-plan-card-slip

    App API

    GET /v1/engagements/{engagementId}/baselinesPOST /v1/engagements/{engagementId}/baselinesGET /v1/engagements/{engagementId}/baselines/{childId}DELETE /v1/engagements/{engagementId}/baselines/{childId}POST /v1/engagements/{engagementId}/baselines/{childId}/set-currentGET /v1/engagements/{engagementId}/baselines/{childId}/varianceGET /v1/engagements/{engagementId}/baselines/varianceGET /v1/engagements/{engagementId}/plan/milestone-trendPOST /v1/engagements/{engagementId}/plan/milestone-trend/capture

    MCP target

    atlas_delivery_engagements_baseline_variance_getatlas_delivery_engagements_baselines_captureatlas_delivery_engagements_baselines_deleteatlas_delivery_engagements_baselines_getatlas_delivery_engagements_baselines_listatlas_delivery_engagements_milestone_trend_captureatlas_delivery_engagements_milestone_trend_getatlas_delivery_engagements_plan_variance_get

    Validation

    A baseline name is required and at most 200 characters; kind is one of ORIGINAL, REBASELINE or WHAT_IF; a description is at most 20000 characters.A REBASELINE capture requires a changeRequestId that names an APPROVED or IMPLEMENTED change request on this engagement; a missing, draft, rejected, or unknown change request, or one on another engagement, is refused with the same 400.A change request named on any other kind of capture must belong to this engagement, or the request returns 404.A new capture becomes the current baseline and the previous current baseline stops being current.Setting a baseline current requires a reason of 1 to 400 characters, and setting the baseline that is already current is refused with a conflict.The current baseline cannot be deleted until another baseline is made current.The milestone trend accepts an optional since date written as YYYY-MM-DD.A baseline that does not belong to the engagement answers 404.

    These routes freeze a copy of the plan as a baseline, choose which baseline the variance figures are measured from, compare the live plan against the current baseline or a named one, and record and read the milestone trend that shows how forecast dates moved over time. Reads need module view access and the delivery:read scope; capture, set current and trend capture need update access and delivery:write, and delete needs delete access, all behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. Capturing a baseline and changing the current one each write an audit record, and an engagement the caller cannot see answers 404.

    Set up phases and workstreams and decide phase gates

    Guarded

    Engagement overview lifecycle panel: phase gates list with pass and fail buttons, gate reason field and confirm; Workstreams tab: add workstream form (key and name) and the workstream register

    Analytics

    delivery-lifecycle-gate*delivery-workstream-*delivery-workstreams-*

    App API

    GET /v1/engagements/{engagementId}/phasesPOST /v1/engagements/{engagementId}/phasesPOST /v1/engagements/{engagementId}/phases/{childId}/gateGET /v1/engagements/{engagementId}/workstreamsPOST /v1/engagements/{engagementId}/workstreams

    MCP target

    atlas_delivery_engagements_phases_createatlas_delivery_engagements_phases_listatlas_delivery_engagements_workstreams_createatlas_delivery_engagements_workstreams_list

    Validation

    A phase and a workstream each need a key of 1 to 48 characters that is not already used by another phase (for a phase) or another workstream (for a workstream) on the engagement, and a name of 1 to 200 characters.A phase kind is one of ACCEPTANCE, MOBILISE, DIAGNOSTIC, DESIGN, BUILD, TEST, DEPLOY, STABILISE, HYPERCARE, CLOSE or CUSTOM; description and gate criteria are at most 4000 characters each.A gate decision outcome is pass or fail, with a reason of at most 600 characters.Only a phase with a required gate can record a gate decision, and a failed gate needs a reason.A workstream colour is at most 9 characters, and positions are whole numbers of 0 or more.

    These routes list and create the phases and workstreams that structure an engagement, and record a pass or fail decision on a phase gate. Reads need module view access and the delivery:read scope, creates need create access and decisions need update access with the delivery:write scope, all behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. A duplicate key is refused, a phase that does not belong to the engagement answers 404, and an engagement the caller cannot see answers 404.

    Record engagement objectives and scope statements

    Guarded

    Engagement workspace Scope tab: objectives list with the add objective form (statement, success measure, baseline and target values) and the scope register with in scope and out of scope statement forms

    Analytics

    delivery-objective-*delivery-objectivesdelivery-scope-*

    App API

    GET /v1/engagements/{engagementId}/objectivesPOST /v1/engagements/{engagementId}/objectivesGET /v1/engagements/{engagementId}/scopePOST /v1/engagements/{engagementId}/scope

    MCP target

    atlas_delivery_engagements_objectives_createatlas_delivery_engagements_objectives_listatlas_delivery_engagements_scope_statements_createatlas_delivery_engagements_scope_statements_list

    Validation

    An objective needs a statement and a success measure of 1 to 1000 characters each; baseline and target values are at most 120 characters and the unit at most 40.A scope statement needs inScope as true or false and a statement of 1 to 2000 characters; clientVisible is optional.Positions are whole numbers of 0 or more.A workstream given on a new objective must belong to this engagement, or the request returns 404.

    These routes list and add the objectives an engagement commits to and the statements of what is in and out of its scope. Reads need module view access and the delivery:read scope, and adding needs create access and the delivery:write scope, behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. An engagement in another workspace or one the caller is held off from answers 404.

    Agree the engagement ways of working

    Guarded

    Engagement workspace Ways of working tab: the ways of working form with one field per convention, the client visible switch, the agreed switch, and the save button

    Analytics

    delivery-ways-of-working-*

    App API

    GET /v1/engagements/{engagementId}/ways-of-workingPOST /v1/engagements/{engagementId}/ways-of-working

    MCP target

    atlas_delivery_engagements_ways_of_working_getatlas_delivery_engagements_ways_of_working_set

    Validation

    Every text field (working hours, core hours, time zones, meeting cadence, channels, response times, escalation, document, naming and versioning conventions, definitions of done and ready, decision and confidentiality protocols, tooling, risk appetite) is optional and at most 20000 characters.clientVisible and agreed are optional true or false values; marking the record agreed stamps the time and the person who agreed it.

    These routes read the single ways of working record for an engagement and create or replace it in one write. Reading needs module view access and the delivery:read scope, and writing needs update access and the delivery:write scope, behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. An engagement the caller cannot see answers 404.

    Log and manage risks, assumptions, issues, dependencies and decisions

    Guarded

    Engagement workspace RAID tab: kind facets and search, add item form, bulk add rows, manage panel per item (owner, save, status buttons, score grid, review, escalate, resolve, void, remove), review mode with bulk review, item history panel, and load more

    Analytics

    delivery-raid-*

    App API

    GET /v1/engagements/{engagementId}/raidPOST /v1/engagements/{engagementId}/raidGET /v1/engagements/{engagementId}/raid/{childId}PATCH /v1/engagements/{engagementId}/raid/{childId}DELETE /v1/engagements/{engagementId}/raid/{childId}POST /v1/engagements/{engagementId}/raid/bulkGET /v1/engagements/{engagementId}/raid/{childId}/eventsPOST /v1/engagements/{engagementId}/raid/{childId}/statusPOST /v1/engagements/{engagementId}/raid/{childId}/scorePOST /v1/engagements/{engagementId}/raid/{childId}/reviewPOST /v1/engagements/{engagementId}/raid/bulk-reviewPOST /v1/engagements/{engagementId}/raid/{childId}/resolvePOST /v1/engagements/{engagementId}/raid/{childId}/voidPOST /v1/engagements/{engagementId}/raid/{childId}/escalate

    MCP target

    atlas_delivery_engagements_raid_items_bulk_createatlas_delivery_engagements_raid_items_bulk_reviewatlas_delivery_engagements_raid_items_createatlas_delivery_engagements_raid_items_deleteatlas_delivery_engagements_raid_items_escalateatlas_delivery_engagements_raid_items_events_listatlas_delivery_engagements_raid_items_getatlas_delivery_engagements_raid_items_listatlas_delivery_engagements_raid_items_resolveatlas_delivery_engagements_raid_items_reviewatlas_delivery_engagements_raid_items_scoreatlas_delivery_engagements_raid_items_transitionatlas_delivery_engagements_raid_items_updateatlas_delivery_engagements_raid_items_void

    Validation

    Kind is one of RISK, ASSUMPTION, ISSUE, DEPENDENCY or DECISION, and a title of 1 to 300 characters is required; a description is at most 20000 characters.Probability and impact are whole numbers from 1 to 5 and only a RISK, ISSUE or DEPENDENCY can carry them.An ASSUMPTION needs a date by which it must hold; an ISSUE needs an impact, an owner and a target resolution date; a DEPENDENCY needs a needed-by date and an owner, and an external dependency cannot be owned by an internal user.A bulk add takes 1 to 50 items and writes all of them or none; each item is checked against the same rules as a single add.An edit must send at least one field, refuses any field outside the edit schema including audience, and is refused on an item that was converted.The status route accepts only OPEN, IN_PROGRESS, MITIGATING or MONITORING, and status changes, escalation and voiding are refused once the item has been closed out.A resolution status must be one the item kind allows, with a resolution summary of 1 to 20000 characters.A void needs a reason of 1 to 20000 characters; an escalation needs a reason of 1 to 600 characters and an optional level from 1 to 4.A review cadence is 1 to 365 days, and a bulk review names 1 to 200 items that must all exist on the engagement.An item shared with the client cannot be removed until it is withdrawn from the client.The list returns at most 500 items per page with a cursor, filtered by kind, status, category, owner, workstream, heat band, minimum score, overdue review, origin, audience or a search of up to 200 characters.A workstream given on a single add, on any item of a bulk add, or on an edit must belong to this engagement, or the request returns 404; one foreign workstream refuses the whole bulk add. An escalation path named on an escalation must belong to this engagement, or the request returns 404.

    These routes run an engagement RAID register: list and read items, raise one or many, edit, move through working statuses, rescore, review, resolve, void, escalate and remove them, and read each item's event history. Reads need module view access and the delivery:read scope, raising needs create access, removal needs delete access and every other change needs update access with the delivery:write scope, behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. Each change writes an entry in the item's event log, and an item or engagement the caller cannot see answers 404.

    Convert, share, or import RAID items

    Guarded

    Engagement workspace RAID tab: convert menu per item (to another kind, to a task, to a change request), share with client and withdraw with reason, and the import from project panel with the include closed switch

    Analytics

    delivery-raid-convert*delivery-raid-import*

    App API

    POST /v1/engagements/{engagementId}/raid/{childId}/convertPOST /v1/engagements/{engagementId}/raid/{childId}/convert-to-taskPOST /v1/engagements/{engagementId}/raid/{childId}/convert-to-change-requestPOST /v1/engagements/{engagementId}/raid/{childId}/share-with-clientPOST /v1/engagements/{engagementId}/raid/{childId}/unsharePOST /v1/engagements/{engagementId}/raid/import-from-project

    MCP target

    atlas_delivery_engagements_raid_items_change_requests_createatlas_delivery_engagements_raid_items_convertatlas_delivery_engagements_raid_items_importatlas_delivery_engagements_raid_items_share_revokeatlas_delivery_engagements_raid_items_tasks_create

    Validation

    A kind conversion is allowed only along the defined paths: an assumption to a risk or decision, a risk to an issue or decision, a dependency to an issue or decision, and an issue to a decision; a decision converts to nothing.Only an issue can become a change request, and an item that already has a change request is refused.Converting to a task accepts an optional title of up to 300 characters, a body of up to 20000 characters, an assignee and a due date, and is refused on an item that was already converted.Converting to a change request accepts an optional title, description, type (SCOPE, SCHEDULE, COST, RESOURCE, QUALITY, CONTRACT, ASSUMPTION or TECHNICAL) and urgency (LOW, MEDIUM, HIGH or CRITICAL).Sharing with the client is refused for an item marked confidential or one that was converted; a share note is at most 1000 characters.Withdrawing from the client requires a reason of 1 to 1000 characters.Importing from the project needs an engagement linked to a project that still exists, and takes an optional limit from 1 to 200 and an includeClosed switch.

    These routes move RAID items out of the register or across its boundary: convert an item to another kind while keeping the original as superseded, turn it into a project task or a change request, disclose it to the client and withdraw it, and seed the register from the linked project risk log. Kind conversion, sharing and withdrawal need module update access, while task, change request and import need create access, all with the delivery:write scope behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. Sharing is the only path by which a RAID item reaches the client audience, and both sharing and withdrawal write an audit record and an event on the item.

    Review RAID heat map, ageing, due reviews and export

    Guarded

    Engagement workspace RAID tab: summary tiles, heat map with cells by probability and impact, insights panel with ageing by kind, review mode window for due reviews, and the engagement export menu for the RAID log

    Analytics

    delivery-raid-summarydelivery-raid-heatmap*delivery-raid-ageing*delivery-raid-review-*delivery-raid-insights*

    App API

    GET /v1/engagements/{engagementId}/raid/summaryGET /v1/engagements/{engagementId}/raid/heatmapGET /v1/engagements/{engagementId}/raid/ageingGET /v1/engagements/{engagementId}/raid/due-reviewsGET /v1/engagements/{engagementId}/raid/export

    MCP target

    atlas_delivery_engagements_raid_items_ageing_getatlas_delivery_engagements_raid_items_due_reviews_listatlas_delivery_engagements_raid_items_exportatlas_delivery_engagements_raid_items_heatmap_getatlas_delivery_engagements_raid_items_summary_get

    Validation

    The ageing read accepts an optional kind and a limit from 1 to 200.The due reviews read accepts a window of 0 to 365 days and a limit from 1 to 500.The export needs a format of pdf, xlsx, docx or md; audience defaults to INTERNAL, and a CLIENT edition is refused where the artifact has none.An export too large to render in the request is returned as a queued job ticket with status 202 instead of the file.

    These routes read the register as numbers and documents: the summary tiles, the probability by impact heat map, how long open items have been open, which items are past or near their review date, and the RAID log as a downloadable document. The four reads need module view access and the export needs module export access, all with the delivery:read scope behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. An unsupported format is refused with 400, and an engagement the caller cannot see answers 404.

    Assign, publish and acknowledge the responsibility matrix

    Guarded

    Engagement workspace Responsibilities tab: matrix grid with letter cells and notes, coverage add subject, party picker, remove party, decision model switch, playbook apply, validate and violations only filter, publish, acknowledge, and export

    Analytics

    delivery-raci-*delivery-responsibilities-*

    App API

    GET /v1/engagements/{engagementId}/raciPOST /v1/engagements/{engagementId}/raciPATCH /v1/engagements/{engagementId}/raci/{childId}DELETE /v1/engagements/{engagementId}/raci/{childId}POST /v1/engagements/{engagementId}/raci/bulkGET /v1/engagements/{engagementId}/raci/subjectsGET /v1/engagements/{engagementId}/raci/partiesDELETE /v1/engagements/{engagementId}/raci/party/{partyKey}GET /v1/engagements/{engagementId}/raci/validatePOST /v1/engagements/{engagementId}/raci/publishPOST /v1/engagements/{engagementId}/raci/{childId}/acknowledgePOST /v1/engagements/{engagementId}/raci/apply-templatePOST /v1/engagements/{engagementId}/raci/switch-modelGET /v1/engagements/{engagementId}/raci/export

    MCP target

    atlas_delivery_engagements_raci_cells_bulk_setatlas_delivery_engagements_raci_cells_deleteatlas_delivery_engagements_raci_cells_listatlas_delivery_engagements_raci_cells_setatlas_delivery_engagements_raci_cells_updateatlas_delivery_engagements_raci_decision_model_setatlas_delivery_engagements_raci_exportatlas_delivery_engagements_raci_parties_listatlas_delivery_engagements_raci_parties_removeatlas_delivery_engagements_raci_subjects_listatlas_delivery_engagements_raci_template_applyatlas_delivery_engagements_raci_validate

    Validation

    A cell needs a subject type, a subject id that belongs to the engagement, a party type of USER, CLIENT_CONTACT or EXTERNAL, and a letter of R, A, S, C, I or V; a note is at most 600 characters and a party email must be a valid address.A bulk write takes 1 to 200 cells in one request.A cell edit must name at least one field; the new letter must exist in the model the engagement runs, and a party that already holds that letter on the subject is refused with a conflict.The decision model is one of RACI, RASCI, DACI or RAPID; switching to the model already in use is refused, and a switch is refused whole when any assignment has no counterpart in the new model.Publishing is refused when the matrix is empty and refused with a conflict while a blocking finding stands.Only the person named on a published assignment can acknowledge it; an unpublished assignment cannot be acknowledged, and a second acknowledgement changes nothing.Applying a playbook needs a slug of 1 to 120 characters naming a playbook available to the workspace.Removing a party needs a party key of 1 to 220 characters that holds at least one seat on the matrix.The export needs a format of pdf, xlsx, docx or md.

    These routes keep the engagement accountability matrix: list cells with their rule findings, assign, edit and remove cells one at a time or in bulk, list the subjects and parties the matrix can name, validate it, publish it as agreed, let each named person acknowledge their part, apply a playbook matrix, switch the decision model, and export the matrix as a document. Reads and acknowledgement need module view access and the delivery:read scope; every other change needs update access and the delivery:write scope, all behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. A cell or engagement the caller cannot see answers 404, and acknowledgement on behalf of another person is refused with 403.

    Manage areas of responsibility and fill their seats

    Guarded

    Engagement workspace Responsibilities tab: responsibility cards with new area form (key and label), rename, move up and down, remove, assign and unassign, and the fill seats button with its result

    Analytics

    delivery-responsibility-*

    App API

    GET /v1/engagements/{engagementId}/responsibility-areasPOST /v1/engagements/{engagementId}/responsibility-areasPATCH /v1/engagements/{engagementId}/responsibility-areas/{childId}DELETE /v1/engagements/{engagementId}/responsibility-areas/{childId}PUT /v1/engagements/{engagementId}/responsibility-areas/orderPOST /v1/engagements/{engagementId}/responsibility-areas/fill-seats

    MCP target

    atlas_delivery_engagements_responsibility_areas_assignatlas_delivery_engagements_responsibility_areas_createatlas_delivery_engagements_responsibility_areas_deleteatlas_delivery_engagements_responsibility_areas_listatlas_delivery_engagements_responsibility_areas_reorderatlas_delivery_engagements_responsibility_areas_update

    Validation

    A new area needs a key of 1 to 64 characters that the engagement does not already use and a label of 1 to 240 characters.A rename needs a label of 1 to 240 characters.A reorder lists 1 to 200 area ids and must name exactly the areas the engagement has.An area that does not belong to the engagement answers 404.Filling seats leaves a seat already held by the same person alone, leaves an Accountable seat held by anybody else alone and names it, and fills Responsible seats even when others hold one.

    These routes list the areas of responsibility on an engagement with who holds each, create, rename, reorder and remove areas, and fill the seats a playbook intended from the people now on the engagement. Listing needs module view access and the delivery:read scope; every change needs update access and the delivery:write scope, behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. Removal is a soft delete that writes an audit record, filling seats runs only when asked and reports what it did, and an engagement the caller cannot see answers 404.

    Build the hypothesis tree and run analyses

    Guarded

    Engagement workspace Structuring tab: issue tree with add question or hypothesis, reword, move, and conclude per node; analyses panel with add, edit, start, block with reason, and complete with finding and so what

    Analytics

    delivery-hypothesis-*delivery-structuring-*delivery-analysis-*delivery-analyses-error

    App API

    GET /v1/engagements/{engagementId}/structuring/hypothesesPOST /v1/engagements/{engagementId}/structuring/hypothesesPATCH /v1/engagements/{engagementId}/structuring/hypotheses/{childId}POST /v1/engagements/{engagementId}/structuring/hypotheses/{childId}/concludePOST /v1/engagements/{engagementId}/structuring/hypotheses/{childId}/moveGET /v1/engagements/{engagementId}/structuring/hypotheses/treeGET /v1/engagements/{engagementId}/structuring/analysesPOST /v1/engagements/{engagementId}/structuring/analysesPATCH /v1/engagements/{engagementId}/structuring/analyses/{childId}POST /v1/engagements/{engagementId}/structuring/analyses/{childId}/startPOST /v1/engagements/{engagementId}/structuring/analyses/{childId}/blockPOST /v1/engagements/{engagementId}/structuring/analyses/{childId}/complete

    MCP target

    atlas_delivery_engagements_analyses_blocked_markatlas_delivery_engagements_analyses_completeatlas_delivery_engagements_analyses_createatlas_delivery_engagements_analyses_listatlas_delivery_engagements_analyses_startatlas_delivery_engagements_analyses_updateatlas_delivery_engagements_hypotheses_createatlas_delivery_engagements_hypotheses_listatlas_delivery_engagements_hypotheses_moveatlas_delivery_engagements_hypotheses_resolveatlas_delivery_engagements_hypotheses_updateatlas_delivery_engagements_hypothesis_tree_get

    Validation

    A hypothesis statement is 1 to 1000 characters; kind is QUESTION or HYPOTHESIS; confidence is a whole number from 0 to 100.An edit to a hypothesis or an analysis must send at least one field.A conclusion status is SUPPORTED, PARTIALLY_SUPPORTED, REFUTED or INCONCLUSIVE with a conclusion of 1 to 20000 characters; concluding with no completed analysis succeeds and returns a warning.A move names a parent or null and a position from 0 to 999, and a branch cannot be moved under itself.An analysis title is 1 to 300 characters; analysis type is one of QUANTITATIVE, INTERVIEW, SURVEY, BENCHMARK, DESK_RESEARCH, MODEL, SITE_VISIT or WORKSHOP.Blocking an analysis needs a reason of 1 to 600 characters.Completing an analysis needs a finding and a so what, and at least one source recorded against it; a status change the analysis lifecycle does not allow is refused.A workstream given on a hypothesis, and a workstream, plan item, or deliverable given on an analysis, on create or on edit, must belong to this engagement, or the request returns 404.

    These routes keep the problem structure of an engagement: list, add, reword, move and conclude questions and hypotheses, read them as a tree, and list, add, edit, start, block and complete the analyses that test them. Reads need module view access and the delivery:read scope, adding needs create access and other changes need update access with the delivery:write scope, behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. A hypothesis, analysis or engagement the caller cannot see answers 404.

    Record interviews and sources and shape the storyline

    Guarded

    Engagement workspace Structuring tab: interviews panel with add, record consent, and complete; sources panel with cite, reliability and credibility grading, retract, and corroborates or contradicts picks; storyline panel with add page, governing thought edit, move up and down, status, and mark evidenced

    Analytics

    delivery-interview-*delivery-interviews-errordelivery-sources-*delivery-storyline-*

    App API

    GET /v1/engagements/{engagementId}/structuring/interviewsPOST /v1/engagements/{engagementId}/structuring/interviewsPOST /v1/engagements/{engagementId}/structuring/interviews/{childId}/consentPOST /v1/engagements/{engagementId}/structuring/interviews/{childId}/completeGET /v1/engagements/{engagementId}/structuring/sourcesPOST /v1/engagements/{engagementId}/structuring/sourcesPOST /v1/engagements/{engagementId}/structuring/sources/{childId}/gradePOST /v1/engagements/{engagementId}/structuring/sources/{childId}/triangulateGET /v1/engagements/{engagementId}/structuring/storylinePOST /v1/engagements/{engagementId}/structuring/storylinePATCH /v1/engagements/{engagementId}/structuring/storyline/{childId}POST /v1/engagements/{engagementId}/structuring/storyline/{childId}/evidencePOST /v1/engagements/{engagementId}/structuring/storyline/reorder

    MCP target

    atlas_delivery_engagements_interviews_completeatlas_delivery_engagements_interviews_consent_recordatlas_delivery_engagements_interviews_createatlas_delivery_engagements_interviews_listatlas_delivery_engagements_sources_createatlas_delivery_engagements_sources_listatlas_delivery_engagements_sources_rateatlas_delivery_engagements_sources_triangulation_recordatlas_delivery_engagements_storyline_getatlas_delivery_engagements_storyline_sections_createatlas_delivery_engagements_storyline_sections_reorderatlas_delivery_engagements_storyline_sections_updateatlas_delivery_engagements_storyline_sections_verify

    Validation

    An interviewee name is 1 to 200 characters; an interview names at most 20 interviewers.Recording consent needs consentObtained as true or false and a consent basis of 1 to 80 characters; without consent the interview is never attributable.An interview cannot be completed until consent is recorded.A source title is 1 to 300 characters, a URL is a valid address of at most 2048 characters, reliability is A to F and information credibility is 1 to 6.A grade must change at least one field, and a triangulation must name corroborating or contradicting sources (at most 50 each) that are on the same engagement and are not the source itself.A storyline section edit must send at least one field; status is GHOST, DRAFT or FINAL.A page can be marked evidenced only with a governing thought and a linked analysis that is complete.A storyline reorder lists 1 to 500 section ids under an optional parent.Linked records must belong to this engagement, or the request returns 404: an interview's workstream, guide attachment, and meeting; a source's attachment; and a storyline section's deliverable and analysis on create or edit.

    These routes hold the evidence behind an engagement: interviews with their consent and write-up, sources with their reliability grades and the sources that corroborate or contradict them, and the storyline pages the final answer is told through. Reads need module view access and the delivery:read scope, adding needs create access and other changes need update access with the delivery:write scope, behind the client-delivery module entitlement and a workspace role of OWNER, ADMIN or MEMBER. Grading and triangulating a source write an audit record, and an interview, source, section or engagement the caller cannot see answers 404.

    Raise and maintain the information request list on an engagement

    Guarded

    Engagement workspace Requests tab: outstanding, overdue, blocking, with-client and with-us summary tiles, status filters, raise request form with category and line items, raise from a playbook template, request detail panel with edit form, add line and line received toggle, attach an engagement file, and delete a draft request

    Analytics

    delivery-requests-*

    App API

    GET /v1/engagements/{engagementId}/info-requestsPOST /v1/engagements/{engagementId}/info-requestsPOST /v1/engagements/{engagementId}/info-requests/bulkPOST /v1/engagements/{engagementId}/info-requests/from-template/{slug}GET /v1/engagements/{engagementId}/info-requests/summaryGET /v1/engagements/{engagementId}/info-requests/overdueGET /v1/engagements/{engagementId}/info-requests/{childId}PATCH /v1/engagements/{engagementId}/info-requests/{childId}DELETE /v1/engagements/{engagementId}/info-requests/{childId}GET /v1/engagements/{engagementId}/info-requests/{childId}/itemsPOST /v1/engagements/{engagementId}/info-requests/{childId}/itemsPATCH /v1/engagements/{engagementId}/info-requests/{childId}/items/{itemId}GET /v1/engagements/{engagementId}/info-requests/{childId}/attachmentsPOST /v1/engagements/{engagementId}/info-requests/{childId}/attachments

    MCP target

    atlas_delivery_engagements_info_requests_attachments_linkatlas_delivery_engagements_info_requests_attachments_listatlas_delivery_engagements_info_requests_bulk_createatlas_delivery_engagements_info_requests_createatlas_delivery_engagements_info_requests_deleteatlas_delivery_engagements_info_requests_getatlas_delivery_engagements_info_requests_items_addatlas_delivery_engagements_info_requests_items_listatlas_delivery_engagements_info_requests_items_updateatlas_delivery_engagements_info_requests_listatlas_delivery_engagements_info_requests_overdue_listatlas_delivery_engagements_info_requests_summary_getatlas_delivery_engagements_info_requests_template_applyatlas_delivery_engagements_info_requests_update

    Validation

    Title is required and at most 300 characters; description at most 20000 characters; category at most 80 characters; period at most 48 characters.Format is one of DOCUMENT, SPREADSHEET, DATA_EXTRACT, SYSTEM_ACCESS, INTERVIEW, WALKTHROUGH, CONFIRMATION, or OTHER; priority is LOW, MEDIUM, HIGH, or CRITICAL; dueAt must be an ISO date and time.A request may carry at most 50 line items of 1 to 200 characters each; adding lines takes 1 to 50 labels and appends them after the existing lines.A bulk create takes at most 200 requests and is refused with 400 when the list is empty; a template copy is refused with 400 when the playbook holds no information requests, and an unknown playbook slug returns 404.The list filter limit is 1 to 500 (default 200) and the overdue limit is 1 to 200; the summary counts cover the whole register, not the filtered page.The edit body is strict: it carries no status and no audience, and a settled request cannot be edited.Only a request still in NOT_STARTED can be deleted, and the delete is soft; a request already put to the client must be withdrawn instead.A line is found through its parent request and the tenant, and a line edit body is strict (label, received, receivedByContactId, accepted, note up to 1000 characters).An attachment can be linked only when it already belongs to the same engagement; otherwise 404.

    These routes raise information requests on one engagement, singly, in bulk, or by copying the information request section of a playbook, and they read the register, its chase board counts, the overdue list, each request with its lines, and the files linked to it. Workspace members with the OWNER, ADMIN, or MEMBER role can call them when the workspace holds the Client Delivery entitlement; reads need the delivery read scope and view access, writes need the delivery write scope and create, update, or delete access, and a portal guest is refused. An engagement behind an information barrier or restricted to named grants answers 404, as does a request, line, or attachment that is not on that engagement. Raising, deleting, bulk raising, and copying from a template each write an audit record.

    Send, chase, and settle an information request

    Guarded

    Engagement workspace Requests tab detail panel: send to client, remind, escalate to a level, accept, reject with a reason, mark partially received, mark not applicable, and withdraw with a reason

    Analytics

    delivery-requests-*

    App API

    POST /v1/engagements/{engagementId}/info-requests/{childId}/requestPOST /v1/engagements/{engagementId}/info-requests/{childId}/remindPOST /v1/engagements/{engagementId}/info-requests/{childId}/escalatePOST /v1/engagements/{engagementId}/info-requests/{childId}/acceptPOST /v1/engagements/{engagementId}/info-requests/{childId}/rejectPOST /v1/engagements/{engagementId}/info-requests/{childId}/mark-partialPOST /v1/engagements/{engagementId}/info-requests/{childId}/not-applicablePOST /v1/engagements/{engagementId}/info-requests/{childId}/cancelPOST /v1/engagements/{engagementId}/info-requests/{childId}/submitPOST /v1/engagements/{engagementId}/info-requests/{childId}/review

    MCP target

    atlas_delivery_engagements_info_requests_cancelatlas_delivery_engagements_info_requests_escalateatlas_delivery_engagements_info_requests_not_applicable_markatlas_delivery_engagements_info_requests_partial_receipt_recordatlas_delivery_engagements_info_requests_remindatlas_delivery_engagements_info_requests_sendatlas_delivery_engagements_info_requests_submit

    Validation

    Every move is checked against the request state machine; a move it does not allow is refused with 400 naming the current and requested status.Remind and escalate are refused for a settled request and for a request still in NOT_STARTED that was never sent.Escalation level is an integer from 1 to 10 and must name a level defined on the engagement escalation path; an unknown level is refused with 400.Reject needs a non-blank reason of at most 20000 characters; mark partial needs a non-blank note saying what is missing.Not applicable and withdraw each need a non-blank reason of at most 20000 characters; a withdrawn request is kept, not deleted.Send accepts an optional new due date and a note of at most 2000 characters; escalate accepts a note of at most 2000 characters.Review takes an outcome of ACCEPTED or REJECTED, and a REJECTED outcome without a rejection reason is refused with 400.Submit takes an optional partial flag, note, contact id, and attachment count from 0 to 500.

    These routes move one information request through its chase loop: send it to the client, remind, escalate up the engagement escalation path, and accept, reject, mark partial, mark not applicable, or withdraw what came back. Sending, reminding, and rejecting notify the client contact, escalating notifies the firm user on that level and adds an internal timeline entry, and each move except remind writes an audit record. The submit and review routes record a client submission and its review outcome on the firm side and have no control on the screen. Callers need the OWNER, ADMIN, or MEMBER role, the Client Delivery entitlement, the delivery write scope, and update access; a request or engagement the caller cannot see returns 404.

    Track a deliverable through its stages to client sign-off

    Guarded

    Engagement workspace Deliverables tab: deliverable register with load more and add deliverable form; deliverable detail page with advance stage buttons, acceptance blockers, acceptance criteria add, assess, and waive forms, capture version, request sign-off form with lapse period, and acceptance certificate download

    Analytics

    delivery-deliverable-*delivery-deliverables-*

    App API

    GET /v1/engagements/{engagementId}/deliverablesPOST /v1/engagements/{engagementId}/deliverablesGET /v1/engagements/{engagementId}/deliverables/{childId}POST /v1/engagements/{engagementId}/deliverables/{childId}/advanceGET /v1/engagements/{engagementId}/deliverables/{childId}/acceptance-blockersGET /v1/engagements/{engagementId}/deliverables/{childId}/acceptance-certificatePOST /v1/engagements/{engagementId}/deliverables/{childId}/versionsGET /v1/engagements/{engagementId}/deliverables/{childId}/criteriaPOST /v1/engagements/{engagementId}/deliverables/{childId}/criteriaPOST /v1/engagements/{engagementId}/deliverables/{childId}/criteria/{itemId}/assessPOST /v1/engagements/{engagementId}/deliverables/{childId}/sign-offPOST /v1/engagements/{engagementId}/sign-offs/{childId}/sign

    MCP target

    atlas_delivery_engagements_acceptance_blockers_listatlas_delivery_engagements_deliverable_certificates_getatlas_delivery_engagements_deliverable_criteria_createatlas_delivery_engagements_deliverable_criteria_listatlas_delivery_engagements_deliverable_versions_captureatlas_delivery_engagements_deliverables_createatlas_delivery_engagements_deliverables_getatlas_delivery_engagements_deliverables_listatlas_delivery_engagements_sign_offs_request

    Validation

    Code is required, 1 to 32 characters, and unique among live deliverables on the engagement; a clash is refused with 409.Name is required and at most 300 characters; type, review tier (LIGHT, STANDARD, ENHANCED, EQR), and classification are fixed lists; at most 50 initial criteria of up to 1000 characters.The register filters by stage, owner, contractual flag, and audience, and pages with a cursor and a limit from 1 to 500.Advance moves to the next stage for the review tier or to a named stage; no next stage, or a move the tier does not allow, is refused with 400.Moving to ACCEPTED is refused with 409 listing every blocker: unmet mandatory criteria, an unsigned or lapsed sign-off, and placeholder assumptions disclosed in this deliverable.A criterion statement is 1 to 1000 characters; waiving a criterion without a waiver reason is refused with 400.A sign-off request takes a method from a fixed list, an optional signatory email, and a lapse period from 1 to 90 business days, defaulting to the contract deemed acceptance period.Signing needs a typed name of 1 to 200 characters; a sign-off already signed is refused with 409.The acceptance certificate takes a format of at most 8 characters and an optional INTERNAL or CLIENT audience, and a large render is answered with 202 and an export job.A workstream id on a new deliverable and an attachment id on a captured version must belong to this engagement, or the request returns 404.

    These routes keep the deliverable register for one engagement: create a deliverable with its acceptance criteria, capture numbered versions, assess or waive each criterion, request a client sign-off with a deemed acceptance date, record the signature, and move the deliverable through its review stages to acceptance. Stage changes write an audit record and a signature is stored with a timeline entry the client can see. Recording the signature itself has no control on the internal screen and is reached through the API. Callers need the OWNER, ADMIN, or MEMBER role, the Client Delivery entitlement, and the delivery read or write scope, and a deliverable, criterion, or sign-off not on that engagement returns 404.

    Review a deliverable and clear its review notes

    Guarded

    Deliverable detail page review panel: review rounds, record verdict form with outcome and comments, review checklist with YES, NO, and NA answers, and confirm review notes cleared

    Analytics

    delivery-review-*

    App API

    GET /v1/engagements/{engagementId}/deliverables/{childId}/reviewsPOST /v1/engagements/{engagementId}/deliverables/{childId}/reviewsPOST /v1/engagements/{engagementId}/deliverables/{childId}/reviews/{itemId}/decideGET /v1/engagements/{engagementId}/deliverables/{childId}/reviews/{itemId}/checklistPUT /v1/engagements/{engagementId}/deliverables/{childId}/reviews/{itemId}/checklistPOST /v1/engagements/{engagementId}/deliverables/{childId}/reviews/{itemId}/checklist/{entryId}/answerPOST /v1/engagements/{engagementId}/deliverables/{childId}/reviews/{itemId}/clear-notes

    MCP target

    atlas_delivery_engagements_deliverable_reviews_listatlas_delivery_engagements_deliverable_reviews_requestatlas_delivery_engagements_review_checklists_getatlas_delivery_engagements_review_checklists_set

    Validation

    A review request names a gate from INTERNAL_REVIEW, QA_REVIEW, EQ_REVIEW, TECHNICAL_REVIEW, EDITORIAL_REVIEW, LEGAL_REVIEW, or CLIENT_REVIEW; each new request on a gate opens the next round.A verdict is APPROVED, APPROVED_WITH_COMMENTS, CHANGES_REQUESTED, REJECTED, or WAIVED, with comments up to 20000 characters and a findings count from 0 to 1000.CHANGES_REQUESTED returns the deliverable to DRAFT, and REJECTED moves it to REJECTED with the comments as the rejection reason.Setting a checklist replaces the live questions with at most 200 items, each with a question of 1 to 400 characters and a category of 1 to 48 characters.An answer is YES, NO, or NA, with a comment up to 20000 characters and an evidence reference up to 120 characters; the must-fix count is recomputed from the answers.Confirming review notes cleared is refused with 400 while any must-fix note is open on the review.A review not on that deliverable, or a checklist question not on that review, returns 404; reading a checklist checks the review first.

    These routes run review rounds on one deliverable: open a round for a review gate, record the reviewer verdict, keep a question checklist for the round, answer it, and confirm that the review notes are cleared, which records who confirmed and when. Opening a round and setting its checklist questions are reached through the API; the screen reads the rounds, records verdicts, answers questions, and confirms clearance. Callers need the OWNER, ADMIN, or MEMBER role, the Client Delivery entitlement, and the delivery read or write scope with view or update access. An engagement the caller cannot see, a deliverable on another engagement, and a review on another deliverable all return 404.

    Raise, assess, and decide a change request

    Guarded

    Engagement workspace Changes tab: change register with status filter, add change form with urgency, cumulative drift panel; change detail page with edit form, assess impact form, add approver form, approval decision form, submit, start review, withdraw, defer, implement, share with client, unshare, and delete

    Analytics

    delivery-change-*delivery-changes-*

    App API

    GET /v1/engagements/{engagementId}/change-requestsPOST /v1/engagements/{engagementId}/change-requestsGET /v1/engagements/{engagementId}/change-requests/summaryGET /v1/engagements/{engagementId}/change-requests/driftGET /v1/engagements/{engagementId}/change-requests/{childId}PATCH /v1/engagements/{engagementId}/change-requests/{childId}DELETE /v1/engagements/{engagementId}/change-requests/{childId}POST /v1/engagements/{engagementId}/change-requests/{childId}/assess-impactPOST /v1/engagements/{engagementId}/change-requests/{childId}/submitPOST /v1/engagements/{engagementId}/change-requests/{childId}/reviewPOST /v1/engagements/{engagementId}/change-requests/{childId}/withdrawPOST /v1/engagements/{engagementId}/change-requests/{childId}/deferPOST /v1/engagements/{engagementId}/change-requests/{childId}/implementPOST /v1/engagements/{engagementId}/change-requests/{childId}/share-with-clientPOST /v1/engagements/{engagementId}/change-requests/{childId}/unshareGET /v1/engagements/{engagementId}/change-requests/{childId}/approvalsPOST /v1/engagements/{engagementId}/change-requests/{childId}/approvalsPOST /v1/engagements/{engagementId}/change-requests/{childId}/approvals/{approvalId}/decide

    MCP target

    atlas_delivery_engagements_change_approvals_listatlas_delivery_engagements_change_approvers_addatlas_delivery_engagements_change_requests_completeatlas_delivery_engagements_change_requests_createatlas_delivery_engagements_change_requests_deferred_markatlas_delivery_engagements_change_requests_deleteatlas_delivery_engagements_change_requests_drift_getatlas_delivery_engagements_change_requests_getatlas_delivery_engagements_change_requests_listatlas_delivery_engagements_change_requests_reviewatlas_delivery_engagements_change_requests_share_revokeatlas_delivery_engagements_change_requests_submitatlas_delivery_engagements_change_requests_summary_getatlas_delivery_engagements_change_requests_updateatlas_delivery_engagements_change_requests_withdraw

    Validation

    Title is required and at most 300 characters; type is SCOPE, SCHEDULE, COST, RESOURCE, QUALITY, CONTRACT, ASSUMPTION, or TECHNICAL; urgency is LOW, MEDIUM, HIGH, or CRITICAL.The edit body is strict, needs at least one field, carries no status or audience, and is refused with 400 once the change is decided; delete is refused on the same rule.Impact assessment requires the risk if rejected; schedule impact is -3650 to 3650 days, cost impact is an amount with at most two decimal places, effort impact is within plus or minus 5000000 minutes.Status moves follow the change state machine and a disallowed move is refused with 400; starting review is refused until the impact has been assessed.Withdraw, defer, and unshare each need a reason (up to 2000 characters for withdraw and defer, up to 1000 for unshare).A draft change cannot be shared with the client; sharing a change already shared writes nothing new.An approver step is 1 to 50 and must name a user, a client contact, or a label; a decision is APPROVED, REJECTED, ABSTAINED, or DELEGATED, and an approval step not on the change returns 404.The list limit is 1 to 500 and filters by status and type.A workstream id, and on a new change an originating RAID item id, must belong to this engagement, or the request returns 404.

    These routes keep the change control register for one engagement: raise a change, assess its impact, submit it, send it to review, collect approver decisions, and withdraw, defer, or mark an approved change implemented. When the approval chain closes the decision applies its effect together with the change status, and the drift read recomputes cumulative cost, schedule, and scope change against the baseline and raises one steering review item when the workspace threshold is crossed. Sharing with the client and unsharing are the only paths that change the disclosure and each writes an audit record and an internal timeline entry. Callers need the OWNER, ADMIN, or MEMBER role, the Client Delivery entitlement, and the delivery read or write scope; a change or engagement the caller cannot see returns 404.

    Compose, approve, and issue an engagement status report

    Guarded

    Engagement workspace Status tab: report list with load more and open report; compose page with period start and end, RAG lights, movement note, since last report panel, refresh figures, preview pane, sections, submit, approve, reject with reason, issue, supersede, share with client, unshare, recipients with add by email, and distribute with confirmation

    Analytics

    delivery-status-*

    App API

    GET /v1/engagements/{engagementId}/status-reportsPOST /v1/engagements/{engagementId}/status-reportsPOST /v1/engagements/{engagementId}/status-reports/generate-draftGET /v1/engagements/{engagementId}/status-reports/since-lastGET /v1/engagements/{engagementId}/status-reports/{childId}PATCH /v1/engagements/{engagementId}/status-reports/{childId}DELETE /v1/engagements/{engagementId}/status-reports/{childId}GET /v1/engagements/{engagementId}/status-reports/{childId}/sectionsPOST /v1/engagements/{engagementId}/status-reports/{childId}/sectionsPATCH /v1/engagements/{engagementId}/status-reports/{childId}/sections/{sectionId}DELETE /v1/engagements/{engagementId}/status-reports/{childId}/sections/{sectionId}POST /v1/engagements/{engagementId}/status-reports/{childId}/refresh-snapshotPOST /v1/engagements/{engagementId}/status-reports/{childId}/submitPOST /v1/engagements/{engagementId}/status-reports/{childId}/approvePOST /v1/engagements/{engagementId}/status-reports/{childId}/rejectPOST /v1/engagements/{engagementId}/status-reports/{childId}/issuePOST /v1/engagements/{engagementId}/status-reports/{childId}/supersedePOST /v1/engagements/{engagementId}/status-reports/{childId}/share-with-clientPOST /v1/engagements/{engagementId}/status-reports/{childId}/unshareGET /v1/engagements/{engagementId}/status-reports/{childId}/recipientsPOST /v1/engagements/{engagementId}/status-reports/{childId}/recipientsPOST /v1/engagements/{engagementId}/status-reports/{childId}/distribute

    MCP target

    atlas_delivery_engagements_status_report_recipients_addatlas_delivery_engagements_status_report_recipients_listatlas_delivery_engagements_status_report_revisions_createatlas_delivery_engagements_status_report_sections_createatlas_delivery_engagements_status_report_sections_deleteatlas_delivery_engagements_status_report_sections_listatlas_delivery_engagements_status_report_sections_updateatlas_delivery_engagements_status_reports_createatlas_delivery_engagements_status_reports_deleteatlas_delivery_engagements_status_reports_generateatlas_delivery_engagements_status_reports_getatlas_delivery_engagements_status_reports_listatlas_delivery_engagements_status_reports_refreshatlas_delivery_engagements_status_reports_share_revokeatlas_delivery_engagements_status_reports_since_last_getatlas_delivery_engagements_status_reports_submitatlas_delivery_engagements_status_reports_update

    Validation

    A draft takes an optional title of 1 to 300 characters, ISO period start and end, an INTERNAL or CLIENT audience, and a confidential flag; without a period the next period follows the workspace reporting cadence.The edit body is strict and needs at least one field; RAG lights are GREEN, AMBER, RED, or GREY; narrative fields are at most 50000 characters; at most 50 key risk ids.Key risks must be open items on this engagement RAID register; any other id is refused with 400.A report that is no longer open cannot be edited, and its sections cannot be added, changed, or removed.Status moves follow the report state machine (DRAFT, SUBMITTED, APPROVED, REJECTED, ISSUED, SUPERSEDED) and a disallowed move is refused with 400; reject needs a reason of 1 to 5000 characters.An issued report cannot be deleted; supersede it instead.Sharing is refused for a confidential report and for a superseded report; unshare needs a reason of 1 to 1000 characters.A recipient must be named by user, client contact, email, or label; channel and format are fixed lists.Distribute is refused with 400 until the report is ISSUED, takes at most 500 recipient ids, and skips recipients already sent.A section kind comes from a fixed list, title is 1 to 300 characters, position 0 to 500, and percent complete 0 to 100.The list filters by status and pages with a cursor and a limit from 1 to 200.A new section may name a workstream and a phase only of this engagement; any other id returns 404.

    These routes produce the periodic status report for one engagement: generate a draft prefilled from the previous report and current signals, edit its lights, narrative, and sections, refresh its figures, and move it through submit, approve or reject, and issue, or supersede it with a revised draft. Distribute records each unsent recipient as sent and returns the sent and skipped counts. Issuing adds a timeline entry, each status move and distribution writes an audit record, and sharing with the client is a separate, audited step. The plain create route and the delete route are reached through the API; the screen uses the draft generator. Callers need the OWNER, ADMIN, or MEMBER role, the Client Delivery entitlement, and the delivery read or write scope; a report or section not on that engagement returns 404.

    Run client acceptance checks and decide whether to take on an engagement

    Guarded

    Engagement workspace Acceptance tab: open acceptance file form, readiness blockers, check list with record result and waive forms, compliance terms, suspicious activity report for the reporting officer, start review, record the quality review, and decision form with conditions

    Analytics

    delivery-acceptance-*

    App API

    GET /v1/engagements/{engagementId}/acceptancePOST /v1/engagements/{engagementId}/acceptancePATCH /v1/engagements/{engagementId}/acceptanceGET /v1/engagements/{engagementId}/acceptance/readinessPOST /v1/engagements/{engagementId}/acceptance/reviewPOST /v1/engagements/{engagementId}/acceptance/decidePOST /v1/engagements/{engagementId}/acceptance/eqrGET /v1/engagements/{engagementId}/acceptance/checksPOST /v1/engagements/{engagementId}/acceptance/checksPATCH /v1/engagements/{engagementId}/acceptance/checks/{childId}/compliancePOST /v1/engagements/{engagementId}/acceptance/checks/{childId}/resultPOST /v1/engagements/{engagementId}/acceptance/checks/{childId}/waivePOST /v1/engagements/{engagementId}/acceptance/checks/{childId}/suspicious-activity

    MCP target

    atlas_delivery_engagements_acceptance_check_terms_updateatlas_delivery_engagements_acceptance_checks_createatlas_delivery_engagements_acceptance_checks_listatlas_delivery_engagements_acceptance_createatlas_delivery_engagements_acceptance_getatlas_delivery_engagements_acceptance_reviewatlas_delivery_engagements_acceptance_updateatlas_delivery_engagements_readiness_get

    Validation

    Opening a file requires an account id; risk tier is LOW, MEDIUM, HIGH, or VERY_HIGH (default MEDIUM); an engagement with a file already open is refused with 400.An update needs at least one field, cannot change the account, and is refused once the file is DECLINED or WITHDRAWN; raising the tier adds checks and lowering it removes none.A decision is ACCEPTED, ACCEPTED_WITH_CONDITIONS, or DECLINED; accepting with conditions without written conditions is refused with 400; decision changes follow the acceptance state machine.Deciding, recording the quality review, and waiving a check need the OWNER or ADMIN role.A check kind comes from a fixed list of 16 kinds and needs a subject label of 1 to 200 characters; nationality restrictions hold at most 200 entries.A check result status is REQUESTED, IN_PROGRESS, CLEARED, CLEARED_WITH_FINDINGS, FAILED, or NOT_APPLICABLE; a waived check cannot take a result.A waiver needs a reason of 1 to 20000 characters and may carry an expiry.Compliance terms patch field by field: an absent field is left alone and null clears it.A suspicious activity report needs a non-blank reference of at most 64 characters, is filed once per check, and is refused for anyone who is not the appointed reporting officer.Opening or editing the file checks the account, deal, and prior engagement ids against the workspace, and a prior engagement the caller may not see returns the same 404 as one that does not exist; an attachment on a check result must be a file of this engagement.

    These routes hold the client acceptance file for one engagement: opening it creates the screening checks its risk tier requires, results and waivers are recorded per check, and the decision accepts, accepts with conditions, or declines, with a timeline entry for every decision. Readiness returns every blocker at once, computed from what the reader may see. Members with OWNER, ADMIN, or MEMBER can read and record results, while only OWNER and ADMIN can decide, waive, or record the quality review, and only the appointed reporting officer can file a suspicious activity report; check rows mask that filing from everyone else. Editing the file and adding a check by hand are reached through the API. Every route needs the Client Delivery entitlement and the delivery scope, and an engagement or check the caller cannot see returns 404.

    Assemble, lock, and retain the working paper file

    Guarded

    Engagement workspace Working papers tab: open file, add paper, prepare and review a paper with review method, lock blockers, clear review notes with confirmation, lock, verify integrity, legal hold and release, regulator access record, and destroy with typed confirmation

    Analytics

    delivery-working-papers-*delivery-work-paper-*

    App API

    GET /v1/engagements/{engagementId}/working-papersPOST /v1/engagements/{engagementId}/working-papersPATCH /v1/engagements/{engagementId}/working-papersGET /v1/engagements/{engagementId}/working-papers/readinessGET /v1/engagements/{engagementId}/working-papers/verifyPOST /v1/engagements/{engagementId}/working-papers/clear-review-notesPOST /v1/engagements/{engagementId}/working-papers/lockPOST /v1/engagements/{engagementId}/working-papers/holdPOST /v1/engagements/{engagementId}/working-papers/release-holdPOST /v1/engagements/{engagementId}/working-papers/regulator-accessPOST /v1/engagements/{engagementId}/working-papers/destroyGET /v1/engagements/{engagementId}/working-papers/papersPOST /v1/engagements/{engagementId}/working-papers/papersPOST /v1/engagements/{engagementId}/working-papers/papers/{childId}/preparePOST /v1/engagements/{engagementId}/working-papers/papers/{childId}/review

    MCP target

    atlas_delivery_engagements_working_paper_file_createatlas_delivery_engagements_working_paper_file_getatlas_delivery_engagements_working_paper_file_readiness_getatlas_delivery_engagements_working_paper_file_updateatlas_delivery_engagements_working_paper_file_verifyatlas_delivery_engagements_working_paper_holds_createatlas_delivery_engagements_working_papers_createatlas_delivery_engagements_working_papers_list

    Validation

    One file per engagement: opening a second is refused with 400. Assembly standard is ISA_230, PCAOB_AS_1215, or FIRM_POLICY; retention is 1 to 100 years (default 7); storage jurisdiction is a two-letter code.A locked file cannot be edited or have its review notes confirmed, and it cannot be unlocked or locked again.Locking is refused with 400 listing every blocker: no papers, paper violations, open must-fix notes, unconfirmed review notes, or an incomplete completeness checklist.Clearing review notes requires confirmed set to true and is refused while any must-fix note is open.A paper section is 1 to 8 characters and title 1 to 300 characters; adding a paper after the lock needs a recorded reason and approver.A review method is SIGN_OFF, TICKMARK, ANNOTATION, or MEETING, and the preparer cannot review their own paper.Hold and release each need a reason; regulator access needs the regulator name and a scope of up to 2000 characters.Destroy requires the confirmation word DESTROY and is refused while a legal hold is in place, when the file was never locked, or before the retention period ends.Clearing review notes, locking, holds, regulator access, and destroying need the OWNER or ADMIN role.An attachment named on a new paper must be a file of this engagement, or the request returns 404.

    These routes keep the working paper file for one engagement: open it with its assembly standard and retention period, add, prepare, and review papers, confirm review notes are cleared, and lock the file with an integrity seal that the verify route recomputes and records. Legal holds, regulator access, post-lock additions, and destruction are each recorded with an audit entry, and a legal hold always blocks destruction. Updating file settings is reached through the API. Members with OWNER, ADMIN, or MEMBER can read the file and add, prepare, and review papers, while only OWNER and ADMIN can perform the custody actions; every route needs the Client Delivery entitlement and the delivery scope, and an engagement or paper the caller cannot see returns 404.

    Download an engagement export

    Guarded

    Engagement workspace header export menu: artifact picker, deliverable picker for single-record exports, internal or client edition, and download button that waits for a large export to finish

    Analytics

    delivery-export-menu-*delivery-engagement-export

    App API

    GET /v1/engagements/{engagementId}/exportsGET /v1/engagements/{engagementId}/exports/{artifact}GET /v1/engagements/{engagementId}/exports/jobsPOST /v1/engagements/{engagementId}/exports/jobsGET /v1/engagements/{engagementId}/exports/jobs/{jobId}GET /v1/engagements/{engagementId}/exports/jobs/{jobId}/download

    MCP target

    atlas_delivery_engagements_export_jobs_createatlas_delivery_engagements_export_jobs_downloadatlas_delivery_engagements_export_jobs_getatlas_delivery_engagements_export_jobs_listatlas_delivery_engagements_exports_listatlas_delivery_engagements_exports_render

    Validation

    Artifact is 1 to 48 characters and must be in the export catalogue; format is 1 to 8 characters and must be one the artifact supports.A CLIENT edition is refused for an artifact that has no client variant.A single-record artifact needs a subject on the engagement, and a register artifact refuses a subject.A requester may have only a capped number of exports queued or running; one more is refused with 400.A direct download that is too large is answered with 202 and an export job instead of the file.Jobs are scoped to the tenant, the requester, and the engagement in the path; another person's job, or a job on another engagement, returns 404.A download link is issued once and expires; an expired or already used download returns 410, and a job not ready returns 404.Listing, reading, and downloading a job each check again that the caller may see the engagement, so a barrier raised or a grant revoked after the request refuses the read with 404.

    These routes list the export catalogue, render an artifact for one engagement in the requested format and edition, and run larger renders as background jobs that the requester polls and downloads once through a short-lived link. Requesting a job needs export access and writes an audit record. Listing jobs and requesting one directly are reached through the API; the screen polls the job and downloads it when the direct render is routed to a job. Callers need the OWNER, ADMIN, or MEMBER role, the Client Delivery entitlement, and the delivery read or write scope, and an engagement the caller cannot see is refused before any job is written, listed, read, or downloaded. The job list returns the requester's 25 most recent jobs on this engagement only.

    Track independence, partner rotation, and non-audit fee caps on an engagement

    Live

    Engagement workspace Closure tab: independence declaration list with gap flags, rotation register with the add-person form (person, rule, role, first year, years served), non-audit service register form (description, rationale, pre-approval reference, fee, currency), and the fee-cap position panel with audit fee and public interest entity inputs

    Analytics

    delivery-independence-*delivery-rotation-*delivery-non-audit-*delivery-fee-cap-*

    App API

    GET /v1/engagements/{engagementId}/independence-declarationsPOST /v1/engagements/{engagementId}/independence-declarationsGET /v1/engagements/rotation-rulesGET /v1/engagements/rotation-registerPOST /v1/engagements/rotation-registerGET /v1/engagements/{engagementId}/non-audit-servicesPOST /v1/engagements/{engagementId}/non-audit-servicesGET /v1/engagements/{engagementId}/fee-caps

    MCP target

    atlas_delivery_engagements_fee_caps_calculateatlas_delivery_engagements_independence_declarations_listatlas_delivery_engagements_independence_declarations_recordatlas_delivery_engagements_non_audit_services_listatlas_delivery_engagements_non_audit_services_recordatlas_delivery_engagements_rotation_register_listatlas_delivery_engagements_rotation_register_recordatlas_delivery_engagements_rotation_rules_list

    Validation

    A declaration needs personId and a declarationType of ANNUAL, ENGAGEMENT_SPECIFIC, or EVENT_TRIGGERED; breachDetail and remedialAction are at most 4000 characters.A declaration that sets breachIdentified must describe the breach in breachDetail, or it is refused.A rotation entry needs personId, clientId, role (at most 80 characters), jurisdictionRuleId (at most 64 characters), and an integer firstYearServed; yearsServed is at least 1 when given.A rotation entry naming a jurisdictionRuleId that is not in the rotation rule catalogue is refused.A non-audit service needs a serviceDescription of 1 to 4000 characters that is not blank; currency is exactly 3 characters and preApprovalReference is at most 120 characters.The fee-cap position reads auditFeesThreeYear, totalFeeDependencyPercent, and publicInterestEntity from the query string.Callers need the client-delivery view permission to read and create permission to write; a token needs the delivery:read or delivery:write scope.Every read and write is scoped to the caller's workspace.A rotation entry's clientId must name a CRM account in the caller's workspace, or it is refused with 404.An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    These routes keep the independence record for an engagement: independence declarations, the partner rotation register for a client with its rule catalogue, and the register of non-audit services that feeds the fee-cap position. Only workspace owners, admins, and members may call them, checked both by the route guard and again in the service, so a client portal guest is refused. The Closure tab reads declarations and the rotation register and records rotation entries and non-audit services; recording a new declaration is available through the API only. A breach flagged without detail, an unknown rotation rule, and a blank non-audit description are refused. Every engagement-keyed route first checks that the caller may see the engagement, and a rotation entry naming a client account outside the workspace is refused.

    Run the engagement quality review and settle differences of opinion before dating the report

    Live

    Engagement workspace Closure tab: quality reviewer appointment with trigger reason, unresolved matters count and save, complete review button, difference of opinion raise and resolve forms, and the report dating verdict with every refusal listed

    Analytics

    delivery-eqr-*delivery-difference-*delivery-report-dating-*

    App API

    GET /v1/engagements/{engagementId}/quality-reviewPOST /v1/engagements/{engagementId}/quality-reviewPOST /v1/engagements/{engagementId}/quality-review/{reviewId}/mattersPOST /v1/engagements/{engagementId}/quality-review/{reviewId}/completeGET /v1/engagements/{engagementId}/differences-of-opinionPOST /v1/engagements/{engagementId}/differences-of-opinionPOST /v1/engagements/{engagementId}/differences-of-opinion/{differenceId}/resolveGET /v1/engagements/{engagementId}/report-dating-readiness

    MCP target

    atlas_delivery_engagements_differences_of_opinion_listatlas_delivery_engagements_differences_of_opinion_recordatlas_delivery_engagements_quality_review_getatlas_delivery_engagements_report_dating_readiness_get

    Validation

    An appointment needs a triggerReason of LISTED_ENTITY, LAW_OR_REGULATION, FIRM_POLICY, HIGH_RISK_RATING, FIRST_YEAR, RESTATEMENT_HISTORY, or SIGNIFICANT_JUDGMENT, plus reviewerId, appointedById, and engagementPartnerId.The engagement partner cannot appoint the quality reviewer and cannot be the quality reviewer.A former engagement partner can act as reviewer only after the cooling-off period has passed.unresolvedMatters is an integer of zero or more.A review cannot complete while any matter is unresolved, or on or after the report date; completionStatement is at most 4000 characters.A difference of opinion needs a nature of 1 to 4000 characters that is not blank; escalationPathUsed is at most 200 characters.Resolving a difference needs a resolution of 1 to 4000 characters that is not blank; dissentRecorded is at most 4000 characters.A review or difference id that does not belong to this engagement in the caller's workspace returns 404.Callers need the client-delivery view, create, or update permission for the action, and a token needs delivery:read or delivery:write.An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    These routes run the engagement quality review: appoint a reviewer, record how many matters remain unresolved, complete the review, raise and resolve differences of opinion, and read every reason the report cannot be dated yet in one call. Only workspace owners, admins, and members may call them; a client portal guest is refused at the route and again in the service. The service refuses an appointment where the engagement partner appoints or reviews their own engagement, refuses completion while matters are unresolved or once the report date has passed, and returns 404 for a review or difference from another engagement or workspace. Resolved differences stay in the register as the record that they happened.

    Chase actions and people with follow-ups on an engagement

    Live

    Engagement workspace Follow-ups tab: add follow-up form (kind, title, due date, lead time), the list of follow-ups with acknowledge, complete, pause, snooze, and cancel actions, the due and mine views, and the automatic rule toggles

    Analytics

    delivery-follow-up*

    App API

    GET /v1/engagements/{engagementId}/follow-upsPOST /v1/engagements/{engagementId}/follow-upsGET /v1/engagements/{engagementId}/follow-ups/dueGET /v1/engagements/{engagementId}/follow-ups/mineGET /v1/engagements/{engagementId}/follow-ups/{followUpId}PATCH /v1/engagements/{engagementId}/follow-ups/{followUpId}DELETE /v1/engagements/{engagementId}/follow-ups/{followUpId}POST /v1/engagements/{engagementId}/follow-ups/{followUpId}/acknowledgePOST /v1/engagements/{engagementId}/follow-ups/{followUpId}/completePOST /v1/engagements/{engagementId}/follow-ups/{followUpId}/pausePOST /v1/engagements/{engagementId}/follow-ups/{followUpId}/resumePOST /v1/engagements/{engagementId}/follow-ups/{followUpId}/snoozeGET /v1/engagements/{engagementId}/follow-ups/{followUpId}/runs

    MCP target

    atlas_delivery_engagements_follow_ups_acknowledgeatlas_delivery_engagements_follow_ups_cancelatlas_delivery_engagements_follow_ups_completeatlas_delivery_engagements_follow_ups_createatlas_delivery_engagements_follow_ups_due_listatlas_delivery_engagements_follow_ups_getatlas_delivery_engagements_follow_ups_listatlas_delivery_engagements_follow_ups_mine_listatlas_delivery_engagements_follow_ups_pauseatlas_delivery_engagements_follow_ups_resumeatlas_delivery_engagements_follow_ups_runs_listatlas_delivery_engagements_follow_ups_snoozeatlas_delivery_engagements_follow_ups_update

    Validation

    kind is one of the fifteen follow-up kinds (ACTION_ITEM, RAID_REVIEW, DELIVERABLE_DUE, MEETING_PREP, DECISION_EXPIRY, THREAD_SLA, STATUS_REPORT_DUE, SIGNOFF_CHASE, STAKEHOLDER_TOUCH, INFO_REQUEST_CHASE, ASSUMPTION_VALIDATION, CONTRACT_MILESTONE, HYPERCARE_CHECK, BENEFIT_REVIEW, CUSTOM).title is required and at most 300 characters; body is at most 2000 characters.assigneePartyType is USER, CLIENT_CONTACT, or EXTERNAL; a USER assignee needs assigneeUserId, a CLIENT_CONTACT needs assigneeContactId or assigneeEmail, and an EXTERNAL assignee needs assigneeEmail.subjectType and subjectId must be given together or not at all.channels holds at least one of inapp and email; leadMinutes is 0 to 525600; escalateAfterMisses is 1 to 50; ccUserIds holds at most 50 entries.A recurrence rule has freq DAILY, WEEKLY, MONTHLY, or YEARLY and an interval of 1 to 366.Snooze needs a valid timestamp in the future.Resume is refused unless the follow-up is paused, and any change to a closed follow-up is refused.The due window is 0 to 3650 days and defaults to 14.A follow-up id that does not belong to this engagement returns 404, and the engagement must be visible to the caller through its information barrier and restricted-access grants.An escalationPathId must name an escalation path on this engagement, on create and on edit, or it is refused with 404.

    These routes create, list, edit, and act on follow-ups that chase an action or a person on an engagement, including what is due soon and what the caller personally owes. Only workspace owners, admins, and members may call them, with the client-delivery view, create, update, or delete permission for each action, and a token needs delivery:read or delivery:write. DELETE cancels the follow-up rather than removing it, so the record that a chase was called off remains. The runs route is read only, because delivery records are written by the background sender. The service refuses an engagement the caller cannot see behind an information barrier, a follow-up from another engagement, a snooze into the past, and any change to a closed follow-up. The background sender asks whether each recipient may see the engagement before it emails them, notifies them in the app, or tells them about an escalation; a recipient who may not is skipped, and the run records the skip.

    Collect client feedback and handle complaints on an engagement

    Live

    Engagement workspace Client voice tab: request feedback form (kind, respondent, anonymous), record response form (score, verbatim), consent to quote and reference toggles, follow-up complete action, quotable verbatims list, and the complaint register with raise, acknowledge, resolve, close, and escalate actions

    Analytics

    delivery-feedback-*delivery-complaint-*delivery-voice-*

    App API

    GET /v1/engagements/{engagementId}/feedbackPOST /v1/engagements/{engagementId}/feedbackGET /v1/engagements/{engagementId}/feedback/follow-upGET /v1/engagements/{engagementId}/feedback/quotablePOST /v1/engagements/{engagementId}/feedback/{feedbackId}/responsePOST /v1/engagements/{engagementId}/feedback/{feedbackId}/consentPOST /v1/engagements/{engagementId}/feedback/{feedbackId}/follow-up-completeGET /v1/engagements/{engagementId}/complaintsPOST /v1/engagements/{engagementId}/complaintsPOST /v1/engagements/{engagementId}/complaints/{complaintId}/acknowledgePOST /v1/engagements/{engagementId}/complaints/{complaintId}/resolvePOST /v1/engagements/{engagementId}/complaints/{complaintId}/closePOST /v1/engagements/{engagementId}/complaints/{complaintId}/escalate

    MCP target

    atlas_delivery_engagements_complaints_acknowledgeatlas_delivery_engagements_complaints_closeatlas_delivery_engagements_complaints_createatlas_delivery_engagements_complaints_escalateatlas_delivery_engagements_complaints_listatlas_delivery_engagements_feedback_consent_recordatlas_delivery_engagements_feedback_follow_ups_completeatlas_delivery_engagements_feedback_follow_ups_listatlas_delivery_engagements_feedback_listatlas_delivery_engagements_feedback_quotable_listatlas_delivery_engagements_feedback_requestatlas_delivery_engagements_feedback_responses_record

    Validation

    A feedback request needs kind (CSAT, NPS, CES, PULSE, EXIT_INTERVIEW, COMPLAINT, or COMPLIMENT) and respondentPartyType (USER, CLIENT_CONTACT, or EXTERNAL); respondentLabel is at most 200 characters and themes holds at most 20 entries of up to 60 characters.A response score is an integer from 0 to 10 on the wire and must sit inside the range for its kind: NPS 0 to 10, CSAT 1 to 5, CES 1 to 7, PULSE 1 to 5; kinds without a scale carry words and no score.The score band is derived by the server; a band sent by the caller is ignored.Consent to quote is refused on a response that carries no words.A complaint needs severity (LOW, MEDIUM, HIGH, CRITICAL), category (DELIVERY, QUALITY, COMMERCIAL, CONDUCT, COMMUNICATION, TIMELINESS, PEOPLE, DATA, OTHER), and a description of 1 to 8000 characters.A complaint must be acknowledged before it is resolved, and resolving needs a resolutionSummary of 1 to 8000 characters.A complaint must be resolved before it is closed, and closing needs both rootCause and preventiveAction.A closed complaint cannot be changed, and a feedback or complaint id from another engagement returns 404.Closing a complaint with a linkedRaidItemId requires a RAID item on this engagement, or it is refused with 404.

    These routes record what the client says: feedback requests and responses with consent to quote, the list of poor responses still owed a follow-up call, and the complaint register from raising to closing. Only workspace owners, admins, and members may call them, with the client-delivery view, create, or update permission, and a token needs delivery:read or delivery:write; there is no client portal counterpart. The quotable list leaves out the respondent label for anonymous respondents. The service checks that the engagement is visible to the caller, enforces the acknowledge, resolve, close order, and refuses changes to a closed complaint.

    Staff an engagement and plan its handover to the client team

    Live

    Engagement workspace People tab: raise staffing request form (role, grade, allocation, key personnel, client approval), propose, confirm, record client approval, and decline actions, the weekly capacity view, and the transition panel with knowledge transfer completion and open defects

    Analytics

    delivery-staffing-*delivery-transition-*delivery-people-capacity-*

    App API

    GET /v1/engagements/{engagementId}/staffing-requestsPOST /v1/engagements/{engagementId}/staffing-requestsGET /v1/engagements/{engagementId}/staffing-requests/ramped-allocationsPOST /v1/engagements/{engagementId}/staffing-requests/{requestId}/proposePOST /v1/engagements/{engagementId}/staffing-requests/{requestId}/confirmPOST /v1/engagements/{engagementId}/staffing-requests/{requestId}/client-approvalPOST /v1/engagements/{engagementId}/staffing-requests/{requestId}/declineGET /v1/engagements/{engagementId}/transition-planPUT /v1/engagements/{engagementId}/transition-planPOST /v1/engagements/{engagementId}/transition-plan/knowledge-transfer/complete

    MCP target

    atlas_delivery_engagements_staffing_requests_allocations_listatlas_delivery_engagements_staffing_requests_createatlas_delivery_engagements_staffing_requests_listatlas_delivery_engagements_staffing_requests_recommendatlas_delivery_engagements_transition_plan_getatlas_delivery_engagements_transition_plan_set

    Validation

    A staffing request needs roleGrade (1 to 48 characters, not blank) and a role from the engagement role list; skills holds at most 30 entries.allocationPercent must be greater than 0 and no more than 100, and defaults to 100.A rampProfileId must name a ramp profile on the same engagement.Propose needs a userId and is refused on a closed request; a person refused by the export control check cannot be proposed.Confirm is refused until somebody is proposed, and a key-personnel role that requires client approval cannot be confirmed before the approval is recorded.Decline needs a reason of 1 to 2000 characters.The ramped-allocations week is an integer from 1 to 520.A transition plan needs targetTeam (1 to 200 characters); hypercare and warranty windows must parse and must not end before they start.A staffing request id from another engagement returns 404, and completing knowledge transfer without a transition plan returns 404.An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    These routes raise and progress staffing requests for an engagement, report planned capacity for a week after ramp-up, and keep the single transition plan that hands the work to the client team. Only workspace owners, admins, and members may call them, with the client-delivery view, create, or update permission, and a token needs delivery:read or delivery:write. PUT on the transition plan edits the one plan for the engagement rather than adding another. The service refuses confirmation without a proposed person or a required client approval, refuses a proposal the export control check rules out, and refuses invalid hypercare or warranty windows. Every route first checks that the caller may see the engagement.

    Request, approve, and record expert network calls on an engagement

    Live

    Engagement workspace Expert calls tab: request form (network, expert reference, topic, justification, compliance flags), approve with chaperone, record as held, flag an incident with a reason, and the compliance review of open incidents

    Analytics

    delivery-expert-call-*

    App API

    GET /v1/engagements/{engagementId}/expert-callsPOST /v1/engagements/{engagementId}/expert-callsGET /v1/engagements/{engagementId}/expert-calls/open-incidentsGET /v1/engagements/{engagementId}/expert-calls/{callId}PATCH /v1/engagements/{engagementId}/expert-calls/{callId}POST /v1/engagements/{engagementId}/expert-calls/{callId}/approvePOST /v1/engagements/{engagementId}/expert-calls/{callId}/holdPOST /v1/engagements/{engagementId}/expert-calls/{callId}/incidentPOST /v1/engagements/{engagementId}/expert-calls/{callId}/compliance-review

    MCP target

    atlas_delivery_engagements_expert_calls_completeatlas_delivery_engagements_expert_calls_getatlas_delivery_engagements_expert_calls_incidents_createatlas_delivery_engagements_expert_calls_incidents_listatlas_delivery_engagements_expert_calls_listatlas_delivery_engagements_expert_calls_requestatlas_delivery_engagements_expert_calls_update

    Validation

    A request needs network (1 to 48 characters), expertRef (1 to 120 characters), and topic (1 to 300 characters); the network must be one Atlas recognises.complianceFlags holds at most 20 entries and each must be a recognised flag; hypothesisIds holds at most 50 entries.paymentRoute, when given, must be VIA_NETWORK; paying an expert directly is refused.A request is refused once the expert has reached the annual cap of 4 held calls.Approval is refused from the person who requested the call and refused after the call has been held.A call cannot be recorded as held until it is approved, and a call carrying compliance flags needs a named chaperone first.Held calls take durationMin of 1 to 600 and at most 30 attendees.A call id that does not belong to this engagement returns 404.Every hypothesisIds entry must name a hypothesis on this engagement, and a notesAttachmentId given on edit or when recording the call as held must name an attachment on this engagement; otherwise the request is refused with 404.

    These routes keep the register of expert network calls for an engagement: request a call, edit it, have somebody else approve it, record it as held, flag an incident where material non-public information came up, and record the compliance review of that incident. Callers need the client-delivery view, create, or update permission, and the service allows only workspace owners, admins, and members, so a client portal guest is refused; a token needs delivery:read or delivery:write. The service refuses self-approval, approval after the call, holding an unapproved call, a flagged call without a chaperone, direct payment, and a fifth held call with the same expert in a year.

    Raise information barriers, approve wall crossings, and keep the insider list

    Live

    Engagement workspace Barriers tab: raise barrier form (type, code name, reason), wall crossing form with purpose, close crossing action, insider list with add form (name, function and reason) and notified and acknowledged steps

    Analytics

    delivery-barrier-*delivery-insider-*delivery-barriers-read-faileddelivery-crossings-read-faileddelivery-insiders-read-failed

    App API

    GET /v1/engagements/{engagementId}/barriersPOST /v1/engagements/{engagementId}/barriersGET /v1/engagements/{engagementId}/barriers/crossingsPOST /v1/engagements/{engagementId}/barriers/crossingsPOST /v1/engagements/{engagementId}/barriers/crossings/{crossingId}/closeGET /v1/engagements/{engagementId}/barriers/nameGET /v1/engagements/{engagementId}/barriers/insidersPOST /v1/engagements/{engagementId}/barriers/insidersPOST /v1/engagements/{engagementId}/barriers/insiders/{entryId}/obligation

    MCP target

    atlas_delivery_engagements_barriers_crossings_closeatlas_delivery_engagements_barriers_crossings_listatlas_delivery_engagements_barriers_insiders_addatlas_delivery_engagements_barriers_insiders_listatlas_delivery_engagements_barriers_insiders_obligation_recordatlas_delivery_engagements_barriers_listatlas_delivery_engagements_barriers_name_get

    Validation

    barrierType is ETHICAL, DEAL, REGULATORY, COMPETITOR, or LITIGATION; reason is at most 4000 characters and codeName at most 120.Each side and the excluded list hold at most 500 party keys; a party on both sides is refused as a side conflict.A wall crossing needs barrierId, partyKey, approverPartyKey, and a purpose of 1 to 4000 characters, and the barrier must be active.An insider entry needs partyKey, fullName (1 to 200 characters), and functionAndReason (1 to 4000 characters).The obligation step is notified or acknowledged, and acknowledgement before notification is refused.A barrier, crossing, or insider entry from another engagement returns 404.The name route decides from the authenticated caller whether to return the real name or the code name; it takes no viewer parameter.A caller cannot record their own wall crossing, and the approver must be the account of a live owner or administrator of the workspace who is not the person crossing.A barrier raised here protects its own engagement; when enforcementPoints is omitted it applies to the engagement records, the client portal, and the search index, and an explicit list is kept as given.Every route except the name route returns the engagement 404 to a caller who cannot see the engagement, or who is excluded by an active barrier on it without an open crossing.The name route returns the engagement 404 to a caller who cannot see the engagement.

    These routes raise information barriers on an engagement, record who is let through a barrier and on whose authority, close crossings, keep the insider list with its separate notification and acknowledgement steps, and return the name a caller is entitled to see. Only workspace owners, admins, and members may call them, with the client-delivery view, create, or update permission, and a token needs delivery:read or delivery:write; a client portal guest is refused. A member excluded by an active barrier on the engagement, without an open crossing, cannot read or administer that barrier and receives the same 404 as for an engagement that does not exist. Crossings are append-only, cannot be recorded by the person crossing, and must be approved by a workspace owner or administrator other than that person. The service refuses side conflicts, crossings on an inactive barrier, unnamed insiders, and out-of-order acknowledgements.

    Draft status reports, minutes, and register items with the engagement assistant

    Configured

    Engagement workspace Assistant tab: propose a status report draft, minutes from a meeting, RAID items from meetings, a deliverable pre-check, or a health explanation; pick the parts to keep and accept or decline the proposal, with provenance shown beside it

    Analytics

    delivery-assistant-*

    App API

    GET /v1/engagements/{engagementId}/ai-draftsGET /v1/engagements/{engagementId}/ai-drafts/{draftId}POST /v1/engagements/{engagementId}/ai-drafts/status-reportPOST /v1/engagements/{engagementId}/ai-drafts/minutesPOST /v1/engagements/{engagementId}/ai-drafts/raidPOST /v1/engagements/{engagementId}/ai-drafts/deliverable-qaPOST /v1/engagements/{engagementId}/ai-drafts/health-explanationPOST /v1/engagements/{engagementId}/ai-drafts/{draftId}/acceptPOST /v1/engagements/{engagementId}/ai-drafts/{draftId}/reject

    MCP target

    atlas_delivery_engagements_ai_drafts_deliverable_qa_generateatlas_delivery_engagements_ai_drafts_getatlas_delivery_engagements_ai_drafts_health_explanation_generateatlas_delivery_engagements_ai_drafts_listatlas_delivery_engagements_ai_drafts_minutes_generateatlas_delivery_engagements_ai_drafts_raid_items_generateatlas_delivery_engagements_ai_drafts_rejectatlas_delivery_engagements_ai_drafts_status_report_generate

    Validation

    The list filters by kind and by status (PROPOSED, ACCEPTED, REJECTED, SUPERSEDED), with a limit of 1 to 200.A status report draft needs statusReportId, minutes need meetingId, and a deliverable pre-check needs deliverableId.A RAID proposal takes at most 10 meetingIds and 20 threadIds and is refused when none are named or the named sources carry no text.Minutes are refused when the meeting has no completed transcript, and a pre-check is refused when the deliverable has no acceptance criteria.Accept needs keys with 1 to 50 entries naming exactly what to keep; there is no default that takes everything.A draft already accepted, rejected, or superseded cannot be accepted or rejected, and advisory drafts (pre-check and health explanation) cannot be accepted.A reject note is at most 1000 characters.Drafting is refused when no model provider is configured or when the workspace daily AI budget is exhausted.

    These routes ask the configured model provider for drafts on an engagement and keep each proposal until a person decides it: status report prose, meeting minutes, proposed RAID items, a deliverable pre-check against its acceptance criteria, and an explanation of the health score. Only workspace owners, admins, and members may call them; producing a draft needs the client-delivery create permission because it spends the AI budget, and accepting or rejecting needs update, with a token carrying delivery:read or delivery:write. Accept is the only route that lets model output reach a register, and it writes only the keys named. The service refuses drafts without a configured provider or budget, and refuses a second decision on a draft that is already decided.

    Harvest reusable assets from an engagement and clear them for reuse

    Live

    Engagement workspace Assets tab: harvest form (kind, title, description, client consent required), sanitise, record consent, and reuse actions on each asset

    Analytics

    delivery-asset-*

    App API

    GET /v1/engagements/{engagementId}/assetsPOST /v1/engagements/{engagementId}/assetsPOST /v1/engagements/{engagementId}/assets/{assetId}/sanitisePOST /v1/engagements/{engagementId}/assets/{assetId}/consentPOST /v1/engagements/{engagementId}/assets/{assetId}/reuse

    MCP target

    atlas_delivery_engagements_assets_consent_recordatlas_delivery_engagements_assets_createatlas_delivery_engagements_assets_listatlas_delivery_engagements_assets_reuse_record

    Validation

    kind is TEMPLATE, MODEL, CODE, DATASET, METHODOLOGY, CREDENTIAL, CASE_STUDY, BENCHMARK, or TRAINING.title is required, at most 300 characters, and not blank; description is at most 4000 characters.classification is PUBLIC, INTERNAL, CONFIDENTIAL, or RESTRICTED; tags hold at most 20 entries of up to 64 characters.Reuse is refused until the asset is marked sanitised, and refused when client consent is required and not recorded.An asset id that does not belong to this engagement returns 404.An attachmentId on a harvested asset must name an attachment on this engagement, or it is refused with 404.An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    These routes harvest reusable assets such as templates, models, and case studies from an engagement, mark them sanitised, record client consent, and record a reuse. Only workspace owners, admins, and members may call them, with the client-delivery view, create, or update permission, and a token needs delivery:read or delivery:write. The service refuses reuse of an asset that has not been sanitised or that needs client consent which is not on record, and refuses an asset from another engagement. Every route first checks that the caller may see the engagement.

    Record the benefits an engagement delivers and take readings against them

    Live

    Engagement workspace Benefits tab: record benefit form (type, name, measure, unit, baseline, target, attribution, double-count note) and the take reading form (date, value, source)

    Analytics

    delivery-benefit-*

    App API

    GET /v1/engagements/{engagementId}/benefitsPOST /v1/engagements/{engagementId}/benefitsPOST /v1/engagements/{engagementId}/benefits/{benefitId}/readings

    MCP target

    atlas_delivery_engagements_benefits_createatlas_delivery_engagements_benefits_listatlas_delivery_engagements_benefits_readings_record

    Validation

    type is COST_REDUCTION, REVENUE_INCREASE, RISK_REDUCTION, COMPLIANCE, CAPABILITY, CUSTOMER_EXPERIENCE, SPEED, or QUALITY.name is required, at most 300 characters, and not blank; measure is at most 300 characters, unit at most 48, and currency exactly 3.attributionPercent must be greater than 0 and no more than 100, and a benefit claiming less than 100 percent needs a doubleCountGuardNote.A reading needs asOf as a parseable date and a numeric value; source is at most 80 characters and note at most 2000.A benefit id that does not belong to this engagement returns 404.An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    These routes keep the benefits register for an engagement: record each benefit with its baseline, target, and attribution, and take dated readings against it. Only workspace owners, admins, and members may call them, with the client-delivery view or create permission, and a token needs delivery:read or delivery:write. The service refuses an attribution outside 0 to 100 percent, a partial attribution without a note on where the rest is claimed, an unparseable reading date, and a benefit from another engagement. Every route first checks that the caller may see the engagement.

    Record sanctions screening and beneficial owners for client acceptance

    Live

    Engagement workspace Screening tab: record screening form (subject, lists, provider, monitoring), hit disposition with rationale, second-person approval of true matches, beneficial owner form (name, control type, ownership percent, status), report discrepancy action, and the ownership assessment

    Analytics

    delivery-screening-*delivery-ubo-*

    App API

    GET /v1/engagements/{engagementId}/screeningPOST /v1/engagements/{engagementId}/screeningPOST /v1/engagements/{engagementId}/screening/{runId}/hits/{hitId}/dispositionPOST /v1/engagements/{engagementId}/screening/{runId}/hits/{hitId}/approveGET /v1/engagements/{engagementId}/beneficial-ownersPOST /v1/engagements/{engagementId}/beneficial-ownersPOST /v1/engagements/{engagementId}/beneficial-owners/{uboId}/discrepancyGET /v1/engagements/{engagementId}/beneficial-owners/{checkId}/ownership-assessment

    MCP target

    atlas_delivery_engagements_beneficial_owners_addatlas_delivery_engagements_beneficial_owners_assessment_getatlas_delivery_engagements_beneficial_owners_discrepancy_recordatlas_delivery_engagements_beneficial_owners_listatlas_delivery_engagements_screening_runs_listatlas_delivery_engagements_screening_runs_record

    Validation

    A screening run needs checkId, subjectType (ENTITY, INDIVIDUAL, VESSEL, or AIRCRAFT), subjectName (1 to 240 characters), and listsScreened with 1 to 40 entries.A run holds at most 500 hits, each with a name, a list, and an optional score from 0 to 1.A disposition is TRUE_MATCH, FALSE_POSITIVE, or POSSIBLE_MATCH and needs a rationale of 1 to 4000 characters.Only a true match takes a second approval, and the person who dispositioned it cannot approve it.A beneficial owner needs checkId, name (1 to 240 characters), and controlType; ownershipPercent must be between 0 and 100; PEP and sanctions status are NOT_SCREENED, CLEAR, PEP, or BLOCKED.An acceptance check, screening run, hit, or beneficial owner that does not belong to this engagement returns 404.

    These routes record sanctions and watch-list screening runs for client acceptance, disposition each hit with a reason, take a second-person approval of true matches, and keep the beneficial owners behind the client entity with an ownership assessment per acceptance check. Only workspace owners, admins, and members may call them, with the client-delivery view, create, or update permission, and a token needs delivery:read or delivery:write. The routes record the results of a screen; they do not query a screening provider themselves. The service refuses a run with no lists named, a disposition without a rationale, self-approval of a true match, and records from another engagement.

    Keep the inventory of analytical models built on an engagement and approve them for use

    Live

    Engagement workspace Models tab: record model form (name, type, tier), validation result with findings, approve for stated purposes, retire, and the include retired toggle

    Analytics

    delivery-model-*

    App API

    GET /v1/engagements/{engagementId}/modelsPOST /v1/engagements/{engagementId}/modelsGET /v1/engagements/{engagementId}/models/unvalidatedGET /v1/engagements/{engagementId}/models/{modelId}PATCH /v1/engagements/{engagementId}/models/{modelId}POST /v1/engagements/{engagementId}/models/{modelId}/validationPOST /v1/engagements/{engagementId}/models/{modelId}/approvePOST /v1/engagements/{engagementId}/models/{modelId}/retire

    MCP target

    atlas_delivery_engagements_models_archiveatlas_delivery_engagements_models_createatlas_delivery_engagements_models_getatlas_delivery_engagements_models_listatlas_delivery_engagements_models_unvalidated_listatlas_delivery_engagements_models_update

    Validation

    A model needs name (1 to 300 characters) and modelType (DETERMINISTIC_FINANCIAL, STATISTICAL, ML, OPTIMISATION, SIMULATION, RULES_ENGINE, or LLM_BASED); tier is 1, 2, or 3.On a tier 1 model the independent validator cannot be the same person as the developer.A validation result is NOT_STARTED, IN_PROGRESS, PASSED, PASSED_WITH_FINDINGS, or FAILED, with at most 500 findings.Approval must name at least one approved purpose (each up to 200 characters, at most 50) and is refused for a retired model or one whose validation has not passed.An LLM_BASED model cannot be approved without its hallucination controls recorded.A model id that does not belong to this engagement returns 404.Every assumptionIds entry on a new model must name an analytical assumption on this engagement, or the request is refused with 404.Retiring a model refuses a replacedById equal to the model itself and requires any replacedById to name a model on this engagement.

    These routes keep the inventory of analytical models built on an engagement: record and edit a model, record its validation, approve it for named purposes, retire it, and list the models still waiting on validation. Callers need the client-delivery view, create, or update permission, and the service allows only workspace owners, admins, and members; a token needs delivery:read or delivery:write. The service refuses approval with no stated purpose, approval of a retired or unvalidated model, approval of an LLM-based model without hallucination controls, and a tier 1 model whose developer validates their own work.

    Record, validate, and invalidate the analytical and pricing assumptions on an engagement

    Live

    Engagement workspace Assumptions tab: analytical assumption form (statement, variable, basis, expiry, deliverable), Validate, Revise basis, Invalidate, pricing assumption form, and Record breach with the reality and commercial impact

    Analytics

    delivery-assumption-*delivery-assumptions-*delivery-pricing-*

    App API

    GET /v1/engagements/{engagementId}/analytical-assumptionsPOST /v1/engagements/{engagementId}/analytical-assumptionsPATCH /v1/engagements/{engagementId}/analytical-assumptions/{assumptionId}POST /v1/engagements/{engagementId}/analytical-assumptions/{assumptionId}/invalidatePOST /v1/engagements/{engagementId}/analytical-assumptions/{assumptionId}/validateGET /v1/engagements/{engagementId}/pricing-assumptionsPOST /v1/engagements/{engagementId}/pricing-assumptionsPOST /v1/engagements/{engagementId}/pricing-assumptions/{assumptionId}/breach

    MCP target

    atlas_delivery_engagements_analytical_assumptions_createatlas_delivery_engagements_analytical_assumptions_listatlas_delivery_engagements_analytical_assumptions_updateatlas_delivery_engagements_analytical_assumptions_voidatlas_delivery_engagements_pricing_assumptions_breach_recordatlas_delivery_engagements_pricing_assumptions_createatlas_delivery_engagements_pricing_assumptions_list

    Validation

    Analytical statement is required and at most 4000 characters; variable name is required and at most 120 characters.Basis must be one of CLIENT_PROVIDED, BENCHMARK, EXPERT_JUDGMENT, REGRESSION, or PLACEHOLDER.A PLACEHOLDER assumption cannot be disclosed on a deliverable, on record or on revision.Validation status must be CLIENT_CONFIRMED, EXTERNALLY_BENCHMARKED, or STRESS_TESTED; a premise cannot be set back to UNVALIDATED.An invalidated assumption cannot be revised or invalidated a second time.A pricing breach requires the current reality (1 to 20000 characters) and is refused when the assumption is already breached.usedInModels and usedInExhibits hold at most 50 entries of at most 160 characters each; expiresAt must be an ISO date and time.analysisId, sourceId, and disclosedInDeliverableId must name an analysis, a source, and a deliverable on this engagement; a revision checks a disclosedInDeliverableId it carries.A pricing breach that names a changeRequestId requires a change request on this engagement.A linked record that is not on this engagement is refused with 404.

    These routes keep the analytical assumptions behind the firm's models and the pricing assumptions behind its fee. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view access to read and create or update access to write, through a token carrying delivery:read or delivery:write. Assumptions are never deleted: a premise is corrected through the patch, which changes only basis, disclosure, and expiry, or recorded as invalid. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    Issue reliance letters and accept reliance on a specialist for an engagement

    Live

    Engagement workspace Reliance tab: reliance letter form (relying party, relationship, cap, aggregate cap), Issue letter, aggregate exposure figure, specialist reliance form (type, identity, evaluation), and Accept specialist

    Analytics

    delivery-reliance-*

    App API

    GET /v1/engagements/{engagementId}/reliance-lettersPOST /v1/engagements/{engagementId}/reliance-lettersPOST /v1/engagements/{engagementId}/reliance-letters/{letterId}/issueGET /v1/engagements/{engagementId}/reliance-letters/exposureGET /v1/engagements/{engagementId}/third-party-reliancePOST /v1/engagements/{engagementId}/third-party-reliancePOST /v1/engagements/{engagementId}/third-party-reliance/{relianceId}/accept

    MCP target

    atlas_delivery_engagements_reliance_letters_draftatlas_delivery_engagements_reliance_letters_exposure_getatlas_delivery_engagements_reliance_letters_listatlas_delivery_engagements_third_party_reliance_listatlas_delivery_engagements_third_party_reliance_record

    Validation

    Relying party is required (at most 300 characters) and the relationship must be LENDER, INVESTOR, ACQUIRER, INSURER, REGULATOR, or CLIENT_AUDITOR.Money fields are strings of at most 32 characters and currency is a three-letter code.A letter that has already been issued cannot be issued again.Issuing is refused when the letters already issued plus this one would exceed the aggregate cap across all relying parties.Specialist type must be VALUER, ACTUARY, TAX, IT, LEGAL_COUNSEL, TRANSLATOR, ENVIRONMENTAL, QUANTITY_SURVEYOR, or OTHER_FIRM_AUDIT; identity is required and at most 300 characters.Accepting a specialist reliance requires a written evaluation of their work, and is refused when the reliance is marked for disclosure in the report without their consent to be referenced.Every deliverableIds entry on a reliance letter must name a deliverable on this engagement, or the letter is refused with 404.

    These routes record reliance letters the firm issues to third parties, add up the exposure across issued letters, and record the firm's own reliance on outside specialists. Callers need client delivery view access to read, create access to record, and update access to issue or accept, with the delivery:read or delivery:write scope; the service admits workspace owners, admins, and members only. Caps are summed exactly in minor units before a letter is issued. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    Model team ramp curves and certify the return or destruction of client data

    Live

    Engagement workspace Disposition tab: ramp profile form (curve type, weekly productivity, handover billable), effective allocation by week, data disposition form (dataset, client instruction, locations), and Certify destruction with method and backups scope

    Analytics

    delivery-ramp-*delivery-disposition-*

    App API

    GET /v1/engagements/{engagementId}/data-dispositionsPOST /v1/engagements/{engagementId}/data-dispositionsPOST /v1/engagements/{engagementId}/data-dispositions/{dispositionId}/certify-destructionGET /v1/engagements/{engagementId}/data-dispositions/outstandingGET /v1/engagements/{engagementId}/ramp-profilesPOST /v1/engagements/{engagementId}/ramp-profilesGET /v1/engagements/{engagementId}/ramp-profiles/{rampId}/effective-allocation

    MCP target

    atlas_delivery_engagements_data_dispositions_createatlas_delivery_engagements_data_dispositions_listatlas_delivery_engagements_data_dispositions_outstanding_listatlas_delivery_engagements_ramp_profiles_allocation_calculateatlas_delivery_engagements_ramp_profiles_createatlas_delivery_engagements_ramp_profiles_list

    Validation

    Curve type must be LINEAR, S_CURVE, STEP, FRONT_LOADED, or TAIL.productivityByWeek must hold between 1 and 104 whole-number percentages, each between 0 and 100.Effective allocation takes an allocation between 0 and 1 and a week between 1 and 520.Client instruction must be RETURN, DESTROY, RETAIN_PER_CONTRACT, or RETAIN_PER_LAW, and at least one location (at most 30) is required.Destruction method must be NIST_800_88_CLEAR, NIST_800_88_PURGE, NIST_800_88_DESTROY, or CRYPTO_SHREDDING.A destruction cannot be certified twice, must include backups when the disposition lists a backup location, and is refused while a retention conflict has no recorded legal basis.A ramp profile's teamMemberId must name a team member on this engagement, and a certificateAttachmentId on a destruction certificate must name an attachment on this engagement; otherwise the request is refused with 404.

    These routes record how productive a team member is week by week on an engagement and what must happen to each client dataset when the work ends. The outstanding list returns every RETURN or DESTROY instruction not yet done. Callers need client delivery view, create, or update access and the delivery:read or delivery:write scope, and the service admits workspace owners, admins, and members only. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    Review benchmark exhibits for competition law before they reach a deliverable

    Live

    Engagement workspace Structuring tab: benchmarks panel with the unreviewed count, per-benchmark review button, review note field, and Submit review

    Analytics

    delivery-benchmark-review-*delivery-structuring-benchmarks-review-note

    App API

    GET /v1/engagements/{engagementId}/benchmarksPOST /v1/engagements/{engagementId}/benchmarks/{benchmarkId}/competition-law-review

    MCP target

    atlas_delivery_engagements_benchmarks_list

    Validation

    The list accepts unreviewedOnly as true or false, an optional deliverableId, and a limit between 1 and 500.A competition-law review requires a note of 1 to 20000 characters that is not blank after trimming.The review records the acting user and the current time; neither can be supplied by the caller.Only workspace owners and admins may record a review, and the route requires client delivery admin access.

    These routes list the benchmark register for an engagement and record the competition-law review that clears a benchmark for disclosure. Reading needs client delivery view access and the delivery:read scope; recording a review needs admin access, the delivery:write scope, and the OWNER or ADMIN workspace role. A benchmark that does not belong to the engagement returns 404, and an engagement the caller cannot see returns the module 404.

    Engagement benchmark register API

    Live

    REST API with a personal access token that carries the delivery:write scope

    Analytics

    docs.actions.registry.client-delivery.engagement-benchmark-register-api

    App API

    POST /v1/engagements/{engagementId}/benchmarksDELETE /v1/engagements/{engagementId}/benchmarks/{benchmarkId}PATCH /v1/engagements/{engagementId}/benchmarks/{benchmarkId}POST /v1/engagements/{engagementId}/benchmarks/{benchmarkId}/attachPOST /v1/engagements/{engagementId}/benchmarks/{benchmarkId}/detach

    MCP target

    atlas_delivery_engagements_benchmarks_createatlas_delivery_engagements_benchmarks_deleteatlas_delivery_engagements_benchmarks_linkatlas_delivery_engagements_benchmarks_unlinkatlas_delivery_engagements_benchmarks_update

    Validation

    Metric name is required (at most 200 characters) and the metric definition is required (at most 20000 characters).Decimal values such as clientValue and the gaps are strings with up to 18 digits and 4 decimal places.Client percentile is a whole number from 0 to 100 and sample size is from 0 to 1000000.Neither the create nor the patch can write the competition-law review fields or the deliverable link.Attaching to a deliverable requires a deliverable on the same engagement and is refused with 409 until the competition-law review is recorded.Removal is a soft delete that also clears the deliverable link.A dataSourceId given on create or edit must name a source on this engagement, or the request is refused with 404.

    These routes create, edit, attach, detach, and retire benchmark exhibits on an engagement; no screen calls them yet. Creating needs client delivery create access, editing, attaching, and detaching need update access, and removing needs delete access, each with the delivery:write scope and the OWNER, ADMIN, or MEMBER workspace role. Detaching needs no review because it can only reduce what is disclosed. A benchmark or engagement the caller cannot reach returns 404.

    Record the sales handoff and accept, query, or return it to sales

    Live

    Engagement workspace Handoff tab: Start handoff, sold scope and commitments form, Submit for review, Request information with detail, Return to sales with reason and renegotiation flag, and Accept handoff

    Analytics

    delivery-handoff-*

    App API

    GET /v1/engagements/{engagementId}/handoffPUT /v1/engagements/{engagementId}/handoffPOST /v1/engagements/{engagementId}/handoff/acceptPOST /v1/engagements/{engagementId}/handoff/request-infoPOST /v1/engagements/{engagementId}/handoff/returnPOST /v1/engagements/{engagementId}/handoff/submit

    MCP target

    atlas_delivery_engagements_handoff_information_request

    Validation

    Price pressure must be NONE, MODERATE, or SEVERE; currency is a three-letter code; the list fields hold at most 200 entries.An accepted handoff cannot be edited, submitted, queried, returned, or accepted again.Submit is allowed only from DRAFT, RETURNED_TO_SALES, or INFO_REQUESTED.Request information, return, and accept are allowed only from PENDING_DELIVERY_REVIEW or INFO_REQUESTED.A request for information needs a detail and a return needs a rejection reason (1 to 20000 characters each, not blank).Accept requires client delivery admin access.accountId and dealId must name a CRM account and a CRM deal in the caller's workspace, or the request is refused with 404.

    These routes hold the one sales-to-delivery handoff record per engagement and move it through review. Accepting it seeds the pricing assumptions register, RAID risks from the pursuit, staffing requests from the sold team shape, and RAID assumptions from verbal commitments, which is why it happens exactly once. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view or update access, or admin access for accept, and the delivery:read or delivery:write scope. Reading an engagement with no handoff returns null, and acting on a handoff that was never recorded returns 404.

    Import engagements, contacts, RAID items, plan items, or stakeholders from a spreadsheet

    Live

    Delivery Imports screen and the engagement Imports tab: import wizard with target choice, file input, column mapping, Create missing accounts, Dry run, Preview, and Commit

    Analytics

    delivery-importsdelivery-engagement-imports

    App API

    POST /v1/engagement-imports/commitPOST /v1/engagement-imports/inspectPOST /v1/engagement-imports/previewGET /v1/engagement-imports/targets

    MCP target

    No agent tool

    Validation

    Target must be one of the importer targets returned by the targets route; every target except engagements and contacts requires an engagementId.A file is at most 5 MB, 2000 rows, 100 columns, and 8000 characters per cell; the file name is at most 260 characters.The column mapping maps field names (at most 64 characters) to a column index from -1 (not mapped) to 99.Rows already present under the target idempotency key are not imported a second time.Each user may make 60 import calls at once and then one a second; past that the request returns 429.An import is refused when the workspace register is too large for the importer to check for duplicates in one pass.A row whose engagement code already exists is skipped; when that engagement is hidden from the caller, the plan does not return its id.

    These routes describe the import targets, read an uploaded workbook or separated text file, preview what an import would write, and commit it (or, with dryRun, stop after reporting). Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view access for the targets and create access for the rest, under the delivery:read or delivery:write scope. Preview writes only an audit record. An engagement the caller cannot see returns 404, and an unreadable or oversized file is refused with a plain explanation.

    Carry the stakeholders and team from a linked project into an engagement

    Live

    Engagement workspace Imports tab: Stakeholders and Team checkboxes, Dry run, and Carry across

    Analytics

    delivery-engagement-imports-project*

    App API

    POST /v1/engagement-imports/from-project/{engagementId}

    MCP target

    No agent tool

    Validation

    At least one of includeStakeholders or includeTeam must be selected.The engagement must be linked to a delivery project, and that project must still exist in the workspace.dryRun reports what would be carried across without writing it.The engagement identifier is 1 to 64 characters.

    This route reads the delivery project linked to an engagement and copies its stakeholders, its team, or both onto the engagement. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery create access and the delivery:write scope. It refuses an engagement with no linked project, a linked project that no longer exists, and an engagement the caller cannot see (404).

    Work through the closure checklist on an engagement

    Live

    Engagement workspace Closure tab: closure items panel with Seed checklist, Complete, Waive with reason and confirm, Reopen, and derived item markers

    Analytics

    delivery-closure-*

    App API

    GET /v1/engagements/{engagementId}/closure/itemsPOST /v1/engagements/{engagementId}/closure/items/{itemId}/completePOST /v1/engagements/{engagementId}/closure/items/{itemId}/reopenPOST /v1/engagements/{engagementId}/closure/items/{itemId}/waivePOST /v1/engagements/{engagementId}/closure/items/seed

    MCP target

    atlas_delivery_engagements_closure_items_generateatlas_delivery_engagements_closure_items_listatlas_delivery_engagements_closure_items_reopen

    Validation

    Seeding is idempotent: an engagement that already has checklist items is returned unchanged.An item derived from live data cannot be completed by hand, and a completed item cannot be completed again.Evidence on completion is at most 4000 characters.A waiver needs a reason of 1 to 2000 characters, an identifiable acting user, and an approver other than the item owner.Only a completed or waived item can be reopened.

    These routes create the default closure checklist for an engagement and move its items between pending, complete, and waived. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view, create, or update access and the delivery:read or delivery:write scope. An item that is not on this engagement returns 404. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    File a lesson learned on an engagement and publish it to the firm

    Live

    Engagement workspace Closure tab: lessons panel with File lesson, title, category, severity, and applicability fields, Submit, and Publish

    Analytics

    delivery-lesson-*delivery-closure-lessons-field-*

    App API

    GET /v1/engagements/{engagementId}/lessonsPOST /v1/engagements/{engagementId}/lessonsPOST /v1/engagements/{engagementId}/lessons/{lessonId}/publish

    MCP target

    atlas_delivery_engagements_lessons_createatlas_delivery_engagements_lessons_list

    Validation

    Title is required, at most 300 characters, and not blank after trimming.Category must be one of the closure lesson categories, such as SCOPE, PLANNING, ESTIMATION, or RESOURCING.Severity is MINOR, MODERATE, or MAJOR (default MINOR); applicability is THIS_CLIENT, THIS_SERVICE, or FIRM_WIDE (default THIS_CLIENT).Situation, what happened, impact, and recommendation are each at most 4000 characters.A lesson whose applicability is THIS_CLIENT cannot be published to the firm knowledge base.An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    These routes list and file lessons learned on an engagement and publish a lesson for use across the firm. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view, create, or update access and the delivery:read or delivery:write scope. Every route first checks that the caller may see the engagement, and publishing a lesson that is not on the engagement returns 404.

    Record the tax position and permanent establishment watches for an engagement

    Live

    Engagement workspace Tax tab: tax profile form (value added tax treatment, withholding, gross-up), Save profile, permanent establishment watch form (jurisdiction, threshold, alert), and Save watch

    Analytics

    delivery-tax-*

    App API

    GET /v1/engagements/{engagementId}/pe-watchesPUT /v1/engagements/{engagementId}/pe-watchesGET /v1/engagements/{engagementId}/tax-profilePUT /v1/engagements/{engagementId}/tax-profile

    MCP target

    atlas_delivery_engagements_pe_watches_listatlas_delivery_engagements_pe_watches_setatlas_delivery_engagements_tax_profile_getatlas_delivery_engagements_tax_profile_set

    Validation

    Value added tax treatment must be DOMESTIC_STANDARD, REVERSE_CHARGE, ZERO_RATED_EXPORT, EXEMPT, or OUT_OF_SCOPE.Tax residences are two-letter codes; rates are strings of at most 16 characters; at most 60 sales tax nexus states.A watch jurisdiction must be a two-letter uppercase country code.Threshold and alert days are whole numbers from 1 to 366, and the alert must come before the threshold.Saving replaces the single profile per engagement and the single watch per jurisdiction.

    These routes read and replace the tax profile of an engagement and the permanent establishment watch for each jurisdiction. The watch list derives the on-site day count from the time entries recorded against the engagement and flags alerting and breached watches. Callers need client delivery view or update access and the delivery:read or delivery:write scope, and the service admits workspace owners, admins, and members only. An engagement the caller cannot see returns 404.

    Track the contract obligations on an engagement and mark them met, breached, or waived

    Live

    Engagement workspace Obligations tab: obligation form (instrument, clause reference, text, type, due pattern, evidence required, owner role), Record, Mark met, Mark breached, Mark waived with reason, and next due date

    Analytics

    delivery-obligation-*

    App API

    GET /v1/engagements/{engagementId}/obligationsPOST /v1/engagements/{engagementId}/obligationsPOST /v1/engagements/{engagementId}/obligations/{obligationId}/statusGET /v1/engagements/{engagementId}/obligations/due

    MCP target

    atlas_delivery_engagements_obligations_createatlas_delivery_engagements_obligations_due_listatlas_delivery_engagements_obligations_list

    Validation

    Instrument, clause reference (at most 32 characters), and obligation text (at most 8000 characters) are required.Type is one of DELIVERABLE, SLA, REPORTING, INSURANCE, AUDIT, NOTIFICATION, DATA, PERSONNEL, SECURITY, COMPLIANCE, PAYMENT, IP, or CONFIDENTIALITY; due pattern is ONE_OFF, RECURRING, or EVENT_DRIVEN.The legal instrument must belong to the engagement.Status is PENDING, MET, BREACHED, WAIVED, or NOT_APPLICABLE; MET is refused without an evidence attachment when the clause requires evidence, and WAIVED requires a reason.The due list takes a window of 0 to 3650 days (default 30) and also returns overdue obligations.A linkedTaskId must name a task in the caller's workspace and a linkedFollowUpId must name a follow-up on this engagement.An evidenceAttachmentId given with a status change must name an attachment on this engagement.

    These routes keep the register of what the engagement contracts oblige the team to do, with an owner, a due date, and evidence. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view, create, or update access and the delivery:read or delivery:write scope. An obligation or instrument that is not on this engagement returns 404, and an engagement the caller cannot see returns the module 404.

    Record the commercial terms of an engagement contract

    Live

    Engagement workspace Obligations tab: commercial terms panel with term type, clause reference, Record term, Remove term, and due date

    Analytics

    delivery-term-*delivery-obligations-terms-error

    App API

    GET /v1/engagements/{engagementId}/commercial-termsPOST /v1/engagements/{engagementId}/commercial-termsDELETE /v1/engagements/{engagementId}/commercial-terms/{termId}

    MCP target

    atlas_delivery_engagements_commercial_terms_createatlas_delivery_engagements_commercial_terms_deleteatlas_delivery_engagements_commercial_terms_list

    Validation

    Term type is required and must be one of the commercial term types, such as LIABILITY_CAP, UNCAPPED_HEADS, IP, WARRANTY, SLA, KEY_PERSONNEL, or ACCEPTANCE.Cap type is FEES_PAID, MULTIPLE_OF_FEES, FIXED_SUM, or UNLIMITED; cap period is ROLLING_12M or AGGREGATE; remedy is RE_PERFORM, REFUND, or REPAIR.Clause text and other long fields are at most 20000 characters; list fields hold at most 50 entries.Recording a term replaces the existing term of the same type, so each type has one answer per engagement.Removing a term that is not on this engagement returns 404.An instrumentId must name a legal instrument on this engagement, or the term is refused with 404.

    These routes list, record, and remove the commercial terms the firm has read from an engagement contract. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view access to read, update access to record, and delete access to remove, under the delivery:read or delivery:write scope. An engagement the caller cannot see returns 404.

    Fill in the workspace custom fields on an engagement

    Live

    Engagement workspace Custom fields tab: one input per field the workspace defines for engagements, and Save

    Analytics

    delivery-custom-fields-input-iddelivery.engagement.custom-fields.save

    App API

    GET /v1/engagements/{engagementId}/custom-fieldsPUT /v1/engagements/{engagementId}/custom-fields

    MCP target

    atlas_delivery_engagements_custom_fields_getatlas_delivery_engagements_custom_fields_set

    Validation

    At most 100 fields may be set in one request.Each key is 1 to 80 characters and each value is a string of at most 2000 characters, a finite number, a boolean, or null to clear it.Values are normalised against the custom field definitions the workspace keeps for engagements, and required fields are not enforced on this save.

    These routes read the custom field definitions and values for an engagement and save new values. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view or update access and the delivery:read or delivery:write scope. Each save is audited with the field keys it changed. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    Record an approval decision on a deliverable or other engagement record

    Live

    Deliverable detail inside the engagement workspace: approval trail panel with the decision history, current position, and Record approval

    Analytics

    delivery-approval-recorddelivery-approval-trail-error

    App API

    POST /v1/engagements/{engagementId}/approvalsGET /v1/engagements/{engagementId}/approvals/{subjectType}/{subjectId}

    MCP target

    atlas_delivery_engagements_approvals_list

    Validation

    Subject type is DELIVERABLE, MINUTES, CHANGE_REQUEST, STATUS_REPORT, PHASE_GATE, CLOSURE, or INFO_REQUEST, and the subject must belong to the engagement.Decision is APPROVED, APPROVED_WITH_COMMENTS, CHANGES_REQUESTED, REJECTED, or ABSTAINED.Approver name is required (at most 200 characters); subject version is a whole number of at least 1.An approval naming a superseded version is refused with 409, and one naming a version that does not exist is refused.An approver user must be a live member of the workspace, and an approver contact must hold a live portal seat on the engagement.The IP address and user agent are taken from the request, not from the body.

    These routes append an approval decision to an engagement record and read back its history together with its current approval position. Recording needs client delivery create access, the delivery:write scope, and the OWNER, ADMIN, or MEMBER workspace role; reading needs view access and delivery:read. Approvals are append only: no route edits or removes one. A subject that is not on the engagement returns 404.

    Read the activity timeline of an engagement

    Live

    Engagement workspace Timeline tab: facet filters, timeline entries, and Load more

    Analytics

    delivery-timeline-*

    App API

    GET /v1/engagements/{engagementId}/timeline

    MCP target

    atlas_delivery_engagements_timeline_list

    Validation

    kind and source are optional filters of at most 24 characters.limit is a whole number from 1 to 100 (default 50).cursor is at most 500 characters, and a malformed cursor reads as the first page.

    This route returns the engagement timeline newest first, a page at a time, with a cursor for the next page. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view access and the delivery:read scope. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    Read the metrics, health history, and operating model of an engagement

    Live

    Engagement workspace overview: metric catalogue, health history panel, operating model tabs and gates, and gate links

    Analytics

    delivery-engagement-gate-linkdelivery-workspace-drift-read-failed

    App API

    GET /v1/engagements/{engagementId}/metricsGET /v1/engagements/{engagementId}/metrics/health-historyGET /v1/engagements/{engagementId}/operating-model

    MCP target

    atlas_delivery_engagements_health_history_getatlas_delivery_engagements_metrics_getatlas_delivery_engagements_operating_model_get

    Validation

    daysInPeriod is a whole number from 7 to 730 (default 90).since is a calendar day written as YYYY-MM-DD; without it the whole stored health history is returned.The operating model is read only and follows from the engagement type.

    These routes return the metric catalogue for one engagement (including margin, cost, and lock-up figures), its stored health readings oldest first, and the workspace shape its operating model gives it. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view access and the delivery:read scope; there is no portal counterpart. An engagement in another workspace, behind an information barrier, or restricted without a grant returns the same 404 as one that does not exist.

    Read the portfolio health and workload across every engagement

    Live

    Delivery Portfolio screen: RAG roll-up, health coverage counters, engagements by operating model, resource contention, workload, and engagement links

    Analytics

    delivery-portfolio-*

    App API

    GET /v1/engagements/portfolio/metrics

    MCP target

    atlas_delivery_portfolio_metrics_get

    Validation

    The route takes no parameters.Engagements the caller may not see through an information barrier or restricted access are left out of every figure.A health score past the staleness horizon is reported as stale rather than banded.

    This route returns the firm-wide portfolio metrics across every engagement the caller can see in the workspace, with bounded reads and a flag when a total is truncated. Workspace owners, admins, and members may call them (portal guests are refused) with client delivery view access and the delivery:read scope. An engagement is red when schedule, budget, or quality is red or health is below forty.

    Client Portal

    Module guide

    18 actions · 18 live, 0 guarded, 0 configured

    Accept a client portal invitation

    Live

    Invitation acceptance page reached from the emailed link: sign-in prompt and retry button

    Analytics

    portal.invite.sign-inportal-invite-open-retry

    App API

    POST /v1/portal/engagements/accept/{token}

    MCP target

    No agent tool

    Validation

    The token is 1 to 512 characters and the request has no body; the workspace is resolved from the token alone.Acceptance is limited to 6 attempts per minute from one network address (429).The caller must be signed in through a browser session; a personal access token or an OAuth access token is refused with 403 before the token is looked up.An unknown, revoked, already accepted or expired token (invitations last 14 days) all return the same generic refusal.Acceptance is refused when the workspace has no guest seat left on its plan.

    This route turns an invitation token into a portal seat: it creates a guest membership in the firm's workspace and an access grant on the one engagement, then returns the engagement and workspace ids. Any signed-in person holding the token may call it; the token is the credential. Every invalid token gets one generic answer so the route cannot be used to test which tokens exist, and a failed provisioning releases the token so the client is not locked out.

    Choose an engagement and read its overview, team, milestones, status reports and commercial summary

    Live

    Portal left sidebar with the Home, Work, Conversations, Governance, Files and People sections, the engagement switcher, the collapse and menu buttons, and the team, milestones, status reports and commercials pages with their registers and show more buttons

    Analytics

    portal.picker.engagementportal.switcher.openportal.switcher.chooseportal.nav.*portal.sidebar.toggleportal.menu.openportal-team-firmportal-team-seatportal-milestoneportal-milestones-show-moreportal-status-reportportal-status-show-moreportal-commercial-figure-*portal-invoice

    App API

    GET /v1/portal/engagementsGET /v1/portal/engagements/{engagementId}GET /v1/portal/engagements/{engagementId}/teamGET /v1/portal/engagements/{engagementId}/milestonesGET /v1/portal/engagements/{engagementId}/status-reportsGET /v1/portal/engagements/{engagementId}/commercial-summary

    MCP target

    No agent tool

    Validation

    The engagement id must be a non-empty string; list reads take an optional cursor of at most 512 characters and a positive whole-number limit.The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; a firm-side access grant does not admit anybody to the portal.An engagement behind an information barrier at the portal enforcement point, or a deleted engagement, is refused.The commercial summary is refused unless the firm has turned on sharing the budget with the client.Every refusal is the same not-found answer, so a refusal does not confirm that the engagement or figure exists.The picker lists only engagements the per-engagement routes would admit, and reports pending and revoked seats as counts.

    These read-only routes serve the client portal: the list of engagements the signed-in person holds a seat on, and for one engagement its overview, the firm and client team, milestones, status reports shared with the client, and the contract value, approved change value and invoiced total when the firm shares them. They are for client contacts who accepted a portal invitation and now hold a guest seat; every read starts from the caller's own access grant, rows are filtered to the client audience and to the workstreams the grant covers. They refuse with a not-found answer anything the caller holds no live grant for, and expose no route for acceptance checks, internal commercials, the stakeholder map, working papers, problem structuring, lessons, the tenant directory or meeting transcripts. The RAID register is no longer denied outright: by the owner's decision of 11 October 2026 the items the firm marked client audience, client visible and not confidential are served at GET /v1/portal/engagements/{engagementId}/raid, and nothing else from the register is. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Review and sign off a deliverable in the client portal

    Live

    Portal deliverables page and deliverable page: search, filters, open sign-off, decision buttons, comment, typed name and submit

    Analytics

    portal-deliverableportal.deliverables.searchportal.deliverables.filter.*portal-deliverables-show-moreportal-deliverable-open-signoffportal-deliverable-detail-signoffportal-deliverable-detail-typed-nameportal-deliverable-detail-commentportal-deliverable-detail-submit

    App API

    GET /v1/portal/engagements/{engagementId}/deliverablesGET /v1/portal/engagements/{engagementId}/deliverables/{deliverableId}POST /v1/portal/engagements/{engagementId}/deliverables/{deliverableId}/signoff

    MCP target

    No agent tool

    Validation

    decision is APPROVE, APPROVE_WITH_COMMENTS or REQUEST_CHANGES; typedName is required (1 to 200 characters); comment is at most 4000 characters.A comment is required for any decision other than APPROVE.The deliverable must be at the CLIENT_REVIEW stage, or the request returns 400.REQUEST_CHANGES returns the deliverable to DRAFT; the other decisions mark it ACCEPTED.Portal actions are limited to 20 per minute per person per engagement (429).A deliverable outside the caller's grant or workstream scope returns the shared not-found answer.The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.

    These routes list the deliverables shared with the client, open one by its own address, and record the client's sign-off with the typed name of the person deciding. They are for client contacts holding a live, accepted portal grant on the engagement; there is no module permission, and every call starts from the caller's own grant. Anything outside that grant answers not found, and a deliverable that is not in client review cannot be signed off. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Answer the firm's information requests in the client portal

    Live

    Portal requests page: request and item rows, file upload, submit, and not applicable with a reason

    Analytics

    portal-info-requestportal-info-request-itemportal-uploadportal-info-request-submitportal-not-applicable-openportal-not-applicable-reasonportal-not-applicable-confirmportal-requests-show-more

    App API

    GET /v1/portal/engagements/{engagementId}/info-requestsPOST /v1/portal/engagements/{engagementId}/info-requests/{infoRequestId}/submitPOST /v1/portal/engagements/{engagementId}/info-requests/{infoRequestId}/not-applicablePOST /v1/portal/engagements/{engagementId}/info-requests/{infoRequestId}/items/{itemId}/upload-ticketPOST /v1/portal/engagements/{engagementId}/info-requests/{infoRequestId}/items/{itemId}/uploadPOST /v1/portal/engagements/{engagementId}/uploads/{attachmentId}/finalize

    MCP target

    No agent tool

    Validation

    Submit is allowed only while the request is NOT_STARTED, REQUESTED or IN_PROGRESS.Not applicable needs a reason of 1 to 1000 characters and is refused on an ACCEPTED or WITHDRAWN request.An upload ticket needs name (1 to 255), contentType (1 to 255) and a positive sizeBytes; uploads are refused on a request that is ACCEPTED, WITHDRAWN or NOT_APPLICABLE.Executable file extensions and disallowed content types are refused, and the size must not exceed the configured attachment maximum.Finalize needs actualSizeBytes and actualContentType, is refused unless the upload is still UPLOADING, and checks the stored object exists and is within the size limit.Portal actions are limited to 20 per minute per person per engagement (429).Only requests marked visible to the client and within the grant's workstreams can be reached.The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.Attaching a file to an item names an upload that must be finished, made on this engagement, and made against that same request and item; any other id answers not found.

    These routes list the firm's information requests with their items and attachments, let the client upload a file against an item through a signed upload ticket and confirm it, submit a request, or mark it not applicable with a reason. They are for client contacts holding a live, accepted portal grant on the engagement, and every call starts from that grant. Uploads need object storage to be configured for the deployment, and anything outside the grant answers not found. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Send and download documents in the client portal

    Live

    Portal documents page: document list, send a document, show more, and download buttons on documents and attachments

    Analytics

    portal-documentportal-document-sendportal-document-downloadportal-attachment-downloadportal-documents-show-more

    App API

    GET /v1/portal/engagements/{engagementId}/documentsPOST /v1/portal/engagements/{engagementId}/documents/upload-ticketPOST /v1/portal/engagements/{engagementId}/documents/{attachmentId}/finalizePOST /v1/portal/engagements/{engagementId}/attachments/{attachmentId}/downloadGET /v1/portal/engagements/download/{attachmentId}

    MCP target

    No agent tool

    Validation

    An upload ticket needs name (1 to 255), contentType (1 to 255) and a positive sizeBytes; executable extensions, disallowed content types and files over the configured maximum are refused.Finalize needs actualSizeBytes and actualContentType and is refused unless the upload is still UPLOADING.A download link is signed for the attachment, its expiry and the workspace, and expires after five minutes.Fetching the file needs a positive exp and a non-empty sig; a bad signature, an expired link, an attachment no longer shared with the client, or a lapsed grant all return the same not-found answer.Downloads are limited to 60 per minute and other portal actions to 20 per minute, per person per engagement (429).The file is sent as an attachment with no-store caching, never rendered in the page.The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.A seat scoped to some workstreams sees, mints links for, and downloads only documents on deliverables, information requests, and change requests in those workstreams, plus documents it sent itself; the file route checks that scope again for the person spending the link.

    These routes list the documents shared on the engagement in both directions, let the client send a document nobody asked for through a signed upload ticket, mint a five-minute signed download link, and serve the file itself. They are for client contacts holding a live, accepted portal grant; the file route checks the signature, the expiry, the workspace, the client audience and the grant again before sending any bytes. Uploads need object storage to be configured, and any failed check answers not found without saying which check failed. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Answer a change request in the client portal

    Live

    Portal changes page and change page: open a change, decision buttons, comment, typed name and submit

    Analytics

    portal-changeportal-change-openportal-change-backportal-change-commentportal-change-typed-nameportal-change-submitportal-changes-show-more

    App API

    GET /v1/portal/engagements/{engagementId}/changesGET /v1/portal/engagements/{engagementId}/changes/{changeRequestId}POST /v1/portal/engagements/{engagementId}/changes/{changeRequestId}/acknowledge

    MCP target

    No agent tool

    Validation

    decision is APPROVE, REJECT or NEED_MORE_INFO; typedName is required (1 to 200 characters); comment is at most 4000 characters.A comment is required for any decision other than APPROVE.Only a change in SUBMITTED, IMPACT_ASSESSMENT or UNDER_REVIEW can be answered.Drafts are never shown, and a change appears only once the firm has shared it with the client.Portal actions are limited to 20 per minute per person per engagement (429).The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.

    These routes list the change requests the firm has shared with the client, open one, and record the client's answer as an approval with the typed name of the person answering. They are for client contacts holding a live, accepted portal grant on the engagement, scoped to the grant's workstreams. A change outside the grant answers not found, and a change no longer waiting for the client's answer is refused. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Read and reply to conversation threads in the client portal

    Live

    Portal threads page: thread list, open a thread, conversation, reply box and send button

    Analytics

    portal-threadportal-thread-openportal-thread-conversationportal-thread-messageportal-thread-submitportal-threads-show-more

    App API

    GET /v1/portal/engagements/{engagementId}/threadsGET /v1/portal/engagements/{engagementId}/threads/{threadId}POST /v1/portal/engagements/{engagementId}/threads/{threadId}/messages

    MCP target

    No agent tool

    Validation

    message is required and is 1 to 10000 characters.A reply to a CLOSED or RESOLVED thread is refused.Portal actions are limited to 20 per minute per person per engagement (429).A thread outside the caller's grant returns the shared not-found answer.The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.

    These routes list the threads shared with the client, open one with its messages, and store the client's reply on it. They are for client contacts holding a live, accepted portal grant on the engagement, and every call starts from that grant. Threads outside the grant answer not found, and a closed thread asks the client to have their contact reopen it. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Review meetings and approve minutes in the client portal

    Live

    Portal meetings page: meeting list, open minutes, typed name and approve button

    Analytics

    portal-meetingportal-meetings-show-moreportal-minutes-openportal-minutes-typed-nameportal-minutes-submit

    App API

    GET /v1/portal/engagements/{engagementId}/meetingsPOST /v1/portal/engagements/{engagementId}/minutes/{minutesId}/approve

    MCP target

    No agent tool

    Validation

    typedName is required and is 1 to 200 characters.Minutes that are already approved cannot be approved again.Portal actions are limited to 20 per minute per person per engagement (429).The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.

    These routes list the engagement's meetings shared with the client and record the client's approval of a meeting's minutes with the typed name of the person approving. They are for client contacts holding a live, accepted portal grant on the engagement. Meeting transcripts have no portal route, and anything outside the grant answers not found. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Complete an action the firm assigned in the client portal

    Live

    Portal actions page: action list, complete button with an optional note, and show more

    Analytics

    portal-actionportal-action-completeportal-actions-show-more

    App API

    GET /v1/portal/engagements/{engagementId}/actionsPOST /v1/portal/engagements/{engagementId}/actions/{actionId}/complete

    MCP target

    No agent tool

    Validation

    note is optional and at most 2000 characters.Only an action in an open follow-up status can be completed; a paused action is refused with its own message.Portal actions are limited to 20 per minute per person per engagement (429).The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.

    These routes list the follow-up actions shared with the client and mark one complete, with an optional note. They are for client contacts holding a live, accepted portal grant on the engagement. An action outside the grant answers not found, and an action that is no longer open is refused. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    Choose which portal emails to receive

    Live

    Portal settings page: notification switches and a save button

    Analytics

    portal-settings-save

    App API

    GET /v1/portal/engagements/{engagementId}/notification-preferencesPATCH /v1/portal/engagements/{engagementId}/notification-preferences

    MCP target

    No agent tool

    Validation

    statusReports, myApprovals, myReplies and myReminders are each an optional true or false value.Portal actions are limited to 20 per minute per person per engagement (429).An observer seat may change its own preferences, because they are not a write on the engagement.

    These routes read and change the signed-in client's own notification switches for one engagement. They are for client contacts holding a live, accepted portal grant on that engagement, and each person changes only their own preferences. An engagement outside the caller's grant answers not found. Only a signed-in browser session reaches these routes; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    See every engagement and what is waiting on you on the portfolio home

    Live

    Portal portfolio home: figures for what is waiting on the client, a card per engagement with health, progress and next milestone, the due in the next 14 days list, and the Portfolio link in the sidebar

    Analytics

    portal.nav.portfolioportal.picker.engagementportal.kpi.engagementsportal.kpi.open_requestsportal.kpi.actions_dueportal.kpi.deliverables_in_reviewportal.kpi.changes_awaiting_decisionportal.dueSoon.*portal.home.retryportal.home.figures.retry

    App API

    GET /v1/portal/overview

    MCP target

    No agent tool

    Validation

    The route takes no path, query or body input; the answer is built only from the signed-in person's own portal seats.Only seats that are accepted, not revoked and not expired count, in every firm the person holds one in; an engagement closed for longer than the firm's retention period after close is left out.Each engagement's figures are computed inside its own workspace from that seat's own grant, so a seat limited to some workstreams sees only those workstreams' figures.The due soon list covers the next 14 days and returns at most 20 items, soonest first.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    This read-only route serves the portfolio home at /portal: totals of what is waiting on the client (open and overdue requests, actions due, deliverables in client review, changes awaiting a decision, minutes awaiting approval), one card per engagement with its health, percent complete, end date, next milestone and waiting counts, and a combined list of what is due in the next 14 days. It is for client contacts holding at least one accepted portal seat. Every figure is a count over rows the client could already open in a portal list; nothing is read from the firm's own health scores, margins, effort or internal due dates. A client with one engagement lands on its dashboard and a client with two or more lands here; the home is always one click away in the sidebar.

    Read an engagement's dashboard and recent activity in the client portal

    Live

    Portal engagement dashboard: waiting on you figures, progress and health, deliverables by stage, requests by age, milestones, risks, changes, threads, meetings, the latest status report, commercials when shared, due soon list, recent activity feed with load more, and print

    Analytics

    portal.kpi.open_requestsportal.kpi.actions_dueportal.kpi.deliverables_in_reviewportal.kpi.changes_awaiting_decisionportal.kpi.minutes_awaiting_approvalportal.dashboard.deliverablesportal.dashboard.requestsportal.dashboard.milestonesportal.dashboard.raidportal.dashboard.healthportal.dashboard.changesportal.dashboard.threadsportal.dashboard.meetingsportal.dashboard.reportportal.dashboard.report.readportal.dashboard.commercialportal.dashboard.printportal.dashboard.retryportal.dueSoon.*portal.activity.*portal.activity.loadMoreportal.activity.retry

    App API

    GET /v1/portal/engagements/{engagementId}/dashboardGET /v1/portal/engagements/{engagementId}/activity

    MCP target

    No agent tool

    Validation

    The engagement id must be a non-empty string.before on the activity feed is optional and must be an ISO timestamp, with or without an offset; a date alone, a number or a word is refused with 400.The activity feed returns at most 30 items a page, newest first; the next page is asked for with the nextBefore of the previous one.The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; a firm-side access grant does not admit anybody to the portal.Every figure and feed item is computed from rows the seat could open in a portal list, under the same audience, workstream, confidentiality, draft and barrier rules.Commercial figures appear only when the firm has turned on sharing the budget with the client.Every refusal is the same not-found answer, so a refusal does not confirm that the engagement exists.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    These read-only routes serve the engagement dashboard, the first page of an engagement in the portal: progress, overall health and its history, the next milestone with the days remaining, deliverables by stage, requests by status with their age, actions due, changes awaiting a decision with their cost and schedule effect, the latest status report summary, upcoming meetings, what is waiting on the client (the counts behind the sidebar badges), and a recent activity feed paged by time. They are for client contacts holding a live, accepted portal grant on the engagement. Nothing is read from the firm's own health scores, financial snapshots, margins, effort or internal due dates.

    Chart an engagement's delivery over 30, 90 or 365 days in the client portal

    Live

    Portal analytics page: range buttons for 30, 90 or 365 days or the whole engagement, headline figures, charts per module, and print

    Analytics

    portal.nav.analyticsportal.analytics.range.*portal.analytics.printportal.analytics.retryportal.kpi.median_client_review_daysportal.kpi.first_time_acceptanceportal.kpi.median_turnaround_daysportal.kpi.median_first_response_hoursportal.kpi.thread_median_first_responseportal.kpi.thread_response_target_missed

    App API

    GET /v1/portal/engagements/{engagementId}/analytics

    MCP target

    No agent tool

    Validation

    range is 30d, 90d, 365d or all, and is 90d when omitted; any other value is refused with 400.The engagement id must be a non-empty string.The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; anything else answers the shared not-found.Every series is computed from rows the seat could open in a portal list; every bucket in the range is present, zero where nothing happened.The commercial series are read only when the firm has turned on sharing the budget with the client.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    This read-only route serves the engagement analytics page: deliverables accepted over time, time in client review and first-time acceptance, requests raised against submitted and their turnaround, milestones planned against actual, the cumulative cost and schedule effect of changes, health across status report periods, how quickly the firm answers client threads and how often it misses its response target, and the commercial position when the firm shares it. It is for client contacts holding a live, accepted portal grant on the engagement. The page prints cleanly and the browser's print dialog saves it as a PDF.

    Find a deliverable, request, thread or document in the client portal

    Live

    Portal top bar quick find box with its keyboard shortcut and result list

    Analytics

    portal.quickFind.result

    App API

    GET /v1/portal/engagements/{engagementId}/search

    MCP target

    No agent tool

    Validation

    q is trimmed and must then be 2 to 100 characters, or the request is refused with 400.At most 25 results are returned, taken in turn from deliverables, requests, threads, documents, changes, status reports, meetings and published RAID items, so one long register cannot crowd out the others.Each register is searched under its own portal rule, so every result is a record the seat could open from its list.The text reaches the database only as a bound parameter.The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; anything else answers the shared not-found.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    This read-only route answers the quick find box in the portal's top bar for the open engagement. It is for client contacts holding a live, accepted portal grant on the engagement. The search text is not sent to product analytics; only the opening of a result is recorded.

    Review the risks, issues and decisions the firm shared in the client portal

    Live

    Portal risks and decisions page: figures for open, high, risks and issues, a chart by kind, search, kind and state filters, sort, and a detail panel per item

    Analytics

    portal.nav.raidportal.dashboard.raidportal.kpi.raid_openportal.kpi.raid_highportal.kpi.raid_risksportal.kpi.raid_issuesportal.raid.searchportal.raid.filter.kindportal.raid.filter.stateportal.raid.sortportal-raidportal-raid-open

    App API

    GET /v1/portal/engagements/{engagementId}/raid

    MCP target

    No agent tool

    Validation

    The engagement id must be a non-empty string; the route takes no other input.Only items the firm marked client audience and client visible, and not confidential, are returned, within the workstreams the seat covers.At most 500 items are returned, newest raised first.Each item carries its reference, kind, title, description, status, heat band, raised date and target and actual resolution dates; owners, scores and internal notes are not served.The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; anything else answers the shared not-found.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    This read-only route serves the RAID items the firm chose to show the client. The RAID register had no portal route at all until the owner's decision of 11 October 2026, which opened it for rows marked client audience, client visible and not confidential, and for nothing else; the rest of the register stays denied. It is for client contacts holding a live, accepted portal grant on the engagement.

    Start a conversation with the engagement team in the client portal

    Live

    New thread button on the threads page and the dashboard, and the new thread form: title, message, kind, workstream when the seat covers several, send and cancel

    Analytics

    portal-threads-newportal.dashboard.threads.newportal-new-thread-formportal-new-thread-titleportal-new-thread-messageportal-new-thread-kindportal-new-thread-workstreamportal-new-thread-submitportal-new-thread-cancelportal-new-thread-workstreams-retry

    App API

    POST /v1/portal/engagements/{engagementId}/threads

    MCP target

    No agent tool

    Validation

    title is trimmed and must then be 3 to 200 characters; body is trimmed and must then be 1 to 10000 characters.kind is QUESTION, CLARIFICATION, BLOCKER or COMPLAINT, and is QUESTION when omitted.workstreamId is 1 to 64 characters: required for a seat limited to two or more workstreams and one of them, filled in for a seat limited to one, and refused with 400 for a seat on the whole engagement.The body is strict: any other field, such as an audience or a confidentiality flag, is refused with 400.The Idempotency-Key header is optional and, when sent, must be 1 to 255 visible ASCII characters or the request is refused with 400; a repeat with the same key returns the thread the first request made and notifies nobody twice.Portal actions are limited to 20 per minute per person per engagement (429).The grant must be an accepted client portal seat on a live engagement: a firm-side access grant and a deleted engagement both answer not found.A seat with the observer role may read but is refused every write with 403 read only; only sponsor and member seats may act.

    This route lets a client contact open a thread with the engagement team instead of only replying to threads the firm opened. The thread is client audience and never confidential, its opening message is stored as the client's first post, it takes the firm's response target so the clock starts when the client asked, and it is addressed to the engagement manager, or else the partner, who is notified at once. It is for client contacts holding a live, accepted portal grant that may act. Only a signed-in browser session reaches this route; a personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    See what changed since your last visit in the client portal

    Live

    Portal top bar notification bell: unread count, list of recent changes, an item per change, mark all as read, and retry

    Analytics

    portal.bell.openportal.bell.markAllportal.bell.item.*portal.bell.retry

    App API

    GET /v1/portal/engagements/{engagementId}/notificationsPOST /v1/portal/engagements/{engagementId}/notifications/seen

    MCP target

    No agent tool

    Validation

    upTo is optional and must be an ISO timestamp, with or without an offset; the body is strict and any other field is refused with 400.With no upTo the bell is marked read up to now, and a moment in the future is read as now.The read mark only moves forward: two marks sent at once leave the later one.At most 30 items are returned; the unread count covers the whole feed, not only those items.The client side's own doing (its messages, submitted requests and its own deliverable decisions) and documents the seat sent itself are never counted as news.Marking read is the seat's own state, so an observer seat may do it; it is limited with the other portal actions to 20 per minute per person per engagement (429).The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; anything else answers the shared not-found.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    These routes serve the bell in the portal top bar: what changed on the engagement since this seat last marked it read, built from the same rows as the activity feed under the same grant, and the mark itself. Reading the bell writes nothing and notifies nobody. The page asks again every minute while the tab is in view, and marks the items read after the client has looked at the open list for a moment, or at once with Mark all as read.

    Review a deliverable's versions, review rounds and sign-offs in the client portal

    Live

    Deliverable page review history: each issued version with its files, each client review round with its outcome and dates, and the sign-offs with their comments

    Analytics

    portal-deliverable-openportal.history.retry

    App API

    GET /v1/portal/engagements/{engagementId}/deliverables/{deliverableId}/history

    MCP target

    No agent tool

    Validation

    The engagement id and the deliverable id must each be a non-empty string.The deliverable is read first under the deliverables register rule; a deliverable the seat cannot open has no history and answers the shared not-found.Versions, review rounds and sign-offs are each read only through that deliverable and scoped by their own workspace column.The caller must hold a client portal seat on the engagement in this workspace that is accepted, not revoked and not expired; a firm-side access grant does not admit anybody to the portal.A personal access token or an OAuth access token is refused with 403, whatever scopes it holds.

    This read-only route serves the review history beside a deliverable's sign-off: every version issued to the client with its files, every client review round with its outcome and dates, and the decisions recorded by the client's own organisation with their comments. It is for client contacts holding a live, accepted portal grant on the engagement.

    Incident Management

    Module guide

    8 actions · 0 live, 7 guarded, 1 configured

    Declare, update, and resolve an incident

    Guarded

    Incidents list with row acknowledge and start review actions, Declare incident dialog with severity choice, incident workspace with stage rail, status update form, link attach field, duplicate-of picker, timeline, and report download

    Analytics

    service-ops.incidents.*service-ops.incident.declare.*service-ops.incident.stage.*service-ops.incident.update.postservice-ops.incident.link.attachservice-ops.incident.acknowledgeservice-ops.incident.duplicate-ofservice-ops.incident.report-downloadservice-ops.incident.timeline.retry

    App API

    GET /v1/service-ops/incidentsPOST /v1/service-ops/incidentsGET /v1/service-ops/incidents/{incidentId}PATCH /v1/service-ops/incidents/{incidentId}POST /v1/service-ops/incidents/{incidentId}/acknowledgePOST /v1/service-ops/incidents/{incidentId}/updatesGET /v1/service-ops/incidents/{incidentId}/timelinePOST /v1/service-ops/incidents/{incidentId}/linksDELETE /v1/service-ops/incidents/{incidentId}/links/{linkId}GET /v1/service-ops/incidents/{incidentId}/reportPOST /v1/service-ops/incidents/{incidentId}/war-room

    MCP target

    atlas_service_incidents_acknowledgeatlas_service_incidents_createatlas_service_incidents_getatlas_service_incidents_links_addatlas_service_incidents_links_removeatlas_service_incidents_listatlas_service_incidents_report_exportatlas_service_incidents_timeline_getatlas_service_incidents_updateatlas_service_incidents_updates_createatlas_service_incidents_war_room_create

    Validation

    Title is required and at most 300 characters; summary is at most 4000 characters.A declare may carry an idempotency key of 1 to 100 characters. A repeated key within 24 hours returns the incident the first declare opened instead of opening a second one, and two concurrent declares with one key resolve to one incident; an expired key, or one whose incident was deleted, is released for reuse.Severity is a key of letters, numbers, dashes, and underscores of at most 24 characters, and must exist in the workspace severity catalogue or the request is refused with 400.Status is one of TRIAGE, INVESTIGATING, IDENTIFIED, MITIGATED, RESOLVED, or CANCELLED, and a status change that the transition rules do not allow is refused with 409.Impact is one of NONE, DEGRADED, PARTIAL_OUTAGE, or FULL_OUTAGE; occurred, detected, and materiality times are ISO 8601 date times.Resolution kind is one of FIXED, MITIGATED, FALSE_ALARM, DUPLICATE, EXPECTED_BEHAVIOUR, or WONT_FIX; DUPLICATE needs the incident it duplicates, which must exist in this workspace and cannot be the same incident.An update sends at least one field. When expectedVersion is sent and does not match the stored version, the update is refused with 409.A status update body is required and at most 8000 characters.A link URL is required and at most 2048 characters, and only http and https addresses are accepted.The communications cadence is between 1 and 10080 minutes, or null to fall back to the severity level.List and timeline pages hold at most 100 items.Opening the war room is idempotent and returns the existing channel when one is already open.

    These routes declare an incident (a repeated idempotency key returns the incident already declared, so a retry opens no second incident and pages nobody), read and list incidents, change status, severity, impact and resolution, acknowledge, post status updates, attach and remove links, read the timeline, download the incident report, and open a war room channel. Every route needs the Incident Management module on the workspace plan; reads need the service:read scope and the view access level, which includes guests, and writes need the service:write scope and the update access level, which excludes guests. An incident in another workspace returns 404, an illegal status change or a stale version returns 409, and a severity the workspace has not configured returns 400.

    Appoint or stand down incident responders

    Guarded

    Incident workspace responders panel: Appoint button, person picker, role choice, Cancel, and Stand down action

    Analytics

    service-ops.incident.role.*

    App API

    POST /v1/service-ops/incidents/{incidentId}/rolesDELETE /v1/service-ops/incidents/{incidentId}/roles/{roleId}GET /v1/service-ops/people

    MCP target

    atlas_service_incidents_roles_assignatlas_service_incidents_roles_releaseatlas_service_people_search

    Validation

    Role kind is one of INCIDENT_COMMANDER, OPERATIONS_LEAD, COMMUNICATIONS_LEAD, SCRIBE, SUBJECT_MATTER_EXPERT, or LIAISON, and a user id is required.People search text is at most 120 characters and returns at most 25 people.People lookup by id takes a comma separated list of at most 2000 characters, deduplicated and capped at 100 ids; ids take precedence over search text.Standing down a role that is not on this incident returns 404.

    Appointing gives a member a named role on an incident, and standing down releases the role while keeping who held it and when on the record rather than deleting it. The people search returns names of members of the caller's own workspace only, so the picker never downloads the whole directory. All three routes need the Incident Management module; the people search needs service:read and the view access level, and appointing or standing down needs service:write and the update access level.

    Tell affected customers about an incident

    Guarded

    Status updates page and incident workspace customer update composer: affected customer list, Draft, Approve, and Send buttons, and the customer band

    Analytics

    service-ops.customer-update.*service-ops.status-updates.composeservice-ops.status-updates.customer-bandservice-ops.status-updates.open-incident

    App API

    GET /v1/service-ops/incidents/{incidentId}/affected-partiesPOST /v1/service-ops/incidents/{incidentId}/affected-partiesDELETE /v1/service-ops/incidents/{incidentId}/affected-parties/{partyId}GET /v1/service-ops/incidents/{incidentId}/customer-updatesPOST /v1/service-ops/incidents/{incidentId}/customer-updatesPATCH /v1/service-ops/customer-updates/{updateId}POST /v1/service-ops/customer-updates/{updateId}/approvePOST /v1/service-ops/customer-updates/{updateId}/sendGET /v1/service-ops/customer-updates/{updateId}/deliveriesPOST /v1/service-ops/customer-updates/{updateId}/cancel

    MCP target

    atlas_service_customer_updates_cancelatlas_service_customer_updates_updateatlas_service_incidents_affected_customers_addatlas_service_incidents_affected_customers_listatlas_service_incidents_affected_customers_removeatlas_service_incidents_customer_updates_draftatlas_service_incidents_customer_updates_list

    Validation

    An affected party is of kind ACCOUNT or ONBOARDING with a reference id that must resolve to a record in this workspace, or the request returns 404; the impact note is at most 1000 characters.A draft needs a subject of at most 300 characters and a body of at most 8000 characters, and may target at most 1000 affected parties; no targets means every affected party at send time.Only a draft or approved update can be edited, and an edit sends at least one field.Edit and approve accept an optional If-Match version; a malformed If-Match is refused with 400.Sending is refused when the update is already sent, sending, or cancelled, when approval is required and the update is not approved, when the wording changed after approval, or when it has no recipients.Each targeted customer is emailed at its primary contact: the first contact added to the customer account that has a usable email address, passing over deleted and archived contacts; an affected onboarding is reached through its client account. A customer with no such contact, a customer no longer in this workspace, and a contact who asked not to receive email are reported as unreachable rather than emailed.When nobody targeted can be emailed, the send is refused with 400 naming each customer and the reason, and the update stays unchanged with nobody marked as told. When email is not available to the workspace, the send is refused with 503 and nothing changes.When every email fails to reach the email layer, the update is recorded as FAILED, nobody is marked as told, and the send is refused with 503 so the update can be sent again unchanged. Each customer receives at most one message per update, so a retry does not send a second copy.Approval is required unless the workspace settings turn it off.Two concurrent sends cannot both succeed: the loser receives 409. A send whose server stopped part way holds its claim for ten minutes, after which sending again finishes it without emailing any customer twice.Deliveries lists, for a sent update, each customer by name with the status of its email: queued, sending, sent, delivered, bounced, complained or failed. It names no email address, and an update in another workspace answers 404.A cancel reason is optional and at most 500 characters.

    These routes record which customer accounts or client onboardings an incident affects, then draft, edit, approve, send, or cancel the update written to them. Sending emails each targeted customer's primary contact through the shared email layer and answers with the outcome per recipient (EMAILED, NO_EMAIL, NOT_FOUND, SUPPRESSED, or FAILED) together with emailed and unreachable counts. Only customers actually handed to the email layer are stamped as notified; the update is recorded as sent, and the incident timeline and audit log name the customers who could not be reached, without their addresses. A send that can reach nobody is refused with 400 and marks nothing, so it cannot satisfy the rule that customers are told before an incident closes. Every route needs the Incident Management module; reads need service:read and the view access level, and every write, including approve and send, needs service:write and the update access level so that responders can communicate without waiting for an administrator.

    Track a regulatory notification deadline

    Guarded

    Incident workspace obligations panel with a start button per regime, and the deadlines band on the status updates page

    Analytics

    service-ops.clock.start.*service-ops.status-updates.clock-bandservice-ops.status-updates.open-clock-incident

    App API

    GET /v1/service-ops/regulatory-regimesGET /v1/service-ops/regulatory-clocksGET /v1/service-ops/incidents/{incidentId}/regulatory-clocksPOST /v1/service-ops/incidents/{incidentId}/regulatory-clocksPOST /v1/service-ops/regulatory-clocks/{clockId}/restartPOST /v1/service-ops/regulatory-clocks/{clockId}/metPOST /v1/service-ops/regulatory-clocks/{clockId}/waive

    MCP target

    atlas_service_incidents_regulatory_clocks_listatlas_service_regulatory_clocks_listatlas_service_regulatory_regimes_list

    Validation

    Regime is one of GDPR_72H, SEC_4BD, DORA_INITIAL_4H, DORA_INTERMEDIATE_72H, DORA_FINAL_1M, HIPAA_60D, or CUSTOM.CUSTOM needs a window of 1 to 8760 hours; the label is at most 200 characters.When no start time is given and the incident has no instant for the regime to count from, the request is refused with 400.Starting a clock that is already running for the same regime on the incident returns 409.Only a running clock can be restarted, marked met, or waived; restart needs an ISO 8601 start time.Marking met accepts an evidence URL of at most 2048 characters and a note of at most 1000 characters.Waiving needs a reason of 1 to 1000 characters.The workspace list filters by RUNNING, MET, WAIVED, MISSED, or ALL, defaults to RUNNING, and returns at most 500 clocks.

    These routes list the notification regimes Atlas knows, start a deadline clock on an incident, list clocks on one incident or across the workspace soonest first, and restart, mark met, or waive a clock. Every route needs the Incident Management module; reads need service:read and the view access level, and starting, restarting, meeting, or waiving a clock needs service:write and the update access level. A clock or incident in another workspace returns 404, and a clock that is already settled is refused with 400.

    Configure severity levels, services, and response defaults

    Guarded

    Incident settings page: severity preset buttons, severity level editor with Save, Discard, Make default, and Retire, the response defaults form, and the service picker Create service control

    Analytics

    service-ops.severity.*service-ops.service.*

    App API

    GET /v1/service-ops/settingsPATCH /v1/service-ops/settingsGET /v1/service-ops/severity-levelsPATCH /v1/service-ops/severity-levels/{levelId}POST /v1/service-ops/severity-levels/apply-presetGET /v1/service-ops/severity-presetsGET /v1/service-ops/servicesPOST /v1/service-ops/services

    MCP target

    atlas_service_services_createatlas_service_services_listatlas_service_settings_getatlas_service_settings_updateatlas_service_severity_levels_listatlas_service_severity_levels_updateatlas_service_severity_presets_applyatlas_service_severity_presets_list

    Validation

    A settings update sends at least one field: at most 20 fallback user ids, a reference prefix of 1 to 8 characters, raw alert payload retention of 0 to 365 days, a mitigation soak of 0 to 1440 minutes, and a war room auto-create rank of 0 to 1000.A severity level edit sends at least one field: label of 1 to 80 characters, description of at most 300, rank of 0 to 1000, paging urgency of HIGH, LOW, or NONE, and response target and communications cadence of 1 to 10080 minutes or null. The key cannot be changed.A preset key is 1 to 40 characters and must name a shipped preset, or the request is refused with 400.A severity level in another workspace returns 404.A service key is 1 to 64 lowercase letters, numbers, dashes, and underscores; the name is 1 to 160 characters and the tier 1 to 5. A key already used in the workspace returns 409.

    These routes read and change the workspace incident settings, the severity catalogue, and the list of services incidents and problems are filed against. Applying a preset replaces the catalogue while existing incidents keep the rank they had. Reads need the Incident Management module, service:read, and the view access level; every write needs service:write and the admin access level, because the fallback list and the severity vocabulary decide who is woken up.

    Set up escalation policies and alert sources

    Guarded

    On-call setup panel: Create policy, Add step, escalation simulator Run button, Create alert source, and Rotate secret

    Analytics

    service-ops.escalation.*service-ops.alert-source.*service-ops.on-call.toggle-setup

    App API

    GET /v1/service-ops/escalation-policiesPOST /v1/service-ops/escalation-policiesPOST /v1/service-ops/escalation-policies/{policyId}/simulatePOST /v1/service-ops/escalation-policies/{policyId}/stepsDELETE /v1/service-ops/escalation-policies/{policyId}/steps/{stepId}GET /v1/service-ops/alert-sourcesPOST /v1/service-ops/alert-sourcesPATCH /v1/service-ops/alert-sources/{sourceId}DELETE /v1/service-ops/alert-sources/{sourceId}POST /v1/service-ops/alert-sources/{sourceId}/rotate-secret

    MCP target

    atlas_service_alert_sources_deleteatlas_service_alert_sources_listatlas_service_alert_sources_updateatlas_service_escalation_policies_listatlas_service_escalation_policies_simulate

    Validation

    A policy name is 1 to 160 characters, the description at most 1000, and the repeat count 0 to 10.A step waits 1 to 1440 minutes and has 1 to 20 targets of kind SCHEDULE, USER, or TEAM, each carrying the id of what it pages; a target without that id is refused with 400.The simulation takes an optional ISO 8601 instant and defaults to now; it pages nobody and writes nothing.An alert source name is 1 to 120 characters; the default severity key is at most 24 characters. Auto resolve is off unless asked for.An alert source update sends at least one field.A policy, step, or alert source in another workspace returns 404.

    These routes build escalation ladders, ask a ladder who it would page at a chosen instant, and manage the alert sources that let an outside monitoring system raise incidents. The signing secret is returned once when a source is created or its secret rotated and is never readable again; after a rotation the previous secret keeps verifying for 24 hours. Reads and the simulation need the Incident Management module, service:read, and the view access level; every other write needs service:write and the admin access level. Deleting a source deactivates it rather than removing its history. Editing and deleting an alert source and removing a step are available through the API only.

    Inbound monitoring alert endpoint

    Configured

    HTTPS POST from a monitoring system to the ingest path shown when an alert source is created, signed with that source's secret in the X-Atlas-Signature header

    Analytics

    docs.actions.registry.incident-management.alert-ingest-api

    App API

    POST /v1/service-ops/alerts/{publicKey}

    MCP target

    No agent tool

    Validation

    The public key in the path is 8 to 64 characters and must belong to an active alert source.The X-Atlas-Signature header has the form t=<unix seconds>,n=<nonce>,v1=<hex HMAC SHA-256>, computed over the timestamp, the nonce, and the exact raw request body joined with full stops.The timestamp must be within 300 seconds of the server clock in either direction, and the nonce is at most 128 characters.A nonce already seen for the source is treated as a replay: the delivery is acknowledged as a duplicate and not applied again.Bodies over 1,000,000 bytes are refused with 413 before any signature work.An unknown key, a missing, malformed, stale, or wrong signature all return the same 401 with no reason, so the response does not reveal which keys exist.

    This route is public, because a monitoring system has no session: it authenticates by the alert source public key in the path plus an HMAC signature over the raw body made with the source secret, and it is also covered by the global rate limiter. A firing alert declares an incident when the source has auto declare on, or records a repeat on the timeline when the incident for the same dedupe key is still open; a resolved alert records that the signal cleared and resolves the incident only when the source has auto resolve on. Unknown or acknowledged statuses are recorded and never acted on. It needs an alert source configured on the On-call page before it does anything.

    Review incident response figures

    Guarded

    Service operations hub metrics section and the incidents page response band

    Analytics

    service-operations.hub.*service-ops.response-band

    App API

    GET /v1/service-ops/metrics

    MCP target

    atlas_service_metrics_get

    Validation

    From and to dates are optional ISO 8601 date times; an unreadable date is refused with 400.The service filter is an id of at most 64 characters.

    This route returns response figures for the workspace over a window, optionally for one service. It needs the Incident Management module, the service:read scope, and the view access level, and it reads only the caller's own workspace.

    On-call

    Module guide

    1 actions · 0 live, 1 guarded, 0 configured

    Staff an on-call rotation and cover a shift

    Guarded

    On-call page: coverage now panel, Create schedule, rotation band, rotation editor with layer edit and remove, layer dialog with add, move, and remove member, Open override, and override removal

    Analytics

    service-ops.on-call.*

    App API

    GET /v1/service-ops/on-call/nowGET /v1/service-ops/on-call/schedulesPOST /v1/service-ops/on-call/schedulesGET /v1/service-ops/on-call/schedules/{scheduleId}/previewPOST /v1/service-ops/on-call/schedules/{scheduleId}/layersPATCH /v1/service-ops/on-call/layers/{layerId}DELETE /v1/service-ops/on-call/layers/{layerId}POST /v1/service-ops/on-call/schedules/{scheduleId}/overridesDELETE /v1/service-ops/on-call/overrides/{overrideId}

    MCP target

    atlas_service_on_call_responders_listatlas_service_on_call_schedules_listatlas_service_on_call_schedules_preview

    Validation

    A schedule name is 1 to 160 characters and the description at most 1000; the time zone must be a recognised IANA zone name and defaults to UTC.A layer name is 1 to 160 characters, kind is DAILY, WEEKLY, or CUSTOM, rotation hours are 1 to 2160, and the layer has 1 to 50 members in rotation order.A layer update sends at least one field, and a member list replaces the whole rotation order.An override needs ISO 8601 start and end times, must end after it starts, and takes an optional reason of at most 300 characters; a null user records that nobody is covering the window.A schedule, layer, or override in another workspace returns 404.

    These routes show who is on call now across every schedule, list schedules with their layers, preview the shift calendar with its gaps (a fortnight by default), and create schedules, layers, and overrides. They need the Incident Management module; reads need service:read and the view access level, which any member has, and every change needs service:write and the admin access level, because a rotation decides who is woken up.

    Postmortems

    Module guide

    3 actions · 0 live, 3 guarded, 0 configured

    Write and publish an incident review

    Guarded

    Postmortems list, Start review on an incident row, review editor with Add factor, Remove factor, Send for reading, Publish, Back to draft, Reopen, and report download

    Analytics

    service-ops.postmortem.*service-ops.postmortems.viewservice-ops.incidents.row.start-review

    App API

    GET /v1/service-ops/postmortem-vocabularyGET /v1/service-ops/postmortemsGET /v1/service-ops/postmortems/{postmortemId}POST /v1/service-ops/incidents/{incidentId}/postmortemPATCH /v1/service-ops/postmortems/{postmortemId}POST /v1/service-ops/postmortems/{postmortemId}/statusPOST /v1/service-ops/postmortems/{postmortemId}/factorsDELETE /v1/service-ops/postmortems/{postmortemId}/factors/{factorId}GET /v1/service-ops/postmortems/{postmortemId}/report

    MCP target

    atlas_service_incidents_reviews_createatlas_service_reviews_factors_addatlas_service_reviews_factors_removeatlas_service_reviews_getatlas_service_reviews_listatlas_service_reviews_report_exportatlas_service_reviews_transitionatlas_service_reviews_updateatlas_service_reviews_vocabulary_get

    Validation

    Starting a review on an incident that already has one returns the existing review instead of a second one; the title is at most 300 characters.Narrative fields are capped at 4000 or 8000 characters each, at most 50 reviewer ids are accepted, and an edit sends at least one field.A published review cannot be edited.Status is DRAFT, IN_REVIEW, or PUBLISHED, and a transition the review rules do not allow is refused with 400.Publishing is refused until the incident is resolved or cancelled, the summary, customer impact, detection, response, and lessons are written, at least two contributing factors are recorded, and at least one live action item has an owner.A contributing factor kind must be one of the served vocabulary; the summary is 1 to 500 characters, the detail at most 4000, and the evidence URL at most 2048.Edits and status changes accept an optional If-Match version, and a malformed one is refused with 400.The list filters by status and returns at most 200 reviews.

    These routes start a blameless review for an incident, edit its narrative, record contributing factors, move it through draft, in review, and published, and download it as a report. They need the Incident Management module; reads need service:read and the view access level, and writes need service:write and the update access level. A review or incident in another workspace returns 404.

    Track follow-up actions from incident reviews

    Guarded

    Review editor Add action control, action item Edit and Done buttons, Convert to task, and the follow-up queue on the Postmortems page

    Analytics

    service-ops.action-item.*service-ops.follow-upservice-ops.postmortem.add-action

    App API

    GET /v1/service-ops/action-itemsPOST /v1/service-ops/postmortems/{postmortemId}/action-itemsPATCH /v1/service-ops/action-items/{actionItemId}POST /v1/service-ops/action-items/{actionItemId}/convert-to-task

    MCP target

    atlas_service_action_items_convertatlas_service_action_items_listatlas_service_action_items_updateatlas_service_reviews_action_items_add

    Validation

    An action item title is 1 to 300 characters and the description at most 4000.Kind is PREVENT, DETECT, MITIGATE, PROCESS, or DOCUMENTATION; status is PROPOSED, ACCEPTED, IN_PROGRESS, DONE, or DROPPED.Dropping an item needs a reason of at most 500 characters.Due dates are ISO 8601 date times, and an update sends at least one field.Converting needs a project, either given or the workspace default, that exists in this workspace, and must be taken by a signed-in person.The queue filters by status, owner, and overdue, and returns at most 500 items.

    These routes add action items to a review, update their owner, status, and due date, list the follow-up queue across every review, and file an item as a real task in a project. They need the Incident Management module; reads need service:read and the view access level, and writes need service:write and the update access level. An item or project in another workspace returns 404.

    Record a recurring problem and its workaround

    Guarded

    Problem register on the Postmortems page, the create problem dialog with service picker, and the problem detail Advance button

    Analytics

    service-ops.problem.*

    App API

    GET /v1/service-ops/problemsPOST /v1/service-ops/problemsGET /v1/service-ops/problems/{problemId}PATCH /v1/service-ops/problems/{problemId}

    MCP target

    atlas_service_problems_createatlas_service_problems_getatlas_service_problems_listatlas_service_problems_update

    Validation

    A problem title is 1 to 300 characters; summary and workaround are at most 4000 characters each.Status is OPEN, INVESTIGATING, KNOWN_ERROR, RESOLVED, or CLOSED, and an update sends at least one field.A service id must name a service in this workspace, or the request returns 404.Updates accept an optional If-Match version, and a malformed one is refused with 400.The list filters by status and service and returns at most 200 problems.

    These routes keep the problem register: the underlying causes that several incidents share, with their workaround, owner, service, and status. They need the Incident Management module; reads need service:read and the view access level, and writes need service:write and the update access level. A problem in another workspace returns 404.

    Client Onboarding

    Module guide

    6 actions · 0 live, 6 guarded, 0 configured

    Start and follow a client onboarding

    Guarded

    Client Onboarding page with the New onboarding dialog, plan tile Start buttons, the onboarding workspace timeline with Load older, and the account pack download

    Analytics

    client-onboarding.create.openclient-onboarding.plan-tile.startclient-onboarding.timeline.*client-onboarding.account-pack-downloadclient-onboarding.go-live-bandservice-operations.hub.start-onboarding

    App API

    GET /v1/client-onboardingPOST /v1/client-onboardingGET /v1/client-onboarding/{id}GET /v1/client-onboarding/{id}/timelineGET /v1/client-onboarding/{id}/report

    MCP target

    atlas_onboarding_getatlas_onboarding_listatlas_onboarding_report_exportatlas_onboarding_startatlas_onboarding_timeline_get

    Validation

    Starting needs either an existing client account id or a new client name of 1 to 200 characters.Client details are optional and capped: website 500, industry 120, notes 4000, contact email 320, and contact phone 40 characters.The onboarding name is 1 to 200 characters and the target go-live date is an ISO 8601 date time.An idempotency key of 1 to 100 characters makes a retried start return the same onboarding instead of a second one.When onboarding cannot be started for the client, the request is refused with 400.The list filters by status, account, owner, and text of at most 200 characters, and returns at most 200 onboardings; archived ones are left out unless asked for.The timeline filters by kind, source, and actor and returns at most 100 entries per page.

    These routes start an onboarding for a client from a plan, list and read onboardings, page through the onboarding timeline, and download the account pack as a report. They need the Client Onboarding module on the workspace plan, the onboarding:read or onboarding:write scope, and the view or create access level; guests are refused because only owners, admins, and members may read or change onboardings. An onboarding in another workspace returns 404.

    Work through an onboarding checklist

    Guarded

    Onboarding workspace checklist with task toggles and retry, phase rail stage advance, and the detail panel link list with open and remove

    Analytics

    client-onboarding.checklist.retry-toggleclient-onboarding.detail-panel.*client-onboarding.phase-rail.browse-plans

    App API

    PATCH /v1/client-onboarding/{id}/tasks/{taskId}POST /v1/client-onboarding/{id}/stages/{stageId}/advancePOST /v1/client-onboarding/{id}/linksDELETE /v1/client-onboarding/{id}/links/{taskId}

    MCP target

    atlas_onboarding_links_addatlas_onboarding_links_removeatlas_onboarding_tasks_update

    Validation

    Task status is TODO, IN_PROGRESS, BLOCKED, DONE, or SKIPPED; the title is 1 to 300 characters, the description at most 4000, and the blocked reason at most 300.A task update sends at least one field besides expectedVersion, and a stale version is refused with a version conflict.A stage cannot be advanced while it still has required tasks outstanding; the request returns 409 naming them.A link URL is a valid http or https address of at most 2048 characters, and attaching the same resource twice returns 409.Removing a link that is not on this onboarding returns 404.

    These routes tick off checklist tasks, advance a stage once its required work is done, and attach or remove external links on an onboarding. They need the Client Onboarding module, the onboarding:write scope, and the update access level, and owners, admins, and members may call them. An onboarding in another workspace returns 404.

    Client onboarding records API

    Guarded

    REST API with a personal access token that carries the onboarding:write scope

    Analytics

    docs.actions.registry.client-onboarding.records-api

    App API

    PATCH /v1/client-onboarding/{id}POST /v1/client-onboarding/{id}/cancelDELETE /v1/client-onboarding/{id}POST /v1/client-onboarding/{id}/tasksPOST /v1/client-onboarding/{id}/tasks/bulkPOST /v1/client-onboarding/{id}/tasks/{taskId}/convert-to-taskPOST /v1/client-onboarding/{id}/projectDELETE /v1/client-onboarding/{id}/projectPOST /v1/client-onboarding/{id}/channelPOST /v1/client-onboarding/backfill

    MCP target

    atlas_onboarding_archiveatlas_onboarding_backfill_runatlas_onboarding_channel_createatlas_onboarding_project_linkatlas_onboarding_project_unlinkatlas_onboarding_tasks_bulk_updateatlas_onboarding_tasks_convertatlas_onboarding_tasks_createatlas_onboarding_update

    Validation

    An onboarding update sends at least one field besides expectedVersion: name of 1 to 200 characters, owner, target go-live date, notes of at most 4000 characters, or status of NOT_STARTED, IN_PROGRESS, BLOCKED, COMPLETED, or CANCELLED; a stale version is refused with a version conflict.Cancelling an onboarding that is already cancelled returns it unchanged; the reason is at most 500 characters.Archiving needs the delete access level and the owner or admin workspace role.A new task needs a title of 1 to 300 characters; assignee role is ACCOUNT_MANAGER, IMPLEMENTATION_LEAD, SUCCESS_MANAGER, FINANCE, IT, or CLIENT; position is 0 to 100000.A bulk update takes 1 to 200 task ids.Converting a checklist item is idempotent and returns the existing task; it needs a project in this workspace and a signed-in person.Opening the onboarding channel is idempotent and returns the existing channel.Backfill needs an ISO 8601 since date and the admin access level, takes a limit of 1 to 500 and an optional dry run, and creates nothing for a deal that already has an onboarding.

    These routes edit, cancel, and archive an onboarding, add and bulk update checklist tasks, file a checklist item as a project task, link or unlink a delivery project, open the onboarding chat channel, and backfill onboardings for deals won earlier. They need the Client Onboarding module and the onboarding:write scope with the update access level, except archive, which needs the delete level, and backfill, which needs the admin level. An onboarding, task, or project in another workspace returns 404. No screen calls these routes today.

    Browse the onboarding plan library

    Guarded

    Onboarding plans page: category filters, search, Clear filters, Retry, and plan tiles

    Analytics

    client-onboarding.plans.*client-onboarding.plan-tile

    App API

    GET /v1/client-onboarding/templates

    MCP target

    atlas_onboarding_templates_list

    Validation

    Owners, admins, and members may read the library; guests are refused.

    This route lists the onboarding plans available to the workspace, both the built-in plans and the workspace's own, with their categories. It needs the Client Onboarding module, the onboarding:read scope, and the view access level.

    Client onboarding template authoring API

    Guarded

    REST API with a personal access token that carries the onboarding:read or onboarding:write scope

    Analytics

    docs.actions.registry.client-onboarding.template-authoring-api

    App API

    GET /v1/client-onboarding/templates/{id}POST /v1/client-onboarding/templatesPATCH /v1/client-onboarding/templates/{id}POST /v1/client-onboarding/templates/{id}/duplicateDELETE /v1/client-onboarding/templates/{id}

    MCP target

    atlas_onboarding_templates_createatlas_onboarding_templates_deleteatlas_onboarding_templates_duplicateatlas_onboarding_templates_getatlas_onboarding_templates_update

    Validation

    A template name is 1 to 160 characters and the description at most 2000.A template holds at most 40 stages and 300 tasks; stage and task offsets are 0 to 3650 days.An update sends at least one field besides expectedVersion.Built-in templates cannot be restructured or deleted; duplicate one to change it.Creating, changing, duplicating, and deleting templates is limited to the owner and admin workspace roles.A template in another workspace returns 404.

    These routes read one onboarding template and create, edit, duplicate, and delete the workspace's own templates. They need the Client Onboarding module; reading needs onboarding:read and the view access level, and writes need onboarding:write with the create, update, or delete access level as fitting, plus the owner or admin role. Deleting a template is a soft delete. No screen calls these routes today.

    Configure when client onboarding starts automatically

    Guarded

    Client onboarding settings page: switches for automatic start on deal won, agreement signed, and import, project creation, account lifecycle advance, owner notification, and external body mirroring

    Analytics

    docs.actions.registry.client-onboarding.configure-automation

    App API

    GET /v1/client-onboarding/settingsPATCH /v1/client-onboarding/settings

    MCP target

    atlas_onboarding_settings_getatlas_onboarding_settings_update

    Validation

    An update sends at least one setting.Settings include the default template and team ids, automatic start on deal won, agreement signed, or import, automatic project creation and its project template, account lifecycle advance, owner notification, and external body mirroring.

    These routes read and change the workspace client onboarding settings that decide when an onboarding starts on its own and what it creates. Reading needs the Client Onboarding module, onboarding:read, and the view access level; changing needs onboarding:write and the admin access level. The default template, default team, and project template settings are set through the API only.

    Diagrams

    Module guide

    14 actions · 2 live, 11 guarded, 1 configured

    Create, open, rename, and organize diagrams in folders

    Guarded

    Diagram Studio home: search box, sort menu, tabs, diagram cards with open, rename, favourite, and move actions, bulk visibility change, and the new folder form

    Analytics

    diagrams.card.*diagrams.folder.*diagrams.searchdiagrams.rename.namediagrams.bulk.visibilitydiagrams.new

    App API

    GET /diagramsPOST /diagramsGET /diagrams/{id}PATCH /diagrams/{id}GET /diagrams/{id}/thumbnailGET /diagrams/folders/listPOST /diagrams/foldersGET /v1/diagramsPOST /v1/diagramsGET /v1/diagrams/{id}PATCH /v1/diagrams/{id}

    MCP target

    atlas_diagrams_createatlas_diagrams_folders_createatlas_diagrams_folders_listatlas_diagrams_getatlas_diagrams_listatlas_diagrams_updateatlas_diagrams_visibility_setatlas_route_get_diagrams_by_id_thumbnailatlas_route_get_v1_diagramsatlas_route_get_v1_diagrams_by_idatlas_route_patch_v1_diagrams_by_idatlas_route_post_v1_diagrams

    Validation

    Title is required and at most 240 characters.Kind is one of flowchart, whiteboard, erd, uml, bpmn, mindmap, orgchart, network, c4, wireframe, sequence, or other; engine is structured or freeform.The diagram document may not exceed 2 MB and the text source may not exceed 500,000 characters.Visibility is PRIVATE, SHARED, or ORG; changing it requires the diagram owner or a workspace owner or admin.An update accepts an If-Match header or a version field; a version that does not match the stored version returns 409 Conflict, and an If-Match that is not a non-negative integer returns 400 on the unprefixed route.List accepts scope all, mine, or shared, a search term of 1 to 120 characters, and a page size of at most 100 (default 20) with a cursor.Folder name is required and at most 160 characters.Guests cannot create diagrams or folders.

    These routes list the diagram library, create a diagram, read one, save changes (each content change records a version snapshot and refreshes the thumbnail in the background), stream a small PNG thumbnail, and list or create folders. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. Workspace owners and admins see the whole library; other members see diagrams they own, diagrams shared with them, and diagrams with organization visibility. Editing requires the owner, an EDIT share, or a workspace owner or admin, a thumbnail is refused to a restricted viewer, and a diagram in another workspace or in the trash returns 404.

    Move diagrams to the trash, restore them, archive them, or delete them forever

    Guarded

    Diagram Studio Trash tab: restore, archive, and delete forever actions on each card, and the bulk move to trash action on the library

    Analytics

    diagrams.trash.*diagrams.bulk.trash

    App API

    DELETE /diagrams/{id}GET /diagrams/trashPOST /diagrams/{id}/restoreDELETE /diagrams/{id}/purgePOST /diagrams/{id}/archiveDELETE /v1/diagrams/{id}GET /v1/diagrams/trashPOST /v1/diagrams/{id}/restoreDELETE /v1/diagrams/{id}/purgePOST /v1/diagrams/{id}/archive

    MCP target

    atlas_diagrams_archiveatlas_diagrams_deleteatlas_diagrams_restoreatlas_diagrams_trash_deleteatlas_diagrams_trash_listatlas_route_delete_v1_diagrams_by_idatlas_route_delete_v1_diagrams_by_id_purgeatlas_route_get_v1_diagrams_trashatlas_route_post_v1_diagrams_by_id_archiveatlas_route_post_v1_diagrams_by_id_restore

    Validation

    Delete, purge, restore, and archive require the diagram owner, an EDIT share, or a workspace owner or admin; guests are refused.Delete is a soft delete and is a no-op when the diagram is already in the trash.Restore of a diagram that is not in the trash returns it unchanged.Delete and purge need the diagrams delete scope; restore and archive need the diagrams write scope.The trash list returns at most 200 diagrams, newest deleted first.

    Deleting a diagram moves it to the trash; restore brings it back, archive moves it out of both the library and the trash while keeping it, and purge permanently removes the diagram with its versions, shares, share links, comments, assets, search entries, and shape bindings. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. Workspace owners and admins see every trashed diagram in the workspace while other members see only the diagrams they own. Purge cannot be undone, and an id from another workspace returns 404.

    Start a diagram from a template and manage workspace templates

    Guarded

    Diagram Studio Templates tab: template search and filters, Use template, publish dialog, submit for review, approve and reject in the review queue, publish, unpublish, and delete

    Analytics

    diagrams.template.*diagrams.new-from-template

    App API

    GET /diagrams/templatesGET /diagrams/templates/pendingPOST /diagrams/templatesPOST /diagrams/from-template/{templateId}POST /diagrams/templates/{templateId}/submitPOST /diagrams/templates/{templateId}/approvePOST /diagrams/templates/{templateId}/rejectPOST /diagrams/templates/{templateId}/publishPOST /diagrams/templates/{templateId}/unpublishDELETE /diagrams/templates/{templateId}GET /v1/diagrams/templatesPOST /v1/diagrams/from-template/{templateId}

    MCP target

    atlas_diagrams_templates_applyatlas_diagrams_templates_createatlas_diagrams_templates_listatlas_route_delete_diagrams_templates_by_templateidatlas_route_get_diagrams_templates_pendingatlas_route_get_v1_diagrams_templatesatlas_route_post_diagrams_templates_by_templateid_approveatlas_route_post_diagrams_templates_by_templateid_publishatlas_route_post_diagrams_templates_by_templateid_rejectatlas_route_post_diagrams_templates_by_templateid_submitatlas_route_post_diagrams_templates_by_templateid_unpublishatlas_route_post_v1_diagrams_from_template_by_templateid

    Validation

    Template name is required and at most 160 characters; category is at most 80 characters (default Custom); description is at most 500 characters.A new template needs either a diagramId to copy or an inline document, and copying a diagram requires permission to view it.Visibility on create is PRIVATE or SHARED; only a workspace owner or admin may create a SHARED template or publish and unpublish one.Only the author may submit a template, and only a PRIVATE draft can be submitted; anything else returns 409 Conflict.Approve and reject are for workspace owners and admins and only work while the template is pending review; otherwise 409 Conflict. A reject reason is at most 500 characters.Delete is allowed for the author or a workspace owner or admin; built-in templates and templates from another workspace return 404.List accepts scope all, community, mine, or pending and an optional category of at most 80 characters.A new diagram title from a template is at most 240 characters; guests cannot create diagrams or templates.

    These routes list built-in templates together with the workspace community gallery and the caller's own drafts, create a diagram from a template, and run the moderation flow in which a member submits a draft and a workspace owner or admin approves or rejects it. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. Approval and rejection notify the author, and every transition is written to the audit log. The review queue is refused to anyone who is not a workspace owner or admin.

    Comment on a diagram and react to comments

    Guarded

    Diagram editor comments sidebar: pinned comment threads, comment composer, reply, edit, resolve, delete, and emoji reactions

    Analytics

    diagram.comments.*

    App API

    GET /diagrams/{id}/commentsPOST /diagrams/{id}/commentsPATCH /diagrams/{id}/comments/{commentId}DELETE /diagrams/{id}/comments/{commentId}GET /diagrams/{id}/comments/reactionsPOST /diagrams/{id}/comments/{commentId}/reactions

    MCP target

    atlas_diagrams_comments_createatlas_diagrams_comments_deleteatlas_diagrams_comments_listatlas_diagrams_comments_updateatlas_route_get_diagrams_by_id_comments_reactionsatlas_route_post_diagrams_by_id_comments_by_commentid_reactions

    Validation

    Comment body is required and at most 10,000 characters; an optional anchor pins the thread to the canvas.An update must provide a new body, a resolved flag, or both; only the author may change the body.Commenting, resolving, and reacting require the owner, a COMMENT or EDIT share, or a workspace owner or admin; view-only members and guests are refused.Reactions use the fixed set +1, -1, heart, tada, eyes, and thinking; a second press removes the reaction.A comment that does not belong to the diagram returns 404.

    These routes list the comments on a diagram (up to 500, oldest first), add a comment, edit or resolve it, delete it, and toggle emoji reactions. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. An @mention of a workspace member by email sends that member a notification that opens the comment. The author may delete their own comment, and anyone else needs edit permission on the diagram to delete it.

    Send a diagram for review, save checkpoints, and restore earlier versions

    Guarded

    Diagram editor review control (status menu and reviewer assignment) and version history panel with named checkpoints and restore

    Analytics

    diagram.review.*diagram.versions.*

    App API

    GET /diagrams/{id}/reviewPOST /diagrams/{id}/reviewGET /diagrams/{id}/versionsPOST /diagrams/{id}/versions/checkpointPOST /diagrams/{id}/versions/{versionId}/restoreGET /v1/diagrams/{id}/versions

    MCP target

    atlas_diagrams_versions_listatlas_diagrams_versions_restoreatlas_route_get_diagrams_by_id_reviewatlas_route_get_v1_diagrams_by_id_versionsatlas_route_post_diagrams_by_id_reviewatlas_route_post_diagrams_by_id_versions_checkpoint

    Validation

    Review status is one of DRAFT, IN_REVIEW, APPROVED, or CHANGES_REQUESTED; a request must set a status, a reviewer, or both.The reviewer must be an active member of the workspace, otherwise 400; null clears the reviewer. A decision reason is at most 2,000 characters.Checkpoint name is required and at most 160 characters after trimming.Setting review, saving a checkpoint, and restoring a version require edit permission on the diagram; reading requires view permission.A version that does not belong to the diagram returns 404.

    These routes read and change the review state of a diagram, list its last 100 versions, save a named checkpoint of the current state, and restore an earlier version. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. A restore first snapshots the current state so the restore itself can be undone, and both restores and checkpoints are written to the audit log.

    Share a diagram with teammates or through a public link

    Guarded

    Diagram editor share dialog: people search with role picker and remove, visibility options, public link scope, expiry, password, embed tab, revoke, and rotate

    Analytics

    diagram.share.*

    App API

    GET /diagrams/{id}/accessPOST /diagrams/{id}/accessDELETE /diagrams/{id}/access/{principalUserId}GET /diagrams/{id}/share-linksPOST /diagrams/{id}/share-linksDELETE /diagrams/{id}/share-links/{linkId}GET /v1/diagrams/{id}/accessPOST /v1/diagrams/{id}/accessDELETE /v1/diagrams/{id}/access/{principalUserId}

    MCP target

    atlas_diagrams_access_listatlas_diagrams_access_revokeatlas_diagrams_access_setatlas_diagrams_share_links_createatlas_diagrams_share_links_listatlas_diagrams_share_links_revokeatlas_route_delete_v1_diagrams_by_id_access_by_principaluseridatlas_route_get_v1_diagrams_by_id_accessatlas_route_post_v1_diagrams_by_id_access

    Validation

    Role is one of VIEW, COMMENT, EDIT, or RESTRICTED_VIEWER; a restricted viewer may view but not export or copy.Granting or revoking a role requires the diagram owner or a workspace owner or admin; guests are refused.A role cannot be assigned to the diagram owner (403).Revoking access for someone with no grant returns revoked false.Share link scope is view or comment (default view); expiresAt must be an ISO 8601 date-time or null; an optional password is 4 to 128 characters and is stored only as a hash.Creating or revoking a share link requires edit permission on the diagram; listing requires view permission and never returns the token hash.

    These routes list, grant, and revoke per-person roles on a diagram and create, list, and revoke public read-only or comment links. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. The raw link token is returned once on creation. Revoking a share link is idempotent, a link from another diagram returns 404, and every role change is written to the audit log.

    Link shapes to Atlas records and style them with formatting rules

    Guarded

    Diagram editor inspector data link section (record type, record search, field mapping, link and unlink) and the conditional formatting rules editor

    Analytics

    diagram.data-link.*diagram.rules.*

    App API

    GET /diagrams/{id}/bindingsPOST /diagrams/{id}/bindingsDELETE /diagrams/{id}/bindings/{bindingId}GET /diagrams/{id}/bindings/resolveGET /diagrams/{id}/rulesPUT /diagrams/{id}/rules

    MCP target

    atlas_diagrams_bindings_deleteatlas_diagrams_bindings_listatlas_diagrams_bindings_resolveatlas_diagrams_bindings_setatlas_diagrams_rules_getatlas_diagrams_rules_set

    Validation

    Record type is one of TASK, PROJECT, CRM_DEAL, CRM_CONTACT, CRM_ACCOUNT, EMPLOYEE, GOAL, or PORTFOLIO; node id is 1 to 200 characters.A field map holds at most 50 entries, each key and value 1 to 120 characters.A diagram may hold at most 500 shape bindings; a repeat POST for the same shape updates its binding.Rules are a list of at most 200; each has a field, an operator (eq, ne, gt, gte, lt, lte, contains, exists, empty), an optional value, and must set at least one of fill, stroke, text colour, or badge.Creating or removing a binding and replacing rules require edit permission on the diagram; reading requires view permission.

    These routes bind diagram shapes to live Atlas records, resolve the current field values of those records, and store the conditional formatting rules the editor applies to them. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. Values are resolved through each record's own service, so a record the caller may not see comes back marked not visible instead of leaking its fields. A binding that does not belong to the diagram returns 404.

    Export a diagram or render diagram code to an image

    Guarded

    Diagram editor export dialog (format, scope, selection, frame, and slide deck export) and the diagram code panel (language, source, render, insert)

    Analytics

    diagram.export.*diagram.dsl.*

    App API

    POST /diagrams/{id}/exportPOST /diagrams/render-dslPOST /v1/diagrams/{id}/exportGET /v1/diagrams/{id}/render

    MCP target

    atlas_diagrams_exportatlas_route_get_v1_diagrams_by_id_renderatlas_route_post_diagrams_render_dsl

    Validation

    Export format is svg, png, pdf, tagged-pdf, json, mermaid, drawio, or pptx (default svg), given in the body or the query.Scale is 1 to 4 and dpi is 72 to 384; they affect raster and PDF output only.An export may name either node ids (1 to 2,000) or a frame id, not both; an empty selection returns 400.A restricted viewer is refused an export (403).The /v1 render route returns png or svg only (default png).Diagram code type must be one of the supported languages (for example plantuml, graphviz, d2, mermaid, bpmn), and the source is 1 to 100,000 characters.

    Export renders a diagram to a downloadable file and records a diagram exported audit event; the /v1 render route returns an inline png or svg image of the diagram for embedding. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. Rendering diagram code returns an SVG for the canvas and returns 501 when the diagram rendering service is not configured for the deployment. All routes require view permission on the diagram.

    Generate a diagram from a spreadsheet, the HR org chart, or the Atlas data model

    Guarded

    Diagram Studio From your data actions (entity relationship diagram, org chart with department filter), the live org chart section, and the editor spreadsheet dialog

    Analytics

    diagrams.generate.*diagram.spreadsheet.*

    App API

    POST /diagrams/generate/from-tablePOST /diagrams/generate/org-chartPOST /diagrams/generate/erd-from-schema

    MCP target

    atlas_diagrams_erds_generateatlas_diagrams_org_charts_generateatlas_diagrams_tables_convert

    Validation

    Table kind is org, erd, or flow; provide a non-empty rows array (at most 5,000 rows) or a CSV string of at most 2 MB with a header row.Column mapping names are 1 to 120 characters each.A generated diagram may hold at most 3,000 nodes; a larger result returns 400 asking to narrow the input.The org chart accepts an optional root employee id and department id.The data model diagram accepts an optional list of at most 120 model names.

    These routes build a laid-out diagram document from tabular data, from the workspace HR hierarchy, or from the Atlas data model, and return it without saving it. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. The org chart reads people through the HR service so within-workspace access rules apply, and each node carries a binding to the employee record. The routes need only the diagrams read scope because nothing is persisted.

    Set the workspace diagram brand kit

    Guarded

    Diagram editor inspector brand kit section: brand colours, fonts, logo, apply to selection, and apply to all

    Analytics

    diagram.brand.*

    App API

    GET /diagrams/brand-kitPUT /diagrams/brand-kit

    MCP target

    atlas_route_get_diagrams_brand_kitatlas_route_put_diagrams_brand_kit

    Validation

    Only a workspace owner or admin may read or change the brand kit (403 otherwise).Colours are #RRGGBB hex values, at most 24; fonts are at most 12, each 1 to 120 characters.Logo URL must be a valid URL of at most 2,048 characters; theme preset is 1 to 80 characters; both accept null to clear.Omitted fields keep their stored value; colours and fonts replace the stored lists when given.

    These routes read and update the brand colours, fonts, logo, theme preset, and enforcement flag that diagrams in the workspace use. The unprefixed routes require the Diagrams module on the workspace plan; the /v1 twins accept a personal access token that carries the matching diagrams scope. A workspace without a brand kit reads back an empty default, and each update is written to the audit log.

    Draft, edit, and explain diagrams with the AI copilot

    Configured

    Diagram Studio AI start prompt and chips, and the editor copilot panel: prompt, send, stop, preview accept or reject, answer chips, import from code or image, and explain

    Analytics

    diagrams.ai-start.*diagram.copilot.*diagram.ai.*

    App API

    GET /diagrams/ai/statusPOST /diagrams/ai/generatePOST /diagrams/ai/editPOST /diagrams/ai/agentPOST /diagrams/ai/from-codePOST /diagrams/ai/from-imagePOST /diagrams/ai/explainPOST /diagrams/ai/search

    MCP target

    atlas_diagrams_ai_edits_applyatlas_diagrams_code_convertatlas_diagrams_generateatlas_diagrams_images_convertatlas_diagrams_searchatlas_diagrams_summarizeatlas_route_get_diagrams_ai_statusatlas_route_post_diagrams_ai_agent

    Validation

    Generate prompt is 1 to 4,000 characters; edit and agent prompts are 1 to 2,000 characters; an agent answer is at most 1,000 characters.The agent needs a prompt to start or a sessionId to resume; an expired session returns an error.An edit may name at most 200 selected node ids.Source code for import is 1 to 24,000 characters with kind erd, flow, or auto.An image import must be PNG, JPEG, WEBP, or GIF within the size cap.Search query is 1 to 500 characters with a limit of 1 to 50 (default 10).Request bodies reject unknown fields.Each run reserves cost against the workspace daily AI spend limit and returns 429 when the limit is reached.

    These routes report whether AI is available to the workspace, generate a diagram from a prompt, propose edits, run a multi-step agent that can ask questions, convert source code or an image into a diagram, explain a diagram in plain language, and search the workspace diagrams by meaning. They require a signed-in member with the diagrams read scope, and the generating routes need the diagrams write scope. Generate, edit, and agent stream progress as server-sent events and report failures in an error event; the generating, editing, import, and explain routes need a configured model provider, and the search route is not used by any screen.

    Browse, search, and download shape packs from the shape library

    Live

    Shape library page: search, category toggles, pack browser with download, resync, and remove, storage manager, and place into a new diagram

    Analytics

    diagrams.shape-library.*

    App API

    GET /diagrams/shapesGET /diagrams/shapes/categoriesGET /diagrams/shapes/pack/{pack}

    MCP target

    atlas_diagrams_shape_categories_listatlas_diagrams_shapes_searchatlas_route_get_diagrams_shapes_pack_by_pack

    Validation

    Search term is at most 120 characters; category is 1 to 80 characters; pack is 1 to 40 characters.Search page size is at most 500 (default 40).Pack pages use a cursor of at most 64 characters and a page size of at most 500 (default 200).

    These routes search the built-in shape and icon catalog together with the workspace custom shapes, list categories and packs with counts, and page through one pack so the browser can cache it for offline use. They require a signed-in member with the diagrams read scope. Results only ever include built-in shapes and shapes owned by the caller's workspace.

    Diagram custom shapes and semantic shape search API

    Live

    REST API with a personal access token or session that carries the diagrams read, write, or delete scope

    Analytics

    docs.actions.registry.diagrams.custom-shapes-api

    App API

    POST /diagrams/shapesDELETE /diagrams/shapes/{id}GET /diagrams/shapes/semantic

    MCP target

    atlas_diagrams_shapes_createatlas_diagrams_shapes_deleteatlas_route_get_diagrams_shapes_semantic

    Validation

    Shape name is required and at most 160 characters; category is at most 80 characters (default Custom); pack is at most 40 characters; at most 40 keywords of up to 60 characters.The SVG is required, at most 200,000 characters, must contain an svg root element, and must not contain a script element.Guests cannot save or delete custom shapes.Built-in library shapes cannot be deleted (403); a shape from another workspace returns 404.Semantic search requires a query of 1 to 120 characters and a limit of at most 100 (default 40).

    These routes save a workspace custom shape, delete one, and rank catalog shapes by meaning with a keyword fallback. Saving needs the diagrams write scope and deleting needs the diagrams delete scope. No screen calls these routes today.

    Diagram webhook catalog, share to Slack, and audit feed API

    Guarded

    REST API with a personal access token or session that carries the diagrams read or write scope

    Analytics

    docs.actions.registry.diagrams.integration-and-audit-api

    App API

    GET /diagrams/webhook-eventsPOST /diagrams/{id}/share-to-slackGET /diagrams/{id}/audit

    MCP target

    atlas_diagrams_slack_shareatlas_route_get_diagrams_by_id_audit

    Validation

    Share to Slack accepts an optional channel id of at most 64 characters and a scope of view or comment, and rejects unknown fields.Share to Slack creates a public link, so it needs the diagrams write scope and edit permission on the diagram.The audit feed needs edit permission on the diagram and accepts a cursor of at most 64 characters and a limit of at most 200 (default 50).

    The webhook events route lists the diagram events an integration can subscribe to and how deliveries are signed. Share to Slack creates a public view link and posts it to the connected Slack channel, and returns the link with a reason when Slack is not connected or no channel is set. The audit route returns the diagram audit events newest first. All three require the Diagrams module on the workspace plan. No screen calls these routes today.

    Whiteboards

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Create, open, edit, and delete whiteboards

    Live

    Whiteboards page: New whiteboard button, whiteboard cards with open and delete, the freeform editor with back, and retry on a failed list

    Analytics

    whiteboards.header.newwhiteboards.card.openwhiteboards.card.deletewhiteboards.editor.backwhiteboards.list.retry

    App API

    GET /whiteboardsPOST /whiteboardsGET /whiteboards/{id}PATCH /whiteboards/{id}DELETE /whiteboards/{id}GET /v1/whiteboardsPOST /v1/whiteboardsGET /v1/whiteboards/{id}PATCH /v1/whiteboards/{id}DELETE /v1/whiteboards/{id}

    MCP target

    atlas_route_delete_whiteboards_by_idatlas_route_get_whiteboardsatlas_route_get_whiteboards_by_idatlas_route_patch_whiteboards_by_idatlas_route_post_whiteboardsatlas_whiteboards_archiveatlas_whiteboards_createatlas_whiteboards_deleteatlas_whiteboards_getatlas_whiteboards_listatlas_whiteboards_renameatlas_whiteboards_update

    Validation

    Title is optional, 1 to 240 characters after trimming; a new whiteboard without a title is named Untitled whiteboard.An update may change the title, replace the scene, or set archived.Only the owner or a workspace owner or admin may archive or delete a whiteboard (403 otherwise).An If-Match version that does not match the stored version returns 409 Conflict; an If-Match that is not a non-negative integer returns 400.List returns at most 200 whiteboards, can filter by project, and hides archived boards unless includeArchived is set.

    These routes list, create, open, update, and delete freeform whiteboards; any member of the workspace may co-edit a whiteboard. The unprefixed routes require inbox access (view to read, create to create, update to change or delete) and the chat read or write scope; the /v1 twins accept a personal access token with the whiteboards read, write, or delete scope. Delete is a soft delete written to the audit log, and a whiteboard from another workspace or one already deleted returns 404.

    Chat

    Module guide

    8 actions · 6 live, 2 guarded, 0 configured

    Create channels, open direct messages, and manage channel membership

    Live

    Chat channel list, New channel dialog (name, topic, private toggle, member search), New direct message dialog, Add people dialog, channel details panel, and Leave channel action

    Analytics

    chat.channels.*chat.new-channel.*chat.add-people.search

    App API

    GET /chat/channelsPOST /chat/channelsGET /chat/channels/{id}PATCH /chat/channels/{id}POST /chat/channels/{id}/joinPOST /chat/channels/{id}/leaveGET /chat/channels/{id}/membersPOST /chat/channels/{id}/membersPOST /chat/dmsGET /v1/chat/channelsPOST /v1/chat/channelsGET /v1/chat/channels/{id}PATCH /v1/chat/channels/{id}GET /v1/chat/channels/{id}/membersPOST /v1/chat/channels/{id}/membersPOST /v1/chat/dms

    MCP target

    atlas_chat_channel_members_addatlas_chat_channel_members_listatlas_chat_channels_createatlas_chat_channels_getatlas_chat_channels_joinatlas_chat_channels_leaveatlas_chat_channels_listatlas_chat_channels_updateatlas_chat_dms_start

    Validation

    Channel list filters: scope is one of WORKSPACE, PROJECT, or DM; includeArchived defaults to false.A new channel has a scope of WORKSPACE or PROJECT (default WORKSPACE); direct messages are opened only through the direct message route.Channel name is required, trimmed, and at most 120 characters; topic at most 240 characters; description at most 4000 characters.A PROJECT channel requires a projectId.At most 500 seed member ids on create and at most 500 ids per add members call; only ids that belong to the workspace become members.A direct message takes 1 to 20 other user ids, needs at least two distinct participants, and reuses the existing conversation for the same set of people.Renaming, changing privacy, or archiving a channel requires the channel owner, the channel creator, or a workspace owner or admin; a direct message cannot be renamed or archived.Joining refuses a private channel or a direct message with 403 (invite only).Adding members to a private channel requires the channel owner, the channel creator, or a workspace owner or admin; members cannot be added to a direct message.A channel in another workspace, a deleted channel, or a private channel the caller is not in returns 404.

    These routes list the channels a person can see, create workspace and project channels, open one to one and group direct messages, rename or archive a channel, and manage who belongs to it. The session routes under /chat require the inbox module (view to read, create to create a channel or direct message, update for every other change) plus the chat:read or chat:write scope; the /v1 twins accept a personal access token with chat:read or chat:write and carry the public API rate limit and Idempotency-Key replay, and join and leave exist only on the session routes. A public workspace channel is browsable by any workspace member and readable without joining, while private channels and direct messages answer 404 to anyone outside them. Creating, updating, archiving, adding members, and opening a direct message each write an audit record, and leaving a channel revokes the caller's live subscription to it.

    Send, edit, delete, and react to chat messages

    Live

    Chat message composer, message timeline with Load older and gap recovery, message actions (edit, delete, reaction picker and quick reactions), thread panel with its own composer, typing indicator, and automatic read marking when a channel is open

    Analytics

    chat.message.*chat.messages.*chat.thread.*chat.timeline.gap.load

    App API

    GET /chat/channels/{id}/messagesPOST /chat/channels/{id}/messagesPATCH /chat/channels/{id}/messages/{mid}DELETE /chat/channels/{id}/messages/{mid}POST /chat/channels/{id}/messages/{mid}/reactionsDELETE /chat/channels/{id}/messages/{mid}/reactionsPOST /chat/channels/{id}/readPOST /chat/channels/{id}/typingGET /v1/chat/channels/{id}/messagesPOST /v1/chat/channels/{id}/messagesPATCH /v1/chat/channels/{id}/messages/{mid}DELETE /v1/chat/channels/{id}/messages/{mid}POST /v1/chat/channels/{id}/readPOST /v1/chat/channels/{id}/typing

    MCP target

    atlas_chat_channels_read_markatlas_chat_message_reactions_addatlas_chat_message_reactions_removeatlas_chat_messages_deleteatlas_chat_messages_listatlas_chat_messages_sendatlas_chat_messages_update

    Validation

    Message body is required, trimmed, and at most 8000 characters, on send and on edit.A message carries at most 10 linked attachments and at most 10 legacy attachment links; a legacy link must be an https URL of at most 2048 characters and may not point at localhost, a private or link local address, or an internal host.Each linked attachment must be a READY upload in the same channel, uploaded by the sender, and not already linked to another message, or the whole send is refused with 400.A message that looks like it contains sensitive data (for example a card number or a private key) is refused with 400 before anything is stored.A thread reply must name a root message in the same channel that is not deleted.clientMsgId is at most 64 characters; a retried send with the same clientMsgId returns the original message instead of a duplicate.Message listing takes a limit from 1 to 100 (default 50), an optional cursor or a non negative sinceSeq, and an optional threadRootId.Only the author may edit a message; only the author or a workspace owner or admin may delete one.A reaction emoji is required, trimmed, and at most 32 characters; reacting twice with the same emoji is a no op.Typing signals from one person in one channel are throttled to one every 3 seconds.Private channels and direct messages require membership; a message in another channel or workspace, or a deleted message, returns 404.

    These routes page through a channel timeline or a thread, post and edit messages, soft delete them, add and remove emoji reactions, advance the caller's read cursor, and broadcast a typing signal to other members in real time. Session callers need the inbox module (view to read, create to send, update for edits, deletes, reactions, read state, and typing) plus chat:read or chat:write; the /v1 twins accept a personal access token with those scopes, carry the public API rate limit and Idempotency-Key replay, and do not offer reactions. Posting in a public workspace channel joins the caller automatically, while private channels and direct messages answer 404 to non members. Sends, edits that change the text, and deletes write audit records, and mentions in a message create notifications for the people named.

    Pin, save, and search chat messages

    Live

    Pin and Save message actions, the channel Pins panel, the personal Saved panel, and the chat search panel

    Analytics

    chat.message.pinchat.message.save

    App API

    POST /chat/channels/{id}/messages/{mid}/pinDELETE /chat/channels/{id}/messages/{mid}/pinGET /chat/channels/{id}/pinsPOST /chat/messages/{mid}/saveDELETE /chat/messages/{mid}/saveGET /chat/savedGET /chat/searchPOST /v1/chat/channels/{id}/messages/{mid}/pinDELETE /v1/chat/channels/{id}/messages/{mid}/pinGET /v1/chat/channels/{id}/pinsPOST /v1/chat/messages/{mid}/saveDELETE /v1/chat/messages/{mid}/saveGET /v1/chat/savedGET /v1/chat/search

    MCP target

    atlas_chat_messages_pinatlas_chat_messages_searchatlas_chat_messages_unpinatlas_chat_pins_listatlas_chat_saved_messages_addatlas_chat_saved_messages_listatlas_chat_saved_messages_remove

    Validation

    Channel and message ids are required and at most 64 characters.Pinning and saving are idempotent: a second pin or save returns the existing record, and unpinning or unsaving something that is not pinned or saved does nothing.A pin requires a message in the same channel that is not deleted; a save requires a message that exists and is not deleted.Pins and saves require membership of the channel, except in a public workspace channel; otherwise pins answer 403 and saves answer 403 or 404.Pin and saved lists leave out entries whose message has since been deleted.Saved items belong to one person: a caller only lists or removes their own.Search text is required, trimmed, and at most 200 characters; limit is 1 to 50 (default 25); search covers only channels the caller is a member of, and an optional channelId outside them returns no results.

    Pins mark a message for every member of a channel, saved items are a private bookmark list for one person, and search finds messages by case insensitive text across the channels the caller belongs to. Session callers need the inbox module (view for lists and search, update to pin, unpin, save, or unsave) plus chat:read or chat:write, and the /v1 twins accept a personal access token with the same scopes under the public API rate limit and Idempotency-Key replay. Pinning and unpinning write audit records. A channel in another workspace returns 404.

    Attach files to chat messages

    Guarded

    Attach files button in the chat composer, the upload tray with progress and remove, and the image, video, audio, PDF, and file previews with download on a sent message

    Analytics

    docs.actions.registry.chat.attach-files

    App API

    POST /chat/channels/{id}/attachments/ticketPOST /chat/channels/{id}/attachments/{attachmentId}/finalizeGET /chat/channels/{id}/attachmentsGET /chat/messages/attachmentsGET /chat/channels/{id}/attachments/{attachmentId}/downloadDELETE /chat/channels/{id}/attachments/{attachmentId}POST /v1/chat/channels/{id}/attachments/ticketPOST /v1/chat/channels/{id}/attachments/{attachmentId}/finalizeGET /v1/chat/channels/{id}/attachmentsGET /v1/chat/messages/attachmentsGET /v1/chat/channels/{id}/attachments/{attachmentId}/downloadDELETE /v1/chat/channels/{id}/attachments/{attachmentId}

    MCP target

    atlas_chat_attachment_uploads_finalizeatlas_chat_attachment_uploads_startatlas_chat_attachments_deleteatlas_chat_attachments_downloadatlas_chat_attachments_listatlas_chat_message_attachments_list

    Validation

    Upload ticket: filename 1 to 255 characters, contentType 1 to 180 characters, and a positive whole sizeBytes.Attachments are off for every workspace until Atlas staff turn them on; a disabled workspace gets 403 before any storage work.The declared size must fit the workspace per file limit (10 MB unless set otherwise), the 2 GB hard limit, and the workspace storage quota (413 when exceeded).SVG uploads are refused.The GUEST role is read only and cannot request a ticket, finalize, or delete.Only the uploader may finalize, only an upload in the UPLOADING state can be finalized, and the stored object must exist with exactly the declared size or the upload is marked failed and its quota released.Finalize accepts at most 10000 multipart parts, each with a positive part number and an etag of at most 256 characters.Download variant is original, thumbnail, or preview; only a READY attachment returns a signed link, valid for 5 minutes.Only the uploader or a workspace owner or admin may delete an attachment; deleting one already deleted does nothing.Private channels and direct messages require membership; an attachment in another channel or workspace returns 404.Object storage must be configured for the deployment, or ticket, finalize, download, and delete answer 503.

    These routes give the composer a short lived signed upload link (single or multipart), verify the stored file on finalize, scan it and build image previews in the background, list a channel's or a message's ready attachments, return short lived signed download links, and delete an upload. Session callers need the inbox module (view for lists and downloads, create for ticket and finalize, update to delete) plus chat:read or chat:write; the /v1 twins accept a personal access token with the same scopes under the public API rate limit and Idempotency-Key replay. The feature is guarded: it is disabled per workspace by default and needs object storage, and a ticket reserves quota atomically so concurrent uploads cannot overrun the workspace limit. Deletes write an audit record and free the stored bytes when no other attachment shares them.

    Write, archive, and delete docs inside a chat channel

    Live

    Channel Docs panel with template grid (blank, minutes of meeting, standup, and more), New doc, the full page doc editor with title, icon, autosave status, and outline, and archive and delete actions

    Analytics

    empty-state.chat-docs

    App API

    GET /chat/doc-templatesGET /chat/docsPOST /chat/docsGET /chat/docs/{id}PATCH /chat/docs/{id}POST /chat/docs/{id}/archivePOST /chat/docs/{id}/unarchiveDELETE /chat/docs/{id}GET /v1/chat/doc-templatesGET /v1/chat/docsPOST /v1/chat/docsGET /v1/chat/docs/{id}PATCH /v1/chat/docs/{id}POST /v1/chat/docs/{id}/archivePOST /v1/chat/docs/{id}/unarchiveDELETE /v1/chat/docs/{id}

    MCP target

    atlas_chat_doc_templates_listatlas_chat_docs_archiveatlas_chat_docs_createatlas_chat_docs_deleteatlas_chat_docs_getatlas_chat_docs_listatlas_chat_docs_restoreatlas_chat_docs_update

    Validation

    Listing docs requires a channelId; includeArchived defaults to false.A new doc requires a channelId the caller can read; title is optional, trimmed, 1 to 300 characters; icon at most 16 characters; template is one of blank, mom, meeting-notes, decision-log, project-brief, or standup.An update must change at least one of title, icon, coverKey, contentJson, or contentText; coverKey is at most 1024 characters.baseRevision is optional; when it no longer matches the stored revision the save is refused with 409 and the latest version is returned.clientEditId is at most 200 characters; an identical re-save by the same author within 5 seconds is treated as a no op.Each content save keeps a revision snapshot, and only the newest 50 snapshots are kept.Archiving or restoring requires the doc author or a channel manager (channel owner, channel creator, or workspace owner or admin).Deleting requires a channel manager or the doc author, and removes the doc with its revisions and shares permanently.A doc in a private channel or direct message the caller is not in, or in another workspace, returns 404 unless it was shared into a channel the caller can read.

    Channel docs are rich text documents that live in a chat channel: these routes list the templates, list a channel's docs, create a doc from a template, read and save it with optimistic revision checks, archive or restore it, and delete it. Session callers need the inbox module (view to read, create to create a doc, update for every other change) plus chat:read or chat:write, and the /v1 twins accept a personal access token with the same scopes under the public API rate limit and Idempotency-Key replay. Read access follows the channel: a member, or anyone in the workspace for a public channel, or anyone who can read a channel the doc was shared into. Changes are broadcast to the channel in real time.

    Share a chat doc to another channel and restore an earlier revision

    Live

    Doc Share dialog with channel targets and the shared list, and the doc Revisions panel with preview and Restore

    Analytics

    empty-state.chat-docs

    App API

    POST /chat/docs/{id}/shareDELETE /chat/docs/{id}/share/{channelId}GET /chat/docs/{id}/revisionsGET /chat/docs/{id}/revisions/{revision}POST /chat/docs/{id}/revisions/{revision}/restorePOST /v1/chat/docs/{id}/shareDELETE /v1/chat/docs/{id}/share/{channelId}GET /v1/chat/docs/{id}/revisionsGET /v1/chat/docs/{id}/revisions/{revision}POST /v1/chat/docs/{id}/revisions/{revision}/restore

    MCP target

    atlas_chat_doc_revisions_getatlas_chat_doc_revisions_listatlas_chat_doc_revisions_restoreatlas_chat_doc_shares_removeatlas_chat_docs_share

    Validation

    Sharing requires a target channelId that differs from the doc's home channel (400 otherwise).Sharing requires read access to both the home channel and the target channel; sharing twice into the same channel is idempotent.Removing a share requires a channel manager (channel owner, channel creator, or workspace owner or admin) or the doc author.Revision numbers are whole numbers of 0 or more; an unknown revision returns 404.Restoring a revision requires a channel manager or the doc author.A doc the caller cannot read returns 404.

    These routes share a channel doc into further channels so their members can read it, remove that share, list the stored revision snapshots, read one, and restore it as the current content. Session callers need the inbox module (view to read revisions, update to share, unshare, or restore) plus chat:read or chat:write, and the /v1 twins accept a personal access token with the same scopes under the public API rate limit and Idempotency-Key replay. A share and its removal are broadcast to the target channel in real time.

    Chat presence API

    Live

    Presence dots on chat avatars, filled from the online roster on load; the heartbeat route is an HTTP fallback for clients without a live socket

    Analytics

    docs.actions.registry.chat.presence-api

    App API

    GET /chat/presencePOST /chat/presence/heartbeat

    MCP target

    atlas_chat_presence_list

    Validation

    No request body: the workspace and the person always come from the signed in session, so a caller can only mark itself present and only read its own workspace.A person counts as online for 60 seconds after their last heartbeat.When the presence store is unavailable the heartbeat does nothing and the roster is empty, rather than failing the request.

    The heartbeat marks the caller online in their own workspace and announces a new arrival to other members over the real time connection; the roster route returns the ids of members seen in the last 60 seconds so a freshly loaded chat screen can paint presence before any change arrives. Both are self service routes available to any signed in workspace member, with chat:write for the heartbeat and chat:read for the roster when a token is used. Presence is normally driven by the live socket, so the web app reads the roster and does not call the heartbeat.

    Chat eDiscovery export API

    Guarded

    REST API only, with a signed in session or a token that carries the chat:write scope; no screen calls it

    Analytics

    docs.actions.registry.chat.ediscovery-export-api

    App API

    POST /chat/ediscovery/export

    MCP target

    atlas_chat_ediscovery_export

    Validation

    Role gate: the caller's workspace role must be OWNER or ADMIN, or the caller's custom role must hold the chat.ediscovery.export permission; anyone else gets 403.channelId is optional and narrows the export to one channel; from and to are optional ISO 8601 date times, from inclusive and to exclusive.Refused with 403 when the archive encryption key is not configured, or when object storage is unavailable, so an unencrypted export is never produced.Reads only the caller's own workspace.

    This route exports a workspace's chat for legal or compliance review: every channel in scope, including private channels and direct messages the caller is not a member of, with each message's author, body, sequence, and created, edited, and deleted times. It is gated by the role check in the service, not by a module permission: a workspace owner or admin, or a member whose custom role grants chat.ediscovery.export, may call it, and everyone else is refused with 403. The archive is encrypted, written to temporary object storage that expires after 24 hours, and the response returns its storage key, channel and message counts, size, expiry, and encryption algorithm. Every export writes an audit record naming the caller, the scope, and the archive.

    Huddles

    Module guide

    3 actions · 3 live, 0 guarded, 0 configured

    Start, join, and run a live audio huddle

    Live

    Huddles page Start huddle button, live huddle list with Join, and the huddle room with Mute, Share screen, Leave, and End controls

    Analytics

    huddles.header.starthuddles.live.joinhuddles.tabshuddle.room.*

    App API

    GET /huddlesPOST /huddlesGET /huddles/{id}POST /huddles/{id}/joinPOST /huddles/{id}/leavePATCH /huddles/{id}/statePOST /huddles/{id}/endGET /v1/huddlesPOST /v1/huddlesGET /v1/huddles/{id}POST /v1/huddles/{id}/joinPOST /v1/huddles/{id}/leavePATCH /v1/huddles/{id}/statePOST /v1/huddles/{id}/end

    MCP target

    atlas_huddles_endatlas_huddles_getatlas_huddles_joinatlas_huddles_leaveatlas_huddles_listatlas_huddles_startatlas_route_get_huddlesatlas_route_get_huddles_by_idatlas_route_patch_huddles_by_id_stateatlas_route_patch_v1_huddles_by_id_stateatlas_route_post_huddlesatlas_route_post_huddles_by_id_endatlas_route_post_huddles_by_id_joinatlas_route_post_huddles_by_id_leave

    Validation

    List filters: status is LIVE or ENDED, and an optional channelId; at most 100 huddles, newest first, and only those the caller may access.Title is optional, trimmed, 1 to 240 characters, and defaults to Huddle; channelId and projectId are optional.A huddle may be anchored only on a channel the caller can read (a member, or a public workspace channel); another channel returns 404.Joining and changing state require a LIVE huddle (403 once it has ended).State changes take optional muted and sharingScreen flags and apply only to the caller's own participant record.Only the host or a workspace owner or admin may end a huddle; the huddle also ends when its last participant leaves.A huddle the caller cannot access, or one in another workspace, returns 404.

    These routes start a huddle (the starter becomes host), list and read huddles, join and leave them, publish a participant's mute and screen share state, and end them; audio travels peer to peer between browsers while the server keeps the roster and relays signalling. Session callers need the inbox module (view to read, create to start, update for every other change) plus huddles:read or huddles:write, and the /v1 twins accept a personal access token with those scopes under the public API rate limit and Idempotency-Key replay. Access follows the anchor channel, or for an unanchored huddle, the starter and its participants. Starting and ending write audit records, and the end is recorded once even when several people end or leave at the same time.

    Record your screen and manage recordings

    Live

    Huddle room Record and Stop controls, the recordings library, and the recording player with video, rename, and delete

    Analytics

    recordings.capture.*recordings.library.openhuddle.room.recordrecording.player.*

    App API

    GET /recordingsPOST /recordingsGET /recordings/{id}POST /recordings/{id}/finalizeGET /recordings/{id}/playback-urlPATCH /recordings/{id}DELETE /recordings/{id}

    MCP target

    atlas_route_delete_recordings_by_idatlas_route_get_recordingsatlas_route_get_recordings_by_idatlas_route_get_recordings_by_id_playback_urlatlas_route_patch_recordings_by_idatlas_route_post_recordingsatlas_route_post_recordings_by_id_finalize

    Validation

    List takes mine (default false), an optional cursor, and a limit from 1 to 100 (default 30); a caller sees their own recordings plus TENANT and LINK recordings.A new recording requires a title of 1 to 240 characters and a positive sizeBytes of at most 2 GiB; description at most 4000 characters; contentType at most 80 characters (default video/webm); visibility is PRIVATE, TENANT, or LINK (default TENANT).Finalize accepts an optional sha256 of at most 80 characters; when the uploaded object is missing the recording is marked FAILED.Updates accept title (1 to 240 characters), description (at most 4000 characters, or null), and visibility.Only the owner or a workspace owner or admin may finalize, update, or delete a recording (403 otherwise).A PRIVATE recording is hidden (404) from everyone but its owner and workspace owners and admins.A playback link is issued only for a recording stored in the cloud and is valid for 5 minutes; a recording kept in the browser returns 404.

    These routes create a recording and return a short lived signed upload link, confirm the upload, list and read recordings, return a playback link, rename or change visibility, and soft delete a recording with its stored file. When the deployment has no object storage the recording stays in the browser that captured it and the server keeps only its record. Callers need the inbox module (view to read, create to start an upload, update to change or delete) plus chat:read or chat:write. Creating, finalizing, and deleting write audit records, and each playback increments the view count.

    Share a recording by link and comment on it

    Live

    Recording player Share button and time stamped comment list with comment input, Post, seek, and delete; a shared link opens the public recording player

    Analytics

    recording.player.sharerecording.comment.*

    App API

    POST /recordings/{id}/shareDELETE /recordings/{id}/shareGET /recordings/public/{slug}GET /recordings/{id}/commentsPOST /recordings/{id}/commentsDELETE /recordings/{id}/comments/{cid}

    MCP target

    atlas_route_delete_recordings_by_id_comments_by_cidatlas_route_get_recordings_by_id_commentsatlas_route_post_recordings_by_id_comments

    Validation

    Only the owner or a workspace owner or admin may share or stop sharing a recording.Sharing sets visibility to LINK and reuses the existing link if there is one; stopping sharing clears the link and sets visibility to TENANT.The public route takes a slug of 8 to 120 characters and returns 404 when the link is unknown, revoked, deleted, or no longer LINK visibility.Comment body is required, trimmed, and at most 4000 characters; atMs is an optional whole number of milliseconds of 0 or more.Only the comment author or a workspace owner or admin may delete a comment; an unknown comment returns 404.

    These routes mint a public share link for a recording, revoke it, serve the public player with a short lived playback link to anyone holding the link without signing in, and list, add, and delete time stamped comments. The signed in routes need the inbox module (view to read comments, create to comment, update to share, stop sharing, or delete a comment) plus chat:read or chat:write. The public route requires no account, reads only a recording whose visibility is LINK, and increments its view count. Sharing and stopping sharing write audit records.

    Attachments

    Module guide

    3 actions · 3 live, 0 guarded, 0 configured

    Attach evidence files to an incident during its postmortem

    Live

    Postmortem detail Evidence panel: upload button, file list with download and remove actions

    Analytics

    service-ops.attachment.upload.incidentservice-ops.attachment.download.incidentservice-ops.attachment.remove.incident

    App API

    GET /service-ops/incidents/{incidentId}/attachmentsPOST /service-ops/incidents/{incidentId}/attachments/ticketPOST /service-ops/incidents/{incidentId}/attachments/{attachmentId}/finalizeGET /service-ops/incidents/{incidentId}/attachments/{attachmentId}/downloadDELETE /service-ops/incidents/{incidentId}/attachments/{attachmentId}

    MCP target

    atlas_service_incidents_attachments_deleteatlas_service_incidents_attachments_downloadatlas_service_incidents_attachments_listatlas_service_incidents_attachments_upload_finalizeatlas_service_incidents_attachments_upload_start

    Validation

    Incident and attachment ids are required and at most 64 characters.Upload ticket: name is required (1 to 512 characters), contentType is required (1 to 255 characters), sizeBytes is a positive integer.Executable file extensions are refused, and the content type must be on the workspace allow list for attachments.The declared size must be above zero and no larger than the configured attachment maximum.Finalize is refused unless the attachment is still uploading; the stored object must exist and match the declared size, stored content type, and a check of the real bytes, otherwise the row is marked failed and the object is deleted.The GUEST role is read only and cannot request a ticket, finalize, or remove.Download links are signed and expire after 15 minutes; only a ready attachment can be downloaded.The incident must be readable in the caller's workspace, otherwise the request answers 404.

    These routes upload, list, download, and remove files on a service operations incident, which the postmortem screen shows as its Evidence panel. Reading needs the attachments:read scope and view access to Incident Management; uploading, finalizing, and removing need attachments:write and update access. An upload is a two step flow: the ticket returns a signed upload address valid for 15 minutes, and finalize verifies the stored object before the file becomes ready. Uploads and downloads answer 503 when object storage is not configured, while the list still answers from the database.

    Keep files on a client onboarding

    Live

    Onboarding workspace detail panel Files section: upload button, file list with download and remove actions

    Analytics

    service-ops.attachment.upload.client-onboardingservice-ops.attachment.download.client-onboardingservice-ops.attachment.remove.client-onboarding

    App API

    GET /client-onboarding/{onboardingId}/attachmentsPOST /client-onboarding/{onboardingId}/attachments/ticketPOST /client-onboarding/{onboardingId}/attachments/{attachmentId}/finalizeGET /client-onboarding/{onboardingId}/attachments/{attachmentId}/downloadDELETE /client-onboarding/{onboardingId}/attachments/{attachmentId}

    MCP target

    atlas_onboarding_attachments_deleteatlas_onboarding_attachments_downloadatlas_onboarding_attachments_listatlas_onboarding_attachments_upload_finalizeatlas_onboarding_attachments_upload_start

    Validation

    Onboarding and attachment ids are required and at most 64 characters.Upload ticket: name is required (1 to 512 characters), contentType is required (1 to 255 characters), sizeBytes is a positive integer.Executable file extensions are refused, and the content type must be on the workspace allow list for attachments.The uploader must be a signed-in person, because the uploader column on this record is required.Finalize is refused unless the attachment is still uploading; size, stored content type, and the real bytes are verified, and a failure marks the row failed and deletes the object.The GUEST role is read only and cannot request a ticket, finalize, or remove.Download links are signed and expire after 15 minutes; only a ready attachment can be downloaded.

    These routes hold the files that belong to one client onboarding, such as the signed order form or the migration plan, shown in the Files section of the onboarding workspace. Reading needs the attachments:read scope and view access to Client Onboarding; uploading, finalizing, and removing need attachments:write and update access. An onboarding outside the caller's workspace answers 404, and uploads and downloads answer 503 when object storage is not configured.

    Engagement files API

    Live

    REST API with a personal access token that carries the attachments:read, attachments:write, or attachments:delete scope

    Analytics

    docs.actions.registry.attachments.engagement-files-api

    App API

    GET /engagements/{engagementId}/attachmentsPOST /engagements/{engagementId}/attachments/ticketPOST /engagements/{engagementId}/attachments/{attachmentId}/finalizeGET /engagements/{engagementId}/attachments/{attachmentId}/downloadDELETE /engagements/{engagementId}/attachments/{attachmentId}

    MCP target

    atlas_delivery_engagements_attachments_deleteatlas_delivery_engagements_attachments_downloadatlas_delivery_engagements_attachments_finalizeatlas_delivery_engagements_attachments_listatlas_delivery_engagements_attachments_upload

    Validation

    Engagement and attachment ids are required and at most 64 characters.Upload ticket: name is required (1 to 512 characters), contentType is required (1 to 255 characters), sizeBytes is a positive integer.Executable file extensions are refused, and the content type must be on the workspace allow list for attachments.Finalize is refused unless the attachment is still uploading; size, stored content type, and the real bytes are verified before the file becomes ready.The GUEST role is refused on every route, including reads, because guests reach engagement files only through the client portal.The engagement must be visible to the caller: an information barrier raised over files, or restricted access on the engagement, refuses the request.Download links are signed and expire after 15 minutes.

    These routes upload, list, download, and remove files on a client delivery engagement. Reading needs attachments:read and view access to Client Delivery, uploading and finalizing need attachments:write and update access, and removing needs attachments:delete and delete access. A new file is internal by default and is not shown in the client portal until someone shares it with the client. Uploads and downloads answer 503 when object storage is not configured.

    Comments

    Module guide

    4 actions · 4 live, 0 guarded, 0 configured

    Discuss an incident during its postmortem

    Live

    Postmortem detail Discussion panel: comment list, comment box, and Post button

    Analytics

    service-ops.discussion.post.incident

    App API

    GET /service-ops/incidents/{incidentId}/commentsPOST /service-ops/incidents/{incidentId}/comments

    MCP target

    atlas_service_incidents_comments_createatlas_service_incidents_comments_list

    Validation

    Comment body is required and at most 20,000 characters.List paging: limit is a positive integer up to 200 (default 100), with an optional cursor.A reply's parent comment must exist and belong to the same incident, otherwise the request answers 404 or 409.The GUEST role is read only and cannot post.The incident must be readable in the caller's workspace.

    These routes list and post comments on a service operations incident, which the postmortem screen shows as its Discussion panel. Reading needs the comments:read scope and view access to Incident Management, and posting needs comments:write and update access. Every new comment is also mirrored onto the incident timeline, and a failure to write the timeline entry does not undo the comment. Each post is recorded in the audit log.

    Discuss a client onboarding with the team

    Live

    Onboarding workspace detail panel Discussion section: comment list, comment box, and Post button

    Analytics

    service-ops.discussion.post.client-onboarding

    App API

    GET /client-onboarding/{clientOnboardingId}/commentsPOST /client-onboarding/{clientOnboardingId}/comments

    MCP target

    atlas_onboarding_comments_createatlas_onboarding_comments_list

    Validation

    Comment body is required and at most 20,000 characters.List paging: limit is a positive integer up to 200 (default 100), with an optional cursor.A reply's parent comment must exist and belong to the same onboarding, otherwise the request answers 404 or 409.The GUEST role is read only and cannot post.The onboarding must be readable in the caller's workspace.

    These routes list and post comments on one client onboarding, so questions and decisions stay on the record instead of in a chat channel. Reading needs the comments:read scope and view access to Client Onboarding, and posting needs comments:write and update access. Each post is recorded in the audit log, and a reply to a comment from another onboarding is refused with 409.

    Engagement, thread, and deliverable comments API

    Live

    REST API with a personal access token that carries the comments:read or comments:write scope

    Analytics

    docs.actions.registry.comments.engagement-comments-api

    App API

    GET /engagements/{engagementId}/commentsPOST /engagements/{engagementId}/commentsGET /engagement-threads/{engagementThreadId}/commentsPOST /engagement-threads/{engagementThreadId}/commentsGET /engagement-deliverables/{engagementDeliverableId}/commentsPOST /engagement-deliverables/{engagementDeliverableId}/comments

    MCP target

    atlas_delivery_engagements_comments_createatlas_delivery_engagements_comments_list

    Validation

    Comment body is required and at most 20,000 characters.Engagement, thread, and deliverable ids are required and at most 64 characters.List paging: limit is a positive integer up to 200 (default 100), with an optional cursor.A reply's parent comment must sit on the same engagement, thread, or deliverable, otherwise the request answers 409.The GUEST role is refused on every route, because guests read engagement discussions only through the client portal.The engagement behind the thread or deliverable must be visible to the caller, including information barriers and restricted engagements.

    These routes list and post internal comments on a client delivery engagement, on one of its discussion threads, or on one of its deliverables. Reading needs the comments:read scope and view access to Client Delivery, and posting needs comments:write and update access. An engagement hidden from the caller by an information barrier or restricted access is refused. Each post is recorded in the audit log and sends the standard comment notifications.

    Task, project, and goal comments REST API

    Live

    REST API with a personal access token that carries the comments:read or comments:write scope

    Analytics

    docs.actions.registry.comments.work-item-comments-api

    App API

    GET /v1/commentsPOST /v1/commentsGET /v1/comments/{id}PATCH /v1/comments/{id}DELETE /v1/comments/{id}

    MCP target

    atlas_comments_createatlas_comments_deleteatlas_comments_getatlas_comments_listatlas_route_patch_v1_comments_by_id

    Validation

    List and create need exactly one of taskId, projectId, or goalId (each at most 64 characters).Comment body is required and at most 20,000 characters; an optional parentCommentId makes a reply.List paging: limit is a positive integer up to 200 (default 100), with an optional cursor.Update accepts a version in the body or an If-Match header with a non-negative integer; a stale version answers 409.OWNER and ADMIN may edit or delete any comment, a MEMBER only their own, and the GUEST role cannot change comments.A comment whose parent task, project, or goal is not readable answers 404.

    These public routes list, create, read, update, and delete comments on a task, project, or goal through one resource, using the same service as the comment threads on those screens. Reading needs the comments:read scope and writing needs comments:write, with the public API rate limits and Idempotency-Key replay applied. Deleting is a soft delete, and a comment in another workspace answers as not found.

    Announcements

    Module guide

    3 actions · 2 live, 1 guarded, 0 configured

    Write and publish an announcement to your workspace

    Guarded

    Settings Announcements page: announcement list, type and severity pickers, title, banner text and body fields, schedule fields, publish and unpublish toggles, and delete with confirmation

    Analytics

    settings.announcements.deleteannouncement_createdannouncement_updatedannouncement_published

    App API

    GET /v1/announcements/typesGET /v1/announcements/adminPOST /v1/announcements/adminGET /v1/announcements/admin/{id}PATCH /v1/announcements/admin/{id}POST /v1/announcements/admin/{id}/publishPOST /v1/announcements/admin/{id}/unpublishDELETE /v1/announcements/admin/{id}

    MCP target

    atlas_route_delete_v1_announcements_admin_by_idatlas_route_get_v1_announcements_adminatlas_route_get_v1_announcements_admin_by_idatlas_route_get_v1_announcements_typesatlas_route_patch_v1_announcements_admin_by_idatlas_route_post_v1_announcements_adminatlas_route_post_v1_announcements_admin_by_id_publishatlas_route_post_v1_announcements_admin_by_id_unpublish

    Validation

    typeKey is required (1 to 80 characters); severity is one of info, low, medium, high, or critical (default info).Title is required and at most 200 characters; banner text is required and at most 300 characters; the body is at most 20,000 characters.startsAt and endsAt are optional ISO date-times; status incident and maintenance ids are at most 128 characters.The audience is always forced to the caller's own workspace, whatever the request sends.Only workspace OWNER and ADMIN members with admin access to Team may author.An announcement from another workspace answers 404; one published by Atlas to every workspace answers 403 and cannot be changed here.

    These routes let a workspace OWNER or ADMIN create, edit, publish, unpublish, and delete announcements that appear as a banner for members of their own workspace, and read the type catalog that fills the type picker. Reading needs the announcements:read scope and writing needs announcements:write. Publishing keeps the first publish time on a republish, sends a realtime refresh to open sessions, and every change is recorded in the audit log. Deleting removes the announcement permanently.

    Read and dismiss announcement banners

    Live

    Announcement banner at the top of the app: call to action link, incident link, and dismiss button

    Analytics

    announcement_dismissedannouncement_cta_clickedannouncement_incident_link_clicked

    App API

    GET /v1/announcements/active-for-mePOST /v1/announcements/{id}/dismiss

    MCP target

    atlas_route_get_v1_announcements_active_for_meatlas_route_post_v1_announcements_by_id_dismiss

    Validation

    Any signed-in person may call these routes, with the announcements:read scope to read and announcements:write to dismiss.includeScheduled is opt-in with the values true or 1; otherwise only announcements in their active window are returned.Targeting rules and the caller's own dismissals are applied on the server.Dismiss is idempotent: dismissing twice, or dismissing an unknown announcement, still answers 200.

    These routes return the published announcements that target the signed-in person, with their dismissals applied, and record a dismissal so the banner stays hidden on every device. The banner reads them on every app screen and asks for scheduled announcements too, so an upcoming maintenance window can be shown before it starts. A dismissal is stored per person and never affects other members.

    See status announcements on the public status page

    Live

    Public status page announcement callout and announcement history list, with the View all announcements link

    Analytics

    status.announcements.view-all

    App API

    GET /v1/announcements/public/timeline

    MCP target

    No agent tool

    Validation

    No sign-in is required.Only published announcements whose type maps to the status timeline are returned.An announcement aimed at specific workspaces is never returned; only audiences that are safe to show publicly are included.Ended announcements roll off; scheduled ones are included only within the lookahead window, and at most 100 rows are read.

    This public route feeds the status page with published status announcements, active ones first and then scheduled ones in start order. It needs no authentication and exposes nothing targeted at a single workspace, so an internal workspace broadcast never appears on the public page.

    Dashboards

    Module guide

    2 actions · 0 live, 2 guarded, 0 configured

    Build a dashboard of report widgets

    Guarded

    Dashboards page: dashboard tabs, New dashboard dialog and templates, Add widget panel, widget cards with remove action

    Analytics

    dashboards

    App API

    GET /v1/dashboardsPOST /v1/dashboardsGET /v1/dashboards/{id}PATCH /v1/dashboards/{id}DELETE /v1/dashboards/{id}GET /v1/dashboards/{id}/renderPOST /v1/dashboards/{id}/widgetsPATCH /v1/dashboards/{id}/widgets/{widgetId}DELETE /v1/dashboards/{id}/widgets/{widgetId}GET /v1/dashboards/{id}/widgets/{widgetId}/render

    MCP target

    atlas_route_delete_v1_dashboards_by_idatlas_route_delete_v1_dashboards_by_id_widgets_by_widgetidatlas_route_get_v1_dashboardsatlas_route_get_v1_dashboards_by_idatlas_route_get_v1_dashboards_by_id_renderatlas_route_get_v1_dashboards_by_id_widgets_by_widgetid_renderatlas_route_patch_v1_dashboards_by_idatlas_route_patch_v1_dashboards_by_id_widgets_by_widgetidatlas_route_post_v1_dashboardsatlas_route_post_v1_dashboards_by_id_widgets

    Validation

    Dashboard name is required and at most 160 characters; the description is at most 2,000 characters; at most 40 widgets on create.Widget kind is metric, chart, or list; the title is required and at most 160 characters; position is a non-negative integer.Each widget query names a dataset, at most 3 dimensions, at most 8 measures, at most 20 filters, and a row limit of at most 1,000.Setting isDefault clears the default flag on the caller's other dashboards.Dashboards are owned by one person: another person's dashboard or widget answers 404.The workspace must hold the analytics entitlement, and the caller needs the matching view, create, update, or delete access to Analytics.

    These routes create, rename, and delete personal dashboards, add, edit, and remove their widgets, and render them by running every widget query against the caller's workspace data. Reading needs the dashboards:read scope and changes need dashboards:write, and every change is recorded in the audit log. A widget whose query fails renders with its error message instead of failing the whole dashboard.

    Preview a report query before saving it as a widget

    Guarded

    Dashboards Add widget query builder: dataset picker, dimension and measure pickers, filters, and live preview

    Analytics

    report-builder

    App API

    GET /v1/dashboards/datasetsPOST /v1/dashboards/query

    MCP target

    atlas_route_get_v1_dashboards_datasetsatlas_route_post_v1_dashboards_query

    Validation

    The dataset must be a registered dataset key, otherwise the query answers 400.At most 3 dimensions, 8 measures, and 20 filters; the row limit is at most 1,000.Measures use count, sum, avg, min, or max, and every aggregation except count needs a field.Filter operators are eq, ne, in, gt, gte, lt, lte, or contains; in needs an array, and a field the dataset does not allow answers 400.Date range bounds must be valid ISO dates on a valid date field.

    These routes return the catalog of reportable datasets with their dimensions and measures, and run an unsaved aggregation query so the builder can preview a widget. Both need the dashboards:read scope, view access to Analytics, and the analytics entitlement. Every query runs scoped to the caller's workspace and saves nothing.

    Habits

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Habits REST API

    Live

    REST API with a personal access token that carries the habits:read or habits:write scope

    Analytics

    docs.actions.registry.habits.habits-rest-api

    App API

    GET /v1/habitsPOST /v1/habitsGET /v1/habits/{id}PATCH /v1/habits/{id}DELETE /v1/habits/{id}POST /v1/habits/{id}/check-inDELETE /v1/habits/{id}/check-inGET /v1/habits/at-riskPOST /v1/habits/at-risk/notifyPOST /v1/habits/bulk-archive

    MCP target

    atlas_habits_archiveatlas_habits_at_risk_listatlas_habits_at_risk_notifyatlas_habits_bulk_archiveatlas_habits_check_ins_createatlas_habits_check_ins_deleteatlas_habits_createatlas_habits_getatlas_habits_listatlas_habits_update

    Validation

    Name is required and at most 120 characters; emoji is at most 8 characters; notes are at most 2,000 characters.targetPerPeriod is an integer from 1 to 50 and periodDays an integer from 1 to 365.Update must change at least one field.Check-in date is optional in YYYY-MM-DD form and defaults to the person's local day; check-in notes are at most 500 characters; a second check-in for the same day returns the existing one.Undoing a check-in needs a date query in YYYY-MM-DD form; a missing or malformed date changes nothing.Bulk archive takes 1 to 100 ids.Habits belong to one person: another person's habit answers 404, and a check-in on an archived habit answers 404.

    These public routes let a person list, create, edit, archive, and check in their own habits, with streak statistics, and find the habits whose streak is at risk this period. Reading needs habits:read and changes need habits:write. DELETE archives the habit rather than deleting it, and the at-risk notify route sends an in-app notification only for habits not already notified in the last 24 hours. The Habits screen uses the session routes of the same service.

    Workload

    Module guide

    1 actions · 1 live, 0 guarded, 0 configured

    Workload and capacity REST API

    Live

    REST API with a personal access token that carries the workload:read or workload:write scope

    Analytics

    docs.actions.registry.workload.workload-rest-api

    App API

    GET /v1/workloadGET /v1/workload/capacityPOST /v1/workload/capacityDELETE /v1/workload/capacity/{id}GET /v1/workload/levelingGET /v1/workload/overallocationsGET /v1/workload/users/{userId}/days/{date}/tasks

    MCP target

    atlas_route_delete_v1_workload_capacity_by_idatlas_route_get_v1_workload_levelingatlas_workload_calculateatlas_workload_capacity_listatlas_workload_capacity_setatlas_workload_day_tasks_listatlas_workload_overallocations_list

    Validation

    Workload, overallocation, and leveling queries need from and to dates in YYYY-MM-DD form, with optional userId and projectId.Capacity: userId is required; hoursPerWeekday is exactly 7 numbers from 0 to 24; timezone defaults to UTC; effectiveFrom is an optional YYYY-MM-DD date.A capacity row for the same person and effective date is replaced rather than duplicated.A userId that is not an active member of the caller's workspace answers 404.Drill down needs a userId and a YYYY-MM-DD date; an unknown capacity id answers 404.

    These public routes compute per-person, per-day allocation against capacity, list the days where a person is over capacity with a moderate, high, or critical severity, propose leveling moves, drill into the tasks counted on one day, and manage capacity profiles. Reading needs workload:read and capacity changes need workload:write. Leveling only proposes reassignments or deferrals and changes nothing. The Workload screen uses the session routes of the same service.

    Developer Platform

    Module guide

    6 actions · 6 live, 0 guarded, 0 configured

    Hosted MCP endpoint

    Live

    MCP client connected by URL to /mcp with a personal access token or an Atlas OAuth access token as the bearer credential

    Analytics

    docs.actions.registry.developer-platform.hosted-mcp-endpoint

    App API

    POST /mcpGET /mcpDELETE /mcp

    MCP target

    No agent tool

    Validation

    An Authorization header of the form Bearer <credential> is required; a missing or empty bearer token is refused with 401.Only a personal access token (prefix atlas_pat_) or an Atlas OAuth access token is accepted; a first-party session token is refused with 401 before any validation.The credential is validated by the same guard as the REST API: hash match, not revoked, not expired, owner active, and the workspace IP allowlist.Every rejection happens before a session opens, so a refused request leaves no half-open session.When the OAuth resource server is enabled, a 401 carries a WWW-Authenticate challenge that points at the protected-resource metadata, built from a trusted host rather than the raw Host header.

    These routes are the hosted Model Context Protocol endpoint: an AI assistant connects by URL, opens a session with an initialize request, sends tool calls with POST, listens with GET, and ends the session with DELETE. The route is not behind the session sign-in guard because it performs its own credential check, and each tool call is forwarded to the /v1 API with the caller's own credential, so scopes, workspace scoping, rate limits, and idempotency are the same as for the REST API. Only the normal tool profile is ever built on this path.

    Single-file MCP server download

    Live

    Download links on the MCP documentation page for atlas-mcp-server.mjs, its SHA-256 checksum, and manifest.json

    Analytics

    docs.actions.registry.developer-platform.mcp-server-download

    App API

    GET /mcp/download/{file}

    MCP target

    No agent tool

    Validation

    Only three file names can be read: atlas-mcp-server.mjs, atlas-mcp-server.mjs.sha256, and manifest.json; any other name answers 404.When the bundle is not present on the deployment, the route answers 404 and points the caller at the hosted endpoint instead.The server file is sent as an attachment with an X-Checksum-Sha256 header and X-Content-Type-Options: nosniff.

    This route serves the Atlas MCP server as one file for people who run it on their own machine with Node 18.17 or later, for example behind an IP-restricted token or on an offline network. It is public and needs no credential, because the file holds no secret and is the same for everyone. It refuses every file name outside the fixed list, so no path can reach anything else on the server.

    Register and manage OAuth apps for the workspace

    Live

    Settings, Developer: overview counts, register app form with name, redirect URIs, scopes, and client type, and per-app rotate secret and revoke buttons

    Analytics

    oauth_app_register_startedoauth_app_registeredoauth_app_register_failed

    App API

    GET /v1/developer/overviewGET /v1/developer/oauth-appsPOST /v1/developer/oauth-appsPOST /v1/developer/oauth-apps/{clientId}/rotate-secretDELETE /v1/developer/oauth-apps/{clientId}

    MCP target

    No agent tool

    Validation

    name is required and at most 120 characters.redirectUris holds at most 10 URLs of at most 2048 characters, each over https or over http to a loopback host.A confidential client needs at least one redirect URI; a public client may have none.scopes holds 1 to 32 known scopes; an unknown scope is refused.confidential defaults to true, which issues a client secret shown once; false issues a public client that must use PKCE.Registering, rotating, and revoking need the OWNER or ADMIN role; any other role is refused with 403.A clientId that is not an app of this workspace answers 404.

    An owner or administrator registers OAuth apps that act on the workspace, rotates a confidential app's secret, and revokes an app together with every token it holds, while the overview shows counts of tokens, webhooks, and apps alongside the rate limits and scope catalog. Every route needs the developer:manage scope, which grants no access to workspace data. Registration, rotation, and revocation are written to the audit log, and a new secret is returned once and never stored in readable form.

    Developer usage, rate limit, and scope catalog API

    Live

    REST API with a personal access token that carries the developer:manage scope

    Analytics

    docs.actions.registry.developer-platform.usage-and-limits-api

    App API

    GET /v1/developer/usageGET /v1/developer/rate-limitsGET /v1/developer/scopes

    MCP target

    No agent tool

    Validation

    Every route needs the developer:manage scope.Usage and rate limits are read for the caller's own workspace only.The scope catalog is the full scope vocabulary with a description for each scope.

    These read-only routes report the workspace's token, webhook, and OAuth app counts, the effective request ceiling and window for each rate-limit class, and the list of scopes a credential can carry. They let a console or integration show limits without hard-coding them. They change nothing and refuse a credential without the developer:manage scope.

    See the workspace API limits

    Live

    Settings, API access: workspace limits card with requests per minute by class, monthly API quota and usage, daily AI spend cap, and webhook retry policy

    Analytics

    settings.api-access.limits.retry

    App API

    GET /v1/workspace/limits

    MCP target

    atlas_workspace_limits_get

    Validation

    Owners and administrators only, with the API view permission and the workspace:read scope.Read only: the limits are set by Atlas staff and cannot be changed through this route.

    An owner, an administrator, or an integration with workspace:read reads the limits that apply to the workspace so it can pace itself: requests a minute for each class, the monthly API call quota and how much is used, the daily AI spend cap, and how webhooks are retried. The values combine the plan defaults with any limits set for the workspace. The route reads only the caller's own workspace.

    Choose which sensitive areas tokens may reach

    Live

    Settings, API access: token access card with one switch per sensitive area (delivery, connectors, service, chat)

    Analytics

    settings.api-access.token-access.*

    App API

    GET /v1/workspace/token-accessPUT /v1/workspace/token-access

    MCP target

    No agent tool

    Validation

    allowedFamilies is a list drawn only from delivery, connectors, service, and chat.Unknown body fields are refused.Session only: no token can read or change this setting.Reading needs the API view permission; saving needs the API admin permission and the OWNER or ADMIN role.

    An owner or administrator decides whether personal access tokens and agent tools may reach the workspace's most sensitive areas: client delivery, connectors, service operations, and chat. The setting is session only, because it governs what tokens can do. Every change is written to the audit log.


    Coverage

    How this reference compares to the real surface area. The generator walks every controller in apps/api/src, the OpenAPI specification, and the MCP tool catalog, then diffs them against the curated registry above.

    Generated 2026-10-11T14:22:36.760Z. Run node scripts/generate-action-docs.mjs to refresh.

    >Generated registry candidates (21)
    • GET/v1/client-delivery/config/portalmedium

      Portal settings

      apps/api/src/client-delivery/client-delivery-config.controller.ts

    • PATCH/v1/client-delivery/config/portalmedium

      Set portal settings

      apps/api/src/client-delivery/client-delivery-config.controller.ts

    • GET/v1/client-delivery/config/portal/addressingmedium

      Addressing

      apps/api/src/portal-addresses/portal-addressing.controller.ts

    • POST/v1/client-delivery/config/portal/domainsmedium

      Request domain

      apps/api/src/portal-addresses/portal-addressing.controller.ts

    • POST/v1/client-delivery/config/portal/domains/{domainId}/checkmedium

      Check domain

      apps/api/src/portal-addresses/portal-addressing.controller.ts

    • POST/v1/client-delivery/config/portal/domains/{domainId}/removemedium

      Remove domain

      apps/api/src/portal-addresses/portal-addressing.controller.ts

    • PUT/v1/client-delivery/config/portal/subdomainmedium

      Set subdomain

      apps/api/src/portal-addresses/portal-addressing.controller.ts

    • GET/v1/client-delivery/config/portal/subdomain-availabilitymedium

      Subdomain availability

      apps/api/src/portal-addresses/portal-addressing.controller.ts

    On this page

    • What is a quick action?
    • Parity rule
    • Action catalogue
    • Coverage