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

# Create public URL

> Serve a port on a computer at an https address.

Makes `https://<name>-<tail>.orgo.dev` serve a port on the computer. See [Public URLs](https://docs.orgo.ai/guides/public-urls.md).

Read the address from `url` in the answer. Orgo adds 4 characters after the name, so it can't be known in advance. Leave out `name` and Orgo picks one.

The app must listen on `0.0.0.0`, not `127.0.0.1`. Each port gets one URL: a second create for the same port answers `409` `PORT_TAKEN` with the existing URL in `public_url`.

Needs a paid plan or credits you've bought.


## OpenAPI

````yaml POST /computers/{id}/public-urls
openapi: 3.1.0
info:
  title: Orgo API
  description: >-
    Launch cloud computers that AI agents can control and interact with. Create
    workspaces, provision computers, and control them programmatically.
  version: 2.0.0
  contact:
    name: Orgo Support
    email: contact@orgo.ai
    url: https://orgo.ai
servers:
  - url: https://www.orgo.ai/api
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Support
    description: >-
      Orgo’s support agent, for programs: ask how to do something in Orgo and
      get an answer with full URLs and copyable commands.
  - name: Account
    description: >-
      Account capacity: how many computers an account may run, and adding or
      giving back more.
  - name: Agent accounts
    description: >-
      Accounts an AI agent makes for itself, and the claim link a person uses to
      take one over.
  - name: Clients
    description: >-
      Run Orgo for your clients from your own app: a workspace and scoped key
      each, billed to you or to them.
  - name: Workspaces
    description: Organize computers into named workspaces
  - name: Computers
    description: Provision and manage virtual computers
  - name: Public URLs
    description: Share an app running on a computer at an https address on orgo.dev.
  - name: Computer Lifecycle
    description: Start, stop, and restart computers
  - name: Computer Actions
    description: Control mouse, keyboard, and execute commands
  - name: Screens
    description: >-
      More than one desktop on a single computer. Each screen is its own X
      server with its own cursor and window manager, so an agent working on one
      cannot disturb another.
  - name: Files
    description: Upload and download files
  - name: Templates
    description: Author, build, and launch reproducible computers from templates
  - name: Chat
    description: Run an agent on a computer through OpenAI-compatible chat completions.
  - name: Workflows
    description: >-
      Routines that run the same way every time: a start, then steps. Make them
      from plain words or lines, check them, run them and follow their runs (in
      preview).
paths:
  /computers/{id}/public-urls:
    post:
      tags:
        - Public URLs
      summary: Create public URL
      description: >-
        Makes `https://<name>-<tail>.orgo.dev` serve a port on the computer to
        anyone with the link. Read the address from the answer: Orgo adds a 4
        character tail to the name, and picks another tail if the name is in
        use. Your app must listen on `0.0.0.0`, not `127.0.0.1`. Needs a paid
        plan or bought credits, and the **Computers** write permission.
      operationId: createPublicUrl
      parameters:
        - name: id
          in: path
          required: true
          description: Computer ID. Accepts the computer's UUID or its `instance_id`.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePublicUrlRequest'
            example:
              port: 3000
              name: cool-thing
      responses:
        '201':
          description: Created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicUrl'
              example:
                id: 6f1c2a7e-3b9d-4c1a-9e2f-0a1b2c3d4e5f
                url: https://cool-thing-x7k2.orgo.dev
                hostname: cool-thing-x7k2.orgo.dev
                label: cool-thing-x7k2
                port: 3000
                created_at: '2026-10-05T18:00:00.000Z'
                protected: false
        '400':
          description: >-
            `INVALID_PORT`: a port outside 1 to 65535 or one the computer uses
            itself. `INVALID_NAME`: a name that breaks the rules, or both `name`
            and `label` sent. `INVALID_LABEL`: the same, sent as `label`.
            `PUBLIC_URLS_UNSUPPORTED`: the computer is not Linux or Windows.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: >-
                  Port 8080 is used by the computer itself and cannot be shared.
                  Run your app on another port.
                code: INVALID_PORT
        '401':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            `UPGRADE_REQUIRED`: the account has no paid plan or bought credits.
            `HOSTING_BLOCKED`: Orgo support turned off publishing for the
            account. `agent_account_unclaimed`: an agent's account no person has
            claimed yet. Also returned without a code for no access or view-only
            access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: >-
                  Public URLs need a paid plan or credits you’ve bought. Upgrade
                  your plan or add credits, then try again.
                code: UPGRADE_REQUIRED
        '404':
          description: >-
            Computer not found, or public URLs are off for your account (no
            `code`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: >-
            `PORT_TAKEN`: the computer already has a URL on this port, returned
            in `public_url`. `PUBLIC_URL_LIMIT`: the computer has as many as it
            can. `PUBLIC_URL_ACCOUNT_LIMIT`: the workspace owner has as many as
            they can across all their computers. `NAME_UNAVAILABLE`: Orgo took
            this address down. `COMPUTER_MOVED`: the computer moved to another
            workspace during the request.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - type: object
                    properties:
                      limit:
                        type: integer
                      public_url:
                        $ref: '#/components/schemas/PublicUrl'
              example:
                error: >-
                  This computer already has 10 public URLs, the most it can
                  have. Remove one to add another.
                code: PUBLIC_URL_LIMIT
                limit: 10
        '429':
          description: >-
            `RATE_LIMITED`: you made 30 public URLs today. `NEW_NAMES_LIMIT`:
            Orgo reached its daily number of new names. Both reset at 00:00 UTC;
            `Retry-After` and `retry_after` give the seconds to wait.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - type: object
                    properties:
                      retry_after:
                        type: integer
        '503':
          description: '`NO_FREE_NAME`: no free tail was found for the name. Try again.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    CreatePublicUrlRequest:
      type: object
      required:
        - port
      properties:
        port:
          type: integer
          minimum: 1
          maximum: 65535
          description: >-
            The port your app listens on inside the computer. Not 22, 3389, 5900
            to 5999, 6080 to 6099, 8080 or 9000: the computer uses those itself.
        name:
          type: string
          minLength: 2
          maxLength: 16
          description: >-
            The start of the address. Orgo adds 4 characters after it, so
            `cool-thing` becomes `cool-thing-x7k2`. Lowercase letters, digits
            and hyphens. Omit it and Orgo picks one.
        label:
          type: string
          description: >-
            Older name for `name`, read the same way. To get back an address the
            workspace owner removed in the last 30 days, send its full label
            here, for example `cool-thing-x7k2`. Send `name` or `label`, not
            both.
    PublicUrl:
      type: object
      required:
        - id
        - url
        - hostname
        - label
        - port
        - created_at
        - protected
      properties:
        id:
          type: string
          format: uuid
        url:
          type: string
          format: uri
          description: The address to share.
          example: https://cool-thing-x7k2.orgo.dev
        hostname:
          type: string
          example: cool-thing-x7k2.orgo.dev
        label:
          type: string
          description: The part of the hostname before the base domain.
          example: cool-thing-x7k2
        port:
          type: integer
          minimum: 1
          maximum: 65535
          description: The port on the computer the URL serves.
        created_at:
          type: string
          format: date-time
        protected:
          type: boolean
          description: '`true` when visitors must enter a password first.'
        disabled:
          type: boolean
          description: >-
            Present and `true` only when Orgo support turned the URL off. It is
            not served and cannot be changed or removed.
    Error:
      type: object
      description: >-
        The base error body. Every failure carries `error`; individual endpoints
        add the fields named in the schemas below.
      required:
        - error
      properties:
        error:
          type: string
          description: Human-readable message.
          example: Access denied
        code:
          type: string
          description: >-
            Machine-readable reason. Present on the failures that define one,
            absent otherwise.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key authentication. Get your key at orgo.ai/workspaces

````

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