pleroma_api.md 20.8 KB
Newer Older
1
# Pleroma API
2
3
4
5
6
7
8
9
10
11
12

Requests that require it can be authenticated with [an OAuth token](https://tools.ietf.org/html/rfc6749), the `_pleroma_key` cookie, or [HTTP Basic Authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization).

Request parameters can be passed via [query strings](https://en.wikipedia.org/wiki/Query_string) or as [form data](https://www.w3.org/TR/html401/interact/forms.html). Files must be uploaded as `multipart/form-data`.

## `/api/pleroma/emoji`
### Lists the custom emoji on that server.
* Method: `GET`
* Authentication: not required
* Params: none
* Response: JSON
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
* Example response:
```json
{
  "girlpower": {
    "tags": [
      "Finmoji"
    ],
    "image_url": "/finmoji/128px/girlpower-128.png"
  },
  "education": {
    "tags": [
      "Finmoji"
    ],
    "image_url": "/finmoji/128px/education-128.png"
  },
  "finnishlove": {
    "tags": [
      "Finmoji"
    ],
    "image_url": "/finmoji/128px/finnishlove-128.png"
  }
}
```
36
* Note: Same data as Mastodon API’s `/api/v1/custom_emojis` but in a different format
37
38
39
40
41
42
43

## `/api/pleroma/follow_import`
### Imports your follows, for example from a Mastodon CSV file.
* Method: `POST`
* Authentication: required
* Params:
    * `list`: STRING or FILE containing a whitespace-separated list of accounts to follow
44
45
46
* Response: HTTP 200 on success, 500 on error
* Note: Users that can't be followed are silently skipped.

Maksim's avatar
Maksim committed
47
48
49
50
51
## `/api/pleroma/blocks_import`
### Imports your blocks.
* Method: `POST`
* Authentication: required
* Params:
Maksim's avatar
Maksim committed
52
    * `list`: STRING or FILE containing a whitespace-separated list of accounts to block
Maksim's avatar
Maksim committed
53
54
55
56
57
58
59
* Response: HTTP 200 on success, 500 on error

## `/api/pleroma/mutes_import`
### Imports your mutes.
* Method: `POST`
* Authentication: required
* Params:
Maksim's avatar
Maksim committed
60
    * `list`: STRING or FILE containing a whitespace-separated list of accounts to mute
Maksim's avatar
Maksim committed
61
62
* Response: HTTP 200 on success, 500 on error

63
64
65
66
67
## `/api/pleroma/captcha`
### Get a new captcha
* Method: `GET`
* Authentication: not required
* Params: none
68
* Response: Provider specific JSON, the only guaranteed parameter is `type`
feld's avatar
feld committed
69
* Example response: `{"type": "kocaptcha", "token": "whatever", "url": "https://captcha.kotobank.ch/endpoint", "seconds_valid": 300}`
70
71
72
73
74

## `/api/pleroma/delete_account`
### Delete an account
* Method `POST`
* Authentication: required
75
* Params:
76
77
78
79
    * `password`: user's password
* Response: JSON. Returns `{"status": "success"}` if the deletion was successful, `{"error": "[error message]"}` otherwise
* Example response: `{"error": "Invalid password."}`

80
81
82
83
84
85
86
87
88
## `/api/pleroma/disable_account`
### Disable an account
* Method `POST`
* Authentication: required
* Params:
    * `password`: user's password
* Response: JSON. Returns `{"status": "success"}` if the account was successfully disabled, `{"error": "[error message]"}` otherwise
* Example response: `{"error": "Invalid password."}`

89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
## `/api/pleroma/accounts/mfa`
#### Gets current MFA settings
* method: `GET`
* Authentication: required
* OAuth scope: `read:security`
* Response: JSON. Returns `{"enabled": "false", "totp": false }`

## `/api/pleroma/accounts/mfa/setup/totp`
#### Pre-setup the MFA/TOTP method
* method: `GET`
* Authentication: required
* OAuth scope: `write:security`
* Response: JSON. Returns `{"key": [secret_key], "provisioning_uri": "[qr code uri]"  }` when successful, otherwise returns HTTP 422 `{"error": "error_msg"}`

## `/api/pleroma/accounts/mfa/confirm/totp`
#### Confirms & enables MFA/TOTP support for user account.
* method: `POST`
* Authentication: required
* OAuth scope: `write:security`
* Params:
    * `password`: user's password
    * `code`: token from TOTP App
* Response: JSON. Returns `{}` if the enable was successful, HTTP 422 `{"error": "[error message]"}` otherwise


## `/api/pleroma/accounts/mfa/totp`
####  Disables MFA/TOTP method for user account.
* method: `DELETE`
* Authentication: required
* OAuth scope: `write:security`
* Params:
    * `password`: user's password
* Response: JSON. Returns `{}` if the disable was successful, HTTP 422 `{"error": "[error message]"}` otherwise
* Example response: `{"error": "Invalid password."}`

## `/api/pleroma/accounts/mfa/backup_codes`
####  Generstes backup codes MFA for user account.
* method: `GET`
* Authentication: required
* OAuth scope: `write:security`
* Response: JSON. Returns `{"codes": codes}`when successful, otherwise HTTP 422 `{"error": "[error message]"}`

## `/api/pleroma/admin/`
rinpatch's avatar
rinpatch committed
132
See [Admin-API](admin_api.md)
133

134
## `/api/v1/pleroma/notifications/read`
135
### Mark notifications as read
136
137
* Method `POST`
* Authentication: required
138
139
140
* Params (mutually exclusive):
    * `id`: a single notification id to read
    * `max_id`: read all notifications up to this id
141
* Response: Notification entity/Array of Notification entities that were read. In case of `max_id`, only the first 80 read notifications will be returned.
142
143
144
145
146
147
148
149
150
151
152

## `/api/v1/pleroma/accounts/:id/subscribe`
### Subscribe to receive notifications for all statuses posted by a user
* Method `POST`
* Authentication: required
* Params:
    * `id`: account id to subscribe to
* Response: JSON, returns a mastodon relationship object on success, otherwise returns `{"error": "error_msg"}`
* Example response:
```json
{
Sadposter's avatar
Sadposter committed
153
154
155
156
157
158
159
160
161
162
163
  "id": "abcdefg",
  "following": true,
  "followed_by": false,
  "blocking": false,
  "muting": false,
  "muting_notifications": false,
  "subscribing": true,
  "requested": false,
  "domain_blocking": false,
  "showing_reblogs": true,
  "endorsed": false
164
165
166
167
168
169
170
171
172
173
174
175
176
}
```

## `/api/v1/pleroma/accounts/:id/unsubscribe`
### Unsubscribe to stop receiving notifications from user statuses
* Method `POST`
* Authentication: required
* Params:
    * `id`: account id to unsubscribe from
* Response: JSON, returns a mastodon relationship object on success, otherwise returns `{"error": "error_msg"}`
* Example response:
```json
{
Sadposter's avatar
Sadposter committed
177
178
179
180
181
182
183
184
185
186
187
  "id": "abcdefg",
  "following": true,
  "followed_by": false,
  "blocking": false,
  "muting": false,
  "muting_notifications": false,
  "subscribing": false,
  "requested": false,
  "domain_blocking": false,
  "showing_reblogs": true,
  "endorsed": false
188
189
}
```
190

191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
## `/api/v1/pleroma/accounts/:id/favourites`
### Returns favorites timeline of any user
* Method `GET`
* Authentication: not required
* Params:
    * `id`: the id of the account for whom to return results
    * `limit`: optional, the number of records to retrieve
    * `since_id`: optional, returns results that are more recent than the specified id
    * `max_id`: optional, returns results that are older than the specified id
* Response: JSON, returns a list of Mastodon Status entities on success, otherwise returns `{"error": "error_msg"}`
* Example response:
```json
[
  {
    "account": {
      "id": "9hptFmUF3ztxYh3Svg",
      "url": "https://pleroma.example.org/users/nick2",
      "username": "nick2",
      ...
    },
    "application": {"name": "Web", "website": null},
    "bookmarked": false,
    "card": null,
    "content": "This is :moominmamma: note 0",
    "created_at": "2019-04-15T15:42:15.000Z",
    "emojis": [],
    "favourited": false,
    "favourites_count": 1,
    "id": "9hptFmVJ02khbzYJaS",
    "in_reply_to_account_id": null,
    "in_reply_to_id": null,
    "language": null,
    "media_attachments": [],
    "mentions": [],
    "muted": false,
    "pinned": false,
    "pleroma": {
      "content": {"text/plain": "This is :moominmamma: note 0"},
      "conversation_id": 13679,
      "local": true,
      "spoiler_text": {"text/plain": "2hu"}
    },
    "reblog": null,
    "reblogged": false,
    "reblogs_count": 0,
    "replies_count": 0,
    "sensitive": false,
    "spoiler_text": "2hu",
    "tags": [{"name": "2hu", "url": "/tag/2hu"}],
    "uri": "https://pleroma.example.org/objects/198ed2a1-7912-4482-b559-244a0369e984",
    "url": "https://pleroma.example.org/notice/9hptFmVJ02khbzYJaS",
    "visibility": "public"
  }
]
```

247
248
249
250
251
252
253
## `/api/v1/pleroma/accounts/update_*`
### Set and clear account avatar, banner, and background

- PATCH `/api/v1/pleroma/accounts/update_avatar`: Set/clear user avatar image
- PATCH `/api/v1/pleroma/accounts/update_banner`: Set/clear user banner image
- PATCH `/api/v1/pleroma/accounts/update_background`: Set/clear user background image

254
255
256
257
258
259
## `/api/v1/pleroma/accounts/confirmation_resend`
### Resend confirmation email
* Method `POST`
* Params:
    * `email`: email of that needs to be verified
* Authentication: not required
minibikini's avatar
minibikini committed
260
* Response: 204 No Content
261

262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
## `/api/v1/pleroma/mascot`
### Gets user mascot image
* Method `GET`
* Authentication: required

* Response: JSON. Returns a mastodon media attachment entity.
* Example response:
```json
{
    "id": "abcdefg",
    "url": "https://pleroma.example.org/media/abcdefg.png",
    "type": "image",
    "pleroma": {
        "mime_type": "image/png"
    }
}
```

### Updates user mascot image
* Method `PUT`
* Authentication: required
* Params:
minibikini's avatar
minibikini committed
284
    * `file`: Multipart image
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
* Response: JSON. Returns a mastodon media attachment entity
  when successful, otherwise returns HTTP 415 `{"error": "error_msg"}`
* Example response:
```json
{
    "id": "abcdefg",
    "url": "https://pleroma.example.org/media/abcdefg.png",
    "type": "image",
    "pleroma": {
        "mime_type": "image/png"
    }
}
```
* Note: Behaves exactly the same as `POST /api/v1/upload`.
  Can only accept images - any attempt to upload non-image files will be met with `HTTP 415 Unsupported Media Type`.

301
302
303
304
305
## `/api/pleroma/notification_settings`
### Updates user notification settings
* Method `PUT`
* Authentication: required
* Params:
306
    * `block_from_strangers`: BOOLEAN field, blocks notifications from accounts you do not follow
307
    * `hide_notification_contents`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification.
308
* Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}`
309
310
311
312
313
314
315
316
317
318
319
320
321
322

## `/api/pleroma/healthcheck`
### Healthcheck endpoint with additional system data.
* Method `GET`
* Authentication: not required
* Params: none
* Response: JSON, statuses (200 - healthy, 503 unhealthy).
* Example response:
```json
{
  "pool_size": 0, # database connection pool
  "active": 0, # active processes
  "idle": 0, # idle processes
  "memory_used": 0.00, # Memory used
323
324
  "healthy": true, # Instance state
  "job_queue_stats": {} # Job queue stats
325
326
}
```
327

minibikini's avatar
minibikini committed
328
329
330
331
332
333
334
335
## `/api/pleroma/change_email`
### Change account email
* Method `POST`
* Authentication: required
* Params:
    * `password`: user's password
    * `email`: new email
* Response: JSON. Returns `{"status": "success"}` if the change was successful, `{"error": "[error message]"}` otherwise
336
* Note: Currently, Mastodon has no API for changing email. If they add it in future it might be incompatible with Pleroma.
minibikini's avatar
minibikini committed
337

338
339
340
341
# Pleroma Conversations

Pleroma Conversations have the same general structure that Mastodon Conversations have. The behavior differs in the following ways when using these endpoints:

342
1. Pleroma Conversations never add or remove recipients, unless explicitly changed by the user.
343
344
345
2. Pleroma Conversations statuses can be requested by Conversation id.
3. Pleroma Conversations can be replied to.

346
Conversations have the additional field `recipients` under the `pleroma` key. This holds a list of all the accounts that will receive a message in this conversation.
347
348
349

The status posting endpoint takes an additional parameter, `in_reply_to_conversation_id`, which, when set, will set the visiblity to direct and address only the people who are the recipients of that Conversation.

350
⚠ Conversation IDs can be found in direct messages with the `pleroma.direct_conversation_id` key, do not confuse it with `pleroma.conversation_id`.
351
352
353
354
355
356
357
358

## `GET /api/v1/pleroma/conversations/:id/statuses`
### Timeline for a given conversation
* Method `GET`
* Authentication: required
* Params: Like other timelines
* Response: JSON, statuses (200 - healthy, 503 unhealthy).

359
360
361
362
363
364
## `GET /api/v1/pleroma/conversations/:id`
### The conversation with the given ID.
* Method `GET`
* Authentication: required
* Params: None
* Response: JSON, statuses (200 - healthy, 503 unhealthy).
365
366
367
368
369
370

## `PATCH /api/v1/pleroma/conversations/:id`
### Update a conversation. Used to change the set of recipients.
* Method `PATCH`
* Authentication: required
* Params:
371
    * `recipients`: A list of ids of users that should receive posts to this conversation. This will replace the current list of recipients, so submit the full list. The owner of owner of the conversation will always be part of the set of recipients, though.
372
* Response: JSON, statuses (200 - healthy, 503 unhealthy)
373

374
## `POST /api/v1/pleroma/conversations/read`
375
376
377
378
379
380
### Marks all user's conversations as read.
* Method `POST`
* Authentication: required
* Params: None
* Response: JSON, returns a list of Mastodon Conversation entities that were marked as read (200 - healthy, 503 unhealthy).

Alexander Strizhakov's avatar
Alexander Strizhakov committed
381
## `GET /api/pleroma/emoji/pack?name=:name`
382

Alexander Strizhakov's avatar
Alexander Strizhakov committed
383
### Get pack.json for the pack
384

Alexander Strizhakov's avatar
Alexander Strizhakov committed
385
* Method `GET`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
386
* Authentication: not required
387
* Params:
Alexander Strizhakov's avatar
Alexander Strizhakov committed
388
389
390
  * `page`: page number for files (default 1)
  * `page_size`: page size for files (default 30)
* Response: JSON, pack json with `files`, `files_count` and `pack` keys with 200 status or 404 if the pack does not exist.
391

Alexander Strizhakov's avatar
Alexander Strizhakov committed
392
393
394
395
396
397
398
```json
{
  "files": {...},
  "files_count": 0, // emoji count in pack
  "pack": {...}
}
```
399

Alexander Strizhakov's avatar
Alexander Strizhakov committed
400
## `POST /api/pleroma/emoji/pack?name=:name`
401

402
### Creates an empty pack
403

404
* Method `POST`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
405
* Authentication: required (admin)
406
407
* Params:
  * `name`: pack name
408
409
* Response: JSON, "ok" and 200 status or 409 if the pack with that name already exists

Alexander Strizhakov's avatar
Alexander Strizhakov committed
410
## `PATCH /api/pleroma/emoji/pack?name=:name`
411

412
### Updates (replaces) pack metadata
413

Alexander Strizhakov's avatar
Alexander Strizhakov committed
414
* Method `PATCH`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
415
* Authentication: required (admin)
416
* Params:
417
  * `name`: pack name
418
  * `metadata`: metadata to replace the old one
419
420
421
422
423
424
    * `license`: Pack license
    * `homepage`: Pack home page url
    * `description`: Pack description
    * `fallback-src`: Fallback url to download pack from
    * `fallback-src-sha256`: SHA256 encoded for fallback pack archive
    * `share-files`: is pack allowed for sharing (boolean)
425
426
427
* Response: JSON, updated "metadata" section of the pack and 200 status or 400 if there was a
  problem with the new metadata (the error is specified in the "error" part of the response JSON)

Alexander Strizhakov's avatar
Alexander Strizhakov committed
428
## `DELETE /api/pleroma/emoji/pack?name=:name`
429

430
### Delete a custom emoji pack
431

432
* Method `DELETE`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
433
* Authentication: required (admin)
434
435
* Params:
  * `name`: pack name
436
437
* Response: JSON, "ok" and 200 status or 500 if there was an error deleting the pack

Alexander Strizhakov's avatar
Alexander Strizhakov committed
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
## `GET /api/pleroma/emoji/packs/import`

### Imports packs from filesystem

* Method `GET`
* Authentication: required (admin)
* Params: None
* Response: JSON, returns a list of imported packs.

## `GET /api/pleroma/emoji/packs/remote`

### Make request to another instance for packs list

* Method `GET`
* Authentication: required (admin)
* Params:
  * `url`: url of the instance to get packs from
Alexander Strizhakov's avatar
Alexander Strizhakov committed
455
456
  * `page`: page number for packs (default 1)
  * `page_size`: page size for packs (default 50)
Alexander Strizhakov's avatar
Alexander Strizhakov committed
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
* Response: JSON with the pack list, hashmap with pack name and pack contents

## `POST /api/pleroma/emoji/packs/download`

### Download pack from another instance

* Method `POST`
* Authentication: required (admin)
* Params:
  * `url`: url of the instance to download from
  * `name`: pack to download from that instance
  * `as`: (*optional*) name how to save pack
* Response: JSON, "ok" with 200 status if the pack was downloaded, or 500 if there were
  errors downloading the pack

472
473
## `POST /api/pleroma/emoji/packs/files?name=:name`

474
### Add new file to the pack
475

476
* Method `POST`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
477
* Authentication: required (admin)
478
* Params:
479
  * `name`: pack name
Alexander Strizhakov's avatar
Alexander Strizhakov committed
480
  * `file`: file needs to be uploaded with the multipart request or link to remote file.
minibikini's avatar
minibikini committed
481
  * `shortcode`: (*optional*) shortcode for new emoji, must be unique for all emoji. If not sended, shortcode will be taken from original filename.
482
  * `filename`: (*optional*) new emoji file name. If not specified will be taken from original filename.
Alexander Strizhakov's avatar
Alexander Strizhakov committed
483
* Response: JSON, list of files for updated pack (hashmap -> shortcode => filename) with status 200, either error status with error message.
484

485
486
## `PATCH /api/pleroma/emoji/packs/files?name=:name`

487
### Update emoji file from pack
488

489
* Method `PATCH`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
490
* Authentication: required (admin)
491
* Params:
492
  * `name`: pack name
493
494
495
496
  * `shortcode`: emoji file shortcode
  * `new_shortcode`: new emoji file shortcode
  * `new_filename`: new filename for emoji file
  * `force`: (*optional*) with true value to overwrite existing emoji with new shortcode
Alexander Strizhakov's avatar
Alexander Strizhakov committed
497
* Response: JSON, list with updated files for updated pack (hashmap -> shortcode => filename) with status 200, either error status with error message.
498

499
500
## `DELETE /api/pleroma/emoji/packs/files?name=:name`

501
### Delete emoji file from pack
502

503
* Method `DELETE`
Alexander Strizhakov's avatar
Alexander Strizhakov committed
504
* Authentication: required (admin)
505
* Params:
506
  * `name`: pack name
507
  * `shortcode`: emoji file shortcode
Alexander Strizhakov's avatar
Alexander Strizhakov committed
508
* Response: JSON, list with updated files for updated pack (hashmap -> shortcode => filename) with status 200, either error status with error message.
509
510

## `GET /api/pleroma/emoji/packs`
511

512
### Lists local custom emoji packs
513

514
515
* Method `GET`
* Authentication: not required
516
517
518
* Params:
  * `page`: page number for packs (default 1)
  * `page_size`: page size for packs (default 50)
519
520
521
522
523
524
525
526
527
528
529
* Response: `packs` key with JSON hashmap of pack name to pack contents and `count` key for count of packs.

```json
{
  "packs": {
    "pack_name": {...}, // pack contents
    ...
  },
  "count": 0 // packs count
}
```
530

531
532
## `GET /api/pleroma/emoji/packs/archive?name=:name`

Alexander Strizhakov's avatar
Alexander Strizhakov committed
533
### Requests a local pack archive from the instance
534

535
* Method `GET`
536
* Authentication: not required
537
538
* Params:
  * `name`: pack name
539
540
* Response: the archive of the pack with a 200 status code, 403 if the pack is not set as shared,
  404 if the pack does not exist
kaniini's avatar
kaniini committed
541

542
## `GET /api/v1/pleroma/accounts/:id/scrobbles`
kaniini's avatar
kaniini committed
543
544
545
546
547
548
549
550
551
### Requests a list of current and recent Listen activities for an account
* Method `GET`
* Authentication: not required
* Params: None
* Response: An array of media metadata entities.
* Example response:
```json
[
   {
552
       "account": {...},
kaniini's avatar
kaniini committed
553
554
555
556
       "id": "1234",
       "title": "Some Title",
       "artist": "Some Artist",
       "album": "Some Album",
557
558
       "length": 180000,
       "created_at": "2019-09-28T12:40:45.000Z"
kaniini's avatar
kaniini committed
559
560
561
562
   }
]
```

kaniini's avatar
kaniini committed
563
## `POST /api/v1/pleroma/scrobble`
kaniini's avatar
kaniini committed
564
565
566
567
568
569
570
571
572
### Creates a new Listen activity for an account
* Method `POST`
* Authentication: required
* Params:
  * `title`: the title of the media playing
  * `album`: the album of the media playing [optional]
  * `artist`: the artist of the media playing [optional]
  * `length`: the length of the media playing [optional]
* Response: the newly created media metadata entity representing the Listen activity
573

574
575
# Emoji Reactions

Alexander Strizhakov's avatar
Alexander Strizhakov committed
576
Emoji reactions work a lot like favourites do. They make it possible to react to a post with a single emoji character. To detect the presence of this feature, you can check `pleroma_emoji_reactions` entry in the features list of nodeinfo.
577

lain's avatar
lain committed
578
## `PUT /api/v1/pleroma/statuses/:id/reactions/:emoji`
579
### React to a post with a unicode emoji
580
* Method: `PUT`
581
582
583
584
* Authentication: required
* Params: `emoji`: A single character unicode emoji
* Response: JSON, the status.

lain's avatar
lain committed
585
## `DELETE /api/v1/pleroma/statuses/:id/reactions/:emoji`
586
### Remove a reaction to a post with a unicode emoji
587
* Method: `DELETE`
588
589
590
591
* Authentication: required
* Params: `emoji`: A single character unicode emoji
* Response: JSON, the status.

lain's avatar
lain committed
592
## `GET /api/v1/pleroma/statuses/:id/reactions`
593
594
595
596
### Get an object of emoji to account mappings with accounts that reacted to the post
* Method: `GET`
* Authentication: optional
* Params: None
lain's avatar
lain committed
597
* Response: JSON, a list of emoji/account list tuples, sorted by emoji insertion date, in ascending order, e.g, the first emoji in the list is the oldest.
598
599
* Example Response:
```json
lain's avatar
lain committed
600
[
lain's avatar
lain committed
601
602
  {"name": "😀", "count": 2, "me": true, "accounts": [{"id" => "xyz.."...}, {"id" => "zyx..."}]},
  {"name": "☕", "count": 1, "me": false, "accounts": [{"id" => "abc..."}]}
lain's avatar
lain committed
603
]
604
```
lain's avatar
lain committed
605
606

## `GET /api/v1/pleroma/statuses/:id/reactions/:emoji`
607
### Get an object of emoji to account mappings with accounts that reacted to the post for a specific emoji
lain's avatar
lain committed
608
609
610
611
612
613
614
615
616
617
* Method: `GET`
* Authentication: optional
* Params: None
* Response: JSON, a list of emoji/account list tuples
* Example Response:
```json
[
  {"name": "😀", "count": 2, "me": true, "accounts": [{"id" => "xyz.."...}, {"id" => "zyx..."}]}
]
```
618

619
## `POST /api/v1/pleroma/backups`
620
621
622
### Create a user backup archive

* Method: `POST`
minibikini's avatar
minibikini committed
623
* Authentication: required
624
625
626
627
628
629
630
631
632
633
634
635
636
637
* Params: none
* Response: JSON
* Example response:

```json
[{
    "content_type": "application/zip",
    "file_size": 0,
    "inserted_at": "2020-09-10T16:18:03.000Z",
    "processed": false,
    "url": "https://example.com/media/backups/archive-foobar-20200910T161803-QUhx6VYDRQ2wfV0SdA2Pfj_2CLM_ATUlw-D5l5TJf4Q.zip"
}]
```

638
## `GET /api/v1/pleroma/backups`
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
### Lists user backups

* Method: `GET`
* Authentication: not required
* Params: none
* Response: JSON
* Example response:

```json
[{
    "content_type": "application/zip",
    "file_size": 55457,
    "inserted_at": "2020-09-10T16:18:03.000Z",
    "processed": true,
    "url": "https://example.com/media/backups/archive-foobar-20200910T161803-QUhx6VYDRQ2wfV0SdA2Pfj_2CLM_ATUlw-D5l5TJf4Q.zip"
}]
```