Indwel API Reference

Launch API · Mark III

Indwel API Reference

The launch API for durable Work, governed cognition, and governed applications.

One logical API for durable Work, governed application execution, Conversation and Session Continuity, Memory, Scheduled Work, Parallel Cognition, evidence, effects, artifacts, receipts, and the developer control plane.

Production origin: https://api.indwel.ai Development origin: https://api.dev.indwel.ai

Authentication and backend authority determine what a principal may observe or change. Possession of a resource identifier never confers authority by itself.

Protocol posture: OAuth 2.0 · Problem Details errors · explicit idempotency where declared · durable asynchronous work survives HTTP timeouts.

Wire vocabulary: Paths, JSON fields, OAuth scopes, schema names, enum values, and error codes are shown exactly as the API contract defines them. They are protocol identifiers, not localized English copy.

Origin
api.indwel.ai
Contract
OpenAPI 3.1.2
Surface
108 paths · 124 operations
Vocabulary
223 schemas
Execution
Try Request disabled
API Essentials2 sections · 7 operations

API Essentials

Service & Capabilities

Service identity, capabilities, and release metadata.

GET/v1/services

List API services

listServices

Returns non-tenant service discovery metadata. Current metadata routes require consolidation and privacy review before runtime binding.

Authority
Public
Boundary
Public
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/services'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "serviceId": "platform",
        "name": "Indwel Platform",
        "status": "operational",
        "apiVersions": [
          "v1"
        ],
        "governance": "evidence-first",
        "releaseId": null
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
ServiceListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 2
429Problem Details response.
defaultProblem Details response.
#
GET/v1/capabilities

List admitted capabilities

listCapabilities

Returns lifecycle and claim posture for platform capabilities. It must not manufacture capability from route existence.

OAuth
platform.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/capabilities' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "capabilityId": "governed-app-templates",
        "name": "Governed app templates",
        "lifecycle": "preview",
        "claimStatus": "qualified"
      }
    ]
  }
}

Responses

200Successful response.
CapabilityListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/releases

List platform releases

listPlatformReleases

Returns release identities and compatibility notices bound to the atomic release record.

OAuth
platform.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/releases' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "releaseId": "release_candidate_001",
        "version": "0.1.0-design.1",
        "releasedAt": "2026-07-23T21:40:00Z",
        "status": "candidate",
        "summary": "Design contract candidate",
        "breakingChanges": []
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
PlatformReleaseListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/services/{serviceId}

Get service status

getServiceStatus

Returns a bounded service identity and availability projection without claiming operational certification not supported by evidence.

Authority
Public
Boundary
No tenant boundary
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/services/{serviceId}'
Response example200 · application/json
{
  "data": {
    "serviceId": "platform",
    "name": "Indwel Platform",
    "status": "operational",
    "apiVersions": [
      "v1"
    ],
    "governance": "evidence-first",
    "releaseId": null
  }
}

Responses

200Successful response.
ServiceResponse
FieldTypeMeaningConstraint
datarequiredService
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

API Essentials

Account

Self-scoped account projections.

GET/v1/me

Get the current account

getCurrentUser

Returns the self-scoped durable account profile. Workspace authority remains separate.

OAuth
account.read
Boundary
Current principal
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/me' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "userId": "user_01J0EXAMPLE",
    "displayName": "Developer",
    "email": "developer@example.com",
    "preferences": {
      "locale": "en-US",
      "timezone": "America/New_York",
      "defaultWorkspaceId": null,
      "reducedMotion": false
    },
    "revision": "rev_0001"
  }
}

Responses

200Successful response.
UserAccountResponse
FieldTypeMeaningConstraint
datarequiredUserAccount
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/me/preferences

Get current account preferences

getCurrentUserPreferences

Returns self-scoped account preferences.

OAuth
account.read
Boundary
Current principal
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/me/preferences' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "locale": "en-US",
    "timezone": "America/New_York",
    "defaultWorkspaceId": null,
    "reducedMotion": false
  }
}

Responses

200Successful response.
UserPreferencesResponse
FieldTypeMeaningConstraint
datarequiredUserPreferences
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PATCH/v1/me/preferences

Update current account preferences

updateCurrentUserPreferences

Updates preferences under optimistic concurrency and idempotency.

OAuth
account.write
Boundary
Current principal
Effect
Bounded Write
Receipt
Required

Request body

application/json
UserPreferences
FieldTypeMeaningConstraint
localestring
timezonestring
defaultWorkspaceIdstring | null
reducedMotionboolean
Request example
{
  "locale": "en-US",
  "timezone": "America/New_York",
  "reducedMotion": true
}
RequestcURL
curl --request PATCH \
  --url 'https://api.indwel.ai/v1/me/preferences' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "locale": "en-US",
  "timezone": "America/New_York",
  "reducedMotion": true
}'
Response example200 · application/json
{
  "data": {
    "locale": "en-US",
    "timezone": "America/New_York",
    "defaultWorkspaceId": null,
    "reducedMotion": false
  }
}

Responses

200Successful response.
UserPreferencesResponse
FieldTypeMeaningConstraint
datarequiredUserPreferences
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
Developer Control Plane5 sections · 17 operations

Developer Control Plane

Organizations

Organization and workspace authority visible to the authenticated principal.

GET/v1/organisations

List accessible organizations

listOrganisations

Lists organizations in which the authenticated principal may create or use developer projects. It supplies the explicit tenant identifier required by raw-HTTP onboarding.

OAuth
organisations.read
Boundary
Principal-accessible organizations
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "organisationId": "organ_01J0EXAMPLE",
        "name": "Acme Holdings",
        "slug": "acme",
        "lifecycle": "active",
        "createdAt": "2026-07-24T01:00:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Accessible organizations.
OrganisationListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces

List accessible workspaces

listWorkspaces

Lists workspaces accessible to the principal within an organization. Workspace discovery is explicit so examples and SDKs never rely on hidden identifiers.

OAuth
workspaces.read
Boundary
Organization
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "workspaceId": "works_01J0EXAMPLE",
        "organisationId": "organ_01J0EXAMPLE",
        "name": "Operations",
        "slug": "operations",
        "lifecycle": "active",
        "createdAt": "2026-07-24T01:00:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Accessible workspaces.
WorkspaceListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Developer Control Plane

Projects

Developer projects and their bounded application-development context.

GET/v1/organisations/{organisationId}/projects

List developer projects

listProjects

Lists developer-owned project boundaries visible to the authorized principal.

OAuth
projects.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "projectId": "proje_01J0EXAMPLE",
        "organisationId": "organ_01J0EXAMPLE",
        "name": "Company Answers",
        "slug": "company-answers",
        "description": "Evidence-backed answers.",
        "lifecycle": "active",
        "revision": 1,
        "createdAt": "2026-07-24T01:00:00Z",
        "updatedAt": "2026-07-24T01:00:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200List developer projects.
ProjectListResponse
FieldTypeMeaningConstraint
datarequiredProjectList
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects

Create a developer project

createProject

Creates the developer-owned boundary for environments, clients, apps, events and usage. A project is not a governed App.

OAuth
projects.write
Boundary
Organization
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateProjectRequest
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars · max 120 chars
slugstring | nullpattern ^[a-z0-9]+(?:-[a-z0-9]+)*$
descriptionstring | nullmax 2000 chars
Request example
{
  "name": "Vendor Risk"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Vendor Risk"
}'
Response example201 · application/json
{
  "data": {
    "projectId": "proje_01J0EXAMPLE",
    "organisationId": "org_acme",
    "name": "Company Answers",
    "slug": "company-answers",
    "lifecycle": "active",
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "revision": 1
  }
}

Responses

201Project created.
ProjectResponse
FieldTypeMeaningConstraint
datarequiredProject
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/environments

Create a project environment

createEnvironment

Creates an isolated sandbox, development, staging or production boundary. Sandbox environments default to simulated effects.

OAuth
environments.write
Boundary
Organization + project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateEnvironmentRequest
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
slugstring | null
kindrequiredenumsandbox, development, staging, production
effectModeenumsimulated, controlled, live
Request example
{
  "name": "Vendor Risk",
  "kind": "sandbox"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/environments' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Vendor Risk",
  "kind": "sandbox"
}'
Response example201 · application/json
{
  "data": {
    "environmentId": "envir_01J0EXAMPLE",
    "projectId": "project_vendor_risk",
    "name": "Reference Sandbox",
    "slug": "reference",
    "kind": "sandbox",
    "effectMode": "simulated",
    "lifecycle": "active",
    "createdAt": "2026-09-01T15:00:00Z",
    "organisationId": "org_acme",
    "revision": 1,
    "updatedAt": "2026-09-01T15:00:00Z"
  }
}

Responses

201Environment created.
EnvironmentResponse
FieldTypeMeaningConstraint
datarequiredEnvironment
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/clients

Register a bounded developer client

createClient

Registers an environment-bound client profile. The registration remains pending and receives no OAuth credential until an authorized issuer binding is completed.

OAuth
clients.write
Boundary
Organization + project + environment
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateClientRequest
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
environmentIdrequiredstring
applicationTyperequiredenumservice, web, native, browser
redirectUrisarray<string>Required for web, native, and browser clients; prohibited for service clients.
scopesrequiredarray<string>
Request example
{
  "name": "Company Answers Service",
  "environmentId": "envir_01J0EXAMPLE",
  "scopes": [
    "apps.write",
    "collections.write",
    "cases.write"
  ],
  "applicationType": "service"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Company Answers Service",
  "environmentId": "envir_01J0EXAMPLE",
  "scopes": [
    "apps.write",
    "collections.write",
    "cases.write"
  ],
  "applicationType": "service"
}'
Response example201 · application/json
{
  "data": {
    "client": {
      "clientId": "clien_01J0EXAMPLE",
      "organisationId": "organ_01J0EXAMPLE",
      "projectId": "proje_01J0EXAMPLE",
      "environmentId": "envir_01J0EXAMPLE",
      "name": "Company Answers Service",
      "applicationType": "service",
      "oauthClientType": "confidential",
      "grantTypes": [
        "client_credentials"
      ],
      "tokenEndpointAuthMethod": "client_secret_basic",
      "redirectUris": [],
      "pkceRequired": false,
      "issuerBindingStatus": "pending",
      "authorizationServerIssuer": null,
      "scopes": [
        "apps.write",
        "collections.write",
        "cases.write"
      ],
      "status": "pending",
      "revision": 1,
      "createdAt": "2026-07-24T01:00:00Z",
      "updatedAt": "2026-07-24T01:00:00Z",
      "lastRotatedAt": null
    },
    "credentialId": null,
    "secret": null,
    "secretDisplay": "not-issued-pending-issuer-binding",
    "registeredAt": "2026-07-24T01:00:00Z",
    "pkceRequired": false,
    "issuerBindingStatus": "pending"
  }
}

Responses

201Pending client registration created; no OAuth credential issued.
ClientRegistrationReceiptResponse
FieldTypeMeaningConstraint
datarequiredClientRegistrationReceiptClient registration receipt. The client cannot authenticate until an authorized OAuth issuer binding is completed.
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/projects/{projectId}

Get a developer project

getProject

Returns one developer project without embedding credentials or tenant-internal authority.

OAuth
projects.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "projectId": "proje_01J0EXAMPLE",
    "organisationId": "organ_01J0EXAMPLE",
    "name": "Company Answers",
    "slug": "company-answers",
    "description": "Evidence-backed answers.",
    "lifecycle": "active",
    "revision": 1,
    "createdAt": "2026-07-24T01:00:00Z",
    "updatedAt": "2026-07-24T01:00:00Z"
  }
}

Responses

200Get a developer project.
ProjectResponse
FieldTypeMeaningConstraint
datarequiredProject
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/projects/{projectId}/memberships

List project memberships

listProjectMemberships

Returns active and retained project membership/role assignments after organization authority and project admin-or-stronger authority are independently established.

Authority: organization admin-or-stronger plus project admin-or-stronger.

OAuth
project-memberships.read
Contract
scope project-memberships.read.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/memberships' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "schema": "indwel.developer-control-plane.v1",
        "membershipId": "membership_user_42",
        "organisationId": "org_acme",
        "projectId": "project_vendor_risk",
        "userId": "user_42",
        "role": "owner",
        "lifecycle": "active",
        "revision": 1,
        "createdAt": "2026-09-01T15:00:00Z",
        "updatedAt": "2026-09-01T15:00:00Z"
      }
    ]
  }
}

Responses

200Project membership assignments.
ProjectMembershipListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 5
401Problem Details response.
403Forbidden
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PUT/v1/organisations/{organisationId}/projects/{projectId}/memberships/{userId}

Create or update project membership

upsertProjectMembership

Creates or updates a project membership under organization owner and project owner authority. OAuth scope does not replace role checks, and an owner cannot use the operation to demote their own ownership.

Authority: organization owner plus project owner.

OAuth
project-memberships.write
Contract
scope project-memberships.write · bounded write · receipt required · idempotency required.

Parameters

NameInTypeMeaning
userIdrequiredpathstringTarget user identifier.

Request body

application/json
ProjectMembershipUpsertRequest
FieldTypeMeaningConstraint
rolerequiredenumowner, admin, developer, viewer
Request example
{
  "role": "owner"
}
RequestcURL
curl --request PUT \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/memberships/{userId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "role": "owner"
}'
Response example200 · application/json
{
  "schema": "indwel.developer-control-plane.v1",
  "membershipId": "membership_user_42",
  "organisationId": "org_acme",
  "projectId": "project_vendor_risk",
  "userId": "user_42",
  "role": "owner",
  "lifecycle": "active",
  "revision": 1,
  "createdAt": "2026-09-01T15:00:00Z",
  "updatedAt": "2026-09-01T15:00:00Z"
}

Responses

200Created or updated project membership.
ProjectMembership
FieldTypeMeaningConstraint
schemarequiredstring
membershipIdrequiredstring
organisationIdrequiredstring
projectIdrequiredstring
userIdrequiredstring
rolerequiredenumowner, admin, developer, viewer
lifecyclerequiredenumactive, suspended, removed
revisionrequiredinteger≥ 1
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
Refusals and alternate responses 7
400Bad request
401Problem Details response.
403Forbidden
404Not found
409Conflict
429Problem Details response.
defaultProblem Details response.
#

Developer Control Plane

Environments

Project environments and deployment boundaries.

GET/v1/organisations/{organisationId}/projects/{projectId}/environments

List project environments

listEnvironments

Lists sandbox, development, staging and production environments with explicit effect boundaries.

OAuth
environments.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/environments' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "environmentId": "envir_01J0EXAMPLE",
        "organisationId": "organ_01J0EXAMPLE",
        "projectId": "proje_01J0EXAMPLE",
        "name": "Reference Sandbox",
        "slug": "reference-sandbox",
        "kind": "sandbox",
        "effectMode": "simulated",
        "lifecycle": "active",
        "revision": 1,
        "createdAt": "2026-07-24T01:00:00Z",
        "updatedAt": "2026-07-24T01:00:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200List project environments.
EnvironmentListResponse
FieldTypeMeaningConstraint
datarequiredEnvironmentList
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/projects/{projectId}/environments/{environmentId}

Get a project environment

getEnvironment

Returns an environment and its fail-closed effect mode.

OAuth
environments.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/environments/{environmentId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "environmentId": "envir_01J0EXAMPLE",
    "organisationId": "organ_01J0EXAMPLE",
    "projectId": "proje_01J0EXAMPLE",
    "name": "Reference Sandbox",
    "slug": "reference-sandbox",
    "kind": "sandbox",
    "effectMode": "simulated",
    "lifecycle": "active",
    "revision": 1,
    "createdAt": "2026-07-24T01:00:00Z",
    "updatedAt": "2026-07-24T01:00:00Z"
  }
}

Responses

200Get a project environment.
EnvironmentResponse
FieldTypeMeaningConstraint
datarequiredEnvironment
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Developer Control Plane

Clients

Bounded developer clients.

GET/v1/organisations/{organisationId}/projects/{projectId}/clients

List developer clients

listClients

Lists bounded clients without secret material or secret hashes.

OAuth
clients.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "clientId": "clien_01J0EXAMPLE",
        "organisationId": "organ_01J0EXAMPLE",
        "projectId": "proje_01J0EXAMPLE",
        "environmentId": "envir_01J0EXAMPLE",
        "name": "Company Answers Service",
        "applicationType": "service",
        "oauthClientType": "confidential",
        "grantTypes": [
          "client_credentials"
        ],
        "tokenEndpointAuthMethod": "client_secret_basic",
        "redirectUris": [],
        "pkceRequired": false,
        "issuerBindingStatus": "pending",
        "authorizationServerIssuer": null,
        "scopes": [
          "apps.read",
          "collections.write"
        ],
        "status": "pending",
        "revision": 1,
        "createdAt": "2026-07-24T01:00:00Z",
        "updatedAt": "2026-07-24T01:00:00Z",
        "lastRotatedAt": null
      }
    ],
    "nextCursor": null
  }
}

Responses

200List developer clients.
ClientListResponse
FieldTypeMeaningConstraint
datarequiredClientList
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}

Get a developer client

getClient

Returns one client and its scopes, PKCE posture and lifecycle without credential material.

OAuth
clients.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "clientId": "clien_01J0EXAMPLE",
    "organisationId": "organ_01J0EXAMPLE",
    "projectId": "proje_01J0EXAMPLE",
    "environmentId": "envir_01J0EXAMPLE",
    "name": "Company Answers Service",
    "applicationType": "service",
    "oauthClientType": "confidential",
    "grantTypes": [
      "client_credentials"
    ],
    "tokenEndpointAuthMethod": "client_secret_basic",
    "redirectUris": [],
    "pkceRequired": false,
    "issuerBindingStatus": "pending",
    "authorizationServerIssuer": null,
    "scopes": [
      "apps.read",
      "collections.write"
    ],
    "status": "pending",
    "revision": 1,
    "createdAt": "2026-07-24T01:00:00Z",
    "updatedAt": "2026-07-24T01:00:00Z",
    "lastRotatedAt": null
  }
}

Responses

200Get a developer client.
ClientResponse
FieldTypeMeaningConstraint
datarequiredClientDeveloper client registration. New clients remain pending and unusable until bound to the authorized OAuth issuer.
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}:bind-issuer

Bind a client to the authorized OAuth issuer

bindClientToAuthorisedIssuer

Binds the selected developer client through Indwel’s configured authorized issuer adapter. The caller supplies no issuer and cannot choose or bootstrap a provider relationship. Confidential-client secret material, when issued, is returned only in the binding response.

Authority: organization owner plus project owner plus authorized issuer adapter.

OAuth
clients.issuer.write
Contract
scope clients.issuer.write · credential/trust binding · receipt required · idempotency required.

Request body

application/json

Schema: object

Request example
{}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}:bind-issuer' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example201 · application/json
{
  "data": {
    "client": {
      "clientId": "clien_01J0EXAMPLE",
      "organisationId": "org_acme",
      "projectId": "project_vendor_risk",
      "environmentId": "env_production",
      "name": "Company Answers Service",
      "applicationType": "service",
      "oauthClientType": "confidential",
      "grantTypes": [
        "client_credentials"
      ],
      "tokenEndpointAuthMethod": "client_secret_basic",
      "redirectUris": [
        "https://example.invalid/resource"
      ],
      "pkceRequired": true,
      "issuerBindingStatus": "pending",
      "authorizationServerIssuer": "https://example.invalid/resource",
      "scopes": [
        "runs.read"
      ],
      "status": "pending",
      "revision": 1,
      "createdAt": "2026-09-01T15:00:00Z",
      "updatedAt": "2026-09-01T15:00:00Z",
      "lastRotatedAt": "2026-09-01T15:00:00Z"
    },
    "credentialId": "credential_vendor_portal",
    "secret": "secret-returned-once",
    "issuer": "https://example.invalid/resource",
    "providerClientReference": "issuer-client-vendor-portal",
    "boundAt": "2026-09-01T15:00:00Z"
  }
}

Responses

201Authorized issuer binding receipt.
ClientIssuerBindingResponse
FieldTypeMeaningConstraint
datarequiredClientIssuerBindingReceipt
Refusals and alternate responses 7
400Bad request
401Problem Details response.
403Forbidden
404Not found
409Conflict
429Problem Details response.
defaultProblem Details response.
#

Developer Control Plane

Credentials

Credential metadata, rotation, and revocation.

GET/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}/credentials

List credential metadata

listCredentials

Lists credential lifecycle metadata without hashes or plaintext secrets.

OAuth
credentials.read
Boundary
Organization + project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}/credentials' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "credentialId": "crede_01J0EXAMPLE",
        "organisationId": "organ_01J0EXAMPLE",
        "projectId": "proje_01J0EXAMPLE",
        "clientId": "clien_01J0EXAMPLE",
        "status": "active",
        "revision": 1,
        "createdAt": "2026-07-24T01:00:00Z",
        "updatedAt": "2026-07-24T01:00:00Z",
        "expiresAt": null,
        "validUntil": null
      }
    ],
    "nextCursor": null
  }
}

Responses

200List credential metadata.
CredentialListResponse
FieldTypeMeaningConstraint
datarequiredCredentialList
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}/credentials/{credentialId}:revoke

Revoke a client credential

revokeCredential

Revokes a bounded credential and returns its non-secret terminal metadata plus a receipt.

OAuth
credentials.write
Boundary
Organization + project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json

Schema: object

Request example
{}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}/credentials/{credentialId}:revoke' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example200 · application/json
{
  "data": {
    "credentialId": "crede_01J0EXAMPLE",
    "organisationId": "organ_01J0EXAMPLE",
    "projectId": "proje_01J0EXAMPLE",
    "clientId": "clien_01J0EXAMPLE",
    "status": "revoked",
    "revision": 2,
    "createdAt": "2026-07-24T01:00:00Z",
    "updatedAt": "2026-07-24T01:00:00Z",
    "expiresAt": null,
    "validUntil": "2026-07-24T01:05:00Z"
  }
}

Responses

200Revoke a client credential.
CredentialResponse
FieldTypeMeaningConstraint
datarequiredCredentialCredential metadata. Secret hashes and plaintext material are never exposed.
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}/credentials/{credentialId}:rotate

Rotate a client credential

rotateCredential

Creates replacement credential material returned once, records overlap posture, and schedules or performs prior-credential revocation.

OAuth
clients.write
Boundary
Project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
RotateCredentialRequest
FieldTypeMeaningConstraint
overlapSecondsinteger≥ 0 · ≤ 86400
expiresAtstring | nulldate-time
Request example
{
  "overlapSeconds": 900,
  "expiresAt": null
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/clients/{clientId}/credentials/{credentialId}:rotate' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "overlapSeconds": 900,
  "expiresAt": null
}'
Response example201 · application/json
{
  "data": {
    "credentialId": "crede_01J0EXAMPLE",
    "clientId": "clien_01J0EXAMPLE",
    "secret": "indwel_secret_returned_once",
    "rotatedAt": "2026-07-23T22:45:00Z",
    "previousCredentialValidUntil": "2026-07-23T23:00:00Z",
    "expiresAt": null
  }
}

Responses

201Successful response.
CredentialRotationReceiptResponse
FieldTypeMeaningConstraint
datarequiredCredentialRotationReceipt
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
Apps & Business App Engine5 sections · 30 operations

Apps & Business App Engine

App Templates

Governed application templates and their immutable definitions.

GET/v1/app-templates

List governed app templates

listAppTemplates

Lists curated app templates. This operation does not imply mutable customer App authority.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "appTemplateId": "contract-review",
        "name": "Contract Review",
        "description": "Governed contract review template.",
        "domain": "legal-operations",
        "lifecycle": "preview",
        "version": "1.0.0-preview",
        "defaultWorkflowId": "review",
        "supportedRunFields": [
          "objective"
        ],
        "requiredArtifacts": [
          "review-memo"
        ],
        "links": {
          "self": "/v1/app-templates/contract-review",
          "workflows": "/v1/app-templates/contract-review/workflows",
          "schemas": "/v1/app-templates/contract-review/schemas",
          "actionDefinitions": "/v1/app-templates/contract-review/action-definitions",
          "policies": "/v1/app-templates/contract-review/policies",
          "capabilities": "/v1/app-templates/contract-review/capabilities"
        }
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
AppTemplateListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}

