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

# Create a preview link

> A signed link that opens one port of the sandbox in a browser until it
expires. The edge exchanges it for a cookie scoped to that port's host.
Port 49983 (envd) cannot be shared. Needs `sandboxes:use`.




## OpenAPI

````yaml /compute/api-reference/anona-openapi.yaml post /v1/sandboxes/{sandboxID}/preview-links
openapi: 3.0.3
info:
  title: Anona Compute API (Anona routes)
  version: 0.1.0
  description: >
    Routes the Anona Compute gateway serves next to the E2B-compatible API:

    live-view viewer tokens, SSH certificates, network policy, the credential

    vault, usage and billing, webhooks and telemetry export, thumbnails, preview
    links,

    public ports, pause when idle, template builds, and API key management.


    Written from the gateway handlers
    (`gateway/internal/stream/token/handlers.go`,

    `gateway/internal/sshca/handler.go`,
    `gateway/internal/handlers/apikeys/apikeys.go`)

    and checked against a running gateway by
    `docs-site/scripts/verify_openapi.py`.
servers:
  - url: https://api.compute.anonalabs.com
security:
  - ApiKeyAuth: []
  - BearerAuth: []
tags:
  - name: Live view
  - name: SSH
  - name: Sandbox access
  - name: Templates
  - name: Network
  - name: Credential vault
  - name: Usage and billing
  - name: Webhooks and telemetry
  - name: API keys
  - name: Service
paths:
  /v1/sandboxes/{sandboxID}/preview-links:
    post:
      tags:
        - Sandbox access
      summary: Create a preview link
      description: |
        A signed link that opens one port of the sandbox in a browser until it
        expires. The edge exchanges it for a cookie scoped to that port's host.
        Port 49983 (envd) cannot be shared. Needs `sandboxes:use`.
      operationId: createPreviewLink
      parameters:
        - $ref: '#/components/parameters/sandboxID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - port
              properties:
                port:
                  type: integer
                  minimum: 1
                  maximum: 65535
                ttlSeconds:
                  type: integer
                  minimum: 60
                  maximum: 86400
                  default: 3600
            example:
              port: 3000
              ttlSeconds: 900
      responses:
        '201':
          description: The link.
          content:
            application/json:
              schema:
                type: object
                required:
                  - url
                  - sandboxID
                  - port
                  - expiresAt
                properties:
                  url:
                    type: string
                    format: uri
                  sandboxID:
                    type: string
                  port:
                    type: integer
                  expiresAt:
                    type: string
                    format: date-time
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  parameters:
    sandboxID:
      name: sandboxID
      in: path
      required: true
      schema:
        type: string
  responses:
    BadRequest:
      description: The request body is invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The key's scopes or the caller's role do not allow this.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: >-
        Not found, or not yours (the answer is the same, so IDs cannot be
        probed).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: integer
          description: The HTTP status code.
        message:
          type: string
        error_code:
          type: string
          description: >-
            Machine-readable reason, on some errors (for example
            `invalid_request`).
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: An Anona Compute API key (`e2b_` followed by lowercase hex).
    BearerAuth:
      type: http
      scheme: bearer
      description: 'The same API key, sent as `Authorization: Bearer e2b_...`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.