Skip to main content
Search

Create Agent

Requires the `users:manage` permission.

POST /api/v1/agents

Requires the users:manage permission.

Authentication

Use an agent API key and secret.

Request body

Agent creation details

Required: Yes.

application/json

Field Type Required Description
first_name string Yes Agent's first name
last_name string No Agent's last name
email string (email) Yes Agent's email address
roles array of string Yes Names of the roles assigned to the agent
roles[] string
send_welcome_email boolean No Only used during agent creation to send welcome email
teams array of string No Names of the teams to assign the agent to. On update, the agent is removed from teams not listed.
teams[] string
enabled boolean No Whether agent is enabled. Used only on update.
availability_status string (enum) No Agent's availability status. Used only on update. enum: ["online", "away", "away_manual", "offline", "away_and_reassigning"]
new_password string No Agent's new password. Optional, used only on update.

Responses

200

Agent created successfully

Content type: application/json.

Field Type Required Description
status string No example: "success"
data object No
data.id integer No example: 1
data.created_at string (date-time) No example: "2025-08-28T10:00:00Z"
data.updated_at string (date-time) No example: "2025-08-28T10:00:00Z"
data.first_name string No example: "John"
data.last_name string No example: "Doe"
data.email string (email) No nullable: true example: "[email protected]"
data.type string No example: "agent"
data.availability_status string (enum) No enum: ["online", "away", "away_manual", "offline", "away_and_reassigning"] example: "online"
data.phone_number_country_code string No nullable: true example: "US"
data.phone_number string No nullable: true example: "1234567890"
data.avatar_url string No nullable: true example: "/avatars/agent1.jpg"
data.enabled boolean No example: true
data.last_active_at string (date-time) No nullable: true example: "2025-08-28T10:00:00Z"
data.last_login_at string (date-time) No nullable: true example: "2025-08-28T10:00:00Z"
data.roles array of string No nullable: true example: ["admin"]
data.roles[] string
data.permissions array of string No nullable: true example: ["conversations:read"]
data.permissions[] string
data.custom_attributes object No nullable: true
data.teams array of object No nullable: true
data.teams[].id integer No example: 1
data.teams[].name string No example: "Support Team"
data.teams[].emoji string No nullable: true example: "🛠️"
data.api_key string No nullable: true
data.api_key_last_used_at string (date-time) No nullable: true
data.country string No ISO 3166-1 alpha-2 country code nullable: true example: "US"
data.meta object No nullable: true
data.external_user_id string No External identifier for the user in your own system nullable: true

400

Invalid request

Content type: application/json.

Field Type Required Description
status string No example: "error"
message string No Error message example: "Invalid request"
data unspecified No Additional error data nullable: true
error_type string (enum) No enum: ["GeneralException", "PermissionException", "InputException", "DataException", "NetworkException", "NotFoundException", "ConflictException", "UnauthorizedException", "RateLimitException"]

401

Unauthorized

Content type: application/json.

Field Type Required Description
status string No example: "error"
message string No Error message example: "Invalid request"
data unspecified No Additional error data nullable: true
error_type string (enum) No enum: ["GeneralException", "PermissionException", "InputException", "DataException", "NetworkException", "NotFoundException", "ConflictException", "UnauthorizedException", "RateLimitException"]

403

Forbidden

Content type: application/json.

Field Type Required Description
status string No example: "error"
message string No Error message example: "Invalid request"
data unspecified No Additional error data nullable: true
error_type string (enum) No enum: ["GeneralException", "PermissionException", "InputException", "DataException", "NetworkException", "NotFoundException", "ConflictException", "UnauthorizedException", "RateLimitException"]

500

Internal server error

Content type: application/json.

Field Type Required Description
status string No example: "error"
message string No Error message example: "Invalid request"
data unspecified No Additional error data nullable: true
error_type string (enum) No enum: ["GeneralException", "PermissionException", "InputException", "DataException", "NetworkException", "NotFoundException", "ConflictException", "UnauthorizedException", "RateLimitException"]

Specification

Download the complete OpenAPI specification.

OpenAPI definition for this endpoint
openapi: 3.0.0
info:
  title: Libredesk API
  description: >-
    REST API documentation for Libredesk helpdesk system.


    ## Authentication


    The Libredesk API supports two authentication methods:


    ### 1. Basic Authentication

    Use your API key and secret with Basic authentication:

    ```

    Authorization: Basic <base64_encoded_api_key:api_secret>

    ```


    ### 2. Token Authentication  

    Use your API key and secret with token authentication:

    ```

    Authorization: token api_key:api_secret

    ```


    To obtain API credentials, generate them from your agent profile in the
    Libredesk dashboard.
  version: 1.0.0
