Certifyos Agent Runs API

Pass-through proxy to the agentOS application-release agent

Operations 13

POST /agent/practitioners/{practitionerId}/runs Start an application-release run for a practitioner #
GET /agent/runs/{runId} Get an agentOS run record #
POST /agent/runs/{runId}/answers Submit answers to one or more open questions #
GET /agent/runs/{runId}/events Get a run's activity log, cursor-paginated #
GET /agent/runs/{runId}/proposals List a run's proposals plus its handoff state #
POST /agent/runs/{runId}/proposals/approve-all Approve every pending proposal on a run #
POST /agent/runs/{runId}/proposals/deny-all Deny every pending proposal on a run #
POST /agent/runs/{runId}/proposals/{proposalId}/approve Approve one proposal #
POST /agent/runs/{runId}/proposals/{proposalId}/deny Deny one proposal #
GET /agent/runs/{runId}/questions Get a run's current suspension/open questions #
POST /agent/runs/{runId}/resume Resume a suspended run after its questions are answered #
POST /agent/runs/{runId}/take-over Claim human ownership of a live run #
POST /agent/workflows/agent-state Batch agentState lookup by workflow/practitioner ids #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/certifyos:certifyos-agentruns-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

certifyos-agentruns-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: API for Certify application
  title: Certify API Layer Agent Runs API
  version: 1.0.0
servers:
- url: http://localhost:9000
  description: Local Development Server
- url: https://api-service.staging.certifyos.com
  description: Staging Server
- url: https://api-service.internal.certifyos.com
  description: Internal Server
- url: https://api-service.test.certifyos.com
  description: Test Server
- url: https://api-service.demo.certifyos.com
  description: Demo Server
- url: https://api-service.certifyos.com
  description: Production Server
tags:
- name: AgentRuns
  description: Pass-through proxy to the agentOS application-release agent
paths:
  /agent/practitioners/{practitionerId}/runs:
    post:
      summary: Start an application-release run for a practitioner
      operationId: agentRunsStartRun
      tags:
      - AgentRuns
      parameters:
      - name: practitionerId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id, or the request body is not a valid JSON object
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured) or agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token); api-layer never called agentOS'
          content:
            application/json: {}
        '202':
          description: Accepted - agentOS's response, passed through unchanged; the run itself proceeds asynchronously
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, credentialingWorkflowId is missing/blank, credentialingWorkflowId does not belong to the caller's tenant, credentialingWorkflowId does not belong to the path practitionerId, or the practitioner id is unknown to agentOS
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. this practitioner already has a run in progress)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. an invalid state in statesToCredential)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}:
    get:
      summary: Get an agentOS run record
      operationId: agentRunsGetRun
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on this run fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/answers:
    post:
      summary: Submit answers to one or more open questions
      operationId: agentRunsSubmitAnswers
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. the run is not currently suspended awaiting answers)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. an answer does not match an open question, or the run's state is stale)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/events:
    get:
      summary: Get a run's activity log, cursor-paginated
      operationId: agentRunsGetRunEvents
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: cursor
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/proposals:
    get:
      summary: List a run's proposals plus its handoff state
      operationId: agentRunsGetRunProposals
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: status
        in: query
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/proposals/approve-all:
    post:
      summary: Approve every pending proposal on a run
      operationId: agentRunsApproveAllProposals
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. no proposals are currently pending)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. the run's state is stale relative to this decision)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/proposals/deny-all:
    post:
      summary: Deny every pending proposal on a run
      operationId: agentRunsDenyAllProposals
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. no proposals are currently pending)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. the run's state is stale relative to this decision)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/proposals/{proposalId}/approve:
    post:
      summary: Approve one proposal
      operationId: agentRunsApproveProposal
      tags:
      - AgentRuns
      parameters:
      - name: proposalId
        in: path
        required: true
        schema:
          type: string
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id or proposal_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. the proposal is no longer pending)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. the run's state is stale relative to this decision)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/proposals/{proposalId}/deny:
    post:
      summary: Deny one proposal
      operationId: agentRunsDenyProposal
      tags:
      - AgentRuns
      parameters:
      - name: proposalId
        in: path
        required: true
        schema:
          type: string
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id or proposal_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. the proposal is no longer pending)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. the run's state is stale relative to this decision)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/questions:
    get:
      summary: Get a run's current suspension/open questions
      operationId: agentRunsGetQuestions
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/resume:
    post:
      summary: Resume a suspended run after its questions are answered
      operationId: agentRunsResume
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. the run is not currently suspended)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. open questions remain unanswered)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/runs/{runId}/take-over:
    post:
      summary: Claim human ownership of a live run
      operationId: agentRunsTakeOver
      tags:
      - AgentRuns
      parameters:
      - name: runId
        in: path
        required: true
        schema:
          type: string
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured), agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token), or agentos_credential_rejected (agentOS rejected api-layer''s own bearer token, after one retry with a freshly fetched credential, on the tenant-ownership precheck fetch)'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: Not Found - agentOS integration is off, this tenant is not enrolled for the credentialing agent, the run belongs to a different tenant, or agentOS itself has no record of this run_id
          content:
            application/json: {}
        '409':
          description: Conflict - agentOS's response, passed through unchanged (e.g. the run is already taken over, or is no longer live)
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. the run's state is stale relative to this action)
          content:
            application/json: {}
      security:
      - jwt: []
  /agent/workflows/agent-state:
    post:
      summary: Batch agentState lookup by workflow/practitioner ids
      operationId: agentRunsGetAgentStateBatch
      tags:
      - AgentRuns
      parameters:
      - name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: string
        required: true
      responses:
        '400':
          description: Bad Request - missing or blank tenant-id, or the request body is not a well-formed JSON object with a non-empty workflowIds array of at most 200 string ids (the frontend's own agent-service.getWorkflowsAgentState never sends anything else -- see requireWorkflowIds's javadoc)
          content:
            application/json: {}
        '502':
          description: Bad Gateway - a network/timeout failure reaching agentOS, or a genuine 5xx from agentOS itself
          content:
            application/json: {}
        '503':
          description: 'Service Unavailable - agentos_not_configured (no credential configured) or agentos_credential_unavailable (m2m mode: Auth0 unreachable and no still-valid cached token); api-layer never called agentOS'
          content:
            application/json: {}
        '200':
          description: OK - agentOS's response, passed through unchanged
          content:
            application/json: {}
        '404':
          description: 'Not Found - agentOS integration is off, this tenant is not enrolled (tenant-level: the caller''s own enrollment in the section''s user list is not checked on this route, unlike every other agent-runs route -- see CredentialingAgentConfigGate.isSectionEnabledForTenant), or a workflowIds entry does not belong to the caller''s tenant'
          content:
            application/json: {}
        '422':
          description: Unprocessable Entity - agentOS's response, passed through unchanged (e.g. too_many_ids or invalid_ids)
          content:
            application/json: {}
      security:
      - jwt: []
components:
  securitySchemes:
    jwt:
      type: http
      description: JWT Authentication - Provide only the raw token without Bearer prefix
      scheme: bearer
      bearerFormat: JWT
x-provenance:
  method: harvested
  publisher: Certifyos
  source: https://api-service.internal.certifyos.com/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)