API compatibility
Compatibility status of all 438 endpoints of upstream Misskey (the pinned version).
Statuses
| Status | Meaning |
|---|---|
| Compatible | Same parameters, errors, responses, and behavior as upstream |
| Differs | Implemented. Part of the behavior differs, for example because of Cloudflare constraints |
| Approximate | Implemented. Parts that depend on Redis or BullMQ are approximated |
| Not implemented | Not implemented (returns 501) |
Categories
| Category | Policy |
|---|---|
| User-facing | Strictly compatible with upstream. Behavior in third-party clients is guaranteed |
| Admin-facing | Used only by the admin UI and moderators. Optimization and changes are allowed |
Endpoints whose names start with admin/, that require admin or moderator rights upstream, or that require an admin token permission are admin-facing.
Totals
| Category | Count | Compatible | Differs | Approximate | Not implemented |
|---|---|---|---|---|---|
| User-facing | 334 | 285 | 25 | 24 | - |
| Admin-facing | 104 | 86 | 3 | 15 | - |
| Total | 438 | 371 | 28 | 39 | - |
By group (user-facing)
| Group | Count | Compatible | Differs | Approximate | Not implemented |
|---|---|---|---|---|---|
announcements | 2 | 2 | - | - | - |
antennas | 7 | 6 | - | 1 | - |
ap | 1 | 1 | - | - | - |
app | 2 | 2 | - | - | - |
auth | 4 | 4 | - | - | - |
blocking | 3 | 3 | - | - | - |
bubble-game | 2 | 2 | - | - | - |
channels | 16 | 15 | - | 1 | - |
charts | 12 | - | - | 12 | - |
clips | 11 | 11 | - | - | - |
drive | 20 | 18 | 2 | - | - |
email-address | 1 | 1 | - | - | - |
emoji | 1 | 1 | - | - | - |
emojis | 1 | 1 | - | - | - |
endpoint | 1 | 1 | - | - | - |
endpoints | 1 | 1 | - | - | - |
export-custom-emojis | 1 | 1 | - | - | - |
federation | 7 | 6 | 1 | - | - |
fetch-external-resources | 1 | 1 | - | - | - |
fetch-rss | 1 | - | 1 | - | - |
flash | 10 | 10 | - | - | - |
following | 11 | 11 | - | - | - |
gallery | 9 | 8 | - | 1 | - |
get-avatar-decorations | 1 | 1 | - | - | - |
get-online-users-count | 1 | 1 | - | - | - |
hashtags | 5 | 4 | - | 1 | - |
i | 57 | 46 | 11 | - | - |
invite | 4 | 4 | - | - | - |
meta | 1 | 1 | - | - | - |
miauth | 1 | 1 | - | - | - |
mute | 3 | 3 | - | - | - |
my | 1 | 1 | - | - | - |
notes | 36 | 26 | 5 | 5 | - |
notifications | 4 | 4 | - | - | - |
page-push | 1 | 1 | - | - | - |
pages | 7 | 7 | - | - | - |
ping | 1 | 1 | - | - | - |
pinned-users | 1 | 1 | - | - | - |
promo | 1 | 1 | - | - | - |
renote-mute | 3 | 3 | - | - | - |
request-reset-password | 1 | - | 1 | - | - |
reset-db | 1 | 1 | - | - | - |
reset-password | 1 | 1 | - | - | - |
retention | 1 | 1 | - | - | - |
reversi | 7 | 7 | - | - | - |
roles | 4 | 4 | - | - | - |
server-info | 1 | - | 1 | - | - |
stats | 1 | - | - | 1 | - |
sw | 4 | 4 | - | - | - |
test | 1 | 1 | - | - | - |
username | 1 | 1 | - | - | - |
users | 32 | 30 | - | 2 | - |
verify-email | 1 | 1 | - | - | - |
chat | 25 | 22 | 3 | - | - |
By group (admin-facing)
| Group | Count | Compatible | Differs | Approximate | Not implemented |
|---|---|---|---|---|---|
admin | 102 | 84 | 3 | 15 | - |
ap | 1 | 1 | - | - | - |
v2 | 1 | 1 | - | - | - |
Endpoints that are not compatible
Everything above that is not "Compatible". Special routes outside endpoint-list (/api/signup and others) are included.
User-facing
| Endpoint | Status | Difference |
|---|---|---|
antennas/notes | Approximate | Stored in a Durable Object instead of Redis |
channels/timelinenotes/hybrid-timelinenotes/local-timelinenotes/timelinenotes/user-list-timelineusers/notes | Approximate | PostgreSQL returns the same results instead of Redis. The length cap is not reproduced |
charts/active-userscharts/ap-requestcharts/drivecharts/federationcharts/instancecharts/notescharts/user/drivecharts/user/followingcharts/user/notescharts/user/pvcharts/user/reactionscharts/users | Approximate | Computed from the source tables on request. Decrements and event-based series are 0 |
drive/files/createdrive/files/upload-from-url | Differs | 100 MB limit. No automatic sensitive-media detection |
federation/instances | Differs | Stats on existing deployments need recomputing |
fetch-rss | Differs | The concurrency limit is per isolate |
gallery/featuredhashtags/trendnotes/featuredusers/featured-notes | Approximate | Ranking aggregated in PostgreSQL (approximate) |
i/delete-accounti/update-emailrequest-reset-password | Differs | Sent through Cloudflare Email Service |
i/export-antennasi/export-blockingi/export-clipsi/export-favoritesi/export-followingi/export-mutei/export-notesi/export-user-lists | Differs | Built in one job. Extremely large accounts depend on Worker limits |
i/move | Differs | Split into step jobs. The target is checked by exact match |
notes/create | Differs | Charts are not updated |
notes/drafts/createnotes/drafts/update | Differs | Scheduled posting runs on a Durable Object alarm. Unscheduled on failure |
notes/reactions/createnotes/reactions/delete | Differs | No reaction buffering |
server-info | Differs | Machine information is fixed |
stats | Approximate | Counts are current row counts |
chat/messages/create-to-userchat/messages/create-to-roomchat/history | Differs | Read state is tracked in a PostgreSQL column |
/api/signup/api/signup-pending | Differs | Refused before the initial setup |
Admin-facing
| Endpoint | Status | Difference |
|---|---|---|
admin/accounts/create | Differs | SETUP_PASSWORD is required for the initial setup |
admin/emoji/import-zip | Differs | The import is split into several jobs |
admin/queue/clearadmin/queue/deliver-delayedadmin/queue/inbox-delayedadmin/queue/retry-jobadmin/queue/remove-jobadmin/queue/show-jobadmin/queue/show-job-logsadmin/queue/promote-jobsadmin/queue/pauseadmin/queue/resumeadmin/queue/jobsadmin/queue/statsadmin/queue/queuesadmin/queue/queue-stats | Approximate | Only failed and delayed jobs are listed (Queues cannot be listed) |
admin/send-email | Differs | Sent through Cloudflare Email Service |
admin/server-info | Approximate | Machine information is fixed |