> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cybr.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> These docs cover learner integrations through Hosted Lab Pages, the SDK, and the REST API. Content management is outside this integration scope.
> Read the setup page for the chosen approach before implementing it. Keep organization API keys and hosted mint secrets on the server.
> The public SDK is coming soon. Check the SDK quickstart for current availability. Do not invent installation commands or direct readers to a private package.
> Cybr provides completion tracking and CTF verification. The integrating platform decides whether to award points.

# Get lab

> Returns public content and optional learner-specific completion. SDK: `labs.get(labId, { learnerId })`.

SDK: `labs.get(labId, { learnerId })`.


## OpenAPI

````yaml assets/openapi.json GET /api/v2/labs/{labId}
openapi: 3.1.0
info:
  title: Cybr Labs public integration API
  version: 0.0.15
  description: SDK and REST integration contract. Organization keys remain on the server.
  contact:
    email: support@cybr.com
servers:
  - url: https://api.cybr.com
security:
  - OrganizationKey: []
tags:
  - name: Labs
    description: Content, progress, discussions, and resource links.
  - name: Deployments
    description: Lab environments and terminal sessions.
paths:
  /api/v2/labs/{labId}:
    get:
      tags:
        - Labs
      summary: Get lab
      description: >-
        Returns public content and optional learner-specific completion. SDK:
        `labs.get(labId, { learnerId })`.
      operationId: get_lab
      parameters:
        - name: labId
          in: path
          required: true
          schema:
            type: string
        - name: learnerId
          in: query
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabDetails'
              example:
                id: lab_id
                name: Example lab
                slug: example-lab
                description: An isolated exercise.
                provider: aws
                timeLimit: 30
                estimatedLaunchSeconds: 120
                ctf: true
                free: true
                createdAt: '2026-01-01T00:00:00Z'
                updatedAt: '2026-01-01T00:00:00Z'
                bannerUrl: null
                webTerminal: true
                guide: null
                resources: null
                diagrams: []
                videos: []
                writeups: []
                completed: false
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Access denied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Resource not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        default:
          description: Other API error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    LabDetails:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        description:
          anyOf:
            - type: string
            - type: 'null'
        provider:
          enum:
            - aws
            - azure
        timeLimit:
          anyOf:
            - type: integer
            - type: 'null'
        estimatedLaunchSeconds:
          anyOf:
            - type: integer
            - type: 'null'
        ctf:
          type: boolean
        free:
          type: boolean
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        bannerUrl:
          anyOf:
            - type: string
            - type: 'null'
        webTerminal:
          type: boolean
        guide:
          anyOf:
            - $ref: '#/components/schemas/Guide'
            - type: 'null'
        resources:
          anyOf:
            - type: array
              items:
                $ref: '#/components/schemas/ResourceLink'
            - type: 'null'
        diagrams:
          type: array
          items:
            $ref: '#/components/schemas/Diagram'
        videos:
          type: array
          items:
            $ref: '#/components/schemas/Video'
        writeups:
          type: array
          items:
            $ref: '#/components/schemas/Writeup'
        completed:
          type: boolean
      required:
        - id
        - name
        - slug
        - description
        - provider
        - timeLimit
        - estimatedLaunchSeconds
        - ctf
        - free
        - createdAt
        - updatedAt
        - bannerUrl
        - webTerminal
        - guide
        - resources
        - diagrams
        - videos
        - writeups
        - completed
    Error:
      type: object
      properties:
        message:
          type: string
        retryAfter:
          type: number
        activeCount:
          type: integer
        limit:
          type: integer
        errors:
          type: array
          items:
            type: string
      required:
        - message
    Guide:
      type: object
      properties:
        version:
          const: 1
          type: integer
        objectives:
          type: array
          items:
            type: string
        scenario:
          type: string
        tasks:
          type: array
          items:
            $ref: '#/components/schemas/GuideTask'
        completion:
          anyOf:
            - type: object
              properties:
                title:
                  type: string
                body:
                  type: string
              required:
                - title
                - body
            - type: 'null'
      required:
        - version
        - objectives
        - scenario
        - tasks
        - completion
    ResourceLink:
      type: object
      properties:
        id:
          type: string
        type:
          const: link
          type: string
        title:
          type: string
        url:
          type: string
          format: uri
        description:
          type: string
      required:
        - id
        - type
        - title
        - url
    Diagram:
      type: object
      properties:
        id:
          type: string
        kind:
          enum:
            - image
            - html
        url:
          type: string
          format: uri
        title:
          type: string
      required:
        - id
        - kind
        - url
    Video:
      type: object
      properties:
        id:
          type: string
        provider:
          enum:
            - vimeo
            - youtube
        videoId:
          type: string
        hash:
          type: string
        title:
          type: string
        startSeconds:
          type: integer
      required:
        - id
        - provider
        - videoId
    Writeup:
      type: object
      properties:
        id:
          type: string
        url:
          type: string
          format: uri
        title:
          type: string
        author:
          type: string
        kind:
          enum:
            - article
            - video
      required:
        - id
        - kind
        - title
        - author
        - url
    GuideTask:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        body:
          type: string
        question:
          anyOf:
            - $ref: '#/components/schemas/GuideQuestion'
            - type: 'null'
        flag:
          type: boolean
      required:
        - id
        - title
        - body
        - question
        - flag
    GuideQuestion:
      type: object
      properties:
        type:
          enum:
            - text
            - true_false
        text:
          type: string
        hint:
          type: string
        placeholder:
          type: string
      required:
        - type
        - text
  securitySchemes:
    OrganizationKey:
      type: apiKey
      in: header
      name: X-API-Key

````