PUT /api/v1/agents/{id}
Requires the users:manage permission.
Authentication
Use an agent API key and secret.
Parameters
| Name | Location | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | Yes |
Request body
Agent update 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 |
| 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 updated 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"] |
404
Not found
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/{id}:
put:
tags:
- Agents
summary: Update Agent
description: Requires the `users:manage` permission.
operationId: handleUpdateAgent
parameters:
- name: id
in: path
required: true
schema:
type: string
requestBody:
description: Agent update details
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AgentRequest'
responses:
'200':
description: Agent updated 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'
'404':
description: Not found
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`
