Authentication is required and the user must be an admin.
Configuration options:
[:auth, :enforce_oauth_admin_scope_usage]
— OAuth admin scope requirement toggle.
If true
, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes).
If false
and token doesn't have admin scope(s), is_admin
user flag grants access to admin-specific actions.
Note that client app needs to explicitly support admin scopes and request them when obtaining auth token.GET /api/pleroma/admin/users
query
: string search term (e.g. nickname, domain, nickname@domain)filters
: string comma-separated string of filters:
local
: only local usersexternal
: only external usersactive
: only active usersneed_approval
: only unapproved usersunconfirmed
: only unconfirmed usersdeactivated
: only deactivated usersis_admin
: users with admin roleis_moderator
: users with moderator rolepage
: integer page numberpage_size
: integer number of users per page (default is 50
)tags
: [string] tags listactor_types
: [string] actor type list (Person
, Service
, Application
)name
: string user display nameemail
: string user emailhttps://mypleroma.org/api/pleroma/admin/users?query=john&filters=local,active&page=1&page_size=10&tags[]=some_tag&tags[]=another_tag&name=display_name&email=email@example.com
{
"page_size": integer,
"count": integer,
"users": [
{
"deactivated": bool,
"id": integer,
"nickname": string,
"roles": {
"admin": bool,
"moderator": bool
},
"local": bool,
"tags": array,
"avatar": string,
"display_name": string,
"confirmation_pending": bool,
"approval_pending": bool,
"registration_reason": string,
},
...
]
}
DELETE /api/pleroma/admin/users
nickname
DELETE /api/pleroma/admin/users
nicknames
POST
users
: [
{
nickname
,
email
,
password
}
]POST /api/pleroma/admin/users/follow
follower
: The nickname of the followerfollowed
: The nickname of the followedPOST /api/pleroma/admin/users/unfollow
follower
: The nickname of the followerfollowed
: The nickname of the followedPATCH /api/pleroma/admin/users/:nickname/toggle_activation
nickname
{
"deactivated": bool,
"id": integer,
"nickname": string
}
PUT /api/pleroma/admin/users/tag
nicknames
(array)tags
(array)DELETE /api/pleroma/admin/users/tag
nicknames
(array)tags
(array)GET /api/pleroma/admin/users/:nickname/permission_group
{
"is_moderator": bool,
"is_admin": bool
}
GET /api/pleroma/admin/users/:nickname/permission_group/:permission_group
Note: Available :permission_group
is currently moderator and admin. 404 is returned when the permission group doesn’t exist.
{
"is_moderator": bool,
"is_admin": bool
}
POST /api/pleroma/admin/users/:nickname/permission_group/:permission_group
{"error": "…"}
POST /api/pleroma/admin/users/permission_group/:permission_group
nicknames
: nicknames array{"error": "…"}
DELETE /api/pleroma/admin/users/:nickname/permission_group/:permission_group
DELETE /api/pleroma/admin/users/:nickname/permission_group/:permission_group
{"error": "…"}
DELETE /api/pleroma/admin/users/permission_group/:permission_group
nicknames
: nicknames array{"error": "…"}
PATCH /api/pleroma/admin/users/activate
nicknames
: nicknames array{
users: [
{
// user object
}
]
}
PATCH /api/pleroma/admin/users/deactivate
nicknames
: nicknames array{
users: [
{
// user object
}
]
}
PATCH /api/pleroma/admin/users/approve
nicknames
: nicknames array{
users: [
{
// user object
}
]
}
GET /api/pleroma/admin/users/:nickname_or_id
nickname
or id
Not found
GET /api/pleroma/admin/users/:nickname_or_id/statuses
nickname
or id
page_size
: number of statuses to return (default is 20
)godmode
: true
/false
– allows to see private statuseswith_reblogs
: true
/false
– allows to see reblogs (default is false)Not found
GET /api/pleroma/admin/instances/:instance/statuses
instance
: instance namepage_size
: number of statuses to return (default is 20
)godmode
: true
/false
– allows to see private statuseswith_reblogs
: true
/false
– allows to see reblogs (default is false)Not found
GET /api/pleroma/admin/statuses
page_size
: number of statuses to return (default is 20
)local_only
: excludes remote statusesgodmode
: true
/false
– allows to see private statuseswith_reblogs
: true
/false
– allows to see reblogs (default is false)Not found
GET /api/pleroma/admin/relay
Params: none Response:
[
{"actor": "https://example.com/relay", "followed_back": true},
{"actor": "https://example2.com/relay", "followed_back": false}
]
POST /api/pleroma/admin/relay
Params:
relay_url
Response:
{"actor": "https://example.com/relay", "followed_back": true}
DELETE /api/pleroma/admin/relay
relay_url
force
: forcefully unfollow a relay even when the relay is not available. (default is false
)Response:
{"https://example.com/relay"}
POST /api/pleroma/admin/users/invite_token
max_use
(integer)expires_at
(date string e.g. “2019-04-07”){
"id": integer,
"token": string,
"used": boolean,
"expires_at": date,
"uses": integer,
"max_use": integer,
"invite_type": string (possible values: `one_time`, `reusable`, `date_limited`, `reusable_date_limited`)
}
GET /api/pleroma/admin/users/invites
{
"invites": [
{
"id": integer,
"token": string,
"used": boolean,
"expires_at": date,
"uses": integer,
"max_use": integer,
"invite_type": string (possible values: `one_time`, `reusable`, `date_limited`, `reusable_date_limited`)
},
...
]
}
POST /api/pleroma/admin/users/revoke_invite
token
{
"id": integer,
"token": string,
"used": boolean,
"expires_at": date,
"uses": integer,
"max_use": integer,
"invite_type": string (possible values: `one_time`, `reusable`, `date_limited`, `reusable_date_limited`)
}
POST /api/pleroma/admin/users/email_invite
Params:
email
name
, optionalResponse:
On success: 204
, empty response
On failure:
[
{
"error": "Appropriate error message here"
}
]
GET /api/pleroma/admin/users/:nickname/password_reset
{
"token": "base64 reset token",
"link": "https://pleroma.social/api/pleroma/password_reset/url-encoded-base64-token"
}
PATCH /api/pleroma/admin/users/force_password_reset
nicknames
204
)/api/pleroma/admin/users/disable_mfa
nickname
GET /api/pleroma/admin/users/:nickname/credentials
Params:
nickname
Response:
{
"actor_type": "Person",
"allow_following_move": true,
"avatar": "https://pleroma.social/media/7e8e7508fd545ef580549b6881d80ec0ff2c81ed9ad37b9bdbbdf0e0d030159d.jpg",
"background": "https://pleroma.social/media/4de34c0bd10970d02cbdef8972bef0ebbf55f43cadc449554d4396156162fe9a.jpg",
"banner": "https://pleroma.social/media/8d92ba2bd244b613520abf557dd448adcd30f5587022813ee9dd068945986946.jpg",
"bio": "bio",
"default_scope": "public",
"discoverable": false,
"email": "user@example.com",
"fields": [
{
"name": "example",
"value": "<a href=\"https://example.com\" rel=\"ugc\">https://example.com</a>"
}
],
"hide_favorites": false,
"hide_followers": false,
"hide_followers_count": false,
"hide_follows": false,
"hide_follows_count": false,
"id": "9oouHaEEUR54hls968",
"locked": true,
"name": "user",
"no_rich_text": true,
"pleroma_settings_store": {},
"raw_fields": [
{
"id": 1,
"name": "example",
"value": "https://example.com"
},
],
"show_role": true,
"skip_thread_containment": false
}
PATCH /api/pleroma/admin/users/:nickname/credentials
Params:
email
password
name
bio
avatar
locked
no_rich_text
default_scope
banner
hide_follows
hide_followers
hide_followers_count
hide_follows_count
hide_favorites
allow_following_move
background
show_role
skip_thread_containment
fields
is_discoverable
actor_type
Responses:
Status: 200
{"status": "success"}
Status: 400
{"errors":
{"actor_type": "is invalid"},
{"email": "has invalid format"},
...
}
Status: 404
{"error": "Not found"}
GET /api/pleroma/admin/reports
state
: string the state of reports. Valid values are open
, closed
and resolved
limit
: integer the number of records to retrievepage
: integer page numberpage_size
: integer number of log entries per page (default is 50
){"error": "error_msg"}
when requested by anonymous or non-adminaccount
: the user who has been reportedactor
: the user who has sent the reportstatuses
: list of statuses that have been included to the report{
"total" : 1,
"reports": [
{
"account": {
"acct": "user",
"avatar": "https://pleroma.example.org/images/avi.png",
"avatar_static": "https://pleroma.example.org/images/avi.png",
"bot": false,
"created_at": "2019-04-23T17:32:04.000Z",
"display_name": "User",
"emojis": [],
"fields": [],
"followers_count": 1,
"following_count": 1,
"header": "https://pleroma.example.org/images/banner.png",
"header_static": "https://pleroma.example.org/images/banner.png",
"id": "9i6dAJqSGSKMzLG2Lo",
"locked": false,
"note": "",
"pleroma": {
"confirmation_pending": false,
"hide_favorites": true,
"hide_followers": false,
"hide_follows": false,
"is_admin": false,
"is_moderator": false,
"relationship": {},
"tags": []
},
"source": {
"note": "",
"pleroma": {},
"sensitive": false
},
"tags": ["force_unlisted"],
"statuses_count": 3,
"url": "https://pleroma.example.org/users/user",
"username": "user"
},
"actor": {
"acct": "lain",
"avatar": "https://pleroma.example.org/images/avi.png",
"avatar_static": "https://pleroma.example.org/images/avi.png",
"bot": false,
"created_at": "2019-03-28T17:36:03.000Z",
"display_name": "Roger Braun",
"emojis": [],
"fields": [],
"followers_count": 1,
"following_count": 1,
"header": "https://pleroma.example.org/images/banner.png",
"header_static": "https://pleroma.example.org/images/banner.png",
"id": "9hEkA5JsvAdlSrocam",
"locked": false,
"note": "",
"pleroma": {
"confirmation_pending": false,
"hide_favorites": false,
"hide_followers": false,
"hide_follows": false,
"is_admin": false,
"is_moderator": false,
"relationship": {},
"tags": []
},
"source": {
"note": "",
"pleroma": {},
"sensitive": false
},
"tags": ["force_unlisted"],
"statuses_count": 1,
"url": "https://pleroma.example.org/users/lain",
"username": "lain"
},
"content": "Please delete it",
"created_at": "2019-04-29T19:48:15.000Z",
"id": "9iJGOv1j8hxuw19bcm",
"state": "open",
"statuses": [
{
"account": { ... },
"application": {
"name": "Web",
"website": null
},
"bookmarked": false,
"card": null,
"content": "<span class=\"h-card\"><a data-user=\"9hEkA5JsvAdlSrocam\" class=\"u-url mention\" href=\"https://pleroma.example.org/users/lain\">@<span>lain</span></a></span> click on my link <a href=\"https://www.google.com/\">https://www.google.com/</a>",
"created_at": "2019-04-23T19:15:47.000Z",
"emojis": [],
"favourited": false,
"favourites_count": 0,
"id": "9i6mQ9uVrrOmOime8m",
"in_reply_to_account_id": null,
"in_reply_to_id": null,
"language": null,
"media_attachments": [],
"mentions": [
{
"acct": "lain",
"id": "9hEkA5JsvAdlSrocam",
"url": "https://pleroma.example.org/users/lain",
"username": "lain"
},
{
"acct": "user",
"id": "9i6dAJqSGSKMzLG2Lo",
"url": "https://pleroma.example.org/users/user",
"username": "user"
}
],
"muted": false,
"pinned": false,
"pleroma": {
"content": {
"text/plain": "@lain click on my link https://www.google.com/"
},
"conversation_id": 28,
"in_reply_to_account_acct": null,
"local": true,
"spoiler_text": {
"text/plain": ""
}
},
"reblog": null,
"reblogged": false,
"reblogs_count": 0,
"replies_count": 0,
"sensitive": false,
"spoiler_text": "",
"tags": [],
"uri": "https://pleroma.example.org/objects/8717b90f-8e09-4b58-97b0-e3305472b396",
"url": "https://pleroma.example.org/notice/9i6mQ9uVrrOmOime8m",
"visibility": "direct"
}
]
}
]
}
GET /api/pleroma/admin/grouped_reports
date
: date of the latest reportaccount
: the user who has been reported (see /api/pleroma/admin/reports
for reference)status
: reported status (see /api/pleroma/admin/reports
for reference)actors
: users who had reported this status (see /api/pleroma/admin/reports
for reference)reports
: reports (see /api/pleroma/admin/reports
for reference) "reports": [
{
"date": "2019-10-07T12:31:39.615149Z",
"account": { ... },
"status": { ... },
"actors": [{ ... }, { ... }],
"reports": [{ ... }]
}
]
GET /api/pleroma/admin/reports/:id
id
{"error": "error_msg"}
"Not found"
PATCH /api/pleroma/admin/reports
`reports`: [
{
`id`, // required, report id
`state` // required, the new state. Valid values are `open`, `closed` and `resolved`
},
...
]
On failure:
[
{
`id`, // report id
`error` // error message
}
]
On success: 204
, empty response
POST /api/pleroma/admin/reports/:id/notes
id
: required, report idcontent
: required, the message"Invalid parameters"
when status
is missing204
, empty responseDELETE /api/pleroma/admin/reports/:report_id/notes/:id
report_id
: required, report idid
: required, note id"Invalid parameters"
when status
is missing204
, empty responseGET /api/pleroma/admin/statuses/:id
id
: required, status id"Not Found"
PUT /api/pleroma/admin/statuses/:id
id
sensitive
: optional, valid values are true
or false
visibility
: optional, valid values are public
, private
and unlisted
"Unsupported visibility"
{"error": "error_msg"}
"Not found"
DELETE /api/pleroma/admin/statuses/:id
id
{"error": "error_msg"}
"Not found"
{}
GET /api/pleroma/admin/restart
Only works when configuration from database is enabled.
"To use this endpoint you need to enable configuration from database."
{}
GET /api/pleroma/admin/need_reboot
need_reboot
- boolean{
"need_reboot": false
}
GET /api/pleroma/admin/config
If need_reboot
is true
, instance must be restarted, so reboot time settings can take effect.
Only works when configuration from database is enabled.
only_db
: true (optional, get only saved in database settings)"To use this endpoint you need to enable configuration from database."
{
"configs": [
{
"group": ":pleroma",
"key": "Pleroma.Upload",
"value": []
}
],
"need_reboot": true
}
POST /api/pleroma/admin/config
If need_reboot
is true
, instance must be restarted, so reboot time settings can take effect.
Only works when configuration from database is enabled.
Some modifications are necessary to save the config settings correctly:
Pleroma.
, Phoenix.
, Tesla.
or strings like Oban
, Ueberauth
will be converted to modules;"Pleroma.Upload" -> Pleroma.Upload
"Oban" -> Oban
:
will be converted to atoms;":pleroma" -> :pleroma
tuple
key and array value will be converted to tuples;{"tuple": ["string", "Pleroma.Upload", []]} -> {"string", Pleroma.Upload, []}
[{"tuple": [":key1", "value"]}, {"tuple": [":key2", "value"]}] -> [key1: "value", key2: "value"]
Most of the settings will be applied in runtime
, this means that you don't need to restart the instance. But some settings are applied in compile time
and require a reboot of the instance, such as:
all settings inside these keys:
:hackney_pools
:connections_pool
:pools
:chat
partially settings inside these keys:
:seconds_valid
in Pleroma.Captcha
:proxy_remote
in Pleroma.Upload
:upload_limit
in :instance
Params:
configs
- array of config objectsgroup
- string (required)key
- string (required)value
- string, [], {} or {“tuple”: []} (required)delete
- true (optional, if setting must be deleted)subkeys
- array of strings (optional, only works when delete=true
parameter is passed, otherwise will be ignored)When a value have several nested settings, you can delete only some nested settings by passing a parameter subkeys
, without deleting all settings by key.
[subkey: val1, subkey2: val2, subkey3: val3] \\ initial value
{"group": ":pleroma", "key": "some_key", "delete": true, "subkeys": [":subkey", ":subkey3"]} \\ passing json for deletion
[subkey2: val2] \\ value after deletion
Most of the settings can be partially updated through merge old values with new values, except settings value of which is list or is not keyword.
Example of setting without keyword in value:
config :tesla, :adapter, Tesla.Adapter.Hackney
List of settings which support only full update by key:
@full_key_update [
{:pleroma, :ecto_repos},
{:quack, :meta},
{:mime, :types},
{:cors_plug, [:max_age, :methods, :expose, :headers]},
{:auto_linker, :opts},
{:swarm, :node_blacklist},
{:logger, :backends}
]
List of settings which support only full update by subkey:
@full_subkey_update [
{:pleroma, :assets, :mascots},
{:pleroma, :emoji, :groups},
{:pleroma, :workers, :retries},
{:pleroma, :mrf_subchain, :match_actor},
{:pleroma, :mrf_keyword, :replace}
]
Settings without explicit key must be sended in separate config object params.
config :quack,
level: :debug,
meta: [:all],
...
{
"configs": [
{"group": ":quack", "key": ":level", "value": ":debug"},
{"group": ":quack", "key": ":meta", "value": [":all"]},
...
]
}
{
"configs": [
{
"group": ":pleroma",
"key": "Pleroma.Upload",
"value": [
{"tuple": [":uploader", "Pleroma.Uploaders.Local"]},
{"tuple": [":filters", ["Pleroma.Upload.Filter.Dedupe"]]},
{"tuple": [":link_name", true]},
{"tuple": [":proxy_remote", false]},
{"tuple": [":proxy_opts", [
{"tuple": [":redirect_on_failure", false]},
{"tuple": [":max_body_length", 1048576]},
{"tuple": [":http", [
{"tuple": [":follow_redirect", true]},
{"tuple": [":pool", ":upload"]},
]]}
]
]},
{"tuple": [":dispatch", {
"tuple": ["/api/v1/streaming", "Pleroma.Web.MastodonAPI.WebsocketHandler", []]
}]}
]
}
]
}
"To use this endpoint you need to enable configuration from database."
{
"configs": [
{
"group": ":pleroma",
"key": "Pleroma.Upload",
"value": [...]
}
],
"need_reboot": true
}
GET /api/pleroma/admin/config/descriptions
Loads json generated from config/descriptions.exs
.
[{
"group": ":pleroma", // string
"key": "ModuleName", // string
"type": "group", // string or list with possible values,
"description": "Upload general settings", // string
"children": [
{
"key": ":uploader", // string or module name `Pleroma.Upload`
"type": "module",
"description": "Module which will be used for uploads",
"suggestions": ["module1", "module2"]
},
{
"key": ":filters",
"type": ["list", "module"],
"description": "List of filter modules for uploads",
"suggestions": [
"module1", "module2", "module3"
]
}
]
}]
GET /api/pleroma/admin/moderation_log
page
: integer page numberpage_size
: integer number of log entries per page (default is 50
)start_date
: datetime (ISO 8601) filter logs by creation date, start from start_date
. Accepts datetime in ISO 8601 format (YYYY-MM-DDThh:mm:ss), e.g. 2005-08-09T18:31:42
end_date
: datetime (ISO 8601) filter logs by creation date, end by from end_date
. Accepts datetime in ISO 8601 format (YYYY-MM-DDThh:mm:ss), e.g. 2005-08-09T18:31:42user_id
: integer filter logs by actor's idsearch
: string search logs by the log message[
{
"id": 1234,
"data": {
"actor": {
"id": 1,
"nickname": "lain"
},
"action": "relay_follow"
},
"time": 1502812026, // timestamp
"message": "[2017-08-15 15:47:06] @nick0 followed relay: https://example.org/relay" // log message
}
]
POST /api/pleroma/admin/reload_emoji
PATCH /api/pleroma/admin/users/confirm_email
nicknames
PATCH /api/pleroma/admin/users/resend_confirmation_email
nicknames
GET /api/pleroma/admin/stats
Query Params:
instance
: string instance hostname (without protocol) to get stats forExample: https://mypleroma.org/api/pleroma/admin/stats?instance=lain.com
Response:
{
"status_visibility": {
"direct": 739,
"private": 9,
"public": 17,
"unlisted": 14
}
}
GET /api/pleroma/admin/oauth_app
Params:
name
client_id
page
page_size
trusted
Response:
{
"apps": [
{
"id": 1,
"name": "App name",
"client_id": "yHoDSiWYp5mPV6AfsaVOWjdOyt5PhWRiafi6MRd1lSk",
"client_secret": "nLmis486Vqrv2o65eM9mLQx_m_4gH-Q6PcDpGIMl6FY",
"redirect_uri": "https://example.com/oauth-callback",
"website": "https://example.com",
"trusted": true
}
],
"count": 17,
"page_size": 50
}
POST /api/pleroma/admin/oauth_app
Params:
name
redirect_uris
scopes
website
trusted
Response:
{
"id": 1,
"name": "App name",
"client_id": "yHoDSiWYp5mPV6AfsaVOWjdOyt5PhWRiafi6MRd1lSk",
"client_secret": "nLmis486Vqrv2o65eM9mLQx_m_4gH-Q6PcDpGIMl6FY",
"redirect_uri": "https://example.com/oauth-callback",
"website": "https://example.com",
"trusted": true
}
{
"redirect_uris": "can't be blank",
"name": "can't be blank"
}
PATCH /api/pleroma/admin/oauth_app/:id
Params:
name
redirect_uris
scopes
website
trusted
Response:
{
"id": 1,
"name": "App name",
"client_id": "yHoDSiWYp5mPV6AfsaVOWjdOyt5PhWRiafi6MRd1lSk",
"client_secret": "nLmis486Vqrv2o65eM9mLQx_m_4gH-Q6PcDpGIMl6FY",
"redirect_uri": "https://example.com/oauth-callback",
"website": "https://example.com",
"trusted": true
}
DELETE /api/pleroma/admin/oauth_app/:id
Params: None
Response:
204
, empty response"Invalid parameters"
when status
is missingGET /api/pleroma/admin/media_proxy_caches
Authentication: required
Params:
optional page
: integer page number
optional page_size
: integer number of log entries per page (default is 50
)
optional query
: string search term
Response:
{
"page_size": integer,
"count": integer,
"urls": [
"http://example.com/media/a688346.jpg",
"http://example.com/media/fb1f4d.jpg"
]
}
POST /api/pleroma/admin/media_proxy_caches/delete
Authentication: required
Params:
urls
(array)Response:
{ }
POST /api/pleroma/admin/media_proxy_caches/purge
Authentication: required
Params:
urls
(array)ban
(boolean)Response:
{ }
Params: None
Response:
[
{
"sender": {
"id": "someflakeid",
"username": "somenick",
...
},
"receiver": {
"id": "someflakeid",
"username": "somenick",
...
},
"id" : "1",
"unread" : 2,
"last_message" : {...}, // The last message in that chat
"updated_at": "2020-04-21T15:11:46.000Z"
}
]
Params: None
Response:
{
"sender": {
"id": "someflakeid",
"username": "somenick",
...
},
"receiver": {
"id": "someflakeid",
"username": "somenick",
...
},
"id" : "1",
"unread" : 2,
"last_message" : {...}, // The last message in that chat
"updated_at": "2020-04-21T15:11:46.000Z"
}
Params: max_id
, min_id
Response:
[
{
"account_id": "someflakeid",
"chat_id": "1",
"content": "Check this out :firefox:",
"created_at": "2020-04-21T15:11:46.000Z",
"emojis": [
{
"shortcode": "firefox",
"static_url": "https://dontbulling.me/emoji/Firefox.gif",
"url": "https://dontbulling.me/emoji/Firefox.gif",
"visible_in_picker": false
}
],
"id": "13",
"unread": true
},
{
"account_id": "someflakeid",
"chat_id": "1",
"content": "Whats' up?",
"created_at": "2020-04-21T15:06:45.000Z",
"emojis": [],
"id": "12",
"unread": false
}
]
Params: None
Response:
{
"account_id": "someflakeid",
"chat_id": "1",
"content": "Check this out :firefox:",
"created_at": "2020-04-21T15:11:46.000Z",
"emojis": [
{
"shortcode": "firefox",
"static_url": "https://dontbulling.me/emoji/Firefox.gif",
"url": "https://dontbulling.me/emoji/Firefox.gif",
"visible_in_picker": false
}
],
"id": "13",
"unread": false
}
GET /api/pleroma/admin/instance_document/:document_name
Authentication: required
Response:
Returns the content of the document
<h1>Instance panel</h1>
PATCH /api/pleroma/admin/instance_document/:document_name
file
(the file to be uploaded, using multipart form data.)Authentication: required
Response:
{
"url": "https://example.com/instance/panel.html"
}
DELETE /api/pleroma/admin/instance_document/:document_name
{
"url": "https://example.com/instance/panel.html"
}
[
{
"build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
"git": "https://git.pleroma.social/pleroma/fedi-fe",
"installed": true,
"name": "fedi-fe",
"ref": "master"
},
{
"build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build",
"git": "https://git.pleroma.social/lambadalambda/kenoma",
"installed": false,
"name": "kenoma",
"ref": "master"
}
]
POST /api/pleroma/admin/frontends/install
Params:
name
: frontend name, requiredref
: frontend reffile
: path to a frontend zip filebuild_url
: build URLbuild_dir
: build directoryResponse:
[
{
"build_url": "https://git.pleroma.social/pleroma/fedi-fe/-/jobs/artifacts/${ref}/download?job=build",
"git": "https://git.pleroma.social/pleroma/fedi-fe",
"installed": true,
"name": "fedi-fe",
"ref": "master"
},
{
"build_url": "https://git.pleroma.social/lambadalambda/kenoma/-/jobs/artifacts/${ref}/download?job=build",
"git": "https://git.pleroma.social/lambadalambda/kenoma",
"installed": false,
"name": "kenoma",
"ref": "master"
}
]
{
"error": "Could not install frontend"
}