Get a governed app template

getAppTemplate

Returns one curated app template.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "appTemplateId": "contract-review",
    "name": "Contract Review",
    "description": "Governed contract review template.",
    "domain": "legal-operations",
    "lifecycle": "preview",
    "version": "1.0.0-preview",
    "defaultWorkflowId": "review",
    "supportedRunFields": [
      "objective"
    ],
    "requiredArtifacts": [
      "review-memo"
    ],
    "links": {
      "self": "/v1/app-templates/contract-review",
      "workflows": "/v1/app-templates/contract-review/workflows",
      "schemas": "/v1/app-templates/contract-review/schemas",
      "actionDefinitions": "/v1/app-templates/contract-review/action-definitions",
      "policies": "/v1/app-templates/contract-review/policies",
      "capabilities": "/v1/app-templates/contract-review/capabilities"
    }
  }
}

Responses

200Successful response.
AppTemplateResponse
FieldTypeMeaningConstraint
datarequiredAppTemplate
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}/workflows

List template workflows

listAppTemplateWorkflows

Returns workflow definitions belonging to an app template.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}/workflows' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "workflowId": "review",
        "name": "Review",
        "description": "Review a contract under admitted evidence and policy.",
        "lifecycle": "preview",
        "steps": [
          {
            "stepId": "admit-evidence",
            "kind": "evidence-admission",
            "description": "Admit governing evidence."
          }
        ]
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
WorkflowListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}/workflows/{workflowId}

Get a template workflow

getAppTemplateWorkflow

Returns one workflow definition belonging to an app template.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}/workflows/{workflowId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "workflowId": "review",
    "name": "Review",
    "description": "Review a contract under admitted evidence and policy.",
    "lifecycle": "preview",
    "steps": [
      {
        "stepId": "admit-evidence",
        "kind": "evidence-admission",
        "description": "Admit governing evidence."
      }
    ]
  }
}

Responses

200Successful response.
WorkflowResponse
FieldTypeMeaningConstraint
datarequiredWorkflowDefinitionWorkflow definition. A Cognitive Contract makes the workflow organizationally governed rather than an unconstrained inference process.
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}/schemas

List template schemas

listAppTemplateSchemas

Returns JSON Schema definitions belonging to an app template.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}/schemas' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "schemaId": "contract-input",
        "name": "Contract input",
        "schema": {
          "type": "object",
          "required": [
            "objective"
          ],
          "properties": {
            "objective": {
              "type": "string"
            }
          }
        }
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
SchemaDefinitionListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}/action-definitions

List template action definitions

listAppTemplateActionDefinitions

Returns action definitions and their effect and review posture.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}/action-definitions' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "actionId": "approve-contract",
        "name": "Approve contract",
        "effectLevel": "external-effect",
        "reviewRequired": true,
        "receiptRequired": true
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
ActionDefinitionListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}/policies

Get template policies

getAppTemplatePolicies

Returns the policy catalog associated with an app template.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}/policies' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "appTemplateId": "contract-review",
    "policies": [
      {
        "policyId": "evidence-default",
        "kind": "evidence",
        "lifecycle": "preview"
      }
    ]
  }
}

Responses

200Successful response.
PolicyCollectionResponse
FieldTypeMeaningConstraint
datarequiredPolicyCollection
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/app-templates/{appTemplateId}/capabilities

Get template capabilities

getAppTemplateCapabilities

Returns capability counts and explicit limitations for an app template.

OAuth
catalog.read
Boundary
Authenticated tenant
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/app-templates/{appTemplateId}/capabilities' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "appTemplateId": "contract-review",
    "workflowCount": 1,
    "schemaCount": 1,
    "actionCount": 1,
    "policyCount": 1,
    "lifecycle": "preview",
    "limitations": [
      "Execution semantics are resolved by the installed application and governed runtime."
    ]
  }
}

Responses

200Successful response.
AppTemplateCapabilitiesResponse
FieldTypeMeaningConstraint
datarequiredAppTemplateCapabilities
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Apps & Business App Engine

Apps & Versions

Project-owned governed applications, versions, deployments, and installations.

POST/v1/organisations/{organisationId}/projects/{projectId}/apps

Create a governed app

createApp

Creates a project-owned governed business application identity. It does not create a credential client or publish an executable version.

OAuth
apps.write
Boundary
Organization + project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateAppRequest
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
slugstring | null
descriptionstring | null
archetypestring | null
Request example
{
  "name": "Company Answers",
  "slug": "company-answers",
  "description": "Evidence-backed internal answers.",
  "archetype": "authoritative-determination"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/apps' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Company Answers",
  "slug": "company-answers",
  "description": "Evidence-backed internal answers.",
  "archetype": "authoritative-determination"
}'
Response example201 · application/json
{
  "data": {
    "appId": "app_01J0EXAMPLE",
    "projectId": "proje_01J0EXAMPLE",
    "name": "Company Answers",
    "slug": "company-answers",
    "description": "Evidence-backed internal answers.",
    "archetype": "authoritative-determination",
    "lifecycle": "active",
    "createdAt": "2026-07-24T01:00:00Z"
  }
}

Responses

201App created.
AppResponse
FieldTypeMeaningConstraint
datarequiredApp
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/apps/{appId}/versions

Create an app-version draft

createAppVersion

Creates a versioned draft containing workflows, schemas, policies, installed action definitions and application-specific Cognitive Contracts. Published versions become immutable.

OAuth
apps.write
Boundary
Organization + project + app
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateAppVersionRequest
FieldTypeMeaningConstraint
versionrequiredstringmin 1 chars
manifestrequiredAppManifestVersioned governed-app package. The cognition-profile reference is resolved by the platform under application-version authority.
Request example
{
  "version": "1.0.0",
  "manifest": {
    "workflows": [
      {
        "workflowId": "answer",
        "name": "Answer",
        "description": "Answer under current authority.",
        "lifecycle": "draft",
        "steps": [
          {
            "stepId": "determine",
            "kind": "governed-determination"
          }
        ],
        "cognitiveContract": {
          "schema": "indwel.cognitive-contract.v1",
          "contractId": "contract.company-answers",
          "version": "1.0.0",
          "initialStage": "answering",
          "transitions": [
            {
              "transitionId": "settle-answer",
              "fromStage": "answering",
              "toStage": "answered",
              "evidenceRequirements": [
                {
                  "requirementId": "evidence.company-policy",
                  "acceptedSources": [
                    "deterministic-evaluator"
                  ]
                }
              ],
              "humanAuthorityRequirements": []
            }
          ]
        }
      }
    ],
    "schemas": [
      {
        "schemaId": "question",
        "name": "Question",
        "schema": {
          "type": "object",
          "required": [
            "question"
          ],
          "properties": {
            "question": {
              "type": "string"
            }
          }
        }
      }
    ],
    "policies": [
      {
        "policyId": "evidence-current",
        "kind": "evidence",
        "lifecycle": "draft",
        "configuration": {
          "requireCurrentAuthority": true
        }
      }
    ],
    "actionDefinitions": [],
    "cognitionProfileRef": null
  }
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/apps/{appId}/versions' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "version": "1.0.0",
  "manifest": {
    "workflows": [
      {
        "workflowId": "answer",
        "name": "Answer",
        "description": "Answer under current authority.",
        "lifecycle": "draft",
        "steps": [
          {
            "stepId": "determine",
            "kind": "governed-determination"
          }
        ],
        "cognitiveContract": {
          "schema": "indwel.cognitive-contract.v1",
          "contractId": "contract.company-answers",
          "version": "1.0.0",
          "initialStage": "answering",
          "transitions": [
            {
              "transitionId": "settle-answer",
              "fromStage": "answering",
              "toStage": "answered",
              "evidenceRequirements": [
                {
                  "requirementId": "evidence.company-policy",
                  "acceptedSources": [
                    "deterministic-evaluator"
                  ]
                }
              ],
              "humanAuthorityRequirements": []
            }
          ]
        }
      }
    ],
    "schemas": [
      {
        "schemaId": "question",
        "name": "Question",
        "schema": {
          "type": "object",
          "required": [
            "question"
          ],
          "properties": {
            "question": {
              "type": "string"
            }
          }
        }
      }
    ],
    "policies": [
      {
        "policyId": "evidence-current",
        "kind": "evidence",
        "lifecycle": "draft",
        "configuration": {
          "requireCurrentAuthority": true
        }
      }
    ],
    "actionDefinitions": [],
    "cognitionProfileRef": null
  }
}'
Response example201 · application/json
{
  "data": {
    "appVersionId": "appve_01J0EXAMPLE",
    "appId": "app_01J0EXAMPLE",
    "version": "1.0.0",
    "status": "draft",
    "revision": "rev_0001",
    "manifestDigest": "sha256:example",
    "validation": {
      "status": "not-run",
      "issueCount": 0
    },
    "createdAt": "2026-07-24T01:00:00Z",
    "publishedAt": null
  }
}

Responses

201App-version draft created.
AppVersionResponse
FieldTypeMeaningConstraint
datarequiredAppVersion
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/apps/{appId}/versions/{appVersionId}:validate

Validate an app-version draft

validateAppVersion

Validates references, schemas, policies and effect declarations without publishing the version.

OAuth
apps.write
Boundary
Organization + project + app
Effect
Bounded Write
Receipt
Required
Idempotency
Required
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/apps/{appId}/versions/{appVersionId}:validate' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "appVersionId": "appve_01J0EXAMPLE",
    "status": "invalid",
    "issues": [
      {
        "code": "COGNITION_PROFILE_AUTHORITY_UNAVAILABLE",
        "severity": "error",
        "path": "cognitionProfileRef",
        "message": "The cognition profile reference could not be resolved through launch-admitted cognition-profile authority."
      }
    ],
    "checkedAt": "2026-07-24T01:00:00Z"
  }
}

Responses

200Validation report.
AppVersionValidationReportResponse
FieldTypeMeaningConstraint
datarequiredAppVersionValidationReport
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/apps/{appId}/versions/{appVersionId}:publish

Publish an app version

publishAppVersion

Atomically publishes a validated app version. Published content is immutable; later changes require a new version.

OAuth
apps.write
Boundary
Organization + project + app
Effect
Bounded Write
Receipt
Required
Idempotency
Required
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/apps/{appId}/versions/{appVersionId}:publish' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "appVersionId": "appve_01J0EXAMPLE",
    "appId": "app_01J0EXAMPLE",
    "version": "1.0.0",
    "status": "published",
    "revision": "rev_0002",
    "manifestDigest": "sha256:example",
    "validation": {
      "status": "valid",
      "issueCount": 0
    },
    "createdAt": "2026-07-24T01:00:00Z",
    "publishedAt": "2026-07-24T01:05:00Z"
  }
}

Responses

200Published app version.
AppVersionResponse
FieldTypeMeaningConstraint
datarequiredAppVersion
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/environments/{environmentId}/deployments

Deploy a published app version

createDeployment

Begins a durable deployment operation binding an immutable app version to an environment. The returned Operation is the status authority until terminal.

OAuth
deployments.write
Boundary
Organization + project + environment
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateDeploymentRequest
FieldTypeMeaningConstraint
appVersionIdrequiredstring
descriptionstring | null
Request example
{
  "appVersionId": "appve_01J0EXAMPLE",
  "description": "Reference application deployment."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/environments/{environmentId}/deployments' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "appVersionId": "appve_01J0EXAMPLE",
  "description": "Reference application deployment."
}'
Response example202 · application/json
{
  "data": {
    "operationId": "opera_01J0EXAMPLE",
    "kind": "deployment.create",
    "status": "queued",
    "targetResourceId": "deplo_01J0EXAMPLE",
    "createdAt": "2026-07-24T01:00:00Z",
    "updatedAt": "2026-07-24T01:00:00Z",
    "terminalAt": null,
    "problem": null
  }
}

Responses

202Deployment operation accepted.
OperationResponse
FieldTypeMeaningConstraint
datarequiredOperation
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/installations

Install a deployment into a workspace

createInstallation

Grants a deployed app explicit workspace permissions and policy overlays. Installation authority is bounded to the target workspace.

OAuth
installations.write
Boundary
Organization + workspace
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateInstallationRequest
FieldTypeMeaningConstraint
deploymentIdrequiredstring
permissionsrequiredarray<string>
policyOverridesobject
Request example
{
  "deploymentId": "deplo_01J0EXAMPLE",
  "permissions": [
    "collections.read",
    "cases.write"
  ],
  "policyOverrides": {}
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/installations' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "deploymentId": "deplo_01J0EXAMPLE",
  "permissions": [
    "collections.read",
    "cases.write"
  ],
  "policyOverrides": {}
}'
Response example201 · application/json
{
  "data": {
    "installationId": "insta_01J0EXAMPLE",
    "organisationId": "organ_01J0EXAMPLE",
    "workspaceId": "works_01J0EXAMPLE",
    "deploymentId": "deplo_01J0EXAMPLE",
    "permissions": [
      "collections.read",
      "cases.write"
    ],
    "status": "active",
    "createdAt": "2026-07-24T01:00:00Z"
  }
}

Responses

201Installation created.
InstallationResponse
FieldTypeMeaningConstraint
datarequiredInstallation
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/environments/{environmentId}/deployments/{deploymentId}:rollback

Roll back a deployment

rollbackDeployment

Begins a durable rollback operation to the previous certified deployment or an explicitly named compatible deployment.

OAuth
deployments.write
Boundary
Project
Effect
External Effect
Receipt
Required
Idempotency
Required

Request body

application/json
RollbackDeploymentRequest
FieldTypeMeaningConstraint
targetDeploymentIdstring | null
reasonstring | null
Request example
{
  "targetDeploymentId": null,
  "reason": "Production readiness evidence was invalidated."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/environments/{environmentId}/deployments/{deploymentId}:rollback' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "targetDeploymentId": null,
  "reason": "Production readiness evidence was invalidated."
}'
Response example202 · application/json
{
  "data": {
    "operationId": "opera_01J0EXAMPLE",
    "kind": "deployment.rollback",
    "status": "running",
    "targetResourceId": "deplo_01J0EXAMPLE",
    "progressPercent": 25,
    "cancellable": true,
    "resultResourceId": null,
    "receiptId": null,
    "createdAt": "2026-07-23T22:45:00Z",
    "updatedAt": "2026-07-23T22:46:00Z",
    "terminalAt": null,
    "problem": null
  }
}

Responses

202Successful response.
OperationResponse
FieldTypeMeaningConstraint
datarequiredOperation
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Apps & Business App Engine

Collections, Sources & Ingestion

Collections, Sources, and durable ingestion lineage.

POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections

Create an evidence collection

createCollection

Creates a durable workspace collection under an explicit custody policy. Existing catalog projections do not satisfy this mutation.

OAuth
collections.write
Boundary
Organization + workspace
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateCollectionRequest
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
descriptionstring | null
custodyPolicyIdstring | null
Request example
{
  "name": "Company policy authority",
  "description": "Current employee policies.",
  "custodyPolicyId": null
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Company policy authority",
  "description": "Current employee policies.",
  "custodyPolicyId": null
}'
Response example201 · application/json
{
  "data": {
    "collectionId": "colle_01J0EXAMPLE",
    "workspaceId": "works_01J0EXAMPLE",
    "name": "Company policy authority",
    "description": "Current employee policies.",
    "status": "active",
    "custodyPolicyId": null,
    "createdAt": "2026-07-24T01:00:00Z"
  }
}

Responses

201Collection created.
CollectionResponse
FieldTypeMeaningConstraint
datarequiredCollection
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections/{collectionId}/sources

Create a source and direct-upload session

createSource

Creates the source custody record and returns short-lived upload instructions. The upload URL is a one-time secret and is not retained in ordinary Source responses.

OAuth
collections.write
Boundary
Organization + workspace + Collection
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateSourceRequest
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
mediaTyperequiredstring
sizeBytesinteger | null≥ 0
sha256string | null
custodyrequiredSourceCustody
Request example
{
  "name": "employee-handbook.pdf",
  "mediaType": "application/pdf",
  "sizeBytes": 240000,
  "sha256": "abc123",
  "custody": {
    "classification": "internal-policy",
    "authorityClass": "governing-policy",
    "effectiveAt": "2026-07-01T00:00:00Z",
    "retentionPolicyId": null
  }
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections/{collectionId}/sources' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "employee-handbook.pdf",
  "mediaType": "application/pdf",
  "sizeBytes": 240000,
  "sha256": "abc123",
  "custody": {
    "classification": "internal-policy",
    "authorityClass": "governing-policy",
    "effectiveAt": "2026-07-01T00:00:00Z",
    "retentionPolicyId": null
  }
}'
Response example201 · application/json
{
  "data": {
    "source": {
      "sourceId": "sourc_01J0EXAMPLE",
      "collectionId": "colle_01J0EXAMPLE",
      "name": "employee-handbook.pdf",
      "mediaType": "application/pdf",
      "sizeBytes": 240000,
      "sha256": "abc123",
      "status": "awaiting-upload",
      "custody": {
        "classification": "internal-policy",
        "authorityClass": "governing-policy",
        "effectiveAt": "2026-07-01T00:00:00Z",
        "retentionPolicyId": null
      },
      "createdAt": "2026-07-24T01:00:00Z"
    },
    "upload": {
      "method": "PUT",
      "url": "https://upload.indwel.example/one-time",
      "headers": {
        "content-type": "application/pdf"
      },
      "expiresAt": "2026-07-24T01:15:00Z"
    }
  }
}

Responses

201Source and upload instructions created.
SourceCreateResponse
FieldTypeMeaningConstraint
datarequiredSourceCreateResult
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections/{collectionId}/sources/{sourceId}/ingestions

Start durable source ingestion

createIngestion

Begins parsing, custody verification and evidence admission for an uploaded source. The returned Operation is the processing status authority; the Ingestion resource preserves lineage.

OAuth
collections.write
Boundary
Organization + workspace + Collection + Source
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateIngestionRequest
FieldTypeMeaningConstraint
parserProfilestring | null
languagestring | null
optionsobject
Request example
{
  "parserProfile": null,
  "language": "en",
  "options": {}
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections/{collectionId}/sources/{sourceId}/ingestions' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "parserProfile": null,
  "language": "en",
  "options": {}
}'
Response example202 · application/json
{
  "data": {
    "operationId": "opera_01J0INGEST",
    "kind": "ingestion.create",
    "status": "queued",
    "targetResourceId": "inges_01J0EXAMPLE",
    "createdAt": "2026-07-24T01:00:00Z",
    "updatedAt": "2026-07-24T01:00:00Z",
    "terminalAt": null,
    "problem": null
  }
}

Responses

202Ingestion operation accepted.
OperationResponse
FieldTypeMeaningConstraint
datarequiredOperation
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections/{collectionId}/sources/{sourceId}/ingestions/{ingestionId}

Get ingestion state

getIngestion

Returns the durable ingestion attempt, terminal status, evidence-readiness state and any problem details.

OAuth
collections.read
Boundary
Organization + workspace + Collection + Source
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/collections/{collectionId}/sources/{sourceId}/ingestions/{ingestionId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "ingestionId": "inges_01J0EXAMPLE",
    "sourceId": "sourc_01J0EXAMPLE",
    "status": "ready",
    "operationId": "opera_01J0INGEST",
    "evidenceReady": true,
    "createdAt": "2026-07-24T01:00:00Z",
    "completedAt": "2026-07-24T01:02:00Z",
    "problem": null
  }
}

Responses

200Ingestion state.
IngestionResponse
FieldTypeMeaningConstraint
datarequiredIngestion
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Apps & Business App Engine

Cases, Governance & Effects

Business App Engine Cases, governance, human authority, transitions, and Effects.

POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases

Create a governed business case

createCase

Creates the durable business object to which an installed app and workflow apply. Case creation does not itself invoke cognition.

OAuth
cases.write
Boundary
Organization + workspace + installation
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateCaseRequest
FieldTypeMeaningConstraint
installationIdrequiredstring
workflowIdrequiredstring
titlestring | null
externalReferencestring | null
inputrequiredobject
Request example
{
  "installationId": "insta_01J0EXAMPLE",
  "workflowId": "answer",
  "title": "Remote-work policy question",
  "externalReference": "hr-2026-0042",
  "input": {
    "question": "May I work remotely from another state for six weeks?"
  }
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "installationId": "insta_01J0EXAMPLE",
  "workflowId": "answer",
  "title": "Remote-work policy question",
  "externalReference": "hr-2026-0042",
  "input": {
    "question": "May I work remotely from another state for six weeks?"
  }
}'
Response example201 · application/json
{
  "data": {
    "caseId": "case_01J0EXAMPLE",
    "workspaceId": "works_01J0EXAMPLE",
    "installationId": "insta_01J0EXAMPLE",
    "workflowId": "answer",
    "title": "Remote-work policy question",
    "externalReference": "hr-2026-0042",
    "status": "open",
    "input": {
      "question": "May I work remotely from another state for six weeks?"
    },
    "revision": "rev_0001",
    "createdAt": "2026-07-24T01:00:00Z"
  }
}

Responses

201Case created.
CaseResponse
FieldTypeMeaningConstraint
datarequiredCase
Refusals and alternate responses 7
400Bad request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/business-transitions/{transitionId}

Attempt a Cognitive Contract-governed Case business transition

advanceCognitiveBusinessTransition

Attempts the named transition against the Case-retained canonical Cognitive Contract. The client supplies only transition identity, expected Case revision and Idempotency-Key. Destination stage, contract, evidence state, human approvals and transition authority cannot be client-submitted. OAuth permission authorizes only the attempt; organizational approval must already exist as a durable Work governance receipt.

OAuth
case-transitions.write
Boundary
Organization + workspace + Case
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
transitionIdrequiredpathstring

Request body

application/json
FieldTypeMeaningConstraint
expectedRevisionrequiredinteger≥ 1
Request example
{
  "expectedRevision": 2
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/business-transitions/{transitionId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedRevision": 2
}'
Response example200 · application/json
{
  "data": {
    "case": {
      "caseId": "case_01J0EXAMPLE",
      "state": "in-progress",
      "businessStage": "approved",
      "revision": 3
    },
    "transitionId": "approve-review",
    "disposition": "authorised",
    "authorityReceiptId": "work_transition_sha256"
  }
}

Responses

200Transition adjudicated. A withheld adjudication leaves the Case business stage unchanged; an authorized adjudication advances only the business stage while preserving administrative Case state.
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 7
400Bad request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/governance

Read the governed Case Attention projection

getCaseGovernanceProjection

Returns a server-owned, receipt-backed projection of the Case administrative state, Cognitive Contract business stage, current transition readiness, exact evidence and human-authority requirement posture, and active causal governance signals. The client receives projection authority only and must not reconstruct adjudication from raw ledger receipts.

OAuth
cases.read
Boundary
Organization + workspace + Case
Effect
Read Only

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/governance' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "schema": "indwel.developer-case-governance-projection.v1",
  "organisationId": "org_acme",
  "workspaceId": "ws_vendor_risk",
  "caseId": "case_01J0EXAMPLE",
  "revision": 2,
  "administrativeState": "in-progress",
  "businessStage": "intake",
  "contract": {
    "contractId": "contract.vendor-risk-review",
    "version": "1.0.0"
  },
  "attention": {
    "posture": "attention",
    "activeVetoCount": 0,
    "unresolvedVarianceCount": 0,
    "pendingNotificationCount": 0,
    "activeEscalationCount": 0,
    "unsatisfiedRequirementCount": 1
  },
  "transitions": [],
  "receiptCount": 1
}

Responses

200Current governed Case projection.

Schema: object

Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/human-authority-requirements/{requirementId}/participations

Record a governed human participation decision

recordCaseHumanParticipation

Records an authenticated participant decision against one exact current Cognitive Contract human-authority requirement. The client may supply only Case revision and disposition. Platform resolves authority class and participant identity, verifies organizational eligibility, and writes an immutable human-authority receipt. A contradictory later decision under the single-authority policy is rejected rather than timestamp-arbitrated.

