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

# Create Link

> Create a new recording link for a domain

Creates a new recording link in the specified workspace.

## Errors

| Error code                       | Status | Description                            |
| -------------------------------- | ------ | -------------------------------------- |
| `LINK_DEFAULT_PROJECT_NOT_FOUND` | 404    | No default project found for workspace |
| `LINK_PROJECT_DELETED`           | 410    | The specified project has been deleted |
| `LINK_CREATE_FAILED`             | 500    | Failed to create the link              |
| `PLAN_LIMIT_EXCEEDED`            | 403    | Workspace plan limit exceeded          |

Also returns [common authentication errors](/api/error-handling#authentication-errors).

## Related

<CardGroup cols={2}>
  <Card title="List Links" icon="list" href="/api/links/list-links">
    View all links in a workspace
  </Card>

  <Card title="Get Link" icon="link" href="/api/links/get-link">
    Retrieve the created link by ID
  </Card>

  <Card title="Update Link" icon="pen" href="/api/links/update-link">
    Update link settings after creation
  </Card>

  <Card title="List Projects" icon="folder" href="/api/projects/list-projects">
    Find project IDs for link creation
  </Card>
</CardGroup>


## OpenAPI

````yaml POST /public/workspace/{workspaceId}/links
openapi: 3.1.1
info:
  title: Userplane Public API
  version: 1.0.0
  description: >-
    Programmatic access to Userplane workspaces, recordings, and links.
    Authenticate with a Bearer token using your API key (uspl_ prefix).
servers:
  - url: https://api.userplane.io/api/v1
    description: Production
security:
  - bearerAuth: []
paths:
  /public/workspace/{workspaceId}/links:
    post:
      tags:
        - Links
      summary: Create recording link
      description: Create a new recording link for a domain
      operationId: links.create
      parameters:
        - name: workspaceId
          in: path
          required: true
          schema:
            type: string
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                projectId:
                  type: string
                  minLength: 1
                domainId:
                  type: string
                  minLength: 1
                linkReference:
                  type: string
                  maxLength: 2048
                linkReusable:
                  default: false
                  type: boolean
                linkMeta:
                  type: object
                  additionalProperties:
                    type: string
                    maxLength: 1024
              required:
                - domainId
                - linkReusable
              additionalProperties: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      workspaceId:
                        type: string
                        minLength: 1
                      link:
                        type: object
                        properties:
                          linkId:
                            type: string
                            minLength: 1
                          linkTitle:
                            anyOf:
                              - type: string
                              - type: 'null'
                          linkType:
                            type: string
                            enum:
                              - file
                              - recording
                              - session
                              - screenshot
                          linkReusable:
                            type: boolean
                          linkProviderType:
                            type: string
                            enum:
                              - intercom
                              - zendesk
                              - hubspot
                              - freshdesk
                              - freshchat
                              - jira_service_management
                              - helpscout
                              - happyfox
                              - ada
                              - forethought
                              - servicenow
                              - front
                              - zoho_desk
                              - crisp
                              - pylon
                              - plain
                              - asana
                              - azure_devops
                              - clickup
                              - github
                              - gitlab
                              - jira
                              - linear
                              - notion
                              - sentry
                              - slack
                              - web
                              - others
                          linkProviderId:
                            anyOf:
                              - type: string
                              - type: 'null'
                          linkProviderReference:
                            anyOf:
                              - type: string
                              - type: 'null'
                          linkURL:
                            type: string
                          linkMeta:
                            anyOf:
                              - type: object
                                additionalProperties:
                                  type: string
                              - type: 'null'
                          createdAt: {}
                          project:
                            type: object
                            properties:
                              projectId:
                                type: string
                                minLength: 1
                              title:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            required:
                              - projectId
                              - title
                            additionalProperties: false
                          creator:
                            type: object
                            properties:
                              workspaceMemberId:
                                type: string
                                minLength: 1
                              name:
                                type: string
                            required:
                              - workspaceMemberId
                              - name
                            additionalProperties: false
                          domain:
                            type: object
                            properties:
                              domainId:
                                type: string
                                minLength: 1
                              url:
                                type: string
                              status:
                                type: string
                                enum:
                                  - pending
                                  - verified
                                  - revoked
                            required:
                              - domainId
                              - url
                              - status
                            additionalProperties: false
                        required:
                          - linkId
                          - linkTitle
                          - linkType
                          - linkReusable
                          - linkProviderType
                          - linkProviderId
                          - linkProviderReference
                          - linkURL
                          - linkMeta
                          - createdAt
                          - project
                          - creator
                          - domain
                        additionalProperties: false
                    required:
                      - workspaceId
                      - link
                    additionalProperties: false
                required:
                  - message
                  - data
                additionalProperties: false
        '400':
          description: '400'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: BAD_REQUEST
                      status:
                        const: 400
                      message:
                        type: string
                        default: >-
                          Invalid request parameters. Check the request body and
                          query parameters. See
                          https://docs.userplane.io/api/error-handling
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '401':
          description: '401'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: API_KEY_REQUIRED
                      status:
                        const: 401
                      message:
                        type: string
                        default: >-
                          API key is required. Include it as Authorization:
                          Bearer <your-api-key>. See
                          https://docs.userplane.io/api/authentication
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: API_KEY_INVALID
                      status:
                        const: 401
                      message:
                        type: string
                        default: >-
                          The provided API key is not valid. Verify the key and
                          try again. See
                          https://docs.userplane.io/api/authentication
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: API_KEY_EXPIRED
                      status:
                        const: 401
                      message:
                        type: string
                        default: >-
                          The API key has expired. Rotate or create a new key.
                          See https://docs.userplane.io/api/authentication
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '403':
          description: '403'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: API_KEY_DISABLED
                      status:
                        const: 403
                      message:
                        type: string
                        default: >-
                          The API key is disabled. Enable it or create a new
                          key. See https://docs.userplane.io/api/authentication
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: NOT_A_MEMBER
                      status:
                        const: 403
                      message:
                        type: string
                        default: >-
                          The API key owner is not a member of this workspace.
                          See https://docs.userplane.io/api/error-handling
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: LINK_WORKSPACE_MISMATCH
                      status:
                        const: 403
                      message:
                        type: string
                        default: Link does not belong to this workspace
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: PLAN_LIMIT_EXCEEDED
                      status:
                        const: 403
                      message:
                        type: string
                        default: You have reached your plan limit. Upgrade for more.
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '404':
          description: '404'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: WORKSPACE_NOT_FOUND
                      status:
                        const: 404
                      message:
                        type: string
                        default: Workspace not found
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: LINK_NOT_FOUND
                      status:
                        const: 404
                      message:
                        type: string
                        default: Link not found
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: LINK_DEFAULT_PROJECT_NOT_FOUND
                      status:
                        const: 404
                      message:
                        type: string
                        default: No default project found for workspace
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '410':
          description: '410'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: WORKSPACE_GONE
                      status:
                        const: 410
                      message:
                        type: string
                        default: Workspace has been deleted
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: LINK_GONE
                      status:
                        const: 410
                      message:
                        type: string
                        default: Link has been deleted
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: LINK_PROJECT_DELETED
                      status:
                        const: 410
                      message:
                        type: string
                        default: Project has been deleted
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '429':
          description: '429'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: RATE_LIMITED
                      status:
                        const: 429
                      message:
                        type: string
                        default: >-
                          Rate limit exceeded. Wait and retry with exponential
                          backoff. See https://docs.userplane.io/api/rate-limits
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '500':
          description: '500'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: LINK_CREATE_FAILED
                      status:
                        const: 500
                      message:
                        type: string
                        default: Failed to create link
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '503':
          description: '503'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: SERVICE_UNAVAILABLE
                      status:
                        const: 503
                      message:
                        type: string
                        default: >-
                          API key verification service is temporarily
                          unavailable. Please try again later. See
                          https://docs.userplane.io/api/error-handling
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key with uspl_ prefix. Create keys at
        dash.userplane.io/_/account?tab=developers

````