API v1

RexiMemo API Documentation

Use your RexiMemo account from scripts and apps without exposing browser sessions.

Quick start

All API v1 requests require a current 30-day personal API key. Send it in the HTTP Authorization header. Do not put API keys in query strings or public client-side code.

Base URLhttps://reximemo.net/api/v1

Authentication example

curl -H 'Authorization: Bearer rxm_YOUR_KEY' \
  https://reximemo.net/api/v1/me

Keys are shown in full only when generated. RexiMemo stores a hash rather than the complete key. Generating a replacement key revokes the previous key.

Access rules
Allowed
  • Browse creators, Flipnotes, comments, channels and search.
  • Read your account, favorites, follows, notifications and consoles.
  • Download original Flipnote PPMs and existing memo-comment PPMs.
  • Request real PNG thumbnails and creator profile-picture PNGs.
  • Review and submit your own verified S2R migration requests.
  • Favorite, follow, add stars and post text comments.
  • Edit/delete your own Flipnote metadata and edit channels you own.
Blocked
  • Reading browser or DSi session records.
  • Changing Settings or console configuration.
  • Using moderator/administrator powers.
  • Publishing/uploading standalone PPMs as RexiMemo Flipnotes.
  • Uploading memo-comment PPMs.
API keys act as the account that generated them. Treat a key like a password and revoke it from Settings if it is exposed.
API use is governed by the Terms of Use. Personal, educational, community, open-source and commercial clients are allowed when they follow those Terms. Do not resell raw RexiMemo API access or handle users' keys as a product, and do not rely on a specific endpoint or API version remaining compatible forever.
Account endpoints
GET/api/v1API capabilities

Returns the authenticated account, API permissions, key lifetime, and only the experiment endpoints this account is currently allowed to use.

Example response

{
  "ok": true,
  "version": "v1",
  "permissions": {
    "browse": true,
    "read_sessions": false,
    "write_settings": false,
    "download_flipnote_ppm": true,
    "upload_flipnote_ppm": false
  }
}
GET/api/v1/meMy account

Returns your public account record plus star balances, unread notification count, and ticket status.

GET/api/v1/me/profile-picture.pngMy profile picture PNG

Returns your current profile picture as binary image/png. If your account has no selected profile picture, this returns HTTP 404.

GET/api/v1/me/migrationMigration state and review data

Returns your current Sudomemo migration request, selected/approved/imported IDs, status and user-facing staff message. When the stored S2R files are available, it also includes the full per-Flipnote review data and private preview URLs.

POST/api/v1/me/migration/reviewValidate S2R files and build a review

Uploads one or more verified .S2R files without creating the final migration request yet. RexiMemo verifies the manifests and Nintendo PPM signatures, stores the files privately for this account, and returns a review.descriptor plus per-Flipnote eligibility.

Multipart form

multipart/form-data

file field (repeatable):
  s2r_file

optional text fields:
  source_account
  user_notes
This is the one upload exception to the normal no-PPM-upload API rule: the API accepts only the signed PPMs inside a validated Sudo2RexiMemo .S2R migration archive. Direct PPM publication uploads remain blocked.
POST/api/v1/me/migrationSubmit an actual migration request

Submits the migration selection and then runs the same final eligibility/import checks as the website. You can either upload the S2R files directly as multipart data or submit JSON using the review.descriptor returned by the review endpoint.

JSON body

{
  "review_descriptor": [
    {"filename":"95FD4F3065E2146D@DSi.S2R","sha256":"..."}
  ],
  "source_account": "Sudomemo username or profile URL",
  "user_notes": "optional",
  "selected_flipnotes": ["WATCH_ID_1", "WATCH_ID_2"],
  "avatar_flipnote": "WATCH_ID_1",
  "confirm_no_stars": true
}
For a one-request multipart submission, send the same s2r_file field(s), plus source_account, user_notes, selected_flipnotes as a JSON array string, optional avatar_flipnote, and confirm_no_stars=1. If every selected Flipnote passes final checks it can be imported immediately; otherwise the unresolved selection remains for staff review.
DELETE/api/v1/me/migrationCancel migration request

