Studio access
Adults only. Creator-safe. SFW only.
18+ only — Adults only, creator-safe SFW.
Developer
A REST API for integrating companion chat, discovery, and user data into your own apps. Authenticate with an API key from your account settings.
Pass your API key as a Bearer token in every request.
Authorization: Bearer vk_live_…Keys are scoped. A key without messages:write cannot send messages, even if it can read them. Create and manage keys in Account → API Keys.
https://nasty.funsly.app/api/v1/meany scopeAuthenticated user and key info
Response
{
"user": {
"id": "usr_…",
"email": "you@example.com",
"name": "Your Name",
"createdAt": "2025-01-01T00:00:00.000Z",
"emailVerifiedAt": "2025-01-02T00:00:00.000Z",
"authProvider": "email"
},
"keyId": "key_…",
"scopes": ["companions:read", "messages:read"]
}/api/v1/companionscompanions:readList your companions
Response
{
"companions": [
{ "id": "cmp_…", "name": "Aria", "category": "comfort", … }
]
}/api/v1/companions/:idcompanions:readGet a single companion
Query params
:idCompanion IDResponse
{ "companion": { "id": "cmp_…", "name": "Aria", … } }/api/v1/companions/:id/messagesmessages:readPaginated message history
Query params
limitMessages per page (1–100, default 50)beforeMessage ID cursor for older pagesResponse
{
"messages": [
{ "id": "msg_…", "role": "assistant", "content": "Hello!", "createdAt": "…" }
],
"hasMore": false
}/api/v1/companions/:id/messagesmessages:writeSend a message and receive an AI reply
Body
contentYour message text (string, required, max 4000 chars)Response
{
"userMessage": { "id": "msg_…", "role": "user", "content": "Hi!", "createdAt": "…" },
"message": { "id": "msg_…", "role": "assistant", "content": "Hey there!", "createdAt": "…" }
}/api/v1/discoverauth optionalBrowse published public companions
Query params
limitResults per page (1–100, default 50)offsetPagination offset (default 0)Response
{
"companions": [ … ],
"total": 42,
"limit": 50,
"offset": 0,
"hasMore": false
}All endpoints are rate-limited per API key. When exceeded, the response returns 429 Too Many Requests with a Retry-After header indicating when you can retry.
# Send a message and receive the AI reply
curl -X POST https://nasty.funsly.app/api/v1/companions/cmp_xxx/messages \
-H "Authorization: Bearer vk_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"content": "How are you today?"}'