> ## Documentation Index
> Fetch the complete documentation index at: https://oma-codex-339-workspace-permissions.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Record Heartbeat

> Record Heartbeat through the OMA API.

<Info>Every request requires `?beta=true`.</Info>


## OpenAPI

````yaml /openapi/oma.en.json post /v1/environments/{environment_id}/work/{work_id}/heartbeat
openapi: 3.1.0
info:
  title: OMA API Reference
  version: 1.0.0
  description: Open Managed Agents application API reference.
servers:
  - url: http://localhost:38080
    description: Local OMA server
security:
  - omaApiKey: []
  - omaBearer: []
paths:
  /v1/environments/{environment_id}/work/{work_id}/heartbeat:
    post:
      summary: Record Heartbeat
      description: >-
        Note: these endpoints are called automatically by the pre-built
        environment worker provided in the SDKs and CLI, for orchestrating
        sessions with self-hosted sandbox environments. They are included here
        as a reference; you do not need to invoke them directly.


        Record a heartbeat for a work item to maintain the lease.
      operationId: >-
        beta_record_heartbeat_v1_environments__environment_id__work__work_id__heartbeat_post
      parameters:
        - name: beta
          in: query
          required: true
          description: Selects the beta API contract for this endpoint. Must be `true`.
          schema:
            type: boolean
            enum:
              - true
        - name: environment_id
          in: path
          required: true
          schema:
            type: string
            title: Environment Id
          example: env_011CZkZ9X2dpNyB7HsEFoRfW
        - name: work_id
          in: path
          required: true
          schema:
            type: string
            title: Work Id
        - name: desired_ttl_seconds
          in: query
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: Desired TTL in seconds
            title: Desired Ttl Seconds
          description: Desired TTL in seconds
        - name: expected_last_heartbeat
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Expected last_heartbeat for conditional update (optimistic
              concurrency). Use literal 'NO_HEARTBEAT' to claim an unclaimed
              lease (first heartbeat). For subsequent heartbeats, echo the
              server's previous last_heartbeat value exactly. Returns 412
              Precondition Failed if the actual value doesn't match.
            title: Expected Last Heartbeat
          description: >-
            Expected last_heartbeat for conditional update (optimistic
            concurrency). Use literal 'NO_HEARTBEAT' to claim an unclaimed lease
            (first heartbeat). For subsequent heartbeats, echo the server's
            previous last_heartbeat value exactly. Returns 412 Precondition
            Failed if the actual value doesn't match.
          examples:
            first_claim:
              summary: First heartbeat (claim unclaimed lease)
              value: NO_HEARTBEAT
            subsequent:
              summary: Subsequent heartbeat (echo server's value)
              value: '2026-05-14T10:30:45.123456Z'
        - name: anthropic-beta
          in: header
          required: false
          schema:
            type: string
            items:
              type: string
            description: >-
              Optional header to specify the beta version(s) you want to use.


              To use multiple betas, use a comma separated list like
              `beta1,beta2` or specify the header multiple times for each beta.
            title: Anthropic-Beta
            x-stainless-override-schema:
              x-stainless-param: betas
              x-stainless-extend-default: true
              type: array
              description: Optional header to specify the beta version(s) you want to use.
              items:
                $ref: '#/components/schemas/AnthropicBeta'
            x-default: managed-agents-2026-04-01
          description: >-
            Optional header to specify the beta version(s) you want to use.


            To use multiple betas, use a comma separated list like `beta1,beta2`
            or specify the header multiple times for each beta.
        - name: anthropic-version
          in: header
          required: false
          schema:
            type: string
            description: |-
              The version of the OMA API you want to use.

              Read more about versioning and our version history here.
            title: Anthropic-Version
          description: |-
            The version of the OMA API you want to use.

            Read more about versioning and our version history here.
        - name: authorization
          in: header
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            title: Authorization
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BetaSelfHostedWorkHeartbeatResponse'
        4XX:
          description: |-
            Error response.

            See our errors documentation for more details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BetaErrorResponse'
components:
  schemas:
    BetaSelfHostedWorkHeartbeatResponse:
      properties:
        last_heartbeat:
          type: string
          title: Last Heartbeat
          description: RFC 3339 timestamp of the actual heartbeat from DB
        lease_extended:
          type: boolean
          title: Lease Extended
          description: Whether the heartbeat succeeded in extending the lease
        state:
          type: string
          enum:
            - queued
            - starting
            - active
            - stopping
            - stopped
          title: State
          description: Current state of the work item (active/stopping/stopped)
        ttl_seconds:
          type: integer
          title: Ttl Seconds
          description: Effective TTL applied to the lease
        type:
          type: string
          const: work_heartbeat
          title: Type
          description: The type of response
          default: work_heartbeat
      type: object
      required:
        - last_heartbeat
        - lease_extended
        - state
        - ttl_seconds
        - type
      title: SelfHostedWorkHeartbeatResponse
      description: Response after recording a heartbeat for a work item.
    BetaErrorResponse:
      properties:
        error:
          discriminator:
            mapping:
              api_error:
                $ref: '#/components/schemas/BetaAPIError'
              authentication_error:
                $ref: '#/components/schemas/BetaAuthenticationError'
              billing_error:
                $ref: '#/components/schemas/BetaBillingError'
              invalid_request_error:
                $ref: '#/components/schemas/BetaInvalidRequestError'
              not_found_error:
                $ref: '#/components/schemas/BetaNotFoundError'
              overloaded_error:
                $ref: '#/components/schemas/BetaOverloadedError'
              permission_error:
                $ref: '#/components/schemas/BetaPermissionError'
              rate_limit_error:
                $ref: '#/components/schemas/BetaRateLimitError'
              timeout_error:
                $ref: '#/components/schemas/BetaGatewayTimeoutError'
            propertyName: type
          oneOf:
            - $ref: '#/components/schemas/BetaInvalidRequestError'
            - $ref: '#/components/schemas/BetaAuthenticationError'
            - $ref: '#/components/schemas/BetaBillingError'
            - $ref: '#/components/schemas/BetaPermissionError'
            - $ref: '#/components/schemas/BetaNotFoundError'
            - $ref: '#/components/schemas/BetaRateLimitError'
            - $ref: '#/components/schemas/BetaGatewayTimeoutError'
            - $ref: '#/components/schemas/BetaAPIError'
            - $ref: '#/components/schemas/BetaOverloadedError'
          title: Error
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          title: Request Id
        type:
          const: error
          default: error
          title: Type
          type: string
      required:
        - error
        - request_id
        - type
      title: ErrorResponse
      type: object
    BetaAPIError:
      properties:
        message:
          default: Internal server error
          title: Message
          type: string
        type:
          const: api_error
          default: api_error
          title: Type
          type: string
      required:
        - message
        - type
      title: APIError
      type: object
    BetaAuthenticationError:
      properties:
        message:
          default: Authentication error
          title: Message
          type: string
        type:
          const: authentication_error
          default: authentication_error
          title: Type
          type: string
      required:
        - message
        - type
      title: AuthenticationError
      type: object
    BetaBillingError:
      properties:
        message:
          default: Billing error
          title: Message
          type: string
        type:
          const: billing_error
          default: billing_error
          title: Type
          type: string
      required:
        - message
        - type
      title: BillingError
      type: object
    BetaInvalidRequestError:
      properties:
        message:
          default: Invalid request
          title: Message
          type: string
        type:
          const: invalid_request_error
          default: invalid_request_error
          title: Type
          type: string
      required:
        - message
        - type
      title: InvalidRequestError
      type: object
    BetaNotFoundError:
      properties:
        message:
          default: Not found
          title: Message
          type: string
        type:
          const: not_found_error
          default: not_found_error
          title: Type
          type: string
      required:
        - message
        - type
      title: NotFoundError
      type: object
    BetaOverloadedError:
      properties:
        message:
          default: Overloaded
          title: Message
          type: string
        type:
          const: overloaded_error
          default: overloaded_error
          title: Type
          type: string
      required:
        - message
        - type
      title: OverloadedError
      type: object
    BetaPermissionError:
      properties:
        message:
          default: Permission denied
          title: Message
          type: string
        type:
          const: permission_error
          default: permission_error
          title: Type
          type: string
      required:
        - message
        - type
      title: PermissionError
      type: object
    BetaRateLimitError:
      properties:
        message:
          default: Rate limited
          title: Message
          type: string
        type:
          const: rate_limit_error
          default: rate_limit_error
          title: Type
          type: string
      required:
        - message
        - type
      title: RateLimitError
      type: object
    BetaGatewayTimeoutError:
      properties:
        message:
          default: Request timeout
          title: Message
          type: string
        type:
          const: timeout_error
          default: timeout_error
          title: Type
          type: string
      required:
        - message
        - type
      title: GatewayTimeoutError
      type: object
  securitySchemes:
    omaApiKey:
      type: apiKey
      in: header
      name: X-Api-Key
      description: OMA workspace API key.
      x-default: sk-ant-local-default
    omaBearer:
      type: http
      scheme: bearer
      description: OMA workspace API key sent as a bearer token.

````