Cancels the current migration request and removes its private S2R/review files. Flipnotes that were already imported are intentionally kept.

GET/api/v1/me/migration/review/{sha256}/{index}/thumbnail.pngMigration review thumbnail

Returns a private PNG thumbnail for a staged/current S2R Flipnote. The SHA-256 and entry index come from the review response.

GET/api/v1/me/migration/review/{sha256}/{index}/file.ppmMigration review PPM

Returns the verified PPM from your own private migration review. This is a read/download route; it does not publish anything.

GET/api/v1/me/settingsSafe settings snapshot

Reads profile, notification preferences, consoles, Discord link state, passkey metadata, migration status, granted experiment access and API-key metadata.

Sessions are deliberately omitted. The response includes sessions: null and API keys cannot access session records.
GET/api/v1/me/consolesMy consoles

Lists linked console FSIDs and device metadata. This does not expose session IDs, IP addresses, browser user agents, or session history.

GET/api/v1/me/notificationsNotifications

Lists your notifications.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
POST/api/v1/me/notifications/readMark notifications read

Mark one notification, or all notifications, as read.

JSON body

{
  "id": 123
}

or

{
  "all": true
}
GET/api/v1/me/favoritesMy favorites

Lists Flipnotes you have favorited.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/me/followersMy followers

Lists accounts following you.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/me/followingAccounts I follow

Lists accounts you follow.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/me/flipnotesMy Flipnotes

Lists Flipnotes owned by your account.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
  • sortnew, recent, top, popular, or hot.
GET/api/v1/me/channelsMy channels

Lists channels owned by your account.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/me/star-balanceStar balance

Returns your current colored-star balances.

GET/api/v1/me/ticketTicket status

Returns the current ticket status and star balances.

POST/api/v1/me/ticket/redeemRedeem a ticket

Draws a ticket when one is available. Returns HTTP 429 while the ticket is on cooldown.

JSON body

{}
Creator endpoints
GET/api/v1/users/{public_id}Creator profile

Returns a creator and viewer-specific follow/subscription state.

GET/api/v1/users/{public_id}/profile-picture.pngCreator profile picture PNG

Returns that creator’s current profile picture as binary image/png. Returns 404 when the creator has no selected profile picture.

GET/api/v1/users/{public_id}/flipnotesCreator Flipnotes

Lists a creator’s Flipnotes.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
  • sortnew, recent, top, popular, or hot.
GET/api/v1/users/{public_id}/favoritesCreator favorites

Lists a creator’s public favorites.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/users/{public_id}/followersCreator followers

Lists a creator’s followers.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/users/{public_id}/followingCreator following

Lists accounts followed by a creator.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/users/{public_id}/channelsCreator channels

Lists channels owned by a creator.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
POST/api/v1/users/{public_id}/followFollow or unfollow

Sets your follow state for another creator.

JSON body

{
  "enabled": true
}
POST/api/v1/users/{public_id}/upload-notificationsCreator upload notifications

Turns upload notifications for a creator on or off.

JSON body

{
  "enabled": true
}
Flipnote endpoints
GET/api/v1/flipnotesBrowse Flipnotes

Lists Flipnotes across RexiMemo.

Query parameters

  • page / per_page — pagination, up to 50 per page.
  • sortnew, recent, top, popular, or hot.
  • creator — creator public ID.
  • channel — channel public ID.
GET/api/v1/flipnotes/{public_id}Flipnote details

Returns metadata, creator/channel data, views, downloads, star totals, viewer state, and direct API URLs for the PPM and PNG thumbnail.

GET/api/v1/flipnotes/{public_id}/commentsFlipnote comments

Lists text and memo comments.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/flipnotes/{public_id}/thumbnail.pngFull PNG thumbnail

Renders and returns the real Flipnote thumbnail as image/png. This is binary image data, not JSON.

Use the normal Authorization: Bearer header even though the response is an image.
GET/api/v1/flipnotes/{public_id}/file.ppmOriginal Flipnote PPM

Returns the original Flipnote .ppm as binary data.

Query parameters

  • download=1 — additionally count the request as a Flipnote download.