OAuth
case-participation.write
Boundary
Organization + workspace + Case
Effect
Governed Human Participation
Receipt
Required
Idempotency
Required

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
requirementIdrequiredpathstring

Request body

application/json
FieldTypeMeaningConstraint
expectedRevisionrequiredinteger≥ 1
dispositionrequiredenumapproved, rejected, abstained
Request example
{
  "expectedRevision": 7,
  "disposition": "approved"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/human-authority-requirements/{requirementId}/participations' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedRevision": 7,
  "disposition": "approved"
}'
Response example200 · application/json
{
  "data": {
    "receiptId": "work_human_sha256",
    "requirementId": "authority.risk-owner",
    "disposition": "approved"
  }
}

Responses

200Equivalent existing single-authority decision returned.
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 7
400Bad request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/effects/{actionId}

Execute an installed governed effect

executeInstalledEffect

Executes only an effect action declared by the immutable installed app version. Platform resolves the installed action, Cognitive Contract authority, durable human participation, provider binding, idempotency and postcondition verification before settlement; the client cannot create an arbitrary effect definition.

Authority: installed immutable App Version + Cognitive Contract + durable human participation where required.

OAuth
effects.write
Boundary
Organization + workspace + Case
Effect
External Effect
Receipt
Required

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
actionIdrequiredpathstring

Request body

application/json
FieldTypeMeaningConstraint
expectedRevisionrequiredinteger≥ 1
payloadrequiredobject
expectedPostconditionrequiredobject
Request example
{
  "expectedRevision": 3,
  "payload": {
    "release": "ACT-991",
    "state": "deployed"
  },
  "expectedPostcondition": {
    "release": "ACT-991",
    "state": "deployed"
  }
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/effects/{actionId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedRevision": 3,
  "payload": {
    "release": "ACT-991",
    "state": "deployed"
  },
  "expectedPostcondition": {
    "release": "ACT-991",
    "state": "deployed"
  }
}'
Response example200 · application/json
{
  "data": {
    "actionId": "release.deploy",
    "settlementState": "settled",
    "receiptId": "effect_receipt_sha256",
    "providerRequestId": "sandbox_request_sha256",
    "verificationReceiptId": "sandbox_verify_sha256"
  }
}

Responses

200Equivalent settled effect returned or newly settled effect completed.

Schema: object

Refusals and alternate responses 7
400Bad request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Apps & Business App Engine

Runs, Evidence & Receipts

Case-bound governed cognition and its terminal projections.

POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/run-plans

Create a governed run plan

createRunPlan

Creates an Installation- and Case-revision-bound admission plan for canonical Case-bound governed cognition.

OAuth
runs.write
Boundary
Organization + workspace + Case
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Parameters

NameInTypeMeaning
caseIdrequiredpathstring

Request body

application/json
CreateRunPlanRequest
FieldTypeMeaningConstraint
sessionIdrequiredstringmin 1 chars
promptrequiredstringmin 1 chars · max 100000 chars
historyarray<object>
moderequiredstringmin 1 chars
routeTemplateIdrequiredstringmin 1 chars
Request example
{
  "sessionId": "session-1",
  "prompt": "Assess the case evidence.",
  "history": [],
  "mode": "ordinary",
  "routeTemplateId": "native-ordinary"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/run-plans' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "sessionId": "session-1",
  "prompt": "Assess the case evidence.",
  "history": [],
  "mode": "ordinary",
  "routeTemplateId": "native-ordinary"
}'
Response example201 · application/json
{
  "data": {
    "planId": "runpl_01J0EXAMPLE",
    "caseId": "case_01J0EXAMPLE",
    "caseRevision": 1,
    "installationId": "insta_01J0EXAMPLE",
    "workflowId": "answer",
    "sessionId": "session-1",
    "promptDigest": "sha256-prompt",
    "requestedModeId": "ordinary",
    "routeTemplateId": "native-ordinary",
    "previewContractHash": "sha256-contract",
    "previewAdmissionSnapshotDigest": "sha256-admission",
    "executionBasisDigest": "sha256-basis",
    "status": "admitted",
    "createdAt": "2026-08-03T21:35:00Z"
  }
}

Responses

201Resource created and admitted.
RunPlanResponse
FieldTypeMeaningConstraint
datarequiredRunPlan
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs

Execute an admitted governed run

createRun

Executes the previously admitted Run Plan through canonical Case-bound cognition authority and returns the terminal governed Run projection.

Authority: organization/workspace/Case and installed application authority.

OAuth
runs.write
Boundary
Organization + workspace + Case
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Parameters

NameInTypeMeaning
caseIdrequiredpathstring

Request body

application/json
CreateRunRequest
FieldTypeMeaningConstraint
planIdrequiredstringmin 1 chars
promptrequiredstringmin 1 chars · max 100000 chars
historyarray<object>
Request example
{
  "planId": "runplan_vendor_review_01",
  "prompt": "Assess the admitted vendor evidence against the installed workflow and return the governed result."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "planId": "runplan_vendor_review_01",
  "prompt": "Assess the admitted vendor evidence against the installed workflow and return the governed result."
}'
Response example201 · application/json
{
  "data": {
    "caseId": "case_vendor_review",
    "planId": "runplan_vendor_review_01",
    "sourceOfTruth": "example",
    "projection": {
      "runId": "run_vendor_review_01",
      "contractHash": "sha256:contract-vendor-review",
      "lifecycleState": "settled_success",
      "status": "complete",
      "renderManifest": {
        "renderManifestId": "render_vendor_review_01",
        "renderManifestDigest": "sha256:example",
        "evidenceBindingCount": 1,
        "suppressedEvidenceCount": 1
      },
      "createdAt": "2026-09-01T15:00:00Z"
    }
  }
}

Responses

201Resource created and admitted.
CaseRunResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}

Get an authorized run projection

getRun

Returns the terminal governed Run projection after Installation and principal-scope checks.

OAuth
runs.read
Boundary
Organization + workspace + Case
Effect
Read

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
runIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "caseId": "case_vendor_review",
    "planId": "runplan_vendor_review_01",
    "sourceOfTruth": "example",
    "projection": {
      "runId": "run_vendor_review_01",
      "contractHash": "sha256:contract-vendor-review",
      "lifecycleState": "settled_success",
      "status": "complete",
      "renderManifest": {
        "renderManifestId": "render_vendor_review_01",
        "renderManifestDigest": "sha256:example",
        "evidenceBindingCount": 1,
        "suppressedEvidenceCount": 1
      },
      "createdAt": "2026-09-01T15:00:00Z"
    }
  }
}

Responses

200Authorized projection.
CaseRunResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}/evidence

List terminal run evidence

listEvidence

Lists admitted, suppressed and unsupported evidence from the terminal governed Run render manifest.

OAuth
runs.read
Boundary
Organization + workspace + Case
Effect
Read

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
runIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}/evidence' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "runId": "run_vendor_review_01",
    "caseId": "case_vendor_review",
    "sourceOfTruth": "example",
    "renderManifestId": "render_vendor_review_01",
    "renderManifestDigest": "sha256:example",
    "items": [
      {
        "evidenceId": "evidence_vendor_policy_01",
        "disposition": "admitted"
      }
    ]
  }
}

Responses

200Authorized projection.
RunEvidenceListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}/artifacts

List terminal run artifacts

listArtifacts

Projects the stable terminal work product for an authorized developer Run. The projection is derived from durable terminal Run truth and includes the answer/display artifact without exposing private execution state.

OAuth
runs.read
Boundary
Organization + workspace + Case
Effect
Read

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
runIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}/artifacts' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "schema": "indwel.developer-run-artifact-list.v1",
    "runId": "run_01J0EXAMPLE",
    "caseId": "case_01J0EXAMPLE",
    "items": [
      {
        "artifactId": "projection_01J0EXAMPLE",
        "kind": "answer",
        "status": "complete",
        "answer": "Assessment complete."
      }
    ]
  }
}

Responses

200Authorized terminal artifact projection.

Schema: object

Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}/receipts

List governed run and case receipts

listReceipts

Returns an authorized receipt projection combining durable terminal run settlement, Case governance receipts and governed Effect Egress settlement receipts for the exact developer run and Case.

Authority: authorized Case-bound Run projection.

OAuth
runs.read
Boundary
Organization + workspace + Case
Effect
Read

Parameters

NameInTypeMeaning
caseIdrequiredpathstring
runIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/workspaces/{workspaceId}/cases/{caseId}/runs/{runId}/receipts' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "schema": "indwel.developer-run-receipt-list.v1",
    "runId": "run_01J0EXAMPLE",
    "caseId": "case_01J0EXAMPLE",
    "items": [
      {
        "schema": "indwel.developer-run-settlement-receipt-projection.v1",
        "receiptId": "run-settlement:projection_01J0EXAMPLE",
        "status": "complete"
      }
    ]
  }
}

Responses

200Authorized receipt projection.

Schema: object

Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
Work & Cognition5 sections · 54 operations

Work & Cognition

Work

Durable longitudinal undertakings in the Indwel operating plane.

GET/v1/work

List authorized Work

listWork

Returns durable Work visible to the authenticated principal. Organization and workspace authority are resolved by the backend; query filters do not grant access.

Authority: backend-derived organization/workspace membership.

OAuth
work.read
Contract
scope work.read.

Parameters

NameInTypeMeaning
qquerystringCase-insensitive text search over authorized Work identifiers, titles, and portfolio identifiers.
workspaceIdsqueryarray<string>Comma-separated workspace filters applied only after backend authority is established.
portfolioIdsqueryarray<string>Comma-separated portfolio filters over authorized Work.
teamIdsqueryarray<string>Comma-separated team filters over authorized Work.
lifecyclequeryarray<enum>Comma-separated Work lifecycle filters.
posturequeryarray<enum>Comma-separated Work progress-posture filters.
limitqueryintegerMaximum authorized Work projections to return. The server clamps the value to 1–500 and defaults to 100.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/work' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "workId": "work_vendor_assurance",
        "title": "Quarterly vendor assurance",
        "lifecycle": "active",
        "posture": "advancing",
        "tenantId": "org_acme",
        "workspaceId": "ws_risk",
        "portfolioId": "portfolio_vendor_risk",
        "teamIds": [
          "team_risk"
        ],
        "updatedAt": "2026-09-01T14:30:00Z"
      }
    ],
    "count": 1
  }
}

Responses

200Authorized Work docket projection.
WorkListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/work

Create durable Work

createWork

Creates a durable longitudinal undertaking. Tenant and principal authority are derived from authenticated backend state; workspaceId is a reference, not an authority grant.

Authority: backend-derived organization/workspace membership.

OAuth
work.write
Contract
scope work.write · bounded write.

Request body

application/json
WorkCreateRequest
FieldTypeMeaningConstraint
workIdstringOptional caller-supplied durable Work identifier; when omitted the backend creates one.
titlerequiredstringmin 1 chars
displayNamestring
descriptionstring
workspaceIdrequiredstringmin 1 chars
portfolioIdstring
contractIdsarray<string>
teamIdsarray<string>
objectiveIdsarray<string>
successCriterionIdsarray<string>
materialQuestionIdsarray<string>
Request example
{
  "title": "Quarterly vendor assurance",
  "workspaceId": "ws_01J0EXAMPLE",
  "objectiveIds": [
    "obj_01J0EXAMPLE"
  ]
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/work' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "title": "Quarterly vendor assurance",
  "workspaceId": "ws_01J0EXAMPLE",
  "objectiveIds": [
    "obj_01J0EXAMPLE"
  ]
}'
Response example201 · application/json
{
  "data": {
    "schema": "indwel.work_status_projection.v1",
    "workId": "work_vendor_assurance",
    "title": "Quarterly vendor assurance",
    "tenantId": "org_acme",
    "workspaceId": "ws_risk",
    "lifecycle": "active",
    "posture": "advancing",
    "docketRevision": 11,
    "progressRevision": 8,
    "residuals": {
      "unsatisfiedCriterionIds": [
        "criterion_data_retention"
      ],
      "unresolvedQuestionIds": [],
      "blockerIds": [],
      "frontierItemIds": [
        "review_retention"
      ]
    },
    "settlementCandidate": false,
    "settlementReasonCodes": [
      "WORK_RESIDUALS_REMAIN"
    ],
    "legalNextActions": [
      "advance"
    ],
    "updatedAt": "2026-09-01T14:30:00Z"
  }
}

Responses

201Durable Work created.
WorkProjectionResponse
FieldTypeMeaningConstraint
datarequiredWorkStatusProjection
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/work/portfolios

Read Work portfolio projection

getWorkPortfolios

Returns the authorized portfolio projection over durable Work. Portfolios are subordinate Work projections rather than independent write authority.

Authority: backend-derived organization/workspace membership.

OAuth
work.read
Contract
scope work.read.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/work/portfolios' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "schema": "indwel.work_portfolio_projection.v1",
    "tenantId": "org_acme",
    "principalId": "user_42",
    "visibleWorkCount": 1,
    "portfolios": [
      {
        "portfolioId": "portfolio_vendor_risk",
        "workCount": 1,
        "lifecycleCounts": {
          "active": 1
        },
        "postureCounts": {
          "advancing": 1
        },
        "blockedWorkIds": [],
        "settlementCandidateWorkIds": [],
        "lastUpdatedAt": "2026-09-01T14:30:00Z",
        "workIds": [
          "work_vendor_assurance"
        ]
      }
    ],
    "reasonCodes": []
  }
}

Responses

200Portfolio projection.
WorkPortfolioResponse
FieldTypeMeaningConstraint
datarequiredWorkPortfolioProjection
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/work/{workId}

Read durable Work

getWorkStatus

Returns durable Work status and any canonical settlement receipt after backend membership authority is satisfied.

Authority: backend-derived organization/workspace membership.

OAuth
work.read
Contract
scope work.read.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/work/{workId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "status": {
      "schema": "indwel.work_status_projection.v1",
      "workId": "work_vendor_assurance",
      "title": "Quarterly vendor assurance",
      "tenantId": "org_acme",
      "workspaceId": "ws_risk",
      "lifecycle": "active",
      "posture": "advancing",
      "docketRevision": 11,
      "progressRevision": 8,
      "residuals": {
        "unsatisfiedCriterionIds": [
          "criterion_data_retention"
        ],
        "unresolvedQuestionIds": [],
        "blockerIds": [],
        "frontierItemIds": [
          "review_retention"
        ]
      },
      "settlementCandidate": false,
      "settlementReasonCodes": [
        "WORK_RESIDUALS_REMAIN"
      ],
      "legalNextActions": [
        "advance"
      ],
      "updatedAt": "2026-09-01T14:30:00Z"
    },
    "settlementReceipt": null
  }
}

Responses

200Work status and settlement receipt.
WorkStatusResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PATCH/v1/work/{workId}

Update durable Work

updateWork

Updates mutable Work docket fields under optimistic concurrency. Backend authority owns tenant, workspace, participation, settlement, and Objective authority.

Authority: backend-derived organization/workspace membership.

OAuth
work.write
Contract
scope work.write · bounded write · optimistic concurrency.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.

Request body

application/json
WorkUpdateRequest
FieldTypeMeaningConstraint
expectedRevisionrequiredinteger≥ 1
titlestring
displayNamestring
descriptionstring
portfolioIdstring
addTeamIdsarray<string>
addParticipantPrincipalIdsarray<string>
addConversationIdsarray<string>
addSessionIdsarray<string>
addContractIdsarray<string>
addObjectiveIdsarray<string>
lifecycleenumproposed, active, paused, review
Request example
{
  "expectedRevision": 3,
  "description": "Assurance review covering the current contract year.",
  "lifecycle": "active"
}
RequestcURL
curl --request PATCH \
  --url 'https://api.indwel.ai/v1/work/{workId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedRevision": 3,
  "description": "Assurance review covering the current contract year.",
  "lifecycle": "active"
}'
Response example200 · application/json
{
  "data": {
    "schema": "indwel.work_status_projection.v1",
    "workId": "work_vendor_assurance",
    "title": "Quarterly vendor assurance",
    "tenantId": "org_acme",
    "workspaceId": "ws_risk",
    "lifecycle": "active",
    "posture": "advancing",
    "docketRevision": 12,
    "progressRevision": 8,
    "residuals": {
      "unsatisfiedCriterionIds": [
        "criterion_data_retention"
      ],
      "unresolvedQuestionIds": [],
      "blockerIds": [],
      "frontierItemIds": [
        "review_retention"
      ]
    },
    "settlementCandidate": false,
    "settlementReasonCodes": [
      "WORK_RESIDUALS_REMAIN"
    ],
    "legalNextActions": [
      "advance"
    ],
    "updatedAt": "2026-09-01T14:36:00Z"
  }
}

Responses

200Updated Work docket.
WorkProjectionResponse
FieldTypeMeaningConstraint
datarequiredWorkStatusProjection
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/work/{workId}/economics

Read Work economics

getWorkEconomics

Returns backend-owned cumulative Work economics. Clients may observe authorized economic state; they do not establish authoritative cost or budget state by supplying larger numbers.

Authority: backend-derived organization/workspace membership.

OAuth
work.read
Contract
scope work.read · auditor authority.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/work/{workId}/economics' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "projection": {
      "schema": "indwel.work_economics_projection.v1",
      "tenantId": "org_acme",
      "workId": "work_vendor_assurance",
      "workspaceIds": [
        "ws_risk"
      ],
      "currency": "USD",
      "truthClass": "provider_priced_settlement",
      "machineCostMicros": 1842000,
      "terminalInferenceRuns": 4,
      "unpricedTerminalRuns": 0,
      "unpricedPhysicalAttempts": 0,
      "humanEngagementEvents": 2,
      "byUser": [],
      "byTeam": [],
      "unallocatedUserMachineCostMicros": 0,
      "unallocatedTeamMachineCostMicros": 0,
      "sourceEventIds": [
        "evt_01",
        "evt_02"
      ],
      "reasonCodes": []
    },
    "provenance": {
      "schemaVersion": "indwel.work_economics_provenance.v1",
      "authority": "unified-system-ledger",
      "complete": true,
      "eventCount": 6,
      "reasonCodes": []
    }
  }
}

Responses

200Complete bounded Work economics projection.
WorkEconomicsResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/work/{workId}/advance

Record causal Work advancement

advanceWork

Records a governed causal advancement against the current Work progress revision. Advancement describes what changed in the undertaking; it does not let the caller manufacture evidence, decision, approval, or settlement authority.

Authority: backend-derived organization/workspace membership.

OAuth
work.write
Contract
scope work.write · causal advance · optimistic concurrency.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.

Request body

application/json
WorkAdvanceRequest
FieldTypeMeaningConstraint
expectedProgressRevisionrequiredinteger≥ 1
actIdstring
atstringdate-time
kindrequiredenumcriterion_satisfied, question_resolved, evidence_admitted, decision_settled, step_completed, blocker_removed, …
summaryrequiredstringmin 1 chars
receiptIdsarray<string>
satisfiedCriterionIdsarray<string>
resolvedQuestionIdsarray<string>
blockerIdsarray<string>
removeBlockerIdsarray<string>
decisionIdsarray<string>
settledDecisionIdsarray<string>
frontierItemIdsarray<string>
postureenumadvancing, steady, blocked, decision_ready, settlement_candidate
Request example
{
  "expectedProgressRevision": 7,
  "kind": "evidence_admitted",
  "summary": "Current SOC 2 report admitted to the assurance record.",
  "receiptIds": [
    "receipt_01J0EXAMPLE"
  ],
  "posture": "advancing"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/work/{workId}/advance' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedProgressRevision": 7,
  "kind": "evidence_admitted",
  "summary": "Current SOC 2 report admitted to the assurance record.",
  "receiptIds": [
    "receipt_01J0EXAMPLE"
  ],
  "posture": "advancing"
}'
Response example200 · application/json
{
  "data": {
    "schema": "indwel.work_status_projection.v1",
    "workId": "work_vendor_assurance",
    "title": "Quarterly vendor assurance",
    "tenantId": "org_acme",
    "workspaceId": "ws_risk",
    "lifecycle": "active",
    "posture": "advancing",
    "docketRevision": 11,
    "progressRevision": 9,
    "residuals": {
      "unsatisfiedCriterionIds": [
        "criterion_data_retention"
      ],
      "unresolvedQuestionIds": [],
      "blockerIds": [],
      "frontierItemIds": [
        "review_retention"
      ]
    },
    "settlementCandidate": false,
    "settlementReasonCodes": [
      "WORK_RESIDUALS_REMAIN"
    ],
    "legalNextActions": [
      "advance"
    ],
    "updatedAt": "2026-09-01T14:42:00Z"
  }
}

Responses

200Updated Work status.
WorkProjectionResponse
FieldTypeMeaningConstraint
datarequiredWorkStatusProjection
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/work/{workId}/settle

Settle durable Work

settleWork

Attempts terminal settlement under canonical Work authority. Settlement may be refused when completion claims are false, required conditions remain unresolved, or the docket revision has changed.

Authority: backend-derived organization/workspace membership.

OAuth
work.write
Contract
scope work.write · terminal settlement.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.

Request body

application/json
WorkSettleRequest
FieldTypeMeaningConstraint
expectedDocketRevisionrequiredinteger≥ 1
dispositionrequiredenumsatisfied, best_effort, blocked, exhausted, abandoned, superseded
summaryrequiredstringmin 1 chars
objectiveIdstring
satisfiedCriterionIdsarray<string>
unsatisfiedCriterionIdsarray<string>
unresolvedItemIdsarray<string>
evidenceRefsarray<string>
decisionRefsarray<string>
receiptIdsarray<string>
blockingReasonsarray<string>
residualRiskenumnone, low, medium, high
supersededByWorkIdstring
userAcceptedboolean
Request example
{
  "expectedDocketRevision": 11,
  "disposition": "satisfied",
  "summary": "Assurance review settled on the admitted record.",
  "satisfiedCriterionIds": [
    "criterion_01"
  ],
  "residualRisk": "low",
  "userAccepted": true
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/work/{workId}/settle' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedDocketRevision": 11,
  "disposition": "satisfied",
  "summary": "Assurance review settled on the admitted record.",
  "satisfiedCriterionIds": [
    "criterion_01"
  ],
  "residualRisk": "low",
  "userAccepted": true
}'
Response example200 · application/json
{
  "data": {
    "status": {
      "schema": "indwel.work_status_projection.v1",
      "workId": "work_vendor_assurance",
      "title": "Quarterly vendor assurance",
      "tenantId": "org_acme",
      "workspaceId": "ws_risk",
      "lifecycle": "closed",
      "posture": "steady",
      "docketRevision": 13,
      "progressRevision": 10,
      "residuals": {
        "unsatisfiedCriterionIds": [],
        "unresolvedQuestionIds": [],
        "blockerIds": [],
        "frontierItemIds": []
      },
      "settlementCandidate": false,
      "settlementReasonCodes": [],
      "legalNextActions": [],
      "updatedAt": "2026-09-01T15:10:00Z"
    },
    "receipt": {
      "schema": "indwel.work_settlement_receipt.v1",
      "receiptId": "receipt_work_settlement_01",
      "workId": "work_vendor_assurance",
      "disposition": "satisfied",
      "closedAt": "2026-09-01T15:10:00Z",
      "closedBy": "user_42",
      "docketRevision": 13,
      "progressRevision": 10,
      "residuals": {
        "unsatisfiedCriterionIds": [],
        "unresolvedQuestionIds": [],
        "blockerIds": [],
        "frontierItemIds": []
      },
      "evidenceRefs": [
        "evidence_soc2_2026"
      ],
      "decisionRefs": [
        "decision_accept_vendor"
      ],
      "sourceReceiptIds": [
        "receipt_run_01"
      ],
      "residualRisk": "low",
      "status": "settled",
      "reasonCodes": [],
      "digest": "sha256:example"
    }
  }
}

Responses

200Settlement status and canonical receipt.
WorkSettlementResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Work & Cognition

Conversation, Sessions & Continuity

Principal-bound interactive Conversation, bounded Sessions, and server-settled Continuity.

GET/sessions

List Sessions

listSessions

Lists the authenticated principal’s customer-safe Session directory. A Session is a bounded interaction/continuity segment and is not synonymous with durable Work.

