1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 05:16:38 +02:00
Files
weechat/src/plugins/relay/api/weechat-relay-api.yaml
T
2025-07-02 20:52:42 +02:00

1335 lines
37 KiB
YAML

openapi: 3.1.0
# SPDX-FileCopyrightText: 2003-2025 Sébastien Helleu <flashcode@flashtux.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
info:
title: WeeChat Relay API
description: |-
This is the [WeeChat](https://weechat.org/) Relay API based on the OpenAPI 3.1 specification.
WeeChat specification: [Relay HTTP REST API](https://specs.weechat.org/specs/2023-005-relay-http-rest-api.html)
contact:
name: Sébastien Helleu
url: https://weechat.org
email: flashcode@flashtux.org
license:
name: CC BY-NC-SA 4.0
url: https://creativecommons.org/licenses/by-nc-sa/4.0/
version: 0.4.1
externalDocs:
url: https://weechat.org/doc/
description: WeeChat documentation
servers:
- url: https://localhost:9000/api
- url: http://localhost:9000/api
tags:
- name: handshake
- name: version
- name: buffers
- name: hotlist
- name: input
- name: completion
- name: ping
- name: sync
paths:
/handshake:
post:
tags:
- handshake
description: |
Perform handshake with remote WeeChat: this is an optional but
recommended request allowing the client to agree on the hash algorithm
to use and get information to perform the authentication.
This endpoint does not require authentication.
operationId: handshake
requestBody:
description: Handshake request
required: true
content:
application/json:
schema:
type: object
properties:
password_hash_algo:
type: array
items:
type: string
enum:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
example:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Handshake'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/version:
get:
tags:
- version
description: Get the WeeChat and API versions
parameters:
- $ref: '#/components/parameters/totp'
operationId: getVersion
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Version'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers:
get:
tags:
- buffers
description: |
Get a list of all buffers, with optional lines and nicks.
operationId: getBuffers
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/bufferLinesFree'
- $ref: '#/components/parameters/bufferNicks'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Buffer'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_id}:
get:
tags:
- buffers
description: |
Get a single buffer by ID, with optional lines and nicks.
operationId: getBufferById
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferId'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/bufferNicks'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Buffer'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_name}:
get:
tags:
- buffers
description: |
Get a single buffer by full name, with optional lines and nicks.
operationId: getBufferByName
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferName'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/bufferNicks'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Buffer'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_id}/lines:
get:
tags:
- buffers
description: |
Get lines in a buffer by ID.
operationId: getBufferByIdLines
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferId'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Line'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_id}/lines/{line_id}:
get:
tags:
- buffers
description: |
Get a line by ID in a buffer by ID.
operationId: getBufferByIdLineById
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferId'
- $ref: '#/components/parameters/lineId'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Line'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer or line not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_name}/lines:
get:
tags:
- buffers
description: |
Get lines in a buffer by full name.
operationId: getBufferNameLines
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferName'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Line'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_name}/lines/{line_id}:
get:
tags:
- buffers
description: |
Get a line by ID in a buffer by full name.
operationId: getBufferByNameLineById
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferName'
- $ref: '#/components/parameters/lineId'
- $ref: '#/components/parameters/bufferLines'
- $ref: '#/components/parameters/colors'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Line'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer or line not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_id}/nicks:
get:
tags:
- buffers
description: |
Get nicks in a buffer by ID.
operationId: getBufferByIdNicks
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferId'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/NickGroup'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/buffers/{buffer_name}/nicks:
get:
tags:
- buffers
description: |
Get nicks in a buffer by full name.
operationId: getBufferByNameNicks
parameters:
- $ref: '#/components/parameters/totp'
- $ref: '#/components/parameters/bufferName'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/NickGroup'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Buffer not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/hotlist:
get:
tags:
- hotlist
description: Get hotlist
operationId: getHotlist
parameters:
- $ref: '#/components/parameters/totp'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Hotlist'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/input:
post:
tags:
- input
description: |
Send text to a buffer.
operationId: input
parameters:
- $ref: '#/components/parameters/totp'
requestBody:
description: Buffer and command to execute
required: true
content:
application/json:
schema:
type: object
properties:
buffer_id:
type: integer
format: int64
description: Buffer identifier (≥ 0)
buffer_name:
type: string
description: >-
Buffer full name
example: 'core.weechat'
command:
type: string
description: text or command to send
example: '/print test'
required:
- command
example:
buffer_name: 'core.weechat'
command: '/print test'
responses:
'204':
description: Successful operation
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/completion:
post:
tags:
- completion
description: |
Complete user command or text.
operationId: completion
parameters:
- $ref: '#/components/parameters/totp'
requestBody:
description: Buffer and user text/command to complete
required: true
content:
application/json:
schema:
type: object
properties:
buffer_id:
type: integer
format: int64
description: Buffer identifier (≥ 0)
buffer_name:
type: string
description: >-
Buffer full name
example: 'core.weechat'
command:
type: string
description: user command or text to complete
example: '/hel'
position:
type: integer
format: int32
description: Position in data (≥ 0)
example: 4
required:
- command
- position
example:
buffer_name: 'core.weechat'
command: '/hel'
position: 4
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Completion'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/ping:
post:
tags:
- ping
description: |
Send ping request to WeeChat.
operationId: ping
parameters:
- $ref: '#/components/parameters/totp'
requestBody:
description: Custom data that will be returned in the response
required: false
content:
application/json:
schema:
type: object
properties:
data:
type: string
example: '1714854355123456'
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/Ping'
'204':
description: Successful operation
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Out of memory
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
/sync:
post:
tags:
- sync
description: |
Synchronize with WeeChat.
This endpoint can only be used when connected via websocket: WeeChat
will then push messages to the client at any time.
operationId: sync
parameters:
- $ref: '#/components/parameters/totp'
requestBody:
description: Synchronization parameters
required: false
content:
application/json:
schema:
type: object
properties:
sync:
type: boolean
description: Enable synchronization
example: true
nicks:
type: boolean
description: Receive nick updates in buffers
example: true
input:
type: boolean
description: Receive input changes in buffers (content and cursor position)
example: true
colors:
type: string
enum:
- ansi
- weechat
- strip
default: ansi
description: |
How to return strings with color codes:
* `ansi`: return ANSI color codes
* `weechat`: return WeeChat internal color codes
* `strip`: strip colors
responses:
'204':
description: Successful operation
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
security:
- password: []
components:
parameters:
totp:
name: x-weechat-totp
in: header
required: false
schema:
type: integer
format: int32
minimum: 0
maximum: 999999
description: |
The TOTP (Time-based One-Time Password) used in authentication
if the remote relay has TOTP configured (option
relay.network.totp_secret is set).
bufferId:
name: buffer_id
in: path
required: true
schema:
type: integer
format: int64
description: Buffer identifier
example: 1709932823238637
bufferName:
name: buffer_name
in: path
required: true
schema:
type: string
description: >-
Buffer full name
example: 'irc.libera.#weechat'
lineId:
name: line_id
in: path
required: true
schema:
type: integer
format: int64
description: Line identifier
bufferLines:
name: lines
in: query
required: false
schema:
type: integer
format: int64
default: 0
description: |
Number of lines to return:
* negative number: return N lines from the end of buffer (newest lines)
* `0`: do not return any line
* positive number: return N lines from the beginning of buffer (oldest lines)
bufferLinesFree:
name: lines_free
in: query
required: false
schema:
type: integer
format: int64
default: 0
description: |
Number of lines to return in buffers with free content:
* negative number: return N lines from the end of buffer (newest lines)
* `0`: do not return any line
* positive number: return N lines from the beginning of buffer (oldest lines)
Default value is `0` if "lines" is set to 0, otherwise all lines are returned.
bufferNicks:
name: nicks
in: query
required: false
schema:
type: boolean
default: false
description: Return buffer nicklist (groups and nicks)
colors:
name: colors
in: query
required: false
schema:
type: string
enum:
- ansi
- weechat
- strip
default: ansi
description: |
How to return strings with color codes:
* `ansi`: return ANSI color codes
* `weechat`: return WeeChat internal color codes
* `strip`: strip colors
schemas:
Error:
type: object
properties:
error:
type: string
Handshake:
type: object
properties:
password_hash_algo:
type: string
nullable: true
enum:
- plain
- sha256
- sha512
- pbkdf2+sha256
- pbkdf2+sha512
example: pbkdf2+sha512
password_hash_iterations:
type: integer
format: int32
example: 100000
totp:
type: boolean
example: true
required:
- password_hash_algo
- password_hash_iterations
- totp
Version:
type: object
properties:
weechat_version:
type: string
example: 4.4.0-dev
weechat_version_git:
type: string
example: v4.3.0-147-g0256ee945
weechat_version_number:
type: integer
format: int32
example: 67371008
relay_api_version:
type: string
example: "0.2.0"
relay_api_version_number:
type: integer
format: int32
example: 512
required:
- weechat_version
- weechat_version_git
- weechat_version_number
- relay_api_version
- relay_api_version_number
Buffer:
type: object
properties:
id:
type: integer
format: int64
description: buffer identifier (≥ 0)
example: 1709932823238637
name:
type: string
example: 'irc.libera.#weechat'
short_name:
type: string
example: '#weechat'
number:
type: integer
format: int64
description: buffer number (≥ 1)
example: 3
type:
type: string
enum:
- formatted
- free
description: the buffer type
example: formatted
hidden:
type: boolean
description: buffer is hidden
example: false
title:
type: string
description: the buffer title (can contain colors)
example: 'Welcome to the WeeChat official support channel'
modes:
type: string
description: the buffer modes (can contain colors)
example: '+nt'
input_prompt:
type: string
description: the input prompt (can contain colors)
example: '[@alice(i)]'
input:
type: string
description: the buffer input
example: ''
input_position:
type: integer
format: int32
description: position in input (number of UTF-8 chars, ≥ 0)
example: 0
input_multiline:
type: boolean
description: buffers allows multiline input
example: false
nicklist:
type: boolean
description: buffer has a nicklist
example: true
nicklist_case_sensitive:
type: boolean
description: groups and nicks are case-sensitive
example: false
nicklist_display_groups:
type: boolean
description: groups are displayed in nicklist
example: false
time_displayed:
type: boolean
description: time is displayed on each line
example: true
local_variables:
type: object
description: the buffer local variables
example:
plugin: 'irc'
name: 'libera.#weechat'
type: 'channel'
server: 'libera'
channel: '#weechat'
nick: 'alice'
host: '~alice@example.com'
keys:
type: array
items:
$ref: '#/components/schemas/Key'
lines:
type: array
items:
$ref: '#/components/schemas/Line'
nicklist_root:
$ref: '#/components/schemas/NickGroup'
required:
- id
- name
- short_name
- number
- type
- hidden
- title
- modes
- input_prompt
- input
- input_position
- input_multiline
- nicklist
- nicklist_case_sensitive
- nicklist_display_groups
- time_displayed
- local_variables
- keys
Key:
type: object
properties:
key:
type: string
description: key name
example: meta-f,meta-a
command:
type: string
description: command
example: '/fset -append'
required:
- key
- command
Line:
type: object
properties:
id:
type: integer
format: int64
description: line identifier (≥ 0, unique in buffer)
example: 0
y:
type: integer
format: int64
description: line index (≥ 1) on free buffer, -1 on formatted buffer
example: -1
date:
type: string
format: date-time
description: date and time of line
example: '2023-12-05T19:46:03.847625Z'
date_printed:
type: string
format: date-time
description: date and time when the line was printed
example: '2023-12-05T19:46:03.847625Z'
highlight:
type: boolean
description: line has a highlight
example: false
notify_level:
type: integer
format: int32
description: |
Notify level:
* -1: no notify at all
* 0: low
* 1: message
* 2: private message
* 3: message with highlight
example: 0
prefix:
type: string
description: prefix displayed before the message (can contain colors)
example: '-->'
message:
type: string
description: the message (can contain colors)
example: 'alice (~alice@example.com) has joined #test'
tags:
items:
type: string
description: tags
example:
- 'irc_join'
- 'irc_tag_account=alice'
- 'irc_tag_time=2023-12-05T19:46:03.847Z'
- 'nick_alice'
- 'host_~alice@example.com'
- 'log4'
required:
- id
- y
- date
- date_printed
- highlight
- notify_level
- prefix
- message
- tags
NickGroup:
type: object
properties:
id:
type: integer
format: int64
description: group identifier (≥ 0, unique in buffer)
example: 1709932823649181
parent_group_id:
type: integer
format: int64
description: parent group identifier, -1 if group is the root of nicklist
example: 1709932823145768
name:
type: string
description: group name
example: "root"
color_name:
type: string
description: group color name (can be an option or color name)
example: 'weechat.color.nicklist_group'
color:
type: string
description: group color
example: '\u001b[32m'
visible:
type: boolean
description: the group is displayed
example: true
groups:
type: array
items:
$ref: '#/components/schemas/NickGroup'
nicks:
type: array
items:
$ref: '#/components/schemas/Nick'
example:
id: 0
parent_group_id: -1
name: 'root'
color_name: ''
color: ''
visible: false
groups:
- id: 1709932823649181
parent_group_id: 0
name: '000|o'
color_name: 'weechat.color.nicklist_group'
color: '\u001b[32m'
visible: true
groups: []
nicks:
- id: 1709932823649184
parent_group_id: 1709932823649181
prefix: '@'
prefix_color_name: 'lightgreen'
prefix_color: '\u001b[92m'
name: 'alice'
color_name: 'bar_fg'
color: ''
visible: true
- id: 1709932823649189
parent_group_id: 0
name: '001|h'
color_name: 'weechat.color.nicklist_group'
color: '\u001b[32m'
visible: true
groups: []
nicks: []
- id: 1709932823649203
parent_group_id: 0
name: '002|v'
color_name: 'weechat.color.nicklist_group'
color: '\u001b[32m'
visible: true
groups: []
nicks: []
- id: 1709932823649210
parent_group_id: 0
name: '999|...'
color_name: 'weechat.color.nicklist_group'
color: '\u001b[32m'
visible: true
groups: []
nicks: []
nicks: []
required:
- id
- parent_group_id
- name
- color_name
- color
- visible
- groups
- nicks
Nick:
type: object
properties:
id:
type: integer
format: int64
description: group identifier (≥ 0, unique in buffer)
example: 1709932823649181
parent_group_id:
type: integer
format: int64
description: parent group identifier, -1 if group is the root of nicklist
example: 1709932823145768
prefix:
type: string
description: nick prefix
example: "@"
prefix_color_name:
type: string
description: prefix color name (can be an option or color name)
example: 'lightgreen'
prefix_color:
type: string
description: prefix color
example: '\u001b[32m'
name:
type: string
description: nick name
example: "alice"
color_name:
type: string
description: nick color name (can be an option or color name)
example: 'bar_fg'
color:
type: string
description: nick color
example: ''
visible:
type: boolean
description: the nick is displayed
example: true
required:
- id
- parent_group_id
- prefix
- prefix_color_name
- prefix_color
- name
- color_name
- color
- visible
Hotlist:
type: object
properties:
priority:
type: integer
format: int32
description: |
Priority of the hotlist entry:
* `0`: low
* `1`: message
* `2`: private
* `3`: highlight
example: 1
date:
type: string
format: date-time
description: date and time of the hotlist entry
example: '2024-03-17T16:38:51.572834Z'
buffer_id:
type: integer
format: int64
description: buffer identifier
example: 1709932823238637
count:
type: array
items:
type: integer
minItems: 4
maxItems: 4
example:
- 44
- 3
- 0
- 1
required:
- priority
- date
- buffer_id
- count
Completion:
type: object
properties:
context:
type: string
enum:
- 'null'
- 'command'
- 'command_arg'
- 'auto'
example: 'command_arg'
base_word:
type: string
example: 'qu'
position_replace:
type: integer
format: int32
example: 1
add_space:
type: boolean
example: true
list:
type: array
items:
type: string
example:
- 'query'
- 'quiet'
- 'quit'
- 'quote'
required:
- context
- base_word
- position_replace
- add_space
- list
Ping:
type: object
properties:
data:
type: string
example: '1714854355123456'
required:
- data
securitySchemes:
password:
type: http
scheme: basic
description: |
The HTTP basic authentication is used to send the relay password,
either as plain text or hashed, with one of these formats for user
and password:
* `plain:<password>`
* `hash:sha256:<timestamp>:<hash>`
* `hash:sha512:<timestamp>:<hash>`
* `hash:pbkdf2+sha256:<timestamp>:<iterations>:<hash>`
* `hash:pbkdf2+sha512:<timestamp>:<iterations>:<hash>`
When the username is `plain`, the password is sent as-is.
When the username is `hash`, the password is hashed using the given
algorithms and the timestamp is the current timestamp as integer
(number of seconds since the Unix Epoch); it is used to prevent replay
attacks.
The timestamp must be put before the password when computing the hash.
For example if the current timestamp is `1716119801` and the password
is `secret_password`, then the hash is computed on string
`1716119801secret_password`.
If TOTP is enabled on WeeChat/relay side (option relay.network.totp_secret
is set), you must send the TOTP value in this header:
`x-weechat-totp: 123456`.