This downloads an existing RexiMemo PPM. There is no API endpoint that publishes an uploaded PPM to RexiMemo.
POST/api/v1/flipnotes/{public_id}/favoriteFavorite or unfavorite

Sets your favorite state.

JSON body

{
  "enabled": true
}
POST/api/v1/flipnotes/{public_id}/starsAdd stars

Adds stars using your account balance and the same restrictions as the website.

JSON body

{
  "color": "yellow",
  "amount": 1
}
amount is clamped to 1–100. Yellow-star limits and colored-star balances are enforced.
POST/api/v1/flipnotes/{public_id}/commentsPost a text comment

Posts a text comment. Replies use the parent comment’s public ID.

JSON body

{
  "text": "Nice Flipnote!",
  "reply_to": "COMMENT_PUBLIC_ID"
}
Text comments only. PPM/memo-comment publication uploads are explicitly rejected.
PATCH/api/v1/flipnotes/{public_id}Edit my Flipnote

Edits metadata on a Flipnote owned by your account. Any other field is rejected.

JSON body

{
  "title": "New title",
  "description": "Updated description",
  "channel_public_id": "CHANNEL_PUBLIC_ID",
  "comments_enabled": true
}
Send only the fields you want to change. Set channel_public_id to null or an empty string to remove the channel.
DELETE/api/v1/flipnotes/{public_id}Delete my Flipnote

Deletes a Flipnote owned by your account. API keys cannot delete someone else’s Flipnotes.

Comment endpoints
GET/api/v1/comments/{public_id}Comment details

Returns one text or memo comment.

GET/api/v1/comments/{public_id}/thumbnail.pngMemo-comment PNG thumbnail

For memo comments, returns a rendered image/png thumbnail.

GET/api/v1/comments/{public_id}/file.ppmMemo-comment PPM

For an existing memo comment, downloads its original PPM. This does not provide memo-comment upload access.

Channels & discovery
GET/api/v1/channelsBrowse channels

Lists channels.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
GET/api/v1/channels/{public_id}Channel details

Returns one channel.

GET/api/v1/channels/{public_id}/flipnotesChannel Flipnotes

Lists Flipnotes in a channel.

Query parameters

  • page — page number, starting at 1.
  • per_page — 1–50 items per page.
  • sortnew, recent, top, popular, or hot.
PATCH/api/v1/channels/{public_id}Edit a channel

Edits the title and/or description when your account has owner-level permission.

JSON body

{
  "title": "Channel title",
  "description": "Channel description"
}
GET/api/v1/categoriesCategories

Returns RexiMemo’s category list.

GET/api/v1/searchSearch

Searches Flipnotes, channels, and creators.

Query parameters

  • q — search text.
  • limit — 1–50 results per result type; default 30.
GET/api/v1/trending-creatorsTrending creators

Returns creators in ranked order.

Query parameters

  • limit — 1–100 creators; default 25.
Binary downloads

PPM and PNG endpoints return binary files directly instead of JSON. They still require the bearer header. PNG routes include Flipnote thumbnails, memo-comment thumbnails, profile pictures, and migration-review thumbnails.

Download a PPM

curl -L \
  -H 'Authorization: Bearer rxm_YOUR_KEY' \
  -o flipnote.ppm \
  https://reximemo.net/api/v1/flipnotes/FLIPNOTE_PUBLIC_ID/file.ppm

Download a PNG thumbnail

curl -L \
  -H 'Authorization: Bearer rxm_YOUR_KEY' \
  -o thumbnail.png \
  https://reximemo.net/api/v1/flipnotes/FLIPNOTE_PUBLIC_ID/thumbnail.png

Append ?download=1 to a Flipnote PPM request only when you want RexiMemo to increment that Flipnote’s download count.

Errors & status codes

JSON endpoints use this error envelope:

{
  "ok": false,
  "error": "invalid_api_key",
  "message": "Supply a current RexiMemo API key in the Authorization: Bearer header."
}
400 invalid request or data401 missing/expired/revoked API key403 authenticated but forbidden404 resource/endpoint not found or experiment not granted405 forbidden PPM publication/upload route413 encoder input too large429 rate limit or ticket cooldown

Binary endpoints return JSON error bodies when processing fails.