Authority: authenticated human principal and server-persisted Session authority.

OAuth
sessions.read
Contract
scope sessions.read.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/sessions' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "sessions": [
    {
      "sessionId": "11111111-1111-4111-8111-111111111111",
      "createdAt": "2026-09-01T15:00:00Z",
      "updatedAt": "2026-09-01T15:00:00Z"
    }
  ]
}

Responses

200Authorized Session directory.
SessionDirectoryResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionsrequiredarray<SessionSummary>
Refusals and alternate responses 4
401Problem Details response.
403Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PATCH/sessions/{sessionId}

Update Session metadata

updateSession

Renames or pins/unpins an authorized Session. The source-retained promote and relate body actions are compatibility transitions pending canonical Work representation; they are not first-class SDK mutations.

Authority: authenticated human principal and server-persisted Session authority.

OAuth
sessions.write
Contract
scope sessions.write · bounded metadata write.

Parameters

NameInTypeMeaning
sessionIdrequiredpathstringServer-issued Session identifier.

Request body

application/json

Schema: SessionMutationRequest

Request example
{
  "name": "Vendor risk review"
}
RequestcURL
curl --request PATCH \
  --url 'https://api.indwel.ai/sessions/{sessionId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Vendor risk review"
}'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "updatedAt": "2026-09-01T15:00:00Z"
}

Responses

200Updated Session metadata.
SessionMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
namestring
pinnedboolean
updatedAtrequiredstringdate-time
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
DELETE/sessions/{sessionId}

Delete a Session

deleteSession

Deletes the authenticated principal’s authorized Session state. Deleting a Session does not grant authority over any distinct durable Work resource.

Authority: authenticated human principal and server-persisted Session authority.

OAuth
sessions.write
Contract
scope sessions.write · bounded delete.

Parameters

NameInTypeMeaning
sessionIdrequiredpathstringServer-issued Session identifier.
RequestcURL
curl --request DELETE \
  --url 'https://api.indwel.ai/sessions/{sessionId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111"
}

Responses

200Session deleted.
SessionDeleteResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/sessions/{sessionId}/continuity

Read settled Session Continuity

getSessionContinuity

Returns the already server-settled customer-safe Continuity projection for an authorized Session. Although expressed as POST by the current transport, the caller cannot manufacture or upload Continuity state; an optional packet identifier is only an identity check.

Authority: authenticated human principal and server-persisted Session authority.

OAuth
sessions.read · continuity.read
Contract
scope sessions.read, continuity.read.

Parameters

NameInTypeMeaning
sessionIdrequiredpathstringServer-issued Session identifier.

Request body

application/json
ContinuityReadRequest
FieldTypeMeaningConstraint
packetIdstringOptional identity check against the server-settled packet. Supplying a packet never establishes Continuity authority.
Request example
{}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/sessions/{sessionId}/continuity' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "continuity": {
    "packetId": "continuity_vendor_review_01",
    "state": "settled",
    "parentSessionId": "11111111-1111-4111-8111-111111111111",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Customer-safe server-settled Continuity projection.
ContinuityResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
continuityrequiredContinuityProjectionCustomer-safe projection from server-settled Continuity authority. Raw prompt projections, constitutional patches, graph-node identities, Cognitive Act/Epoch structures, and settlement chronicles are excluded from the public schema.
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/sessions/{sessionId}/continue

Continue a Session

continueSession

Creates or returns the canonical successor Session from server-settled Continuity authority. The client cannot choose the successor identifier or inject Continuity state; retries remain idempotent with respect to an already-established successor.

Authority: authenticated human principal and server-persisted Session authority.

OAuth
sessions.write · continuity.write
Contract
scope sessions.write, continuity.write.

Parameters

NameInTypeMeaning
sessionIdrequiredpathstringServer-issued Session identifier.

Request body

