Developer Platform
Build This API recipes
Eighteen complete, contract-backed API slices for BuildWithHQ and API43 product concepts.
These recipes turn each Build This concept into an ordered API slice. Every method, path, scope, parameter, request schema, response status, and SDK method is generated from the current public contract. The support page cannot quietly drift from OpenAPI: the recipe generator and Developer Kit build fail when an operation disappears or changes.
How to use a recipe
- Choose the product slice and grant a backend credential only its listed scopes.
- Use real identifiers returned by prior steps or selected from real app configuration; the recipes contain no sample GUIDs.
- Use the app credential only for account and user administration. Exchange it for a short-lived user token before performing end-user work.
- Resolve each step's request body from the named OpenAPI schema. Generated clients receive the same shape.
- Carry correlation IDs end to end and run all four release assertions.
A credential missing a listed scope must receive HTTP 403 with credential_scope_required. A delegated user outside the record envelope must receive the module's non-disclosing 403/404 response, and no mutation may occur.
import { BuildWithHQModuleClient } from "./sdk/BuildWithHQConnector.js";
const api = new BuildWithHQModuleClient({
saasAppId: process.env.BWHQ_SAAS_APP_ID!,
credential: delegatedUserToken,
});
// Choose the exact typed method listed below. Values come from the signed-in
// user's permitted selection or a prior response, never from a sample tenant.
const result = await api.workOrdersGet({ recordId });
The examples describe executable API flows; they do not grant permission. A route parameter identifies a target and never proves that the caller may read or mutate it.
CrewOS
Coordinate AI operators, inspect governed work, and approve a proposed action with replayable evidence.
Identity: delegated-user
Least-privilege scopes: modules.goclaw.read modules.goclaw.write modules.record-graph.read modules.universal-inbox.read
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Inspect work waiting for the signed-in user's approval. | GET | /v1/apps/{saasAppId}/goclaw/approvals | modules.goclaw.read | goClawApprovalsGet |
| 2 | Load the permitted relationship graph behind the proposed work. | GET | /v1/apps/{saasAppId}/modules/record-graph/{recordId} | modules.record-graph.read | recordGraphGet |
| 3 | Approve the reviewed suggestion batch through the governed action boundary. | POST | /v1/apps/{saasAppId}/goclaw/approvals/{suggestionBatchId}/approve | modules.goclaw.write | goClawApprovalsApprove |
| 4 | Verify the resulting human attention state in Universal Inbox. | GET | /v1/apps/{saasAppId}/inbox/items | modules.universal-inbox.read | universalInboxGetItems |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
SignalIQ
Turn secured account context into explainable signals and a reviewed action queue.
Identity: delegated-user
Least-privilege scopes: modules.ai-insights.read modules.ai-insights.write modules.contacts.read modules.record-graph.read
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Find the permitted account or contact record. | GET | /v1/apps/{saasAppId}/modules/contacts | modules.contacts.read | contactsList |
| 2 | Load connected records without crossing the user's DataRole or location scope. | GET | /v1/apps/{saasAppId}/modules/record-graph/{recordId} | modules.record-graph.read | recordGraphGet |
| 3 | Read the user's ranked AI insight queue. | GET | /v1/apps/{saasAppId}/modules/ai-insights | modules.ai-insights.read | aiInsightsList |
| 4 | Open the evidence and explanation for one insight. | GET | /v1/apps/{saasAppId}/modules/ai-insights/{insightId} | modules.ai-insights.read | aiInsightsGet |
| 5 | Record the user's reviewed disposition of the insight. | PUT | /v1/apps/{saasAppId}/modules/ai-insights/{insightId}/state | modules.ai-insights.write | aiInsightsSetState |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
Resolve
Work a support request from a scoped inbox item through policy evidence and a human-controlled resolution.
Identity: delegated-user
Least-privilege scopes: modules.conversations.write modules.knowledge-articles.read modules.universal-inbox.read modules.universal-inbox.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | List the signed-in support user's permitted inbox work. | GET | /v1/apps/{saasAppId}/inbox/items | modules.universal-inbox.read | universalInboxGetItems |
| 2 | Open one inbox item and its ticket context. | GET | /v1/apps/{saasAppId}/inbox/items/{inboxItemId} | modules.universal-inbox.read | universalInboxGetItem |
| 3 | Search the secured knowledge core for relevant policy. | GET | /v1/apps/{saasAppId}/modules/knowledge-core | modules.knowledge-articles.read | knowledgeCoreList |
| 4 | Post the reviewed response into the native conversation. | POST | /v1/apps/{saasAppId}/modules/conversations/{recordId}/messages | modules.conversations.write | conversationsReply |
| 5 | Update the human-owned inbox state after resolution. | PUT | /v1/apps/{saasAppId}/inbox/items/{inboxItemId}/human-state | modules.universal-inbox.write | universalInboxUpdateHumanState |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
LaunchPilot
Create a governed campaign record, attach assets, and route material actions through approval.
Identity: delegated-user
Least-privilege scopes: modules.dynamic-records.read modules.dynamic-records.write modules.files.write modules.goclaw.read
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Read the registered campaign module schema before writing. | GET | /v1/apps/{saasAppId}/modules/dynamic/{moduleKey}/schema | modules.dynamic-records.read | dynamicModulesSchema |
| 2 | Create a campaign record through the reviewed dynamic-module contract. | POST | /v1/apps/{saasAppId}/modules/dynamic/{moduleKey} | modules.dynamic-records.write | dynamicModulesCreate |
| 3 | Upload an approved campaign asset through the secured file path. | POST | /v1/apps/{saasAppId}/modules/files/upload | modules.files.write | filesUpload |
| 4 | List material AI actions awaiting human approval. | GET | /v1/apps/{saasAppId}/goclaw/approvals | modules.goclaw.read | goClawApprovalsGet |
| 5 | Read the created campaign in the same delegated-user scope. | GET | /v1/apps/{saasAppId}/modules/dynamic/{moduleKey}/{recordId} | modules.dynamic-records.read | dynamicModulesGet |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
Northstar
Build evidence-backed executive signals from secured search, insight, graph, and activity contracts.
Identity: delegated-user
Least-privilege scopes: modules.ai-insights.read modules.ai-insights.write modules.global-search.read modules.record-activity.read modules.record-graph.read
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Search only records visible to the executive persona. | GET | /v1/apps/{saasAppId}/modules/global-search | modules.global-search.read | globalSearchSearch |
| 2 | Load material AI insights for the same identity. | GET | /v1/apps/{saasAppId}/modules/ai-insights | modules.ai-insights.read | aiInsightsList |
| 3 | Open the connected evidence graph for a selected signal. | GET | /v1/apps/{saasAppId}/modules/record-graph/{recordId} | modules.record-graph.read | recordGraphGet |
| 4 | Load replayable activity for the selected record. | GET | /v1/apps/{saasAppId}/modules/record-activity/{recordId} | modules.record-activity.read | recordActivityGet |
| 5 | Persist the executive's reviewed insight state. | PUT | /v1/apps/{saasAppId}/modules/ai-insights/{insightId}/state | modules.ai-insights.write | aiInsightsSetState |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
TeamBox
Normalize team communications into a shared, permission-aware queue with native replies.
Identity: delegated-user
Least-privilege scopes: modules.conversations.read modules.conversations.write modules.universal-inbox.read modules.universal-inbox.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | List permitted inbox work across connected channels. | GET | /v1/apps/{saasAppId}/inbox/items | modules.universal-inbox.read | universalInboxGetItems |
| 2 | Open one normalized inbox item. | GET | /v1/apps/{saasAppId}/inbox/items/{inboxItemId} | modules.universal-inbox.read | universalInboxGetItem |
| 3 | Load the native conversation that remains the source record. | GET | /v1/apps/{saasAppId}/modules/conversations/{recordId} | modules.conversations.read | conversationsGet |
| 4 | Post a team reply through the conversation contract. | POST | /v1/apps/{saasAppId}/modules/conversations/{recordId}/messages | modules.conversations.write | conversationsReply |
| 5 | Update the human attention state without changing source ownership. | PUT | /v1/apps/{saasAppId}/inbox/items/{inboxItemId}/human-state | modules.universal-inbox.write | universalInboxUpdateHumanState |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
RelateEverything
Create a CRM record, connect it to permitted business context, and verify the secured graph.
Identity: delegated-user
Least-privilege scopes: modules.contacts.write modules.global-search.read modules.record-graph.read modules.record-graph.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create a contact through the first-class Contacts contract. | POST | /v1/apps/{saasAppId}/modules/contacts | modules.contacts.write | contactsCreate |
| 2 | Create a reviewed relation from the new contact to another permitted record. | PUT | /v1/apps/{saasAppId}/modules/record-graph/{recordId}/relations | modules.record-graph.write | recordGraphAddRelation |
| 3 | Read the contact's secured relationship graph. | GET | /v1/apps/{saasAppId}/modules/record-graph/{recordId} | modules.record-graph.read | recordGraphGet |
| 4 | Verify the contact is discoverable through global secured search. | GET | /v1/apps/{saasAppId}/modules/global-search | modules.global-search.read | globalSearchSearch |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
CustomerPortal
Provision a portal identity and let that user work only with explicitly shared conversations, files, and approvals.
Identity: app-credential-then-delegated-user
Least-privilege scopes: modules.conversations.read modules.files.read tenant-accounts.write tenant-users.read tenant-users.tokens.issue tenant-users.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create or reconcile the customer's tenant account from the ISV backend. | POST | /v1/apps/{saasAppId}/accounts | tenant-accounts.write | createTenantAccount |
| 2 | Resolve assignable user types, DataRoles, and locations for that account. | GET | /v1/apps/{saasAppId}/accounts/{appAccountId}/security-catalog | tenant-users.read | getTenantSecurityCatalog |
| 3 | Create the external user mapping with reviewed assignments. | POST | /v1/apps/{saasAppId}/accounts/{appAccountId}/users | tenant-users.write | createTenantUser |
| 4 | Exchange the app credential for a short-lived delegated-user token. | POST | /v1/apps/{saasAppId}/user-token-exchanges | tenant-users.tokens.issue | exchangeDelegatedUserToken |
| 5 | Use the delegated token to list only files visible to the portal user. | GET | /v1/apps/{saasAppId}/modules/files | modules.files.read | filesList |
| 6 | Use the same identity to list shared conversations. | GET | /v1/apps/{saasAppId}/modules/conversations | modules.conversations.read | conversationsList |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
CompanyIQ
Publish governed knowledge, connect it to business records, and retrieve permission-aware AI evidence.
Identity: delegated-user
Least-privilege scopes: ai.read ai.write modules.knowledge-articles.write modules.record-graph.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create a revisioned knowledge record. | POST | /v1/apps/{saasAppId}/modules/knowledge-core | modules.knowledge-articles.write | knowledgeCoreCreate |
| 2 | Publish the reviewed revision through the knowledge lifecycle. | POST | /v1/apps/{saasAppId}/modules/knowledge-core/{recordId}/publish | modules.knowledge-articles.write | knowledgeCorePublish |
| 3 | Attach the knowledge record to permitted business context. | PUT | /v1/apps/{saasAppId}/modules/record-graph/{recordId}/knowledge | modules.record-graph.write | recordGraphLinkKnowledge |
| 4 | Queue the permitted record for AI ingestion. | POST | /v1/apps/{saasAppId}/ai/sources/records/{recordId}/ingest | ai.write | ingestAiRecord |
| 5 | Retrieve secured AI evidence using the delegated-user context. | POST | /v1/apps/{saasAppId}/ai/search | ai.read | searchAi |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
OpsAtlas
Operate revisioned policy knowledge with owners, reviews, questions, gaps, and health evidence.
Identity: delegated-user
Least-privilege scopes: modules.knowledge-articles.read modules.knowledge-articles.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create an owned operational knowledge record. | POST | /v1/apps/{saasAppId}/modules/knowledge-core | modules.knowledge-articles.write | knowledgeCoreCreate |
| 2 | Assign a permitted knowledge owner. | POST | /v1/apps/{saasAppId}/modules/knowledge-core/{recordId}/owners | modules.knowledge-articles.write | knowledgeCoreSetOwner |
| 3 | Publish the reviewed revision. | POST | /v1/apps/{saasAppId}/modules/knowledge-core/{recordId}/publish | modules.knowledge-articles.write | knowledgeCorePublish |
| 4 | Measure the current knowledge health contract. | GET | /v1/apps/{saasAppId}/modules/knowledge-core/health | modules.knowledge-articles.read | knowledgeCoreHealth |
| 5 | List permission-aware knowledge gaps requiring work. | GET | /v1/apps/{saasAppId}/modules/knowledge-core/gaps | modules.knowledge-articles.read | knowledgeCoreGaps |
| 6 | Read the immutable revision sequence for the record. | GET | /v1/apps/{saasAppId}/modules/knowledge-core/{recordId}/revisions | modules.knowledge-articles.read | knowledgeCoreRevisions |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
Headless SaaS DB
Provision tenant identities and operate custom records from any frontend without exposing SQL or infrastructure routing.
Identity: app-credential-then-delegated-user
Least-privilege scopes: records.read records.write tenant-accounts.write tenant-users.tokens.issue tenant-users.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create or reconcile the external tenant account. | POST | /v1/apps/{saasAppId}/accounts | tenant-accounts.write | createTenantAccount |
| 2 | Map the external end user to a real TenantUser. | POST | /v1/apps/{saasAppId}/accounts/{appAccountId}/users | tenant-users.write | createTenantUser |
| 3 | Issue a short-lived delegated-user token for browser or mobile use. | POST | /v1/apps/{saasAppId}/user-token-exchanges | tenant-users.tokens.issue | exchangeDelegatedUserToken |
| 4 | Read the registered custom object's contract. | GET | /v1/apps/{saasAppId}/objects/{objectKey}/schema | records.read | getSchema |
| 5 | Create a record under server-derived user scope. | POST | /v1/apps/{saasAppId}/objects/{objectKey}/records | records.write | createRecord |
| 6 | Read the new record as the same delegated user. | GET | /v1/apps/{saasAppId}/objects/{objectKey}/records/{recordId} | records.read | getRecord |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
CaseFlow
Create a controlled case, collect proof, execute checklist stages, and surface approval work.
Identity: delegated-user
Least-privilege scopes: modules.checklists-signoffs.write modules.dynamic-records.read modules.dynamic-records.write modules.files.write modules.universal-inbox.read
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Read the registered case module schema. | GET | /v1/apps/{saasAppId}/modules/dynamic/{moduleKey}/schema | modules.dynamic-records.read | dynamicModulesSchema |
| 2 | Create the case through the reviewed dynamic module. | POST | /v1/apps/{saasAppId}/modules/dynamic/{moduleKey} | modules.dynamic-records.write | dynamicModulesCreate |
| 3 | Start the configured stage checklist against the case record. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs | modules.checklists-signoffs.write | checklistsStartRun |
| 4 | Upload case evidence through Files. | POST | /v1/apps/{saasAppId}/modules/files/upload | modules.files.write | filesUpload |
| 5 | Submit completed stage work for governed signoff. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs/{checklistRunId}/submit | modules.checklists-signoffs.write | checklistsSubmit |
| 6 | Verify the resulting approval work in Universal Inbox. | GET | /v1/apps/{saasAppId}/inbox/items | modules.universal-inbox.read | universalInboxGetItems |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
AssetOps
Connect customers, assets, work orders, inspections, and field evidence under one secured graph.
Identity: delegated-user
Least-privilege scopes: modules.checklists-signoffs.write modules.dynamic-records.write modules.files.write modules.record-graph.read modules.work-orders.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create an asset in its registered dynamic module. | POST | /v1/apps/{saasAppId}/modules/dynamic/{moduleKey} | modules.dynamic-records.write | dynamicModulesCreate |
| 2 | Create work against the permitted asset or location context. | POST | /v1/apps/{saasAppId}/modules/work-orders | modules.work-orders.write | workOrdersCreate |
| 3 | Start the asset inspection checklist. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs | modules.checklists-signoffs.write | checklistsStartRun |
| 4 | Upload inspection evidence through Files. | POST | /v1/apps/{saasAppId}/modules/files/upload | modules.files.write | filesUpload |
| 5 | Verify that the user can see the resulting connected context. | GET | /v1/apps/{saasAppId}/modules/record-graph/{recordId} | modules.record-graph.read | recordGraphGet |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
ActiveWorkplace
Pin a permitted record graph as a collaborative workplace with participants, activity, stale-work controls, and playback.
Identity: delegated-user
Least-privilege scopes: modules.active-workplace.read modules.active-workplace.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create a workplace rooted at a permitted record. | POST | /v1/apps/{saasAppId}/modules/active-workplace | modules.active-workplace.write | activeWorkplaceCreate |
| 2 | Load the scoped participant catalog. | GET | /v1/apps/{saasAppId}/modules/active-workplace/{activeWorkplaceId}/participants/catalog | modules.active-workplace.read | activeWorkplaceParticipantCatalog |
| 3 | Add a permitted person or worker. | POST | /v1/apps/{saasAppId}/modules/active-workplace/{activeWorkplaceId}/participants | modules.active-workplace.write | activeWorkplaceAddParticipant |
| 4 | Record collaborative activity through the workplace contract. | POST | /v1/apps/{saasAppId}/modules/active-workplace/{activeWorkplaceId}/activity | modules.active-workplace.write | activeWorkplaceRecordActivity |
| 5 | Refresh the permitted recursive graph snapshot. | POST | /v1/apps/{saasAppId}/modules/active-workplace/{activeWorkplaceId}/graph/refresh | modules.active-workplace.write | activeWorkplaceRefreshGraph |
| 6 | Replay the workplace history. | GET | /v1/apps/{saasAppId}/modules/active-workplace/{activeWorkplaceId}/playback | modules.active-workplace.read | activeWorkplacePlayback |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
FieldService
Move a field job from customer intake through assignment, schedule, evidence, and completion.
Identity: delegated-user
Least-privilege scopes: modules.calendar.write modules.checklists-signoffs.write modules.contacts.read modules.work-orders.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Find the permitted customer contact. | GET | /v1/apps/{saasAppId}/modules/contacts | modules.contacts.read | contactsList |
| 2 | Create the field work order. | POST | /v1/apps/{saasAppId}/modules/work-orders | modules.work-orders.write | workOrdersCreate |
| 3 | Assign a permitted technician and role. | PUT | /v1/apps/{saasAppId}/modules/work-orders/{recordId}/assignment | modules.work-orders.write | workOrdersAssign |
| 4 | Create the scheduled field appointment. | POST | /v1/apps/{saasAppId}/modules/calendar | modules.calendar.write | calendarCreate |
| 5 | Start the configured completion checklist. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs | modules.checklists-signoffs.write | checklistsStartRun |
| 6 | Advance work status through the reviewed transition contract. | PUT | /v1/apps/{saasAppId}/modules/work-orders/{recordId}/status | modules.work-orders.write | workOrdersStatus |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
Reservations
Publish bookable capacity, create a purchase, and operate its status and follow-up lifecycle.
Identity: delegated-user
Least-privilege scopes: modules.reservations.read modules.reservations.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create or update a bookable product and capacity contract. | POST | /v1/apps/{saasAppId}/modules/reservations/products | modules.reservations.write | reservationsUpsertProduct |
| 2 | Read products visible to the delegated user. | GET | /v1/apps/{saasAppId}/modules/reservations/products | modules.reservations.read | reservationsListProducts |
| 3 | Create a reservation through the reviewed purchase boundary. | POST | /v1/apps/{saasAppId}/modules/reservations/purchase | modules.reservations.write | reservationsPurchase |
| 4 | Read the resulting reservation. | GET | /v1/apps/{saasAppId}/modules/reservations/{recordId} | modules.reservations.read | reservationsGet |
| 5 | Advance the reservation through a reviewed status transition. | PUT | /v1/apps/{saasAppId}/modules/reservations/{recordId}/status | modules.reservations.write | reservationsSetStatus |
| 6 | Record pre- or post-service follow-up state. | PUT | /v1/apps/{saasAppId}/modules/reservations/{recordId}/followups | modules.reservations.write | reservationsUpdateFollowup |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
Checkoff & Approval
Attach a reusable checklist to work, collect document or photo proof per item, and submit it for governed signoff.
Identity: delegated-user
Least-privilege scopes: modules.checklists-signoffs.read modules.checklists-signoffs.write modules.files.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | Create a reusable checklist template with no more than 1,000 items. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/templates | modules.checklists-signoffs.write | checklistsCreateTemplate |
| 2 | Attach a checklist run to a permitted record. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs | modules.checklists-signoffs.write | checklistsStartRun |
| 3 | Complete an item using its current revision fence. | PUT | /v1/apps/{saasAppId}/modules/checklists-signoffs/items/{checklistRunItemId} | modules.checklists-signoffs.write | checklistsUpdateItem |
| 4 | Upload a document or photo through Files. | POST | /v1/apps/{saasAppId}/modules/files/upload | modules.files.write | filesUpload |
| 5 | Attach the uploaded file as item evidence. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/items/{checklistRunItemId}/proof | modules.checklists-signoffs.write | checklistsAttachProof |
| 6 | Submit the revision-fenced run for human approval. | POST | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs/{checklistRunId}/submit | modules.checklists-signoffs.write | checklistsSubmit |
| 7 | Reload the run and evidence after submission. | GET | /v1/apps/{saasAppId}/modules/checklists-signoffs/runs/{checklistRunId} | modules.checklists-signoffs.read | checklistsGetRun |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.
Support Tickets
Enable ticketing on a selected email address and operate stable ticket work through Universal Inbox.
Identity: delegated-user
Least-privilege scopes: modules.conversations.write modules.universal-inbox.read modules.universal-inbox.write
| # | Purpose | Verb | Path | Scope | SDK / operation |
|---|---|---|---|---|---|
| 1 | List configured email channels and their ticketing state. | GET | /v1/apps/{saasAppId}/inbox/email-channels/ticketing | modules.universal-inbox.read | universalInboxGetEmailTicketing |
| 2 | Enable ticketing on the selected channel through the reviewed configuration contract. | PUT | /v1/apps/{saasAppId}/inbox/email-channels/{channelConnectionId}/ticketing | modules.universal-inbox.write | universalInboxSetEmailTicketing |
| 3 | List permitted inbox items using the ticket filters published by the contract. | GET | /v1/apps/{saasAppId}/inbox/items | modules.universal-inbox.read | universalInboxGetItems |
| 4 | Open the durable ticket and its stable identity. | GET | /v1/apps/{saasAppId}/inbox/items/{inboxItemId} | modules.universal-inbox.read | universalInboxGetItem |
| 5 | Post the reviewed response to the native conversation. | POST | /v1/apps/{saasAppId}/modules/conversations/{recordId}/messages | modules.conversations.write | conversationsReply |
| 6 | Move the ticket's human state through the resolution lifecycle. | PUT | /v1/apps/{saasAppId}/inbox/items/{inboxItemId}/human-state | modules.universal-inbox.write | universalInboxUpdateHumanState |
| 7 | Reload the ticket to verify its final state and correlation evidence. | GET | /v1/apps/{saasAppId}/inbox/items/{inboxItemId} | modules.universal-inbox.read | universalInboxGetItem |
Release assertions
- Repeat every user-scoped read with a user from another AppAccount and require no protected data.
- Remove one required scope and require a stable 403 response without performing the mutation.
- Retry a revision-fenced or idempotent mutation and verify no duplicate business effect.
- Persist and inspect the returned correlation ID for every rejected or failed request.