servers:
  - url: http://localhost:8080
    description: Local development server
security:
  - basicAuth: []
  - tokenAuth: []
paths:
  /api/v1/agents:
    post:
      tags:
        - Agents
      summary: Create Agent
      description: Requires the `users:manage` permission.
      operationId: handleCreateAgent
      requestBody:
        description: Agent creation details
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentRequest'
      responses:
        '200':
          description: Agent created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AgentResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - basicAuth: []
        - tokenAuth: []
components:
  schemas:
    AgentRequest:
      type: object
      required:
        - email
        - first_name
        - roles
      properties:
        first_name:
          type: string
          description: Agent's first name
        last_name:
          type: string
          description: Agent's last name
        email:
          type: string
          format: email
          description: Agent's email address
        roles:
          type: array
          items:
            type: string
          description: Names of the roles assigned to the agent
        send_welcome_email:
          type: boolean
          description: Only used during agent creation to send welcome email
        teams:
          type: array
          items:
            type: string
          description: >-
            Names of the teams to assign the agent to. On update, the agent is
            removed from teams not listed.
        enabled:
          type: boolean
          description: Whether agent is enabled. Used only on update.
        availability_status:
          type: string
          enum:
            - online
            - away
            - away_manual
            - offline
            - away_and_reassigning
          description: Agent's availability status. Used only on update.
        new_password:
          type: string
          description: Agent's new password. Optional, used only on update.
    AgentResponse:
      type: object
      properties:
        status:
          type: string
          example: success
        data:
          $ref: '#/components/schemas/Agent'
    ErrorResponse:
      type: object
      description: Error response format
      properties:
        status:
          type: string
          example: error
        message:
          type: string
          description: Error message
          example: Invalid request
        data:
          nullable: true
          description: Additional error data
        error_type:
          type: string
          enum:
            - GeneralException
            - PermissionException
            - InputException
            - DataException
            - NetworkException
            - NotFoundException
            - ConflictException
            - UnauthorizedException
            - RateLimitException
    Agent:
      type: object
      properties:
        id:
          type: integer
          example: 1
        created_at:
          type: string
          format: date-time
          example: '2025-08-28T10:00:00Z'
        updated_at:
          type: string
          format: date-time
          example: '2025-08-28T10:00:00Z'
        first_name:
          type: string
          example: John
        last_name:
          type: string
          example: Doe
        email:
          type: string
          format: email
          example: [email protected]
          nullable: true
        type:
          type: string
          example: agent
        availability_status:
          type: string
          enum:
            - online
            - away
            - away_manual
            - offline
            - away_and_reassigning
          example: online
        phone_number_country_code:
          type: string
          nullable: true
          example: US
        phone_number:
          type: string
          nullable: true
          example: '1234567890'
        avatar_url:
          type: string
          nullable: true
          example: /avatars/agent1.jpg
        enabled:
          type: boolean
          example: true
        last_active_at:
          type: string
          format: date-time
          nullable: true
          example: '2025-08-28T10:00:00Z'
        last_login_at:
          type: string
          format: date-time
          nullable: true
          example: '2025-08-28T10:00:00Z'
        roles:
          type: array
          items:
            type: string
          example:
            - admin
          nullable: true
        permissions:
          type: array
          items:
            type: string
          example:
            - conversations:read
          nullable: true
        custom_attributes:
          type: object
          nullable: true
        teams:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/TeamCompact'
        api_key:
          type: string
          nullable: true
        api_key_last_used_at:
          type: string
          format: date-time
          nullable: true
        country:
          type: string
          nullable: true
          description: ISO 3166-1 alpha-2 country code
          example: US
        meta:
          type: object
          nullable: true
        external_user_id:
          type: string
          nullable: true
          description: External identifier for the user in your own system
    TeamCompact:
      type: object
      properties:
        id:
          type: integer
          example: 1
        name:
          type: string
          example: Support Team
        emoji:
          type: string
          nullable: true
          example: 🛠️
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: >-
        Basic authentication using base64 encoded API key and secret. Format:
        `Authorization: Basic <base64(api_key:api_secret)>`
    tokenAuth:
      type: apiKey
      name: Authorization
      in: header
      description: >-
        Token authentication using API key and secret. Format: `Authorization:
        token api_key:api_secret`

Was this article helpful?