application/json
ContinueSessionRequest
FieldTypeMeaningConstraint
packetIdstringOptional identity check only; Continuity state remains server-settled.
namestringOptional display name for a newly created successor Session.
Request example
{}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/sessions/{sessionId}/continue' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example200 · application/json
{
  "ok": true,
  "parentSessionId": "11111111-1111-4111-8111-111111111111",
  "successorSessionId": "11111111-1111-4111-8111-111111111111",
  "continuity": {
    "packetId": "continuity_vendor_review_01",
    "state": "settled",
    "parentSessionId": "11111111-1111-4111-8111-111111111111",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Successor Session and customer-safe Continuity projection.
ContinueSessionResponse
FieldTypeMeaningConstraint
okrequiredboolean
parentSessionIdrequiredstringuuid
successorSessionIdrequiredstringuuid
continuityrequiredContinuityProjectionCustomer-safe projection from server-settled Continuity authority. Raw prompt projections, constitutional patches, graph-node identities, Cognitive Act/Epoch structures, and settlement chronicles are excluded from the public schema.
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Work & Cognition

Memory

Authenticated Memory V2 and Work/answer-bound Memory projections. Personal Memory is user-delegated only; client credentials cannot acquire account Memory authority.

GET/v2/account/memory/items

List Memory items

listMemoryItems

Returns the authenticated subject's Memory items. Personal Memory scope is derived from authenticated identity; callers cannot select another subject or manufacture scope.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Parameters

NameInTypeMeaning
viewqueryenum
qquerystring
cursorquerystring
limitqueryinteger
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/account/memory/items' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "items": [
    {
      "schemaVersion": "personal_memory_view.v2",
      "memoryRef": "mem_response_style",
      "version": 1,
      "title": "Response style",
      "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
      "category": "preference",
      "state": "active",
      "importance": "ordinary",
      "authority": "user_authored",
      "origin": {
        "kind": "conversation",
        "label": "Account memory"
      },
      "scope": {
        "mode": "account",
        "label": "Account memory"
      },
      "influence": {
        "eligible": true,
        "explanation": "Eligible to shape response structure under the active Memory posture."
      },
      "createdAt": "2026-09-01T15:00:00Z",
      "updatedAt": "2026-09-01T15:00:00Z",
      "capabilities": {
        "edit": true,
        "correct": true,
        "makeImportant": true,
        "pause": true,
        "restore": true,
        "stop": true,
        "useAgain": true,
        "delete": true,
        "versions": true,
        "proof": true
      }
    }
  ],
  "page": {
    "hasMore": true
  },
  "query": {},
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Memory item projection.
MemoryListResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemsrequiredarray<PersonalMemoryItem>
pagerequiredMemoryPage
queryrequiredobject
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items

Create a Memory item

createMemoryItem

Creates an explicit personal Memory item for the authenticated subject. This changes Memory, not evidence authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Request body

application/json
MemoryCreateRequest
FieldTypeMeaningConstraint
titlerequiredstringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
structuredPayloadobject
sourceSessionIdstringmax 200 chars
importanceenumordinary, important
sensitivitystringmax 80 chars
retentionClassstringmax 80 chars
tagsarray<string>
Request example
{
  "title": "Response style"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "title": "Response style"
}'
Response example201 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "created": true,
  "idempotentReplay": true,
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

201Memory item created or idempotently replayed.
MemoryItemCreateResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
createdrequiredboolean
idempotentReplayrequiredboolean
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v2/account/memory/items/{memoryRef}

Get a Memory item

getMemoryItem

Returns one authorized Memory item for the authenticated subject.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Memory item.
MemoryItemResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
DELETE/v2/account/memory/items/{memoryRef}

Delete a Memory item

deleteMemoryItem

Deletes the selected personal Memory item under authenticated subject authority. An optional expected version may be supplied for concurrency.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
FieldTypeMeaningConstraint
expectedVersioninteger≥ 1
Request example
{}
RequestcURL
curl --request DELETE \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example200 · application/json
{
  "ok": true,
  "memoryRef": "mem_response_style",
  "deleted": true,
  "deletedAt": "2026-09-01T15:00:00Z",
  "idempotentReplay": true,
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Deletion result.
MemoryDeleteResponse
FieldTypeMeaningConstraint
okrequiredboolean
memoryRefrequiredstring
deletedrequiredboolean
deletedAtrequiredstringdate-time
idempotentReplayrequiredboolean
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v2/account/memory/items/{memoryRef}/versions

List Memory versions

listMemoryItemVersions

Returns the governed version history for one authorized Memory item.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.
cursorquerystring
limitqueryinteger
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/versions' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "memoryRef": "mem_response_style",
  "versions": [
    {
      "version": 1,
      "createdAt": "2026-09-01T15:00:00Z",
      "mutationEventId": "mem_event_03",
      "item": {
        "schemaVersion": "personal_memory_view.v2",
        "memoryRef": "mem_response_style",
        "version": 1,
        "title": "Response style",
        "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
        "category": "preference",
        "state": "active",
        "importance": "ordinary",
        "authority": "user_authored",
        "origin": {
          "kind": "conversation",
          "label": "Account memory"
        },
        "scope": {
          "mode": "account",
          "label": "Account memory"
        },
        "influence": {
          "eligible": true,
          "explanation": "Eligible to shape response structure under the active Memory posture."
        },
        "createdAt": "2026-09-01T15:00:00Z",
        "updatedAt": "2026-09-01T15:00:00Z",
        "capabilities": {
          "edit": true,
          "correct": true,
          "makeImportant": true,
          "pause": true,
          "restore": true,
          "stop": true,
          "useAgain": true,
          "delete": true,
          "versions": true,
          "proof": true
        }
      }
    }
  ],
  "page": {
    "hasMore": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Memory version history.
MemoryVersionsResponse
FieldTypeMeaningConstraint
okrequiredboolean
memoryRefrequiredstring
versionsrequiredarray<object>
pagerequiredMemoryPage
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/keep

Keep a Memory item

memoryKeep

Keeps the selected item in active personal Memory under versioned lifecycle authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryVersionedActionRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/keep' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/pause

Pause a Memory item

memoryPause

Pauses use of the selected item without deleting its governed history.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryVersionedActionRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/pause' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/restore

Restore a Memory item

memoryRestore

Restores an eligible paused or inactive Memory item under versioned lifecycle authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryVersionedActionRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/restore' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/stop

Stop using a Memory item

memoryStop

Stops ordinary use of the selected item while preserving governed history.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryVersionedActionRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/stop' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/use-again

Use a Memory item again

memoryUseAgain

Returns an eligible stopped Memory item to ordinary governed use.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryVersionedActionRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/use-again' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/edit

Edit a Memory item

memoryEdit

Edits content fields on an authorized Memory item under optimistic version control.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryEditRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
titlestringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
tagsarray<string>
structuredPayloadobject
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/edit' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/correct

Correct a Memory item

memoryCorrect

Creates a corrected replacement while preserving the supersession relationship to the prior item.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryEditRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
titlestringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
tagsarray<string>
structuredPayloadobject
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/correct' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "replacedItem": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_correction_receipt.v2",
    "correctedMemoryRef": "correctedmemoryref_01",
    "replacementMemoryRef": "replacementmemoryref_01",
    "expectedVersion": 1,
    "resultingSourceVersion": 1,
    "replacementVersion": 1,
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryCorrectionResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
replacedItemrequiredPersonalMemoryItem
receiptrequiredMemoryCorrectionReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/items/{memoryRef}/importance

Change Memory importance

memoryImportance

Changes the item's importance posture under versioned personal Memory authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
memoryRefrequiredpathstringOpaque Memory item reference.

Request body

application/json
MemoryImportanceRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
importancerequiredenumordinary, important
Request example
{
  "expectedVersion": 1,
  "importance": "ordinary"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/items/{memoryRef}/importance' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1,
  "importance": "ordinary"
}'
Response example200 · application/json
{
  "ok": true,
  "item": {
    "schemaVersion": "personal_memory_view.v2",
    "memoryRef": "mem_response_style",
    "version": 1,
    "title": "Response style",
    "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
    "category": "preference",
    "state": "active",
    "importance": "ordinary",
    "authority": "user_authored",
    "origin": {
      "kind": "conversation",
      "label": "Account memory"
    },
    "scope": {
      "mode": "account",
      "label": "Account memory"
    },
    "influence": {
      "eligible": true,
      "explanation": "Eligible to shape response structure under the active Memory posture."
    },
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "capabilities": {
      "edit": true,
      "correct": true,
      "makeImportant": true,
      "pause": true,
      "restore": true,
      "stop": true,
      "useAgain": true,
      "delete": true,
      "versions": true,
      "proof": true
    }
  },
  "receipt": {
    "schemaVersion": "memory_lifecycle_mutation.v2",
    "action": "keep",
    "memoryRef": "mem_response_style",
    "expectedVersion": 1,
    "resultingVersion": 1,
    "stateBefore": "active",
    "stateAfter": "active",
    "importanceBefore": "ordinary",
    "importanceAfter": "ordinary",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory item and mutation receipt.
MemoryMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v2/account/memory/proposals

List Memory proposals

listMemoryProposals

Returns inert Memory proposals awaiting the authenticated subject's review. Proposals do not become ordinary Memory until resolved through proposal authority.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Parameters

NameInTypeMeaning
qquerystring
cursorquerystring
limitqueryinteger
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/account/memory/proposals' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "proposals": [
    {
      "schemaVersion": "memory_proposal_view.v2",
      "proposalRef": "mprop_release_briefs",
      "version": 1,
      "title": "Response style",
      "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
      "category": "preference",
      "suggestedImportance": "ordinary",
      "inert": true,
      "sourceType": "conversation",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ],
      "origin": {
        "label": "Account memory",
        "sourceType": "conversation",
        "authorisedRunBound": true,
        "authorisedSessionBound": true
      },
      "scope": {
        "kind": "account",
        "label": "Account memory"
      },
      "createdAt": "2026-09-01T15:00:00Z",
      "updatedAt": "2026-09-01T15:00:00Z"
    }
  ],
  "page": {
    "hasMore": true
  },
  "query": {},
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Pending Memory proposals.
MemoryProposalListResponse
FieldTypeMeaningConstraint
okrequiredboolean
proposalsrequiredarray<MemoryProposal>
pagerequiredMemoryPage
queryrequiredobject
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/proposals/batch-dismiss

Dismiss Memory proposals

dismissMemoryProposals

Dismisses between one and fifty proposals atomically under personal Memory authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Request body

application/json
FieldTypeMeaningConstraint
proposalsrequiredarray<object>
Request example
{
  "proposals": [
    {
      "proposalRef": "mprop_release_briefs",
      "expectedVersion": 1
    }
  ]
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/proposals/batch-dismiss' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "proposals": [
    {
      "proposalRef": "mprop_release_briefs",
      "expectedVersion": 1
    }
  ]
}'
Response example200 · application/json
{
  "ok": true,
  "dismissed": [
    {
      "proposalRef": "mprop_release_briefs",
      "version": 1,
      "state": "dismissed"
    }
  ],
  "receipt": {
    "schemaVersion": "memory_proposal_batch_dismissal_receipt.v2",
    "authority": "personal_memory_proposal_batch_resolution",
    "action": "dismiss",
    "proposalRefs": [
      "mprop_release_briefs"
    ],
    "count": 1,
    "consequence": "no_active_memory_created",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true,
    "nonClaim": "This receipt records the selected proposal dismissals only; it does not settle wider Work."
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Dismissal result and receipt.
MemoryProposalBatchDismissalResponse
FieldTypeMeaningConstraint
okrequiredboolean
dismissedrequiredarray<object>
receiptrequiredMemoryProposalBatchDismissalReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/proposals/{proposalRef}/resolve

Resolve a Memory proposal

resolveMemoryProposal

Approves, edits-and-approves, or dismisses an inert proposal. Approval produces an ordinary governed Memory item; it does not create evidence authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
proposalRefrequiredpathstring

Request body

application/json
MemoryProposalResolutionRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
actionrequiredenumapprove, edit_and_approve, dismiss
titlestringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
tagsarray<string>
structuredPayloadobject
importanceenumordinary, important
Request example
{
  "expectedVersion": 1,
  "action": "approve"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/proposals/{proposalRef}/resolve' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1,
  "action": "approve"
}'
Response example200 · application/json
{
  "ok": true,
  "resolution": {
    "schemaVersion": "memory_proposal_resolution.v2",
    "action": "approve",
    "proposalRef": "mprop_release_briefs",
    "proposalVersion": 1,
    "resolvedState": "active",
    "idempotentReplay": true
  },
  "receipt": {
    "schemaVersion": "memory_proposal_resolution_receipt.v2",
    "authority": "personal_memory_proposal_resolution",
    "action": "approve",
    "proposalRef": "mprop_release_briefs",
    "expectedVersion": 1,
    "proposalResultingVersion": 1,
    "proposalStateBefore": "awaiting_approval",
    "proposalStateAfter": "resolved",
    "consequence": "active_memory_created",
    "occurredAt": "2026-09-01T15:00:00Z",
    "idempotentReplay": true,
    "nonClaim": "This receipt records the Memory consequence only; it does not settle wider Work."
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Proposal resolution and receipt.
MemoryProposalResolutionResponse
FieldTypeMeaningConstraint
okrequiredboolean
resolutionrequiredobject
itemPersonalMemoryItem
receiptrequiredMemoryProposalResolutionReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v2/account/memory/preferences

Get Memory preferences

getMemoryPreferences

Returns the authenticated subject's Memory formation and display preferences.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/account/memory/preferences' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "preferences": {
    "useSavedMemory": true,
    "formationMode": "explicit_only",
    "showSaveNotices": true,
    "showAnswerImpact": true,
    "version": 1,
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z"
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Memory preferences.
MemoryPreferencesResponse
FieldTypeMeaningConstraint
okrequiredboolean
preferencesrequiredMemoryPreferences
createdboolean
idempotentReplayboolean
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PUT/v2/account/memory/preferences

Update Memory preferences

updateMemoryPreferences

Updates Memory preferences under optimistic version control.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Request body

application/json
MemoryPreferencesUpdateRequest
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 0
useSavedMemoryboolean
formationModeenumexplicit_only, ask_before_saving
showSaveNoticesboolean
showAnswerImpactboolean
Request example
{
  "expectedVersion": 1
}
RequestcURL
curl --request PUT \
  --url 'https://api.indwel.ai/v2/account/memory/preferences' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "preferences": {
    "useSavedMemory": true,
    "formationMode": "explicit_only",
    "showSaveNotices": true,
    "showAnswerImpact": true,
    "version": 1,
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z"
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Updated Memory preferences.
MemoryPreferencesResponse
FieldTypeMeaningConstraint
okrequiredboolean
preferencesrequiredMemoryPreferences
createdboolean
idempotentReplayboolean
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v2/account/memory/exports

Export personal Memory

exportMemory

Returns either a safe current inventory or a complete personal archive. This is a read projection expressed as POST because the export variant and query are supplied as a body.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Request body

application/json
MemoryExportRequest
FieldTypeMeaningConstraint
variantenumsafe_current_inventory, complete_personal_archive
queryobjectOptional Memory query for the safe current inventory export.
Request example
{}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v2/account/memory/exports' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example200 · application/json
{
  "ok": true,
  "schemaVersion": "memory_export_packet.v2",
  "variant": "safe_current_inventory",
  "exportedAt": "2026-09-01T15:00:00Z",
  "count": 1,
  "query": {},
  "items": [
    {
      "schemaVersion": "personal_memory_view.v2",
      "memoryRef": "mem_response_style",
      "version": 1,
      "title": "Response style",
      "content": "Prefer concise release briefs that lead with the decision, evidence, and remaining risk.",
      "category": "preference",
      "state": "active",
      "importance": "ordinary",
      "authority": "user_authored",
      "origin": {
        "kind": "conversation",
        "label": "Account memory"
      },
      "scope": {
        "mode": "account",
        "label": "Account memory"
      },
      "influence": {
        "eligible": true,
        "explanation": "Eligible to shape response structure under the active Memory posture."
      },
      "createdAt": "2026-09-01T15:00:00Z",
      "updatedAt": "2026-09-01T15:00:00Z",
      "capabilities": {
        "edit": true,
        "correct": true,
        "makeImportant": true,
        "pause": true,
        "restore": true,
        "stop": true,
        "useAgain": true,
        "delete": true,
        "versions": true,
        "proof": true
      }
    }
  ],
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Memory export packet.
MemoryExportResponse
FieldTypeMeaningConstraint
okrequiredboolean
schemaVersionrequiredstring
variantrequiredenumsafe_current_inventory, complete_personal_archive
exportedAtrequiredstringdate-time
countrequiredinteger≥ 0
queryrequiredobject
itemsrequiredarray<PersonalMemoryItem>
proposalsarray<MemoryProposal>
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v2/work/{workRef}/memory-posture

Get Work Memory posture

getWorkMemoryPosture

Returns how authorized personal Memory may participate in the selected durable Work. Work authority and personal Memory authority remain distinct.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Parameters

NameInTypeMeaning
workRefrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/work/{workRef}/memory-posture' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "posture": {
    "schemaVersion": 2,
    "source": "memory_work_posture.v2",
    "workRef": "work_vendor_risk_review",
    "requestedPosture": "account_default",
    "version": 1,
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z"
  },
  "persisted": true,
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Work-bound Memory posture.
MemoryWorkPostureGetResponse
FieldTypeMeaningConstraint
okrequiredboolean
posturerequiredMemoryWorkPosture
persistedrequiredboolean
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PUT/v2/work/{workRef}/memory-posture

Update Work Memory posture

updateWorkMemoryPosture

Updates the authenticated subject's Work-bound Memory posture under optimistic version and idempotency authority.

Authority: authenticated personal Memory authority.

OAuth
memory.write
Contract
scope memory.write · idempotency required · user delegated only.

Parameters

NameInTypeMeaning
workRefrequiredpathstring

Request body

application/json
MemoryWorkPostureUpdateRequest
FieldTypeMeaningConstraint
requestedPosturerequiredstring
expectedVersionrequiredinteger≥ 0
Request example
{
  "requestedPosture": "account_default",
  "expectedVersion": 1
}
RequestcURL
curl --request PUT \
  --url 'https://api.indwel.ai/v2/work/{workRef}/memory-posture' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "requestedPosture": "account_default",
  "expectedVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "posture": {
    "schemaVersion": 2,
    "source": "memory_work_posture.v2",
    "workRef": "work_vendor_risk_review",
    "requestedPosture": "account_default",
    "version": 1,
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z"
  },
  "created": true,
  "idempotentReplay": true
}

Responses

200Updated Work-bound Memory posture.
MemoryWorkPosturePutResponse
FieldTypeMeaningConstraint
okrequiredboolean
posturerequiredMemoryWorkPosture
createdrequiredboolean
idempotentReplayrequiredboolean
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v2/answers/{answerRef}/memory-impact

Get Memory impact for an answer

getAnswerMemoryImpact

Returns the terminal receipt describing how Memory affected an authorized answer. The receipt reports Memory influence without converting Memory into evidence.

Authority: authenticated personal Memory authority.

OAuth
memory.read
Contract
scope memory.read · user delegated only.

Parameters

NameInTypeMeaning
answerRefrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v2/answers/{answerRef}/memory-impact' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "answerRef": "answer_vendor_risk_01",
  "receipt": {
    "schemaVersion": 2,
    "source": "memory_answer_impact_receipt.v2",
    "answerRef": "answer_vendor_risk_01",
    "terminalEffectId": "effect_answer_vendor_risk_01",
    "terminalOutboxEventId": "outbox_answer_vendor_risk_01",
    "settlement": {
      "state": "settled",
      "settledAt": "2026-09-01T15:00:00Z"
    },
    "requestedPosture": "account_default",
    "effectivePosture": "account_default",
    "outcome": "memory_helped",
    "helpedShape": [
      {
        "memoryRef": "mem_response_style"
      }
    ],
    "consideredNotUsed": [
      {
        "memoryRef": "mem_response_style",
        "title": "Response style",
        "explanation": "Eligible to shape response structure under the active Memory posture."
      }
    ],
    "heldBack": [
      {
        "label": "Account memory",
        "reason": "REPRESENTATIVE_REASON"
      }
    ],
    "suggestions": [
      {
        "proposalRef": "mprop_release_briefs",
        "title": "Response style",
        "state": "awaiting_approval"
      }
    ],
    "completeness": "complete",
    "nonClaims": [
      "retrieval_or_admission_alone_does_not_prove_answer_influence",
      "suggestions_are_inert_until_explicit_approval"
    ]
  },
  "freshness": {
    "schemaVersion": "memory_projection_freshness.v1",
    "state": "complete",
    "readAvailable": true,
    "mutationAvailable": true,
    "observedAt": "2026-09-01T15:00:00Z",
    "explanation": "Eligible to shape response structure under the active Memory posture.",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  }
}

Responses

200Terminal Memory answer-impact receipt.
MemoryAnswerImpactResponse
FieldTypeMeaningConstraint
okrequiredboolean
answerRefrequiredstring
receiptrequiredMemoryAnswerImpactReceipt
freshnessrequiredMemoryProjectionFreshness
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Work & Cognition

Scheduled Work

Governed cognition due at a time or condition.

POST/v1/scheduled-work/proposals

Propose Scheduled Work

proposeScheduledWork

Compiles a natural-language request into a charter proposal for governed work due at a time or condition. A proposal is not active Scheduled Work until accepted through creation.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · durable asynchronous.

Request body

application/json
ScheduledWorkProposalRequest
FieldTypeMeaningConstraint
workspaceIdrequiredstringmin 1 chars
requestrequiredstringmin 1 chars
defaultTimeZonestring
Request example
{
  "workspaceId": "ws_vendor_risk",
  "request": "Check the approved vendor-risk sources each weekday and report material changes."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/scheduled-work/proposals' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "workspaceId": "ws_vendor_risk",
  "request": "Check the approved vendor-risk sources each weekday and report material changes."
}'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "proposal": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "proposalId": "swp_vendor_risk_watch",
    "principalId": "user_christian",
    "tenantId": "org_acme",
    "workspaceId": "ws_vendor_risk",
    "request": "Check the approved vendor-risk sources each weekday and report material changes.",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "scheduleTimeZoneAssumed": true,
    "requiresUserReview": true,
    "reviewReasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "compiledAt": "2026-09-01T15:00:00Z",
    "digest": "sha256:example"
  },
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Scheduled Work charter proposal.
ScheduledWorkProposalProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_charter_proposal_projection.v1; underlying source migration is main-lane-owned.
proposalrequiredScheduledWorkCharterProposal
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 6
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/scheduled-work

List Scheduled Work

listScheduledWork

Lists Scheduled Work visible to the authenticated principal.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.read
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.read · durable asynchronous.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/scheduled-work' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "items": [
    {
      "schemaVersion": "indwel.scheduled_work.v1",
      "watchpointId": "sw_vendor_risk_watch",
      "title": "Vendor risk change watch",
      "status": "draft",
      "ownership": {
        "workspaceId": "ws_vendor_risk",
        "ownerPrincipalId": "user_christian",
        "visibility": "private"
      },
      "charter": {
        "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
        "requiredAuthority": "workspace membership and admitted source authority",
        "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
        "readOnly": true
      },
      "schedule": {
        "kind": "manual"
      },
      "capabilities": {
        "canView": true,
        "canEdit": true,
        "canRunTest": true,
        "canPause": true,
        "canResume": true,
        "canArchive": true
      },
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Scheduled Work list.
ScheduledWorkListProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_list_projection.v1; underlying source migration is main-lane-owned.
itemsrequiredarray<ScheduledWorkReadModel>
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 5
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/scheduled-work

Create Scheduled Work

createScheduledWork

Creates durable Scheduled Work from an accepted charter proposal. The recurring clock is backend infrastructure and is not itself an API resource.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · bounded write · durable asynchronous.

Request body

application/json
ScheduledWorkCreateRequest
FieldTypeMeaningConstraint
proposalrequiredScheduledWorkCharterProposal
acceptedByPrincipalIdrequiredstringMust equal the authenticated principal; the backend verifies this authority.min 1 chars
Request example
{
  "proposal": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "proposalId": "swp_vendor_risk_watch",
    "principalId": "user_christian",
    "tenantId": "org_acme",
    "workspaceId": "ws_vendor_risk",
    "request": "Check the approved vendor-risk sources each weekday and report material changes.",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "scheduleTimeZoneAssumed": true,
    "requiresUserReview": true,
    "reviewReasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "compiledAt": "2026-09-01T15:00:00Z",
    "digest": "sha256:example"
  },
  "acceptedByPrincipalId": "acceptedbyprincipalid_01"
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/scheduled-work' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "proposal": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "proposalId": "swp_vendor_risk_watch",
    "principalId": "user_christian",
    "tenantId": "org_acme",
    "workspaceId": "ws_vendor_risk",
    "request": "Check the approved vendor-risk sources each weekday and report material changes.",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "scheduleTimeZoneAssumed": true,
    "requiresUserReview": true,
    "reviewReasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "compiledAt": "2026-09-01T15:00:00Z",
    "digest": "sha256:example"
  },
  "acceptedByPrincipalId": "acceptedbyprincipalid_01"
}'
Response example201 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "watchpoint": {
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "status": "active",
    "charterVersion": 1,
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "budget": {
      "maxRunsPerWindow": 1,
      "windowMinutes": 1,
      "maxAcquisitionsPerRun": 1,
      "maxWallClockMsPerRun": 1,
      "maxCostUnitsPerRun": 1
    },
    "notificationPolicy": {},
    "retentionPolicy": {},
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "readModel": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "status": "draft",
    "ownership": {
      "workspaceId": "ws_vendor_risk",
      "ownerPrincipalId": "user_christian",
      "visibility": "private"
    },
    "charter": {
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "requiredAuthority": "workspace membership and admitted source authority",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "readOnly": true
    },
    "schedule": {
      "kind": "manual"
    },
    "capabilities": {
      "canView": true,
      "canEdit": true,
      "canRunTest": true,
      "canPause": true,
      "canResume": true,
      "canArchive": true
    },
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "lifecycleControls": {},
  "runHistory": [
    {
      "runId": "run_vendor_watch_20260902",
      "invocation": "manual_test",
      "outcome": "completed",
      "startedAt": "2026-09-01T15:00:00Z",
      "settledAt": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "artifactCount": 1,
      "reportCount": 1,
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "observationJournal": [
    {
      "observationId": "obs_vendor_status_20260902",
      "runId": "run_vendor_watch_20260902",
      "sourceId": "source_vendor_status",
      "sourceLocator": "https://example.invalid/vendor/status",
      "contentDigest": "sha256:example",
      "observedAt": "2026-09-01T15:00:00Z",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

201Scheduled Work detail.
ScheduledWorkDetailProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 6
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/scheduled-work/{watchpointId}

Get Scheduled Work

getScheduledWork

Returns the durable charter, lifecycle, and report projection for one authorized Scheduled Work item.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.read
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.read · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "watchpoint": {
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "status": "active",
    "charterVersion": 1,
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "budget": {
      "maxRunsPerWindow": 1,
      "windowMinutes": 1,
      "maxAcquisitionsPerRun": 1,
      "maxWallClockMsPerRun": 1,
      "maxCostUnitsPerRun": 1
    },
    "notificationPolicy": {},
    "retentionPolicy": {},
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "readModel": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "status": "draft",
    "ownership": {
      "workspaceId": "ws_vendor_risk",
      "ownerPrincipalId": "user_christian",
      "visibility": "private"
    },
    "charter": {
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "requiredAuthority": "workspace membership and admitted source authority",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "readOnly": true
    },
    "schedule": {
      "kind": "manual"
    },
    "capabilities": {
      "canView": true,
      "canEdit": true,
      "canRunTest": true,
      "canPause": true,
      "canResume": true,
      "canArchive": true
    },
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "lifecycleControls": {},
  "runHistory": [
    {
      "runId": "run_vendor_watch_20260902",
      "invocation": "manual_test",
      "outcome": "completed",
      "startedAt": "2026-09-01T15:00:00Z",
      "settledAt": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "artifactCount": 1,
      "reportCount": 1,
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "observationJournal": [
    {
      "observationId": "obs_vendor_status_20260902",
      "runId": "run_vendor_watch_20260902",
      "sourceId": "source_vendor_status",
      "sourceLocator": "https://example.invalid/vendor/status",
      "contentDigest": "sha256:example",
      "observedAt": "2026-09-01T15:00:00Z",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Scheduled Work detail.
ScheduledWorkDetailProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
PATCH/v1/scheduled-work/{watchpointId}

Edit Scheduled Work

editScheduledWork

Replaces the accepted charter proposal under optimistic charter-version authority.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · optimistic concurrency · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.

Request body

application/json
ScheduledWorkEditRequest
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
proposalrequiredScheduledWorkCharterProposal
acceptedByPrincipalIdrequiredstringMust equal the authenticated principal; the backend verifies this authority.min 1 chars
Request example
{
  "expectedCharterVersion": 1,
  "proposal": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "proposalId": "swp_vendor_risk_watch",
    "principalId": "user_christian",
    "tenantId": "org_acme",
    "workspaceId": "ws_vendor_risk",
    "request": "Check the approved vendor-risk sources each weekday and report material changes.",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "scheduleTimeZoneAssumed": true,
    "requiresUserReview": true,
    "reviewReasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "compiledAt": "2026-09-01T15:00:00Z",
    "digest": "sha256:example"
  },
  "acceptedByPrincipalId": "acceptedbyprincipalid_01"
}
RequestcURL
curl --request PATCH \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedCharterVersion": 1,
  "proposal": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "proposalId": "swp_vendor_risk_watch",
    "principalId": "user_christian",
    "tenantId": "org_acme",
    "workspaceId": "ws_vendor_risk",
    "request": "Check the approved vendor-risk sources each weekday and report material changes.",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "scheduleTimeZoneAssumed": true,
    "requiresUserReview": true,
    "reviewReasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "compiledAt": "2026-09-01T15:00:00Z",
    "digest": "sha256:example"
  },
  "acceptedByPrincipalId": "acceptedbyprincipalid_01"
}'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "watchpoint": {
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "status": "active",
    "charterVersion": 1,
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "budget": {
      "maxRunsPerWindow": 1,
      "windowMinutes": 1,
      "maxAcquisitionsPerRun": 1,
      "maxWallClockMsPerRun": 1,
      "maxCostUnitsPerRun": 1
    },
    "notificationPolicy": {},
    "retentionPolicy": {},
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "readModel": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "status": "draft",
    "ownership": {
      "workspaceId": "ws_vendor_risk",
      "ownerPrincipalId": "user_christian",
      "visibility": "private"
    },
    "charter": {
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "requiredAuthority": "workspace membership and admitted source authority",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "readOnly": true
    },
    "schedule": {
      "kind": "manual"
    },
    "capabilities": {
      "canView": true,
      "canEdit": true,
      "canRunTest": true,
      "canPause": true,
      "canResume": true,
      "canArchive": true
    },
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "lifecycleControls": {},
  "runHistory": [
    {
      "runId": "run_vendor_watch_20260902",
      "invocation": "manual_test",
      "outcome": "completed",
      "startedAt": "2026-09-01T15:00:00Z",
      "settledAt": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "artifactCount": 1,
      "reportCount": 1,
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "observationJournal": [
    {
      "observationId": "obs_vendor_status_20260902",
      "runId": "run_vendor_watch_20260902",
      "sourceId": "source_vendor_status",
      "sourceLocator": "https://example.invalid/vendor/status",
      "contentDigest": "sha256:example",
      "observedAt": "2026-09-01T15:00:00Z",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Updated Scheduled Work detail.
ScheduledWorkDetailProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 8
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
428Expected charter version required
#
DELETE/v1/scheduled-work/{watchpointId}

Archive Scheduled Work

archiveScheduledWork

Archives Scheduled Work under an expected charter version. Archive is a governed lifecycle transition rather than deletion of backend scheduling infrastructure.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · optimistic concurrency · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.

Request body

application/json
ScheduledWorkTransitionRequest
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
Request example
{
  "expectedCharterVersion": 1
}
RequestcURL
curl --request DELETE \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedCharterVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "watchpointId": "sw_vendor_risk_watch",
  "status": "archived",
  "charterVersion": 1
}

Responses

200Archived Scheduled Work status.
ScheduledWorkArchiveResponse
FieldTypeMeaningConstraint
okrequiredboolean
watchpointIdrequiredstring
statusrequiredstring
charterVersionrequiredinteger≥ 1
Refusals and alternate responses 8
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
428Expected charter version required
#
POST/v1/scheduled-work/{watchpointId}/test

Run a one-shot proof

testScheduledWork

Runs the Scheduled Work charter once without activating the recurring schedule and returns its proof posture and report identifiers.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.

Request body

application/json
ScheduledWorkTestRequest
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
idempotenceKeystring
Request example
{
  "expectedCharterVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}/test' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedCharterVersion": 1
}'
Response example200 · application/json
{
  "ok": true,
  "watchpointId": "sw_vendor_risk_watch",
  "runId": "run_vendor_watch_20260902",
  "outcome": "settled_success",
  "reportIds": [
    "report_vendor_watch_20260902"
  ],
  "charterVersion": 1,
  "activationEligible": true
}

Responses

200One-shot proof result.
ScheduledWorkTestResponse
FieldTypeMeaningConstraint
okrequiredboolean
watchpointIdrequiredstring
runIdrequiredstring
outcomerequiredstring
reportIdsrequiredarray<string>
charterVersionrequiredinteger≥ 1
activationEligiblerequiredboolean
Refusals and alternate responses 8
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
428Expected charter version required
#
POST/v1/scheduled-work/{watchpointId}/activate

Activate Scheduled Work

activateScheduledWork

Activate Scheduled Work under the current expected charter version.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · optimistic concurrency · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.

Request body

application/json
ScheduledWorkTransitionRequest
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
Request example
{
  "expectedCharterVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}/activate' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedCharterVersion": 1
}'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "watchpoint": {
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "status": "active",
    "charterVersion": 1,
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "budget": {
      "maxRunsPerWindow": 1,
      "windowMinutes": 1,
      "maxAcquisitionsPerRun": 1,
      "maxWallClockMsPerRun": 1,
      "maxCostUnitsPerRun": 1
    },
    "notificationPolicy": {},
    "retentionPolicy": {},
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "readModel": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "status": "draft",
    "ownership": {
      "workspaceId": "ws_vendor_risk",
      "ownerPrincipalId": "user_christian",
      "visibility": "private"
    },
    "charter": {
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "requiredAuthority": "workspace membership and admitted source authority",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "readOnly": true
    },
    "schedule": {
      "kind": "manual"
    },
    "capabilities": {
      "canView": true,
      "canEdit": true,
      "canRunTest": true,
      "canPause": true,
      "canResume": true,
      "canArchive": true
    },
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "lifecycleControls": {},
  "runHistory": [
    {
      "runId": "run_vendor_watch_20260902",
      "invocation": "manual_test",
      "outcome": "completed",
      "startedAt": "2026-09-01T15:00:00Z",
      "settledAt": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "artifactCount": 1,
      "reportCount": 1,
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "observationJournal": [
    {
      "observationId": "obs_vendor_status_20260902",
      "runId": "run_vendor_watch_20260902",
      "sourceId": "source_vendor_status",
      "sourceLocator": "https://example.invalid/vendor/status",
      "contentDigest": "sha256:example",
      "observedAt": "2026-09-01T15:00:00Z",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Updated Scheduled Work detail.
ScheduledWorkDetailProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 8
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
428Expected charter version required
#
POST/v1/scheduled-work/{watchpointId}/pause

Pause Scheduled Work

pauseScheduledWork

Pause Scheduled Work under the current expected charter version.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · optimistic concurrency · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.

Request body

application/json
ScheduledWorkTransitionRequest
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
Request example
{
  "expectedCharterVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}/pause' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedCharterVersion": 1
}'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "watchpoint": {
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "status": "active",
    "charterVersion": 1,
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "budget": {
      "maxRunsPerWindow": 1,
      "windowMinutes": 1,
      "maxAcquisitionsPerRun": 1,
      "maxWallClockMsPerRun": 1,
      "maxCostUnitsPerRun": 1
    },
    "notificationPolicy": {},
    "retentionPolicy": {},
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "readModel": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "status": "draft",
    "ownership": {
      "workspaceId": "ws_vendor_risk",
      "ownerPrincipalId": "user_christian",
      "visibility": "private"
    },
    "charter": {
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "requiredAuthority": "workspace membership and admitted source authority",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "readOnly": true
    },
    "schedule": {
      "kind": "manual"
    },
    "capabilities": {
      "canView": true,
      "canEdit": true,
      "canRunTest": true,
      "canPause": true,
      "canResume": true,
      "canArchive": true
    },
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "lifecycleControls": {},
  "runHistory": [
    {
      "runId": "run_vendor_watch_20260902",
      "invocation": "manual_test",
      "outcome": "completed",
      "startedAt": "2026-09-01T15:00:00Z",
      "settledAt": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "artifactCount": 1,
      "reportCount": 1,
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "observationJournal": [
    {
      "observationId": "obs_vendor_status_20260902",
      "runId": "run_vendor_watch_20260902",
      "sourceId": "source_vendor_status",
      "sourceLocator": "https://example.invalid/vendor/status",
      "contentDigest": "sha256:example",
      "observedAt": "2026-09-01T15:00:00Z",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Updated Scheduled Work detail.
ScheduledWorkDetailProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 8
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
428Expected charter version required
#
POST/v1/scheduled-work/{watchpointId}/resume

Resume Scheduled Work

resumeScheduledWork

Resume Scheduled Work under the current expected charter version.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.write · optimistic concurrency · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.

Request body

application/json
ScheduledWorkTransitionRequest
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
Request example
{
  "expectedCharterVersion": 1
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}/resume' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "expectedCharterVersion": 1
}'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "watchpoint": {
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "kind": "scheduled_observation",
    "status": "active",
    "charterVersion": 1,
    "charter": {
      "objective": "Detect material changes in the approved vendor-risk evidence set.",
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "sourcePolicy": {
        "requiredAuthority": "workspace membership and admitted source authority",
        "sourceSelectionPolicy": "named_sources_only",
        "namedSourceIds": [
          "source_vendor_status"
        ],
        "permittedDomains": [
          "vendor.example"
        ],
        "openWebFallback": "deny"
      },
      "stoppingRule": "Stop after the admitted sources are checked or the run budget is exhausted.",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "mutationPolicy": "read_only"
    },
    "schedule": {
      "kind": "manual"
    },
    "budget": {
      "maxRunsPerWindow": 1,
      "windowMinutes": 1,
      "maxAcquisitionsPerRun": 1,
      "maxWallClockMsPerRun": 1,
      "maxCostUnitsPerRun": 1
    },
    "notificationPolicy": {},
    "retentionPolicy": {},
    "createdAt": "2026-09-01T15:00:00Z",
    "updatedAt": "2026-09-01T15:00:00Z",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "readModel": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "watchpointId": "sw_vendor_risk_watch",
    "title": "Vendor risk change watch",
    "status": "draft",
    "ownership": {
      "workspaceId": "ws_vendor_risk",
      "ownerPrincipalId": "user_christian",
      "visibility": "private"
    },
    "charter": {
      "mission": "Review admitted sources on schedule and surface only changes that alter the current risk posture.",
      "requiredAuthority": "workspace membership and admitted source authority",
      "ordinaryCognitionPolicy": "eligible_when_admitted_and_fresh",
      "readOnly": true
    },
    "schedule": {
      "kind": "manual"
    },
    "capabilities": {
      "canView": true,
      "canEdit": true,
      "canRunTest": true,
      "canPause": true,
      "canResume": true,
      "canArchive": true
    },
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ]
  },
  "lifecycleControls": {},
  "runHistory": [
    {
      "runId": "run_vendor_watch_20260902",
      "invocation": "manual_test",
      "outcome": "completed",
      "startedAt": "2026-09-01T15:00:00Z",
      "settledAt": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "artifactCount": 1,
      "reportCount": 1,
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "observationJournal": [
    {
      "observationId": "obs_vendor_status_20260902",
      "runId": "run_vendor_watch_20260902",
      "sourceId": "source_vendor_status",
      "sourceLocator": "https://example.invalid/vendor/status",
      "contentDigest": "sha256:example",
      "observedAt": "2026-09-01T15:00:00Z",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ],
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Updated Scheduled Work detail.
ScheduledWorkDetailProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 8
400Invalid Scheduled Work request
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
428Expected charter version required
#
GET/v1/scheduled-work/{watchpointId}/reports

List Scheduled Work reports

listScheduledWorkReports

Returns reports produced by the selected Scheduled Work item.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.read
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.read · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}/reports' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "watchpointId": "sw_vendor_risk_watch",
  "reports": [
    {
      "reportId": "report_vendor_watch_20260902",
      "artifactId": "artifact_vendor_watch_20260902",
      "runId": "run_vendor_watch_20260902",
      "title": "Vendor risk change watch",
      "abstract": "No material vendor-risk change was found in the admitted evidence.",
      "createdAt": "2026-09-01T15:00:00Z",
      "observedAsOf": "2026-09-01T15:00:00Z",
      "sourceObservationCount": 1,
      "retentionClass": "standard",
      "contentDigest": "sha256:example",
      "reasonCodes": [
        "REPRESENTATIVE_REASON"
      ]
    }
  ]
}

Responses

200Scheduled Work reports.
ScheduledWorkReportListResponse
FieldTypeMeaningConstraint
watchpointIdrequiredstring
reportsrequiredarray<ScheduledWorkReportSummary>
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/scheduled-work/{watchpointId}/reports/{reportId}

Get a Scheduled Work report

getScheduledWorkReport

Returns one report produced by the selected Scheduled Work item.

Authority: authenticated principal and backend Scheduled Work charter authority.

OAuth
scheduled-work.read
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope scheduled-work.read · durable asynchronous.

Parameters

NameInTypeMeaning
watchpointIdrequiredpathstringCurrent underlying Scheduled Work identifier. The external product noun remains Scheduled Work.
reportIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/scheduled-work/{watchpointId}/reports/{reportId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "schemaVersion": "indwel.scheduled_work.v1",
  "report": {
    "schemaVersion": "indwel.scheduled_work.v1",
    "reportId": "report_vendor_watch_20260902",
    "artifactId": "artifact_vendor_watch_20260902",
    "watchpointId": "sw_vendor_risk_watch",
    "runId": "run_vendor_watch_20260902",
    "title": "Vendor risk change watch",
    "bodyMarkdown": "No material change was found in the admitted vendor-risk evidence as of 2026-09-02.",
    "abstract": "No material vendor-risk change was found in the admitted evidence.",
    "createdAt": "2026-09-01T15:00:00Z",
    "observedAsOf": "2026-09-01T15:00:00Z",
    "sourceObservationIds": [
      "obs_vendor_status_20260902"
    ],
    "citationItems": [
      {
        "sourceId": "source_vendor_status",
        "sourceLocator": "https://example.invalid/vendor/status",
        "observedAt": "2026-09-01T15:00:00Z",
        "contentDigest": "sha256:example"
      }
    ],
    "evidentiaryPosture": "advisory_synthesis",
    "retentionClass": "standard",
    "contentDigest": "sha256:example",
    "reasonCodes": [
      "REPRESENTATIVE_REASON"
    ],
    "digest": "sha256:example"
  },
  "reasonCodes": [
    "REPRESENTATIVE_REASON"
  ],
  "digest": "sha256:example"
}

Responses

200Scheduled Work report.
ScheduledWorkReportProjection
FieldTypeMeaningConstraint
schemaVersionrequiredstring
reportrequiredScheduledWorkReport
reasonCodesrequiredarray<string>
digestrequiredstring
Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Scheduled Work route not found
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Work & Cognition

Parallel Cognition

Work-bound governed parallel programs and program-level cancellation.

GET/v1/parallel-cognition/work/{workId}

Read Parallel Cognition for Work

listParallelCognitionForWork

Returns the aggregate Work-level projection of governed Parallel Cognition Programs. Branch Jobs and worker lease state are intentionally not public resources.

Authority: program-level authority subordinate to durable Work.

OAuth
parallel-cognition.read
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope parallel-cognition.read · durable asynchronous · explicit cancellation.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/parallel-cognition/work/{workId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "workId": "work_vendor_assurance",
  "programmes": [
    {
      "workId": "work_vendor_assurance",
      "programmeId": "programme_parallel_01",
      "posture": "settled",
      "branchDenominator": 3,
      "branchSettlement": {
        "settled": 3,
        "failed": 0
      },
      "cumulativeEconomics": {
        "currency": "USD",
        "machineCostMicros": 920000
      },
      "stoppingPosture": {
        "requested": false,
        "terminal": true
      },
      "fanIn": {
        "status": "settled",
        "parentSynthesisRunId": "run_parent_01"
      }
    }
  ]
}

Responses

200Aggregate Parallel Cognition Program projection.

Schema: ParallelCognitionProgrammeProjection

Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/parallel-cognition/work/{workId}/programmes/{programmeId}

Read a Parallel Cognition Program

getParallelCognitionProgramme

Returns program posture, branch denominator and settlement, cumulative economics, stopping posture, and fan-in/parent-synthesis posture under durable Work authority.

Authority: program-level authority subordinate to durable Work.

OAuth
parallel-cognition.read
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope parallel-cognition.read · durable asynchronous · explicit cancellation.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.
programmeIdrequiredpathstring
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/parallel-cognition/work/{workId}/programmes/{programmeId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "workId": "work_vendor_assurance",
  "programmeId": "programme_parallel_01",
  "posture": "settled",
  "branchDenominator": 3,
  "branchSettlement": {
    "settled": 3,
    "failed": 0
  },
  "cumulativeEconomics": {
    "currency": "USD",
    "machineCostMicros": 920000
  },
  "stoppingPosture": {
    "requested": false,
    "terminal": true
  },
  "fanIn": {
    "status": "settled",
    "parentSynthesisRunId": "run_parent_01"
  }
}

Responses

200Parallel Cognition Program projection.

Schema: ParallelCognitionProgrammeProjection

Refusals and alternate responses 6
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/parallel-cognition/work/{workId}/programmes/{programmeId}/cancel

Cancel a Parallel Cognition Program

cancelParallelCognitionProgramme

Requests governed cancellation at program level. The runtime performs any corresponding internal Job cancellation; callers cannot cancel raw Jobs or supply worker authority.

Authority: program-level authority subordinate to durable Work.

OAuth
parallel-cognition.write
Asynchrony
durable; HTTP timeout does not imply cancellation
Contract
scope parallel-cognition.write · governed cancellation · durable asynchronous · explicit cancellation.

Parameters

NameInTypeMeaning
workIdrequiredpathstringDurable Work identifier.
programmeIdrequiredpathstring
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/parallel-cognition/work/{workId}/programmes/{programmeId}/cancel' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "workId": "work_vendor_assurance",
  "programmeId": "programme_parallel_01",
  "posture": "cancelling",
  "branchDenominator": 3,
  "branchSettlement": {
    "settled": 3,
    "failed": 0
  },
  "cumulativeEconomics": {
    "currency": "USD",
    "machineCostMicros": 920000
  },
  "stoppingPosture": {
    "requested": true,
    "terminal": false
  },
  "fanIn": {
    "status": "settled",
    "parentSynthesisRunId": "run_parent_01"
  }
}

Responses

200Updated program stopping posture.

Schema: ParallelCognitionProgrammeProjection

Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
Operations & Integration5 sections · 11 operations

Operations & Integration

Operations

Explicit long-running control-plane operations and cancellation.

GET/v1/organisations/{organisationId}/operations/{operationId}

Get a long-running operation

getOperation

Returns the durable progress, terminal result or problem for work initiated by another platform command.

OAuth
operations.read
Boundary
Organization
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/operations/{operationId}' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "operationId": "opera_01J0EXAMPLE",
    "kind": "deployment.rollback",
    "status": "running",
    "targetResourceId": "deplo_01J0EXAMPLE",
    "progressPercent": 25,
    "cancellable": true,
    "resultResourceId": null,
    "receiptId": null,
    "createdAt": "2026-07-23T22:45:00Z",
    "updatedAt": "2026-07-23T22:46:00Z",
    "terminalAt": null,
    "problem": null
  }
}

Responses

200Successful response.
OperationResponse
FieldTypeMeaningConstraint
datarequiredOperation
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/operations/{operationId}:cancel

Cancel a long-running operation

cancelOperation

Requests cancellation where the initiating command declares cancellation lawful; cancellation is idempotent by operation state and idempotency key.

OAuth
operations.write
Boundary
Organization
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CancelOperationRequest
FieldTypeMeaningConstraint
reasonstring | null
Request example
{
  "reason": "Operator requested cancellation before external effect."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/operations/{operationId}:cancel' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "reason": "Operator requested cancellation before external effect."
}'
Response example200 · application/json
{
  "data": {
    "operationId": "opera_01J0EXAMPLE",
    "kind": "deployment.rollback",
    "status": "running",
    "targetResourceId": "deplo_01J0EXAMPLE",
    "progressPercent": 25,
    "cancellable": true,
    "resultResourceId": null,
    "receiptId": null,
    "createdAt": "2026-07-23T22:45:00Z",
    "updatedAt": "2026-07-23T22:46:00Z",
    "terminalAt": null,
    "problem": null
  }
}

Responses

200Successful response.
OperationResponse
FieldTypeMeaningConstraint
datarequiredOperation
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Operations & Integration

Events & Integrations

Customer event destinations, deliveries, replay, and signing-secret lifecycle.

POST/v1/organisations/{organisationId}/projects/{projectId}/event-destinations

Create an event destination

createEventDestination

Creates an environment-bound signed event destination with explicit event filters and version posture.

OAuth
events.write
Boundary
Project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
CreateEventDestinationRequest
FieldTypeMeaningConstraint
environmentIdrequiredstring
urlrequiredstringuri
eventTypesrequiredarray<string>
apiVersionstring
descriptionstring | null
Request example
{
  "environmentId": "envir_01J0EXAMPLE",
  "url": "https://example.test/indwel-events",
  "eventTypes": [
    "indwel.run.settled.v1"
  ],
  "apiVersion": "2026-07-23",
  "description": "Company Answers event consumer."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/event-destinations' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "environmentId": "envir_01J0EXAMPLE",
  "url": "https://example.test/indwel-events",
  "eventTypes": [
    "indwel.run.settled.v1"
  ],
  "apiVersion": "2026-07-23",
  "description": "Company Answers event consumer."
}'
Response example201 · application/json
{
  "data": {
    "eventDestinationId": "event_01J0EXAMPLE",
    "projectId": "proje_01J0EXAMPLE",
    "environmentId": "envir_01J0EXAMPLE",
    "url": "https://example.test/indwel-events",
    "eventTypes": [
      "indwel.run.settled.v1"
    ],
    "apiVersion": "2026-07-23",
    "status": "active",
    "signingAlgorithm": "hmac-sha256",
    "secretLastRotatedAt": "2026-07-23T22:45:00Z",
    "createdAt": "2026-07-23T22:45:00Z"
  }
}

Responses

201Successful response.
EventDestinationResponse
FieldTypeMeaningConstraint
datarequiredEventDestination
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}:send-test-event

Send a test event

sendTestEvent

Creates a non-production test Delivery through the same signing and dispatch pipeline used by the destination.

OAuth
events.write
Boundary
Project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
SendTestEventRequest
FieldTypeMeaningConstraint
eventTyperequiredstring
payloadobject
Request example
{
  "eventType": "indwel.test.v1",
  "payload": {
    "message": "verification"
  }
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}:send-test-event' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "eventType": "indwel.test.v1",
  "payload": {
    "message": "verification"
  }
}'
Response example202 · application/json
{
  "data": {
    "deliveryId": "deliv_01J0EXAMPLE",
    "eventDestinationId": "event_01J0EXAMPLE",
    "eventId": "evt_01J0EXAMPLE",
    "originalDeliveryId": null,
    "attemptNumber": 1,
    "status": "queued",
    "responseStatus": null,
    "latencyMs": null,
    "nextAttemptAt": null,
    "createdAt": "2026-07-23T22:45:00Z"
  }
}

Responses

202Successful response.
DeliveryResponse
FieldTypeMeaningConstraint
datarequiredDelivery
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}/deliveries

List event deliveries

listDeliveries

Lists signed delivery attempts, response outcomes, retry posture and replay lineage for one destination.

OAuth
events.read
Boundary
Project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}/deliveries' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "deliveryId": "deliv_01J0EXAMPLE",
        "eventDestinationId": "event_01J0EXAMPLE",
        "eventId": "evt_01J0EXAMPLE",
        "originalDeliveryId": null,
        "attemptNumber": 1,
        "status": "succeeded",
        "responseStatus": 204,
        "latencyMs": 83,
        "nextAttemptAt": null,
        "createdAt": "2026-07-23T22:45:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
DeliveryListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}/deliveries/{deliveryId}:replay

Replay an event delivery

replayDelivery

Creates a new signed Delivery attempt linked to the original immutable attempt and current destination secret version.

OAuth
events.write
Boundary
Project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
ReplayDeliveryRequest
FieldTypeMeaningConstraint
reasonstring | null
Request example
{
  "reason": "Consumer recovered after outage."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}/deliveries/{deliveryId}:replay' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "reason": "Consumer recovered after outage."
}'
Response example202 · application/json
{
  "data": {
    "deliveryId": "deliv_01J0EXAMPLE",
    "eventDestinationId": "event_01J0EXAMPLE",
    "eventId": "evt_01J0EXAMPLE",
    "originalDeliveryId": null,
    "attemptNumber": 1,
    "status": "queued",
    "responseStatus": null,
    "latencyMs": null,
    "nextAttemptAt": null,
    "createdAt": "2026-07-23T22:45:00Z"
  }
}

Responses

202Successful response.
DeliveryResponse
FieldTypeMeaningConstraint
datarequiredDelivery
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}:rotate-secret

Rotate an event signing secret

rotateEventDestinationSecret

Creates a replacement signing secret returned once and records the bounded overlap period for safe consumer migration.

OAuth
events.write
Boundary
Project
Effect
Bounded Write
Receipt
Required
Idempotency
Required

Request body

application/json
RotateEventDestinationSecretRequest
FieldTypeMeaningConstraint
overlapSecondsinteger≥ 0 · ≤ 86400
Request example
{
  "overlapSeconds": 900
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/event-destinations/{eventDestinationId}:rotate-secret' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "overlapSeconds": 900
}'
Response example200 · application/json
{
  "data": {
    "eventDestinationId": "event_01J0EXAMPLE",
    "signingSecret": "whsec_returned_once",
    "rotatedAt": "2026-07-23T22:45:00Z",
    "previousSecretValidUntil": "2026-07-23T23:00:00Z"
  }
}

Responses

200Successful response.
EventDestinationSecretRotationReceiptResponse
FieldTypeMeaningConstraint
datarequiredEventDestinationSecretRotationReceipt
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Operations & Integration

Activity

Customer-safe activity projections.

GET/v1/organisations/{organisationId}/projects/{projectId}/activity-events

List customer-safe activity events

listActivityEvents

Lists privacy-filtered project activity derived from authoritative audit, event and receipt records without exposing private operator context.

OAuth
activity.read
Boundary
Project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/activity-events' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "activityEventId": "activ_01J0EXAMPLE",
        "projectId": "proje_01J0EXAMPLE",
        "type": "deployment.rollback.requested",
        "actor": "user_01J0EXAMPLE",
        "resourceId": "deplo_01J0EXAMPLE",
        "summary": "Rollback requested.",
        "occurredAt": "2026-07-23T22:45:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
ActivityEventListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Operations & Integration

Usage & Quotas

Quotas, metering, and usage projections.

GET/v1/organisations/{organisationId}/projects/{projectId}/quotas/effective

Get effective project quotas

getQuota

Returns effective limits, reservations, usage and remaining capacity for the project and environment context.

OAuth
usage.read
Boundary
Project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/quotas/effective' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "quotaId": "quota_runs",
        "metric": "governed_runs",
        "limit": 1000,
        "used": 120,
        "reserved": 10,
        "remaining": 870,
        "unit": "runs",
        "periodStart": "2026-07-01T00:00:00Z",
        "periodEnd": "2026-08-01T00:00:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
QuotaSetResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/v1/organisations/{organisationId}/projects/{projectId}/usage-records

List project usage records

listUsageRecords

Lists immutable metered usage records bound to project, environment, release and cost class.

OAuth
usage.read
Boundary
Project
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/organisations/{organisationId}/projects/{projectId}/usage-records' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "usageRecordId": "usage_01J0EXAMPLE",
        "projectId": "proje_01J0EXAMPLE",
        "environmentId": "envir_01J0EXAMPLE",
        "metric": "governed_runs",
        "quantity": 1,
        "unit": "run",
        "costClass": "cognition.standard",
        "releaseId": null,
        "occurredAt": "2026-07-23T22:45:00Z"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
UsageRecordListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 8
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
428Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Operations & Integration

Plans & Commercial Metadata

Commercial metadata exposed as API resources.

GET/v1/subscription-plans

List subscription plans

listSubscriptionPlans

Returns product packaging and entitlement metadata. Price, payment and availability remain governed by Financial Operations and commercial authority.

Authority
Public
Boundary
Public
Effect
Read
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/v1/subscription-plans'
Response example200 · application/json
{
  "data": {
    "items": [
      {
        "planKey": "team",
        "label": "Team",
        "seatLimit": 25,
        "workspaceLimit": 3,
        "storageBytesLimit": 107374182400,
        "evidenceBytesLimit": 53687091200,
        "monthlyRunsLimit": 5000,
        "monthlyTokensLimit": 25000000,
        "connectorSyncsLimit": 250,
        "identityProviderModes": [
          "native",
          "oidc",
          "saml"
        ],
        "environments": [
          "dev",
          "staging",
          "prod"
        ],
        "auditRetentionDays": 180,
        "supportTier": "standard",
        "commercialStatus": "design-candidate"
      }
    ],
    "nextCursor": null
  }
}

Responses

200Successful response.
SubscriptionPlanListResponse
FieldTypeMeaningConstraint
datarequiredobject
Refusals and alternate responses 2
429Problem Details response.
defaultProblem Details response.
#
Compatibility1 section · 5 operations

Compatibility

Compatibility & Migration

Launch-supported compatibility and convenience operations that do not define the canonical resource model.

PATCH/sessions

Update Session metadata (compatibility alias)

updateSessionCompatibilityAlias

Compatibility alias for the path-addressed Session mutation. New integrations should use PATCH /sessions/{sessionId}.

Authority: authenticated human principal.

OAuth
sessions.write
Contract
scope sessions.write.

Parameters

NameInTypeMeaning
sessionIdrequiredquerystringSession identity supplied outside the path for the retained alias.

Request body

application/json

Schema: SessionMutationRequest

Request example
{
  "name": "Vendor risk review"
}
RequestcURL
curl --request PATCH \
  --url 'https://api.indwel.ai/sessions?sessionId=value' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Vendor risk review"
}'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "updatedAt": "2026-09-01T15:00:00Z"
}

Responses

200Updated Session metadata.
SessionMutationResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
namestring
pinnedboolean
updatedAtrequiredstringdate-time
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
DELETE/sessions

Delete a Session (compatibility alias)

deleteSessionCompatibilityAlias

Compatibility alias for the path-addressed Session deletion. New integrations should use DELETE /sessions/{sessionId}.

Authority: authenticated human principal.

OAuth
sessions.write
Contract
scope sessions.write.

Parameters

NameInTypeMeaning
sessionIdrequiredquerystringSession identity supplied outside the path for the retained alias.
RequestcURL
curl --request DELETE \
  --url 'https://api.indwel.ai/sessions?sessionId=value' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111"
}

Responses

200Session deleted.
SessionDeleteResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
Refusals and alternate responses 7
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/start

Start a Conversation Session

startSessionCompatibility

Launch-supported convenience operation that creates a server-issued Session and settles it as Conversation or Work posture. It does not replace canonical durable Work creation through the Work API.

Authority: authenticated human principal.

OAuth
sessions.write
Contract
scope sessions.write.

Request body

application/json
StartSessionCompatibilityRequest
FieldTypeMeaningConstraint
namestring
titlestring
workPostureenumconversation, work, auto
tenantIdstringScope proposal only. Backend principal authority remains decisive.
workspaceIdstringScope proposal only.
missionIdstringScope proposal only.
Request example
{}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/start' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{}'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "name": "Vendor risk review",
  "workPosture": "conversation"
}

Responses

200Server-issued compatibility Session.
StartSessionCompatibilityResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
namerequiredstring
workPosturerequiredenumconversation, work
workspaceIdstring
missionIdstring
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
POST/chat

Execute Conversation cognition

chatCompatibility

Launch-supported compatibility cognition transport preserving the established /chat response shape while execution authority resides in the canonical cognition kernel. This operation does not define canonical Run, receipt, Continuity, or long-term developer cognition truth.

Authority: authenticated human principal.

OAuth
conversation-cognition.write
Contract
scope conversation-cognition.write.

Request body

application/json
ConversationChatRequest
FieldTypeMeaningConstraint
sessionIdrequiredstringuuid
promptrequiredstringmin 1 chars
attachmentIdsarray<string>
idempotencyKeystringCompatibility body form; the Idempotency-Key header is also accepted by the current transport.
Request example
{
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "prompt": "Summarise the newly admitted vendor evidence and identify any material change."
}
RequestcURL
curl --request POST \
  --url 'https://api.indwel.ai/chat' \
  --header 'Authorization: Bearer $INDWEL_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "prompt": "Summarise the newly admitted vendor evidence and identify any material change."
}'
Response example200 · application/json
{
  "ok": true,
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "messages": [
    {
      "role": "user",
      "content": "The newly admitted evidence does not materially change the current vendor-risk posture."
    }
  ]
}

Responses

200Compatibility Conversation response.
ConversationChatResponse
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
messagesrequiredarray<ConversationMessage>
metaobjectCompatibility transport metadata. Canonical Run/receipt truth is documented under the Run API.
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
409Problem Details response.
429Problem Details response.
defaultProblem Details response.
#
GET/history

Read Session history

getSessionHistoryCompatibility

Launch-supported compatibility projection of settled conversational transcript for a Session. History is not Continuity, Work state, Memory, or Run truth.

Authority: authenticated human principal.

OAuth
sessions.read
Contract
scope sessions.read.

Parameters

NameInTypeMeaning
sessionIdrequiredquerystringServer-issued Session identifier.
RequestcURL
curl --request GET \
  --url 'https://api.indwel.ai/history?sessionId=value' \
  --header 'Authorization: Bearer $INDWEL_TOKEN'
Response example200 · application/json
{
  "ok": true,
  "contractVersion": "indwel.cognitive_session_history_projection.v2",
  "sourceOfTruth": "terminal_settlement_outbox_v2",
  "sessionId": "11111111-1111-4111-8111-111111111111",
  "messages": [
    {
      "role": "user",
      "content": "The newly admitted evidence does not materially change the current vendor-risk posture."
    }
  ],
  "quarantinedAssistantCount": 1
}

Responses

200Canonical settled Session-history projection.
SessionHistoryResponse
FieldTypeMeaningConstraint
okrequiredboolean
contractVersionrequiredstring
sourceOfTruthrequiredstring
sessionIdrequiredstringuuid
messagesrequiredarray<ConversationMessage>
quarantinedAssistantCountrequiredinteger≥ 0
Refusals and alternate responses 6
400Problem Details response.
401Problem Details response.
403Problem Details response.
404Problem Details response.
429Problem Details response.
defaultProblem Details response.
#

Machine vocabulary

Schemas

Reusable request, response, receipt, and resource shapes from the canonical launch contract. Ordinary properties are presented as specification rows rather than nested cards.

223 schemas

ProblemDetailsobjectRFC 9457-compatible problem details with Indwel extensions.
FieldTypeMeaningConstraint
typerequiredstringuri
titlerequiredstring
statusrequiredinteger≥ 400 · ≤ 599
detailrequiredstring
instancestring
coderequiredstring
traceIdrequiredstring
retryableboolean
requiredActionsarray<object>
Serviceobject
FieldTypeMeaningConstraint
serviceIdrequiredstring
namerequiredstring
statusrequiredenumoperational, degraded, unavailable
apiVersionsrequiredarray<string>
governancestring
releaseIdstring | null
Capabilityobject
FieldTypeMeaningConstraint
capabilityIdrequiredstring
namerequiredstring
domainstring
lifecyclerequiredstring
claimStatusrequiredenumqualified, claimable
limitationsarray<string>
PlatformReleaseobject
FieldTypeMeaningConstraint
releaseIdrequiredstring
versionrequiredstring
releasedAtrequiredstringdate-time
statusrequiredenumcandidate, released, withdrawn, superseded
summarystring
breakingChangesarray<string>
SubscriptionPlanobject
FieldTypeMeaningConstraint
planKeyrequiredenumstarter, team, enterprise
labelrequiredstring
seatLimitrequiredinteger≥ 1
workspaceLimitrequiredinteger≥ 1
storageBytesLimitinteger≥ 0
evidenceBytesLimitinteger≥ 0
monthlyRunsLimitinteger≥ 0
monthlyTokensLimitinteger≥ 0
connectorSyncsLimitinteger≥ 0
identityProviderModesarray<string>
environmentsarray<string>
auditRetentionDaysinteger≥ 0
supportTierrequiredenumcommunity, standard, priority
commercialStatusenumdesign-candidate, available, retired
AppTemplateLinksobject
FieldTypeMeaningConstraint
selfrequiredstring
workflowsrequiredstring
schemasrequiredstring
actionDefinitionsrequiredstring
policiesrequiredstring
capabilitiesrequiredstring
AppTemplateobject
FieldTypeMeaningConstraint
appTemplateIdrequiredstring
namerequiredstring
descriptionrequiredstring
domainrequiredstring
lifecyclerequiredenumpreview, active, deprecated
versionrequiredstring
defaultWorkflowIdstring | null
supportedRunFieldsarray<string>
requiredArtifactsarray<string>
linksrequiredAppTemplateLinks
WorkflowDefinitionobjectWorkflow definition. A Cognitive Contract makes the workflow organizationally governed rather than an unconstrained inference process.
FieldTypeMeaningConstraint
workflowIdrequiredstring
namestring
descriptionstring
lifecyclestring
stepsarray<object>
cognitiveContractCognitiveContractInstalled app-specific Cognitive Contract governing this workflow.
SchemaDefinitionobject
FieldTypeMeaningConstraint
schemaIdrequiredstring
namerequiredstring
schemarequiredobjectJSON Schema document
ActionDefinitionobjectInstalled action definition. Effectful actions are resolved from the immutable app version and remain subordinate to the current Cognitive Contract stage and authority.
FieldTypeMeaningConstraint
actionIdrequiredstring
namestring
effectLevelrequiredenumread, bounded-write, external-effect, irreversible-effect
reviewRequiredrequiredboolean
receiptRequiredboolean
providerIdstring | nullInstalled provider binding for an effectful action. Sandbox production-readiness applications use indwel.sandbox.
humanAuthorityRequirementIdstring | nullExact current Cognitive Contract human-authority requirement required before a review-gated effect may execute.
PolicyCollectionobject
FieldTypeMeaningConstraint
appTemplateIdrequiredstring
policiesrequiredarray<object>
AppTemplateCapabilitiesobject
FieldTypeMeaningConstraint
appTemplateIdrequiredstring
workflowCountrequiredinteger≥ 0
schemaCountrequiredinteger≥ 0
actionCountrequiredinteger≥ 0
policyCountinteger≥ 0
lifecyclerequiredstring
limitationsarray<string>
UserPreferencesobject
FieldTypeMeaningConstraint
localestring
timezonestring
defaultWorkspaceIdstring | null
reducedMotionboolean
UserAccountobject
FieldTypeMeaningConstraint
userIdrequiredstring
displayNamerequiredstring
emailstringemail
preferencesrequiredUserPreferences
revisionrequiredstring
ServiceListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
CapabilityListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
PlatformReleaseListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
SubscriptionPlanListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
AppTemplateListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
AppTemplateResponseobject
FieldTypeMeaningConstraint
datarequiredAppTemplate
WorkflowListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
WorkflowResponseobject
FieldTypeMeaningConstraint
datarequiredWorkflowDefinitionWorkflow definition. A Cognitive Contract makes the workflow organizationally governed rather than an unconstrained inference process.
SchemaDefinitionListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
ActionDefinitionListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
PolicyCollectionResponseobject
FieldTypeMeaningConstraint
datarequiredPolicyCollection
AppTemplateCapabilitiesResponseobject
FieldTypeMeaningConstraint
datarequiredAppTemplateCapabilities
UserAccountResponseobject
FieldTypeMeaningConstraint
datarequiredUserAccount
UserPreferencesResponseobject
FieldTypeMeaningConstraint
datarequiredUserPreferences
Organisationobject
FieldTypeMeaningConstraint
organisationIdrequiredstring
namerequiredstring
slugrequiredstring
lifecyclerequiredenumactive, suspended, closed
createdAtrequiredstringdate-time
Workspaceobject
FieldTypeMeaningConstraint
workspaceIdrequiredstring
organisationIdrequiredstring
namerequiredstring
slugrequiredstring
lifecyclerequiredenumactive, suspended, closed
createdAtrequiredstringdate-time
Projectobject
FieldTypeMeaningConstraint
projectIdrequiredstring
organisationIdrequiredstring
namerequiredstring
slugrequiredstring
descriptionstring | null
lifecyclerequiredenumactive, suspended, archived
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
revisionrequiredinteger≥ 1
CreateProjectRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars · max 120 chars
slugstring | nullpattern ^[a-z0-9]+(?:-[a-z0-9]+)*$
descriptionstring | nullmax 2000 chars
Environmentobject
FieldTypeMeaningConstraint
environmentIdrequiredstring
projectIdrequiredstring
namerequiredstring
slugrequiredstring
kindrequiredenumsandbox, development, staging, production
effectModerequiredenumsimulated, controlled, live
lifecyclerequiredenumactive, suspended, archived
createdAtrequiredstringdate-time
organisationIdrequiredstring
revisionrequiredinteger≥ 1
updatedAtrequiredstringdate-time
CreateEnvironmentRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
slugstring | null
kindrequiredenumsandbox, development, staging, production
effectModeenumsimulated, controlled, live
ClientobjectDeveloper client registration. New clients remain pending and unusable until bound to the authorized OAuth issuer.
FieldTypeMeaningConstraint
clientIdrequiredstring
organisationIdrequiredstring
projectIdrequiredstring
environmentIdrequiredstring
namerequiredstring
applicationTyperequiredenumservice, web, native, browser
oauthClientTyperequiredenumconfidential, public
grantTypesrequiredarray<enum>
tokenEndpointAuthMethodrequiredenumclient_secret_basic, none
redirectUrisrequiredarray<string>
pkceRequiredrequiredboolean
issuerBindingStatusrequiredenumpending, active, suspended
authorizationServerIssuerrequiredstring | nulluri
scopesrequiredarray<string>
statusrequiredenumpending, active, revoked, expired
revisionrequiredinteger≥ 1
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
lastRotatedAtrequiredstring | nulldate-time
CreateClientRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
environmentIdrequiredstring
applicationTyperequiredenumservice, web, native, browser
redirectUrisarray<string>Required for web, native, and browser clients; prohibited for service clients.
scopesrequiredarray<string>
Appobject
FieldTypeMeaningConstraint
appIdrequiredstring
projectIdrequiredstring
namerequiredstring
slugrequiredstring
descriptionstring | null
archetypestring | null
lifecyclerequiredenumactive, suspended, archived
createdAtrequiredstringdate-time
CreateAppRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
slugstring | null
descriptionstring | null
archetypestring | null
PolicyDefinitionobject
FieldTypeMeaningConstraint
policyIdrequiredstring
kindrequiredstring
lifecyclerequiredstring
configurationobject
AppManifestobjectVersioned governed-app package. The cognition-profile reference is resolved by the platform under application-version authority.
FieldTypeMeaningConstraint
workflowsrequiredarray<WorkflowDefinition>
schemasrequiredarray<SchemaDefinition>
policiesrequiredarray<PolicyDefinition>
actionDefinitionsrequiredarray<ActionDefinition>
cognitionProfileRefstring | nullOpaque cognition-profile reference resolved by the platform for the application version.
AppVersionValidationSummaryobject
FieldTypeMeaningConstraint
statusrequiredenumPersisted App Version validation state. not-run exists only before validation has been performed; completed validation is valid or invalid.not-run, valid, invalid
issueCountrequiredinteger≥ 0
AppVersionobject
FieldTypeMeaningConstraint
appVersionIdrequiredstring
appIdrequiredstring
versionrequiredstring
statusrequiredenumdraft, validated, published, rejected
revisionrequiredstring
manifestDigestrequiredstring
validationrequiredAppVersionValidationSummary
createdAtrequiredstringdate-time
publishedAtstring | nulldate-time
CreateAppVersionRequestobject
FieldTypeMeaningConstraint
versionrequiredstringmin 1 chars
manifestrequiredAppManifestVersioned governed-app package. The cognition-profile reference is resolved by the platform under application-version authority.
ValidationIssueobject
FieldTypeMeaningConstraint
coderequiredstringMachine-readable validation issue code. Unresolved cognition-profile authority uses COGNITION_PROFILE_AUTHORITY_UNAVAILABLE.
severityrequiredenumerror, warning, information
pathrequiredstring
messagerequiredstring
AppVersionValidationReportobject
FieldTypeMeaningConstraint
appVersionIdrequiredstring
statusrequiredenumCompleted App Version validation result. Missing or unresolved required authority fails closed as invalid.valid, invalid
issuesrequiredarray<ValidationIssue>
checkedAtrequiredstringdate-time
Operationobject
FieldTypeMeaningConstraint
operationIdrequiredstring
kindrequiredstring
statusrequiredenumqueued, running, cancelling, succeeded, failed, cancelled
targetResourceIdstring | null
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
terminalAtstring | nulldate-time
problemoneOf
progressPercentnumber | null≥ 0 · ≤ 100
cancellableboolean
resultResourceIdstring | null
receiptIdstring | null
CreateDeploymentRequestobject
FieldTypeMeaningConstraint
appVersionIdrequiredstring
descriptionstring | null
Installationobject
FieldTypeMeaningConstraint
installationIdrequiredstring
organisationIdrequiredstring
workspaceIdrequiredstring
deploymentIdrequiredstring
permissionsrequiredarray<string>
statusrequiredenumactive, suspended, removed
createdAtrequiredstringdate-time
CreateInstallationRequestobject
FieldTypeMeaningConstraint
deploymentIdrequiredstring
permissionsrequiredarray<string>
policyOverridesobject
Collectionobject
FieldTypeMeaningConstraint
collectionIdrequiredstring
workspaceIdrequiredstring
namerequiredstring
descriptionstring | null
statusrequiredenumactive, suspended, archived
custodyPolicyIdstring | null
createdAtrequiredstringdate-time
CreateCollectionRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
descriptionstring | null
custodyPolicyIdstring | null
SourceCustodyobject
FieldTypeMeaningConstraint
classificationrequiredstring
authorityClassrequiredstring
effectiveAtstring | nulldate-time
retentionPolicyIdstring | null
UploadInstructionsobjectShort-lived direct-upload instructions. The URL is sensitive and omitted from ordinary Source reads.
FieldTypeMeaningConstraint
methodrequiredenumPUT
urlrequiredstringuri
headersrequiredobject
expiresAtrequiredstringdate-time
Sourceobject
FieldTypeMeaningConstraint
sourceIdrequiredstring
collectionIdrequiredstring
namerequiredstring
mediaTyperequiredstring
sizeBytesinteger | null≥ 0
sha256string | null
statusrequiredenumawaiting-upload, uploaded, ingesting, ready, failed
custodyrequiredSourceCustody
createdAtrequiredstringdate-time
CreateSourceRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
mediaTyperequiredstring
sizeBytesinteger | null≥ 0
sha256string | null
custodyrequiredSourceCustody
SourceCreateResultobject
FieldTypeMeaningConstraint
sourcerequiredSource
uploadrequiredUploadInstructionsShort-lived direct-upload instructions. The URL is sensitive and omitted from ordinary Source reads.
Ingestionobject
FieldTypeMeaningConstraint
ingestionIdrequiredstring
sourceIdrequiredstring
statusrequiredenumqueued, processing, ready, failed, cancelled
operationIdstring | null
evidenceReadyrequiredboolean
createdAtrequiredstringdate-time
completedAtstring | nulldate-time
problemoneOf
CreateIngestionRequestobject
FieldTypeMeaningConstraint
parserProfilestring | null
languagestring | null
optionsobject
Caseobject
FieldTypeMeaningConstraint
caseIdrequiredstring
workspaceIdrequiredstring
installationIdrequiredstring
workflowIdrequiredstring
titlestring | null
externalReferencestring | null
statusrequiredenumopen, closed, cancelled
inputrequiredobject
revisionrequiredstring
createdAtrequiredstringdate-time
CreateCaseRequestobject
FieldTypeMeaningConstraint
installationIdrequiredstring
workflowIdrequiredstring
titlestring | null
externalReferencestring | null
inputrequiredobject
OrganisationListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
WorkspaceListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
ProjectResponseobject
FieldTypeMeaningConstraint
datarequiredProject
EnvironmentResponseobject
FieldTypeMeaningConstraint
datarequiredEnvironment
AppResponseobject
FieldTypeMeaningConstraint
datarequiredApp
AppVersionResponseobject
FieldTypeMeaningConstraint
datarequiredAppVersion
AppVersionValidationReportResponseobject
FieldTypeMeaningConstraint
datarequiredAppVersionValidationReport
OperationResponseobject
FieldTypeMeaningConstraint
datarequiredOperation
InstallationResponseobject
FieldTypeMeaningConstraint
datarequiredInstallation
CollectionResponseobject
FieldTypeMeaningConstraint
datarequiredCollection
SourceCreateResponseobject
FieldTypeMeaningConstraint
datarequiredSourceCreateResult
IngestionResponseobject
FieldTypeMeaningConstraint
datarequiredIngestion
CaseResponseobject
FieldTypeMeaningConstraint
datarequiredCase
EventDestinationobject
FieldTypeMeaningConstraint
eventDestinationIdrequiredstring
projectIdrequiredstring
environmentIdrequiredstring
urlrequiredstringuri
eventTypesrequiredarray<string>
apiVersionstring
statusrequiredenumactive, paused, failing, disabled
signingAlgorithmrequiredenumhmac-sha256
secretLastRotatedAtstring | nulldate-time
createdAtrequiredstringdate-time
CreateEventDestinationRequestobject
FieldTypeMeaningConstraint
environmentIdrequiredstring
urlrequiredstringuri
eventTypesrequiredarray<string>
apiVersionstring
descriptionstring | null
EventDestinationResponseobject
FieldTypeMeaningConstraint
datarequiredEventDestination
SendTestEventRequestobject
FieldTypeMeaningConstraint
eventTyperequiredstring
payloadobject
Deliveryobject
FieldTypeMeaningConstraint
deliveryIdrequiredstring
eventDestinationIdrequiredstring
eventIdrequiredstring
originalDeliveryIdstring | null
attemptNumberrequiredinteger≥ 1
statusrequiredenumqueued, delivering, succeeded, failed, dead-lettered
responseStatusinteger | null≥ 100 · ≤ 599
latencyMsinteger | null≥ 0
nextAttemptAtstring | nulldate-time
createdAtrequiredstringdate-time
DeliveryResponseobject
FieldTypeMeaningConstraint
datarequiredDelivery
DeliveryListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
ReplayDeliveryRequestobject
FieldTypeMeaningConstraint
reasonstring | null
Quotaobject
FieldTypeMeaningConstraint
quotaIdrequiredstring
metricrequiredstring
limitrequirednumber≥ 0
usedrequirednumber≥ 0
reservedrequirednumber≥ 0
remainingrequirednumber≥ 0
unitstring
periodStartrequiredstringdate-time
periodEndrequiredstringdate-time
QuotaSetResponseobject
FieldTypeMeaningConstraint
datarequiredobject
UsageRecordobject
FieldTypeMeaningConstraint
usageRecordIdrequiredstring
projectIdrequiredstring
environmentIdstring | null
metricrequiredstring
quantityrequirednumber≥ 0
unitrequiredstring
costClassstring | null
releaseIdstring | null
occurredAtrequiredstringdate-time
UsageRecordListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
ActivityEventobject
FieldTypeMeaningConstraint
activityEventIdrequiredstring
projectIdrequiredstring
typerequiredstring
actorstring | null
resourceIdstring | null
summaryrequiredstring
occurredAtrequiredstringdate-time
ActivityEventListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
CancelOperationRequestobject
FieldTypeMeaningConstraint
reasonstring | null
RollbackDeploymentRequestobject
FieldTypeMeaningConstraint
targetDeploymentIdstring | null
reasonstring | null
RotateCredentialRequestobject
FieldTypeMeaningConstraint
overlapSecondsinteger≥ 0 · ≤ 86400
expiresAtstring | nulldate-time
CredentialRotationReceiptobject
FieldTypeMeaningConstraint
credentialIdrequiredstring
clientIdrequiredstring
secretrequiredstring
rotatedAtrequiredstringdate-time
previousCredentialValidUntilstring | nulldate-time
expiresAtstring | nulldate-time
CredentialRotationReceiptResponseobject
FieldTypeMeaningConstraint
datarequiredCredentialRotationReceipt
RotateEventDestinationSecretRequestobject
FieldTypeMeaningConstraint
overlapSecondsinteger≥ 0 · ≤ 86400
EventDestinationSecretRotationReceiptobject
FieldTypeMeaningConstraint
eventDestinationIdrequiredstring
signingSecretrequiredstring
rotatedAtrequiredstringdate-time
previousSecretValidUntilstring | nulldate-time
EventDestinationSecretRotationReceiptResponseobject
FieldTypeMeaningConstraint
datarequiredEventDestinationSecretRotationReceipt
ServiceResponseobject
FieldTypeMeaningConstraint
datarequiredService
CredentialobjectCredential metadata. Secret hashes and plaintext material are never exposed.
FieldTypeMeaningConstraint
credentialIdrequiredstring
organisationIdrequiredstring
projectIdrequiredstring
clientIdrequiredstring
statusrequiredenumactive, overlap, revoked, expired
revisionrequiredinteger≥ 1
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
expiresAtrequiredstring | nulldate-time
validUntilrequiredstring | nulldate-time
ProjectListobject
FieldTypeMeaningConstraint
itemsrequiredarray<Project>
nextCursorstring | null
ProjectListResponseobject
FieldTypeMeaningConstraint
datarequiredProjectList
EnvironmentListobject
FieldTypeMeaningConstraint
itemsrequiredarray<Environment>
nextCursorstring | null
EnvironmentListResponseobject
FieldTypeMeaningConstraint
datarequiredEnvironmentList
ClientListobject
FieldTypeMeaningConstraint
itemsrequiredarray<Client>
nextCursorstring | null
ClientListResponseobject
FieldTypeMeaningConstraint
datarequiredClientList
CredentialListobject
FieldTypeMeaningConstraint
itemsrequiredarray<Credential>
nextCursorstring | null
CredentialListResponseobject
FieldTypeMeaningConstraint
datarequiredCredentialList
ClientResponseobject
FieldTypeMeaningConstraint
datarequiredClientDeveloper client registration. New clients remain pending and unusable until bound to the authorized OAuth issuer.
CredentialResponseobject
FieldTypeMeaningConstraint
datarequiredCredentialCredential metadata. Secret hashes and plaintext material are never exposed.
ClientRegistrationReceiptobjectClient registration receipt. The client cannot authenticate until an authorized OAuth issuer binding is completed.
FieldTypeMeaningConstraint
clientrequiredClientDeveloper client registration. New clients remain pending and unusable until bound to the authorized OAuth issuer.
secretrequirednullNo OAuth credential is issued before provider binding.
secretDisplayrequiredenumnot-issued-pending-issuer-binding
registeredAtrequiredstringdate-time
credentialIdrequirednull
pkceRequiredrequiredboolean
issuerBindingStatusrequiredenumpending
ClientRegistrationReceiptResponseobject
FieldTypeMeaningConstraint
datarequiredClientRegistrationReceiptClient registration receipt. The client cannot authenticate until an authorized OAuth issuer binding is completed.
CreateRunPlanRequestobject
FieldTypeMeaningConstraint
sessionIdrequiredstringmin 1 chars
promptrequiredstringmin 1 chars · max 100000 chars
historyarray<object>
moderequiredstringmin 1 chars
routeTemplateIdrequiredstringmin 1 chars
RunPlanobject
FieldTypeMeaningConstraint
planIdrequiredstring
caseIdrequiredstring
caseRevisionrequiredinteger≥ 1
installationIdrequiredstring
workflowIdrequiredstring
sessionIdrequiredstring
promptDigestrequiredstring
requestedModeIdrequiredstring
routeTemplateIdrequiredstring
previewContractHashrequiredstring
previewAdmissionSnapshotDigestrequiredstring
executionBasisDigestrequiredstring
statusrequiredstring
createdAtrequiredstringdate-time
RunPlanResponseobject
FieldTypeMeaningConstraint
datarequiredRunPlan
CreateRunRequestobject
FieldTypeMeaningConstraint
planIdrequiredstringmin 1 chars
promptrequiredstringmin 1 chars · max 100000 chars
historyarray<object>
RunEvidenceItemobject
FieldTypeMeaningConstraint
evidenceIdrequiredstring
dispositionrequiredenumadmitted, suppressed, unsupported
canonicalIdentitystring
provenanceReferencestring
reasonCodestring
RunEvidenceListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
CognitiveContractEvidenceRequirementobject
FieldTypeMeaningConstraint
requirementIdrequiredstringStable requirement identity within the installed Cognitive Contract.min 1 chars
acceptedSourcesrequiredarray<enum>Evidence evaluator classes admitted by this exact requirement.
CognitiveContractHumanAuthorityRequirementobject
FieldTypeMeaningConstraint
requirementIdrequiredstringmin 1 chars
authorityClassrequiredstringOrganization-defined authority class required for this business transition.min 1 chars
eligibleTenantRolesarray<enum>Tenant roles eligible to satisfy this authority requirement; runtime still evaluates the exact actor and current Case authority.
decisionPolicyenumSupported settlement policy for the human authority requirement.single-authority
CognitiveContractTransitionobject
FieldTypeMeaningConstraint
transitionIdrequiredstringmin 1 chars
fromStagerequiredstringmin 1 chars
toStagerequiredstringmin 1 chars
evidenceRequirementsrequiredarray<CognitiveContractEvidenceRequirement>
humanAuthorityRequirementsrequiredarray<CognitiveContractHumanAuthorityRequirement>
CognitiveContractobjectApplication-specific organizational law installed inside Indwel's non-negotiable Cognitive Constitution. It constrains what evidence, human authority and business transitions may settle the workflow.
FieldTypeMeaningConstraint
schemarequiredenumindwel.cognitive-contract.v1
contractIdrequiredstringImmutable application-specific Cognitive Contract identity.min 1 chars
versionrequiredstringContract version retained by Cases created from the installed app version.min 1 chars
initialStagerequiredstringInitial governed business stage for Cases using this workflow.min 1 chars
transitionsrequiredarray<CognitiveContractTransition>Stage transitions whose evidence and human-authority requirements govern settlement.
ReferenceEnvelopeobjectAuthenticated Indwel API response envelope. Individual resources define the data projection.

Schema: object

WorkDocketProjectionobjectLeast-privilege Work docket projection returned only after backend tenant/workspace authority is applied.
FieldTypeMeaningConstraint
workIdrequiredstring
titlerequiredstring
lifecyclerequiredstring
posturestring
sensitivitystring
tenantIdrequiredstring
workspaceIdrequiredstring
portfolioIdstring
teamIdsarray<string>
updatedAtstringdate-time
relationshipenumdepends_on, blocks, supersedes, related, derived_from, portfolio_peer
WorkListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
WorkResidualStateobject
FieldTypeMeaningConstraint
unsatisfiedCriterionIdsrequiredarray<string>
unresolvedQuestionIdsrequiredarray<string>
blockerIdsrequiredarray<string>
frontierItemIdsrequiredarray<string>
WorkStatusProjectionobject
FieldTypeMeaningConstraint
schemarequiredstring
workIdrequiredstring
titlerequiredstring
tenantIdrequiredstring
workspaceIdrequiredstring
portfolioIdstring
lifecyclerequiredenumproposed, active, paused, review, closed
posturerequiredstring
docketRevisionrequiredinteger≥ 1
progressRevisionrequiredinteger≥ 1
residualsrequiredWorkResidualState
settlementCandidaterequiredboolean
settlementReasonCodesrequiredarray<string>
legalNextActionsrequiredarray<string>
updatedAtrequiredstringdate-time
WorkSettlementReceiptobject
FieldTypeMeaningConstraint
schemarequiredstring
receiptIdrequiredstring
workIdrequiredstring
dispositionrequiredenumsatisfied, best_effort, blocked, exhausted, abandoned, superseded
closedAtrequiredstringdate-time
closedByrequiredstring
docketRevisionrequiredinteger≥ 1
progressRevisionrequiredinteger≥ 1
residualsrequiredWorkResidualState
evidenceRefsrequiredarray<string>
decisionRefsrequiredarray<string>
sourceReceiptIdsrequiredarray<string>
residualRiskenumnone, low, medium, high
statusrequiredenumsettled, settled_with_residuals
reasonCodesrequiredarray<string>
digestrequiredstring
WorkStatusResponseobject
FieldTypeMeaningConstraint
datarequiredobject
WorkProjectionResponseobject
FieldTypeMeaningConstraint
datarequiredWorkStatusProjection
WorkSettlementResponseobject
FieldTypeMeaningConstraint
datarequiredobject
WorkPortfolioSummaryobject
FieldTypeMeaningConstraint
portfolioIdrequiredstring
workCountrequiredinteger≥ 0
lifecycleCountsrequiredobject
postureCountsrequiredobject
blockedWorkIdsrequiredarray<string>
settlementCandidateWorkIdsrequiredarray<string>
lastUpdatedAtrequiredoneOf
workIdsrequiredarray<string>
WorkPortfolioProjectionobject
FieldTypeMeaningConstraint
schemarequiredstring
tenantIdrequiredstring
principalIdrequiredstring
visibleWorkCountrequiredinteger≥ 0
portfoliosrequiredarray<WorkPortfolioSummary>
reasonCodesrequiredarray<string>
WorkPortfolioResponseobject
FieldTypeMeaningConstraint
datarequiredWorkPortfolioProjection
WorkEconomicAttributionLineobject
FieldTypeMeaningConstraint
idrequiredstring
machineCostMicrosrequiredinteger≥ 0
terminalInferenceRunsrequiredinteger≥ 0
unpricedTerminalRunsrequiredinteger≥ 0
unpricedPhysicalAttemptsrequiredinteger≥ 0
humanEngagementEventsrequiredinteger≥ 0
WorkEconomicsProjectionobject
FieldTypeMeaningConstraint
schemarequiredstring
tenantIdrequiredstring
workIdrequiredstring
workspaceIdsrequiredarray<string>
currencyrequiredstring
truthClassrequiredenumprovider_priced_settlement, unavailable
machineCostMicrosrequiredoneOf
terminalInferenceRunsrequiredinteger≥ 0
unpricedTerminalRunsrequiredinteger≥ 0
unpricedPhysicalAttemptsrequiredinteger≥ 0
humanEngagementEventsrequiredinteger≥ 0
byUserrequiredarray<WorkEconomicAttributionLine>
byTeamrequiredarray<WorkEconomicAttributionLine>
unallocatedUserMachineCostMicrosrequiredinteger≥ 0
unallocatedTeamMachineCostMicrosrequiredinteger≥ 0
sourceEventIdsrequiredarray<string>
reasonCodesrequiredarray<string>
WorkEconomicsProvenanceobjectCustomer-safe provenance for Work economics. Storage topology remains behind the API boundary.
FieldTypeMeaningConstraint
schemaVersionrequiredstring
authorityrequiredstring
completerequiredboolean
eventCountrequiredinteger≥ 0
reasonCodesrequiredarray<string>
WorkEconomicsResponseobject
FieldTypeMeaningConstraint
datarequiredobject
WorkCreateRequestobject
FieldTypeMeaningConstraint
workIdstringOptional caller-supplied durable Work identifier; when omitted the backend creates one.
titlerequiredstringmin 1 chars
displayNamestring
descriptionstring
workspaceIdrequiredstringmin 1 chars
portfolioIdstring
contractIdsarray<string>
teamIdsarray<string>
objectiveIdsarray<string>
successCriterionIdsarray<string>
materialQuestionIdsarray<string>
WorkUpdateRequestobject
FieldTypeMeaningConstraint
expectedRevisionrequiredinteger≥ 1
titlestring
displayNamestring
descriptionstring
portfolioIdstring
addTeamIdsarray<string>
addParticipantPrincipalIdsarray<string>
addConversationIdsarray<string>
addSessionIdsarray<string>
addContractIdsarray<string>
addObjectiveIdsarray<string>
lifecycleenumproposed, active, paused, review
WorkAdvanceRequestobject
FieldTypeMeaningConstraint
expectedProgressRevisionrequiredinteger≥ 1
actIdstring
atstringdate-time
kindrequiredenumcriterion_satisfied, question_resolved, evidence_admitted, decision_settled, step_completed, blocker_removed, …
summaryrequiredstringmin 1 chars
receiptIdsarray<string>
satisfiedCriterionIdsarray<string>
resolvedQuestionIdsarray<string>
blockerIdsarray<string>
removeBlockerIdsarray<string>
decisionIdsarray<string>
settledDecisionIdsarray<string>
frontierItemIdsarray<string>
postureenumadvancing, steady, blocked, decision_ready, settlement_candidate
WorkSettleRequestobject
FieldTypeMeaningConstraint
expectedDocketRevisionrequiredinteger≥ 1
dispositionrequiredenumsatisfied, best_effort, blocked, exhausted, abandoned, superseded
summaryrequiredstringmin 1 chars
objectiveIdstring
satisfiedCriterionIdsarray<string>
unsatisfiedCriterionIdsarray<string>
unresolvedItemIdsarray<string>
evidenceRefsarray<string>
decisionRefsarray<string>
receiptIdsarray<string>
blockingReasonsarray<string>
residualRiskenumnone, low, medium, high
supersededByWorkIdstring
userAcceptedboolean
MemoryCreateRequestobject
FieldTypeMeaningConstraint
titlerequiredstringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
structuredPayloadobject
sourceSessionIdstringmax 200 chars
importanceenumordinary, important
sensitivitystringmax 80 chars
retentionClassstringmax 80 chars
tagsarray<string>
MemoryVersionedActionRequestobject
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
MemoryEditRequestobject
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
titlestringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
tagsarray<string>
structuredPayloadobject
MemoryImportanceRequestobject
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
importancerequiredenumordinary, important
MemoryProposalResolutionRequestobject
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 1
actionrequiredenumapprove, edit_and_approve, dismiss
titlestringmax 240 chars
contentstringmax 12000 chars
categorystringmax 100 chars
tagsarray<string>
structuredPayloadobject
importanceenumordinary, important
MemoryPreferencesUpdateRequestobject
FieldTypeMeaningConstraint
expectedVersionrequiredinteger≥ 0
useSavedMemoryboolean
formationModeenumexplicit_only, ask_before_saving
showSaveNoticesboolean
showAnswerImpactboolean
MemoryExportRequestobject
FieldTypeMeaningConstraint
variantenumsafe_current_inventory, complete_personal_archive
queryobjectOptional Memory query for the safe current inventory export.
MemoryWorkPostureUpdateRequestobject
FieldTypeMeaningConstraint
requestedPosturerequiredstring
expectedVersionrequiredinteger≥ 0
ScheduledWorkProposalRequestobject
FieldTypeMeaningConstraint
workspaceIdrequiredstringmin 1 chars
requestrequiredstringmin 1 chars
defaultTimeZonestring
ScheduledWorkCreateRequestobject
FieldTypeMeaningConstraint
proposalrequiredScheduledWorkCharterProposal
acceptedByPrincipalIdrequiredstringMust equal the authenticated principal; the backend verifies this authority.min 1 chars
ScheduledWorkEditRequestobject
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
proposalrequiredScheduledWorkCharterProposal
acceptedByPrincipalIdrequiredstringMust equal the authenticated principal; the backend verifies this authority.min 1 chars
ScheduledWorkTransitionRequestobject
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
ScheduledWorkTestRequestobject
FieldTypeMeaningConstraint
expectedCharterVersionrequiredinteger≥ 1
idempotenceKeystring
ParallelCognitionProgrammeProjectionobjectWork-bound program projection. Backend-derived fields include program posture, branch denominator, branch settlement, cumulative economics, stopping posture, and fan-in/parent-synthesis posture.

Schema: object

MemoryProjectionFreshnessobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
staterequiredenumcomplete, delayed, partial, unavailable
readAvailablerequiredboolean
mutationAvailablerequiredboolean
observedAtrequiredstringdate-time
explanationrequiredstring
reasonCodesrequiredarray<string>
PersonalMemoryItemobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
memoryRefrequiredstring
versionrequiredinteger≥ 1
titlerequiredstring
contentrequiredstring
categoryrequiredenumpreference, personal_fact, boundary, directive, brief
staterequiredenumactive, needs_review, paused, stopped, replaced
importancerequiredenumordinary, important
authorityrequiredenumuser_authored, user_approved, current_user_correction, system_suggested
originrequiredobject
scoperequiredobject
influencerequiredobject
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
replacementobject
capabilitiesrequiredobject
MemoryPageobject
FieldTypeMeaningConstraint
hasMorerequiredboolean
nextCursorstring
MemoryLifecycleReceiptobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
actionrequiredenumkeep, pause, restore, stop, use_again, importance, …
memoryRefrequiredstring
expectedVersionrequiredinteger≥ 1
resultingVersionrequiredinteger≥ 1
stateBeforerequiredenumactive, needs_review, paused, stopped, replaced
stateAfterrequiredenumactive, needs_review, paused, stopped, replaced
importanceBeforerequiredenumordinary, important
importanceAfterrequiredenumordinary, important
occurredAtrequiredstringdate-time
idempotentReplayrequiredboolean
MemoryCorrectionReceiptobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
correctedMemoryRefrequiredstring
replacementMemoryRefrequiredstring
expectedVersionrequiredinteger≥ 1
resultingSourceVersionrequiredinteger≥ 1
replacementVersionrequiredinteger≥ 1
occurredAtrequiredstringdate-time
idempotentReplayrequiredboolean
MemoryProposalobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
proposalRefrequiredstring
versionrequiredinteger≥ 1
titlerequiredstring
contentrequiredstring
categoryrequiredstring
suggestedImportancerequiredenumordinary, important
inertrequiredboolean
sourceTyperequiredstring
reasonCodesrequiredarray<string>
originrequiredobject
scoperequiredobject
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
MemoryPreferencesobject
FieldTypeMeaningConstraint
useSavedMemoryrequiredboolean
formationModerequiredenumexplicit_only, ask_before_saving
showSaveNoticesrequiredboolean
showAnswerImpactrequiredboolean
versionrequiredinteger≥ 0
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
MemoryWorkPostureobject
FieldTypeMeaningConstraint
schemaVersionrequiredinteger
sourcerequiredstring
workRefrequiredstring
requestedPosturerequiredenumaccount_default, temporary, read_only, review_gated
versionrequiredinteger≥ 0
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
MemoryAnswerImpactReceiptobject
FieldTypeMeaningConstraint
schemaVersionrequiredinteger
sourcerequiredstring
answerRefrequiredstring
terminalEffectIdrequiredstring
terminalOutboxEventIdrequiredstring
workRefstring
settlementrequiredobject
requestedPosturerequiredenumaccount_default, temporary, read_only, review_gated
effectivePosturerequiredenumaccount_default, temporary, read_only, review_gated
outcomerequiredenummemory_helped, no_memory_helped
helpedShaperequiredarray<object>
consideredNotUsedrequiredarray<object>
heldBackrequiredarray<object>
suggestionsrequiredarray<object>
completenessrequiredenumcomplete, partial
nonClaimsrequiredarray<object>
MemoryProposalResolutionReceiptobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
authorityrequiredstring
actionrequiredenumapprove, edit_and_approve, dismiss
proposalRefrequiredstring
expectedVersionrequiredinteger≥ 1
proposalResultingVersionrequiredinteger≥ 1
proposalStateBeforerequiredstring
proposalStateAfterrequiredenumresolved, dismissed
consequencerequiredenumactive_memory_created, no_active_memory_created
memoryRefstring
memoryVersioninteger≥ 1
occurredAtrequiredstringdate-time
idempotentReplayrequiredboolean
nonClaimrequiredstring
MemoryProposalBatchDismissalReceiptobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
authorityrequiredstring
actionrequiredstring
proposalRefsrequiredarray<string>
countrequiredinteger≥ 0
consequencerequiredstring
occurredAtrequiredstringdate-time
idempotentReplayrequiredboolean
nonClaimrequiredstring
MemoryListResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
itemsrequiredarray<PersonalMemoryItem>
pagerequiredMemoryPage
queryrequiredobject
freshnessrequiredMemoryProjectionFreshness
MemoryItemResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
freshnessrequiredMemoryProjectionFreshness
MemoryItemCreateResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
createdrequiredboolean
idempotentReplayrequiredboolean
freshnessrequiredMemoryProjectionFreshness
MemoryMutationResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
receiptrequiredMemoryLifecycleReceipt
freshnessrequiredMemoryProjectionFreshness
MemoryCorrectionResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
itemrequiredPersonalMemoryItem
replacedItemrequiredPersonalMemoryItem
receiptrequiredMemoryCorrectionReceipt
freshnessrequiredMemoryProjectionFreshness
MemoryDeleteResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
memoryRefrequiredstring
deletedrequiredboolean
deletedAtrequiredstringdate-time
idempotentReplayrequiredboolean
freshnessrequiredMemoryProjectionFreshness
MemoryVersionsResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
memoryRefrequiredstring
versionsrequiredarray<object>
pagerequiredMemoryPage
freshnessrequiredMemoryProjectionFreshness
MemoryLinkCreateResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
linkTokenrequiredstring
createdAtrequiredstringdate-time
freshnessMemoryProjectionFreshness
MemoryProposalListResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
proposalsrequiredarray<MemoryProposal>
pagerequiredMemoryPage
queryrequiredobject
freshnessrequiredMemoryProjectionFreshness
MemoryProposalBatchDismissalResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
dismissedrequiredarray<object>
receiptrequiredMemoryProposalBatchDismissalReceipt
freshnessrequiredMemoryProjectionFreshness
MemoryProposalResolutionResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
resolutionrequiredobject
itemPersonalMemoryItem
receiptrequiredMemoryProposalResolutionReceipt
freshnessrequiredMemoryProjectionFreshness
MemoryPreferencesResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
preferencesrequiredMemoryPreferences
createdboolean
idempotentReplayboolean
freshnessrequiredMemoryProjectionFreshness
MemoryExportResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
schemaVersionrequiredstring
variantrequiredenumsafe_current_inventory, complete_personal_archive
exportedAtrequiredstringdate-time
countrequiredinteger≥ 0
queryrequiredobject
itemsrequiredarray<PersonalMemoryItem>
proposalsarray<MemoryProposal>
freshnessrequiredMemoryProjectionFreshness
MemoryWorkPostureGetResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
posturerequiredMemoryWorkPosture
persistedrequiredboolean
freshnessrequiredMemoryProjectionFreshness
MemoryWorkPosturePutResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
posturerequiredMemoryWorkPosture
createdrequiredboolean
idempotentReplayrequiredboolean
MemoryAnswerImpactResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
answerRefrequiredstring
receiptrequiredMemoryAnswerImpactReceipt
freshnessrequiredMemoryProjectionFreshness
ProjectMembershipobject
FieldTypeMeaningConstraint
schemarequiredstring
membershipIdrequiredstring
organisationIdrequiredstring
projectIdrequiredstring
userIdrequiredstring
rolerequiredenumowner, admin, developer, viewer
lifecyclerequiredenumactive, suspended, removed
revisionrequiredinteger≥ 1
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
ProjectMembershipListResponseobject
FieldTypeMeaningConstraint
datarequiredobject
ProjectMembershipUpsertRequestobject
FieldTypeMeaningConstraint
rolerequiredenumowner, admin, developer, viewer
ClientIssuerBindingReceiptobject
FieldTypeMeaningConstraint
clientrequiredClientDeveloper client registration. New clients remain pending and unusable until bound to the authorized OAuth issuer.
credentialIdrequiredstring | null
secretrequiredstring | nullReturned only when the authorized issuer creates a confidential-client credential. Treat as write-only secret material after receipt.
issuerrequiredstringAuthorized issuer selected by the backend adapter. The caller cannot supply or choose this value.uri
providerClientReferencerequiredstring
boundAtrequiredstringdate-time
ClientIssuerBindingResponseobject
FieldTypeMeaningConstraint
datarequiredClientIssuerBindingReceipt
ScheduledWorkScheduleoneOf

Schema: oneOf

ScheduledWorkBudgetobject
FieldTypeMeaningConstraint
maxRunsPerWindowrequirednumber≥ 0
windowMinutesrequirednumber≥ 0
maxAcquisitionsPerRunrequirednumber≥ 0
maxWallClockMsPerRunrequirednumber≥ 0
maxCostUnitsPerRunrequirednumber≥ 0
ScheduledWorkSourcePolicyobject
FieldTypeMeaningConstraint
requiredAuthorityrequiredstring
sourceSelectionPolicyrequiredstring
namedSourceIdsrequiredarray<string>
permittedDomainsrequiredarray<string>
openWebFallbackrequiredenumdeny, allow_after_named_sources_exhausted
ScheduledWorkCharterobject
FieldTypeMeaningConstraint
objectiverequiredstring
missionrequiredstring
sourcePolicyrequiredScheduledWorkSourcePolicy
taskProgramobjectPre-authorized cognitive program when present.
stoppingRulerequiredstring
ordinaryCognitionPolicyrequiredenumeligible_when_admitted_and_fresh, never_eligible
mutationPolicyrequiredstring
ScheduledWorkCharterProposalobject
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_charter_proposal.v1; underlying source migration is main-lane-owned.
proposalIdrequiredstring
principalIdrequiredstring
tenantIdrequiredstring
workspaceIdrequiredstring
requestrequiredstring
titlerequiredstring
kindrequiredenumscheduled_observation, condition_watch, research_cycle, manual_continuation
charterrequiredScheduledWorkCharter
schedulerequiredScheduledWorkSchedule
scheduleTimeZoneAssumedrequiredboolean
requiresUserReviewrequiredboolean
reviewReasonCodesrequiredarray<string>
reasonCodesrequiredarray<string>
compiledAtrequiredstringdate-time
digestrequiredstring
ScheduledWorkReadModelobject
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_read_model.v1; underlying source migration is main-lane-owned.
watchpointIdrequiredstring
titlerequiredstring
statusrequiredenumdraft, testing, active, paused, needs_attention, awaiting_approval, …
ownershiprequiredobject
charterrequiredobject
schedulerequiredScheduledWorkSchedule
lastRunobject
latestObservationobject
nextScheduledAtstringdate-time
capabilitiesrequiredobject
reasonCodesrequiredarray<string>
ScheduledWorkListProjectionobject
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_list_projection.v1; underlying source migration is main-lane-owned.
itemsrequiredarray<ScheduledWorkReadModel>
reasonCodesrequiredarray<string>
digestrequiredstring
ScheduledWorkRunSummaryobject
FieldTypeMeaningConstraint
runIdrequiredstring
invocationrequiredenummanual_test, manual_run, scheduled, condition_evaluation
outcomerequiredenumcompleted, no_material_change, authority_unmet, source_unavailable, stale, budget_exhausted, …
startedAtrequiredstringdate-time
settledAtrequiredstringdate-time
sourceObservationCountrequiredinteger≥ 0
artifactCountrequiredinteger≥ 0
reportCountrequiredinteger≥ 0
reasonCodesrequiredarray<string>
ScheduledWorkReportSummaryobject
FieldTypeMeaningConstraint
reportIdrequiredstring
artifactIdrequiredstring
runIdrequiredstring
titlerequiredstring
abstractrequiredstring
createdAtrequiredstringdate-time
observedAsOfrequiredstringdate-time
sourceObservationCountrequiredinteger≥ 0
retentionClassrequiredenumstandard, preserve_evidence, ephemeral
contentDigestrequiredstring
reasonCodesrequiredarray<string>
ScheduledWorkObservationobject
FieldTypeMeaningConstraint
observationIdrequiredstring
runIdrequiredstring
sourceIdrequiredstring
sourceLocatorrequiredstring
contentDigestrequiredstring
observedAtrequiredstringdate-time
expiresAtstringdate-time
authoritystring
admissionstring
freshnessstring
reasonCodesrequiredarray<string>
ScheduledWorkDetailProjectionobject
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_detail_projection.v1; underlying source migration is main-lane-owned.
watchpointrequiredobject
readModelrequiredScheduledWorkReadModel
lifecycleControlsrequiredobject
runHistoryrequiredarray<ScheduledWorkRunSummary>
observationJournalrequiredarray<ScheduledWorkObservation>
artifactIndexobject
reportsrequiredarray<ScheduledWorkReportSummary>
chroniclearray<object>
ordinaryCognitionContributionobject
reasonCodesrequiredarray<string>
digestrequiredstring
ScheduledWorkProposalProjectionobject
FieldTypeMeaningConstraint
schemaVersionrequiredstringCanonical public identity is indwel.scheduled_work_charter_proposal_projection.v1; underlying source migration is main-lane-owned.
proposalrequiredScheduledWorkCharterProposal
reasonCodesrequiredarray<string>
digestrequiredstring
ScheduledWorkArchiveResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
watchpointIdrequiredstring
statusrequiredstring
charterVersionrequiredinteger≥ 1
ScheduledWorkTestResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
watchpointIdrequiredstring
runIdrequiredstring
outcomerequiredstring
reportIdsrequiredarray<string>
charterVersionrequiredinteger≥ 1
activationEligiblerequiredboolean
ScheduledWorkReportListResponseobject
FieldTypeMeaningConstraint
watchpointIdrequiredstring
reportsrequiredarray<ScheduledWorkReportSummary>
ScheduledWorkReportCitationobject
FieldTypeMeaningConstraint
sourceIdrequiredstring
sourceLocatorrequiredstring
observedAtrequiredstringdate-time
contentDigestrequiredstring
ScheduledWorkReportobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
reportIdrequiredstring
artifactIdrequiredstring
watchpointIdrequiredstring
runIdrequiredstring
titlerequiredstring
bodyMarkdownrequiredstring
abstractrequiredstring
createdAtrequiredstringdate-time
observedAsOfrequiredstringdate-time
sourceObservationIdsrequiredarray<string>
citationItemsrequiredarray<ScheduledWorkReportCitation>
evidentiaryPosturerequiredstring
retentionClassrequiredenumstandard, preserve_evidence, ephemeral
contentDigestrequiredstring
reasonCodesrequiredarray<string>
digestrequiredstring
ScheduledWorkReportProjectionobject
FieldTypeMeaningConstraint
schemaVersionrequiredstring
reportrequiredScheduledWorkReport
reasonCodesrequiredarray<string>
digestrequiredstring
SessionSummaryobjectCustomer-safe Session metadata. Raw Memory profile, Cognitive Act/Epoch, packet-storage, and Objective authority fields are not public Session schema.
FieldTypeMeaningConstraint
sessionIdrequiredstringuuid
namestring
pinnedboolean
createdAtrequiredstringdate-time
updatedAtrequiredstringdate-time
workspaceIdstring
missionIdstring
workPostureenumconversation, work
parentSessionIdstringuuid
successorSessionIdsarray<string>
continuityStatusenumnone, prepared, continued, imported
SessionDirectoryResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
sessionsrequiredarray<SessionSummary>
SessionRenameRequestobject
FieldTypeMeaningConstraint
namerequiredstringmin 1 chars
SessionPinRequestobject
FieldTypeMeaningConstraint
actionrequiredstring
pinnedrequiredboolean
SessionMutationRequestoneOfCanonical public Session mutations are rename and pin/unpin. Source-retained promote and relate action variants are compatibility transitions pending canonical Work representation and are not first-class SDK request variants.

Schema: oneOf

SessionMutationResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
namestring
pinnedboolean
updatedAtrequiredstringdate-time
SessionDeleteResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
ContinuityProjectionobjectCustomer-safe projection from server-settled Continuity authority. Raw prompt projections, constitutional patches, graph-node identities, Cognitive Act/Epoch structures, and settlement chronicles are excluded from the public schema.
FieldTypeMeaningConstraint
packetIdrequiredstring
staterequiredstring
parentSessionIdrequiredstringuuid
successorSessionIdstringuuid
objectiveobjectCustomer-safe Objective and revision projection.
frontierobject
decisionsarray<object>
constraintsarray<object>
openLoopsarray<object>
commitmentsarray<object>
evidencePostureobject
validationPostureobject
activeSourceRefsarray<string>
revalidationQueuearray<object>
receiptStatusstring
reasonCodesrequiredarray<string>
ContinuityReadRequestobject
FieldTypeMeaningConstraint
packetIdstringOptional identity check against the server-settled packet. Supplying a packet never establishes Continuity authority.
ContinuityResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
continuityrequiredContinuityProjectionCustomer-safe projection from server-settled Continuity authority. Raw prompt projections, constitutional patches, graph-node identities, Cognitive Act/Epoch structures, and settlement chronicles are excluded from the public schema.
ContinueSessionRequestobject
FieldTypeMeaningConstraint
packetIdstringOptional identity check only; Continuity state remains server-settled.
namestringOptional display name for a newly created successor Session.
ContinueSessionResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
parentSessionIdrequiredstringuuid
successorSessionIdrequiredstringuuid
continuityrequiredContinuityProjectionCustomer-safe projection from server-settled Continuity authority. Raw prompt projections, constitutional patches, graph-node identities, Cognitive Act/Epoch structures, and settlement chronicles are excluded from the public schema.
StartSessionCompatibilityRequestobject
FieldTypeMeaningConstraint
namestring
titlestring
workPostureenumconversation, work, auto
tenantIdstringScope proposal only. Backend principal authority remains decisive.
workspaceIdstringScope proposal only.
missionIdstringScope proposal only.
StartSessionCompatibilityResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
namerequiredstring
workPosturerequiredenumconversation, work
workspaceIdstring
missionIdstring
ConversationChatRequestobject
FieldTypeMeaningConstraint
sessionIdrequiredstringuuid
promptrequiredstringmin 1 chars
attachmentIdsarray<string>
idempotencyKeystringCompatibility body form; the Idempotency-Key header is also accepted by the current transport.
ConversationMessageobject
FieldTypeMeaningConstraint
rolerequiredenumuser, assistant, system
contentrequiredstring
metaobject
ConversationChatResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
sessionIdrequiredstringuuid
messagesrequiredarray<ConversationMessage>
metaobjectCompatibility transport metadata. Canonical Run/receipt truth is documented under the Run API.
SessionHistoryResponseobject
FieldTypeMeaningConstraint
okrequiredboolean
contractVersionrequiredstring
sourceOfTruthrequiredstring
sessionIdrequiredstringuuid
messagesrequiredarray<ConversationMessage>
quarantinedAssistantCountrequiredinteger≥ 0
CaseRunProjectionobject
FieldTypeMeaningConstraint
runIdrequiredstring
contractHashrequiredstring
lifecycleStaterequiredenumsettled_success, settled_failure, settled_timeout, settled_cancelled
statusrequiredenumcomplete, failed, timed_out, cancelled
answerstring
renderManifestrequiredobject
createdAtrequiredstringdate-time
CaseRunResponseobject
FieldTypeMeaningConstraint
datarequiredobject