Download OpenAPI specification:Download
Splick modular monolith — public API via Kong Gateway OSS (/api prefix).
Source of truth for Postman Spec Hub sync. After editing this file, run:
make postman-sync or ask the agent to sync the collection.
| username required | string |
| password required | string <password> |
{- "username": "string",
- "password": "pa$$word"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0
}| refreshToken required | string |
{- "refreshToken": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0
}| query | string |
| status | string Enum: "ACTIVE" "INACTIVE" "LOCKED" |
| from | string <date-time> |
| to | string <date-time> |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 200 ] Default: 20 |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "username": "string",
- "displayName": "string",
- "phoneNumber": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "limit": 0,
- "total": 0,
- "hasMore": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "username": "string",
- "displayName": "string",
- "phoneNumber": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "string",
- "username": "string",
- "displayName": "string",
- "phoneNumber": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}| status | string Enum: "PENDING" "WHITELISTED" "APPROVED" "REJECTED" Omit or leave blank to return every status. |
| platform | string Enum: "ios" "android" Omit or leave blank to return every platform. |
string Case-insensitive substring match on the registrant email. | |
| from | string <date> Inclusive start of createdAt, as a calendar date in Asia/Ho_Chi_Minh. |
| to | string <date> Inclusive end of createdAt, as a calendar date in Asia/Ho_Chi_Minh. |
| page | integer Default: 0 |
| limit | integer Default: 20 |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "limit": 0,
- "total": 0,
- "hasMore": true
}Exports Android emails for Google Play Console tester import (one email per line, no header). Android PENDING rows in the export set are marked WHITELISTED in the same transaction. iOS rows are omitted. Cap 5000 rows.
| status | string Enum: "PENDING" "WHITELISTED" "APPROVED" "REJECTED" |
| platform | string Enum: "ios" "android" |
string | |
| from | string <date> |
| to | string <date> |
{ }iOS may be approved from PENDING; Android requires WHITELISTED first. Idempotent when already APPROVED.
| id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}| page | integer Default: 0 |
| limit | integer Default: 20 |
| reason | string Enum: "SPAM" "HARASSMENT" "HATE_SPEECH" "NUDITY" "VIOLENCE" "MISINFORMATION" "SCAM" "OTHER" |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "reporterId": "997c436a-2349-4904-8879-2f8ba4e8669d",
- "reason": "string",
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "limit": 0,
- "total": 0,
- "hasMore": true
}| platform required | string Enum: "android" "ios" "ios-testflight" |
| latestVersionCode required | integer <int32> >= 0 |
| latestVersionName required | string <= 32 characters |
| storeUrl required | string <= 512 characters |
| forceUpdate required | boolean |
{- "latestVersionCode": 0,
- "latestVersionName": "string",
- "storeUrl": "string",
- "forceUpdate": true
}{- "platform": "string",
- "latestVersionCode": 0,
- "latestVersionName": "string",
- "storeUrl": "string",
- "forceUpdate": true,
- "updatedAt": "2019-08-24T14:15:22Z"
}| postId required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}Provide exactly one of email or phoneNumber.
Used by the unified login screen to decide between sign-in and sign-up fields.
string <email> | |
| phoneNumber | string^\+?[1-9]\d{7,14}$ |
{- "email": "user@example.com"
}{- "exists": true
}Returns whether the username is available for registration or profile update. When called with a valid Bearer token, the current user's own username is treated as available.
| username required | string [ 3 .. 50 ] characters ^[a-zA-Z0-9_.]+$ Letters, numbers, underscores, and dots only |
{- "username": "string"
}{- "available": true
}Register with email or phone (exactly one).
POST /v1/auth/email/otp/request or POST /v1/auth/phone/otp/requestotpCode (6 digits)Account linking: If the email already belongs to a Google-only account (signed in with Google first, no password yet),
a verified email OTP completes the account by attaching a password. Existing username and Google link are preserved;
displayName is updated only when the account has none. Returns the same AuthResponse as a new registration (201).
If the email already has a password, returns 409 with error: EMAIL_ALREADY_REGISTERED.
If the phone already has a password, returns 409 with error: PHONE_ALREADY_REGISTERED.
Phone OTP login first, then phone register: attaches a password (same as Google → email register).
string <email> | |
| phoneNumber | string^\+?[1-9]\d{7,14}$ |
| otpCode required | string^\d{6}$ |
| username required | string [ 3 .. 50 ] characters ^[a-zA-Z0-9_.]+$ Letters, numbers, underscores, and dots |
| password required | string [ 8 .. 100 ] characters ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*... At least 8 characters with uppercase, lowercase, digit, and special character (!@#$%^&* etc.) |
| displayName | string <= 150 characters Optional. When omitted or blank, the username is used. |
| dateOfBirth | string or null <date> Optional. Must be in the past and at least 13 years old when provided. |
| deviceInfo | string |
| deviceName | string Human-readable device label (e.g. iPhone 15) |
| loginLocation | string Client-reported approximate location (e.g. region, timezone) |
{- "email": "user@example.com",
- "otpCode": "123456",
- "username": "johndoe",
- "password": "secureP@ss123",
- "displayName": "John Doe"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}Public marketing endpoint to capture interest in trying Splick.
Requires email and preferred mobile platform (ios or android).
Optional locale (en|vi) selects email language (default en).
On success, a confirmation email is enqueued asynchronously.
Each email may register only once; a duplicate returns 409 with
error: TRIAL_EMAIL_ALREADY_REGISTERED.
| email required | string <email> <= 255 characters |
| platform required | string Enum: "ios" "android" Preferred mobile platform for the trial. |
| locale | string Enum: "en" "vi" Preferred email locale. Defaults to |
{- "email": "user@example.com",
- "platform": "ios",
- "locale": "en"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Exchange a Google ID token from Google Sign-In (iOS/Android) for Splick JWTs.
Configure GOOGLE_IOS_CLIENT_ID on auth-service to match the iOS OAuth client aud claim.
New accounts set newUser to true and default user.displayName to the email local-part
(text before @).
| idToken required | string Google ID token from Sign-In SDK |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "idToken": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}Exchange an Apple identity token from Sign in with Apple (iOS) for Splick JWTs.
Configure AUTH_APPLE_IOS_BUNDLE_ID on auth-service to match the iOS app bundle ID (aud claim).
New accounts set newUser to true and default user.displayName to the email local-part
(text before @).
| idToken required | string Apple identity token from Sign in with Apple |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "idToken": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}| email required | string <email> |
| password required | string |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "email": "user@example.com",
- "password": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}| deviceId required | string |
| deviceInfo | string |
| deviceName | string |
{- "deviceId": "string",
- "deviceInfo": "string",
- "deviceName": "string"
}{- "quickLoginToken": "string",
- "expiresAt": "2019-08-24T14:15:22Z"
}| quickLoginToken required | string |
| deviceId required | string |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "quickLoginToken": "string",
- "deviceId": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false,
- "quickLoginToken": "string",
- "quickLoginExpiresAt": "2019-08-24T14:15:22Z"
}Always returns 202 Accepted (does not reveal whether the email exists),
including when OTP send is throttled for that destination.
OTP is sent only for accounts with a normal email address (not phone-only @phone.splick.local).
Gateway may return 429 for per-IP abuse limits.
| email required | string <email> |
{- "email": "user@example.com"
}{ }Validates the email OTP from POST /v1/auth/password/forgot without consuming it.
Use before the new-password step; then call POST /v1/auth/password/reset.
| email required | string <email> |
| otpCode required | string = 6 characters |
{- "email": "user@example.com",
- "otpCode": "string"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Verifies email OTP, sets a new password, revokes existing refresh tokens, and returns a new session. Works for email/password accounts and Google-only accounts (adds a password).
| email required | string <email> |
| otpCode required | string = 6 characters |
| newPassword required | string |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "email": "user@example.com",
- "otpCode": "string",
- "newPassword": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}Provide either currentPassword or otpCode (from POST /v1/auth/email/otp/request), plus newPassword.
Revokes other refresh tokens and returns a new token pair.
| currentPassword | string |
| otpCode | string = 6 characters |
| newPassword required | string |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "currentPassword": "string",
- "otpCode": "string",
- "newPassword": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}Validates either currentPassword or otpCode (from POST /v1/auth/email/otp/request)
without changing the password. Email OTP is checked but not consumed — use before showing
the new-password step, then call POST /v1/auth/password/change.
| currentPassword | string |
| otpCode | string = 6 characters |
{- "currentPassword": "string",
- "otpCode": "string"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| refreshToken required | string |
{- "refreshToken": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}| property name* additional property | any |
{ }{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Public Play Console / web deletion request. Does not delete or deactivate immediately.
Always returns 202 with a generic message (anti-enumeration).
When an ACTIVE account matches the email, sends a confirmation link valid for 48 hours.
Web deletion is email only. Confirm via /v1/auth/account/deletion-requests/confirm,
which deletes the account immediately.
| identifier required | string <= 255 characters Registered email address. Phone numbers are rejected. |
| reason | string <= 1000 characters Optional reason for leaving. |
{- "identifier": "user@example.com",
- "reason": "Switching apps"
}{- "message": "string"
}Confirms the emailed link (valid 48 hours) and deletes the account immediately. There is no extra 30-day grace after this step.
| token required | string <= 128 characters |
{- "token": "url-safe-token-from-email"
}{- "message": "string",
- "deletedAt": "2019-08-24T14:15:22Z"
}Public endpoint. Use the reactivationToken returned with ACCOUNT_INACTIVE after a successful
credential check. Restores the account during the 30-day grace period and issues a new session.
| reactivationToken required | string |
| deviceInfo | string |
| deviceName | string |
| loginLocation | string |
{- "reactivationToken": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "loginLocation": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}| email required | string <email> |
| purpose | string Enum: "account_deactivate" "account_delete" "google_unlink" Optional. |
{- "email": "user@example.com",
- "purpose": "account_deactivate"
}string <email> Required for phone-only accounts; ignored when the account already has a recoverable email. | |
| otpCode required | string = 6 characters |
| password | string <= 100 characters Optional. Omit to link email via OTP only; create a password later from account settings. |
{- "email": "user@example.com",
- "otpCode": "string",
- "password": "string"
}Used when adding someone to a bill split from an email address. Returns the public profile (no email) when that address belongs to an active Splick account. Returns 404 when it does not, so the client can send a guest invite.
| email required | string <email> <= 254 characters |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}Updates display name, username, avatar URL, preferred locale (vi|en), IANA timezone, and/or date of birth. At least one field required. Publishes UserProfileUpdatedEvent for social user_projection sync.
| displayName | string [ 1 .. 100 ] characters |
| username | string [ 3 .. 50 ] characters ^[a-zA-Z0-9_.]+$ |
| avatarUrl | string <= 500 characters |
| preferredLocale | string Enum: "vi" "en" |
| timezone | string <= 64 characters IANA time zone (for example Asia/Ho_Chi_Minh). Used as the user's streak calendar. |
| dateOfBirth | string <date> |
{- "displayName": "string",
- "username": "string",
- "avatarUrl": "string",
- "preferredLocale": "vi",
- "timezone": "America/Los_Angeles",
- "dateOfBirth": "2000-05-15"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}Returns the authenticated user's payment QR image URL and/or bank account details.
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "qrImageUrl": "string",
- "accountName": "string",
- "accountNumber": "string",
- "bankName": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}Creates or replaces the authenticated user's payment profile. Validation requires either qrImageUrl or the full bank set (accountName, accountNumber, bankName).
| qrImageUrl | string <= 2048 characters Public URL from completed USER_PAYMENT_QR media upload |
| accountName | string <= 200 characters |
| accountNumber | string <= 50 characters Digits only |
| bankName | string <= 200 characters |
{- "qrImageUrl": "string",
- "accountName": "string",
- "accountNumber": "string",
- "bankName": "string"
}{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "qrImageUrl": "string",
- "accountName": "string",
- "accountNumber": "string",
- "bankName": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}Sends a 6-digit email OTP. Per-destination send cooldown and max resends apply;
exceeding them returns 429 with error: OTP_SEND_RATE_LIMIT.
| email required | string <email> |
| purpose | string Enum: "account_deactivate" "account_delete" "google_unlink" Optional. |
{- "email": "user@example.com",
- "purpose": "account_deactivate"
}{ }| property name* additional property | any |
{ }{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}Do not call manually. Browser redirect targets:
https://api.splick.app/api/v1/auth/oauth2/code/google (prod),
http://localhost:8080/api/v1/auth/oauth2/code/google (local).
{- "accessToken": "string",
- "refreshToken": "string",
- "expiresIn": 0,
- "tokenType": "Bearer",
- "sessionId": "f6567dd8-e069-418e-8893-7d22fcf12459",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "status": "ACTIVE",
- "preferredLocale": "vi",
- "timezone": "Asia/Ho_Chi_Minh",
- "dateOfBirth": "2000-05-15",
- "createdAt": "2019-08-24T14:15:22Z",
- "hasPassword": true
}, - "newUser": false
}| q required | string [ 1 .. 100 ] characters Username search prefix |
| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "friendStatus": "NONE",
- "distanceMeters": 0
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}| scope required | string (SearchHistoryScope) Enum: "FRIENDS" "MESSAGING" "MESSAGING_THREAD" "ALBUM" "LOCATION" "EXPENSE" "GIF" |
| scopeKey | string <= 64 characters Conversation id when scope is MESSAGING_THREAD |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "scope": "FRIENDS",
- "scopeKey": "string",
- "query": "string",
- "lastUsedAt": "2019-08-24T14:15:22Z"
}
]| scope required | string (SearchHistoryScope) Enum: "FRIENDS" "MESSAGING" "MESSAGING_THREAD" "ALBUM" "LOCATION" "EXPENSE" "GIF" |
| query required | string [ 1 .. 100 ] characters |
| scopeKey | string or null <= 64 characters Required when scope is MESSAGING_THREAD |
{- "scope": "FRIENDS",
- "query": "string",
- "scopeKey": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "scope": "FRIENDS",
- "scopeKey": "string",
- "query": "string",
- "lastUsedAt": "2019-08-24T14:15:22Z"
}| lat required | number <double> [ -90 .. 90 ] |
| lon required | number <double> [ -180 .. 180 ] |
{- "lat": -90,
- "lon": -180
}{- "content": [
- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "friendStatus": "NONE",
- "distanceMeters": 0
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}Sets the caller's profile bio. A blank or null bio clears it. The bio is at most 150 characters and is shown on the public profile.
| bio | string or null <= 150 characters Profile bio. Blank or null clears it. |
{- "bio": "string"
}{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "nickname": "string",
- "subtitle": "string",
- "friendStatus": "NONE",
- "stats": {
- "friendCount": 0,
- "postCount": 0,
- "streakCount": 0
}, - "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z",
- "bio": "string",
- "activeNote": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}
}Returns the caller's active 24h status note (if any) and visible active notes from friends, ordered by unseen first then newest first.
{- "myNote": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}, - "friendNotes": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}
]
}Replaces any existing active note for the caller with a new 24h status note containing text (<= 60 chars) and/or music clip.
| text | string or null <= 60 characters |
| visibility | string Default: "FRIENDS" Enum: "FRIENDS" "GROUPS" "SPECIFIC_USERS" "FRIENDS_EXCEPT" |
| allowedGroupIds | Array of strings <uuid> <= 100 items [ items <uuid > ] Required when visibility is GROUPS. |
| allowedUserIds | Array of strings <uuid> <= 100 items [ items <uuid > ] Required when visibility is SPECIFIC_USERS. |
| excludedUserIds | Array of strings <uuid> <= 100 items [ items <uuid > ] Required when visibility is FRIENDS_EXCEPT. |
object (NoteMusic) |
{- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}| noteId required | string <uuid> |
| emoji | string or null <= 32 characters |
| count | integer or null >= 1 |
{- "emoji": "string",
- "count": 1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}| noteId required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}| noteId required | string <uuid> |
{- "items": [
- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "reaction": "string",
- "reactionCount": 0,
- "reactions": {
- "property1": 0,
- "property2": 0
}, - "interactedAt": "2019-08-24T14:15:22Z"
}
], - "reactionCounts": {
- "property1": 0,
- "property2": 0
}
}Returns a user's profile and aggregate stats. For another user, the response also includes their relationship to the caller; for the caller's own profile, friendStatus is NONE. online and lastSeenAt are included only for the caller's own profile or when friendStatus is FRIENDS.
| userId required | string <uuid> |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "nickname": "string",
- "subtitle": "string",
- "friendStatus": "NONE",
- "stats": {
- "friendCount": 0,
- "postCount": 0,
- "streakCount": 0
}, - "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z",
- "bio": "string",
- "activeNote": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "avatarUrl": "string",
- "text": "string",
- "visibility": "FRIENDS",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}, - "seen": true,
- "myReaction": "string",
- "myReactionCount": 0,
- "myReactions": {
- "property1": 0,
- "property2": 0
}, - "viewCount": 0,
- "reactionCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}
}Returns payment QR/bank details for a friend. Forbidden for self, strangers, or blocked users.
| userId required | string <uuid> |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "qrImageUrl": "string",
- "accountName": "string",
- "accountNumber": "string",
- "bankName": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}| q required | string |
| limit | integer [ 1 .. 20 ] Default: 10 |
[- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
]| username required | string [ 3 .. 50 ] characters ^[a-zA-Z0-9_.]+$ |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "friendCount": 0,
- "postCount": 0
}| username required | string [ 3 .. 100 ] characters |
| message | string <= 280 characters |
{- "username": "string",
- "message": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "requesterId": "ba828041-f5bf-46f6-bf7c-22eccb01f2a4",
- "addresseeId": "a1cd7f0d-5c75-486c-a8c9-7a3b2c0ec90f",
- "status": "string",
- "message": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "addresseeUsername": "string",
- "addresseeDisplayName": "string"
}| qrPayload required | string Base64url JSON from POST /v1/social/qr/me (personal QR envelope) |
| message | string <= 500 characters |
{- "qrPayload": "string",
- "message": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "requesterId": "ba828041-f5bf-46f6-bf7c-22eccb01f2a4",
- "addresseeId": "a1cd7f0d-5c75-486c-a8c9-7a3b2c0ec90f",
- "status": "string",
- "message": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "addresseeUsername": "string",
- "addresseeDisplayName": "string"
}| requestId required | string <uuid> |
{- "friendshipId": "6dce0ec7-4364-4dbf-8496-4270437671d8",
- "userAId": "6b5bf80f-ce93-4ea5-a0cc-caf76f4c6268",
- "userBId": "68e1ced2-f434-4102-9b8e-7a5a86b1de50",
- "createdAt": "2019-08-24T14:15:22Z"
}| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "requesterId": "ba828041-f5bf-46f6-bf7c-22eccb01f2a4",
- "addresseeId": "a1cd7f0d-5c75-486c-a8c9-7a3b2c0ec90f",
- "status": "string",
- "message": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "addresseeUsername": "string",
- "addresseeDisplayName": "string"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "friendId": "4bd6e55f-1d02-40eb-85a5-4e8b566403a4",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "friendsSince": "2019-08-24T14:15:22Z"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}One-way list of people the caller marked as close friends. The other user is not notified and is not added in reverse.
| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "friendId": "4bd6e55f-1d02-40eb-85a5-4e8b566403a4",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "friendsSince": "2019-08-24T14:15:22Z"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}Marks or unmarks an active friend as a close friend for the caller only. Requires an ACTIVE friendship. Idempotent.
| friendUserId required | string <uuid> |
| enabled required | boolean |
{- "enabled": true
}{- "friendUserId": "6501e41b-0761-451a-aad4-339fc41162aa",
- "enabled": true
}| friendUserId required | string <uuid> |
| nickname | string or null <= 80 characters |
{- "nickname": "string"
}{- "friendId": "4bd6e55f-1d02-40eb-85a5-4e8b566403a4",
- "username": "string",
- "displayName": "string",
- "nickname": "string",
- "friendsSince": "2019-08-24T14:15:22Z"
}| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "blockedAt": "2019-08-24T14:15:22Z"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}| userId required | string <uuid> |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "memberCount": 0,
- "inviteCode": "string"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}| name required | string [ 1 .. 100 ] characters |
| description | string <= 500 characters |
{- "name": "string",
- "description": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "createdAt": "2019-08-24T14:15:22Z"
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupName": "string",
- "groupAvatarUrl": "string",
- "inviter": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "invitedAt": "2019-08-24T14:15:22Z"
}
]| invitationId required | string <uuid> Group member row ID of the invitation |
{- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "membershipId": "8072cc74-4782-4f2c-827c-699c48ce2092",
- "status": "ACTIVE"
}| invitationId required | string <uuid> Group member row ID of the invitation |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "createdAt": "2019-08-24T14:15:22Z"
}| groupId required | string <uuid> |
| name required | string [ 1 .. 100 ] characters |
| description | string <= 500 characters |
{- "name": "string",
- "description": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "createdAt": "2019-08-24T14:15:22Z"
}| groupId required | string <uuid> |
| avatarUrl required | string <uri> <= 500 characters |
{
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "createdAt": "2019-08-24T14:15:22Z"
}| groupId required | string <uuid> |
| newOwnerId required | string <uuid> |
{- "newOwnerId": "7794d3b0-c388-4512-b96a-362c09616997"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "createdAt": "2019-08-24T14:15:22Z"
}| groupId required | string <uuid> |
| status | string Enum: "ACTIVE" "PENDING" "REMOVED" |
| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
{- "content": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "role": "string",
- "status": "string",
- "invitedAt": "2019-08-24T14:15:22Z",
- "joinedAt": "2019-08-24T14:15:22Z"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}| groupId required | string <uuid> |
| userIds required | Array of strings <uuid> [ 1 .. 50 ] items [ items <uuid > ] |
{- "userIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "invited": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "skipped": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}| groupId required | string <uuid> |
| memberRowId required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "role": "string",
- "status": "string",
- "invitedAt": "2019-08-24T14:15:22Z",
- "joinedAt": "2019-08-24T14:15:22Z"
}| groupId required | string <uuid> |
| memberRowId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| groupId required | string <uuid> |
| memberRowId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Prefer this over GET when the code is a server QR payload. The payload is sent in the JSON body so it is not altered by query-string encoding.
| code required | string Invite code or server-issued group QR payload |
{- "code": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "memberCount": 0,
- "inviteCode": "string",
- "isMember": true,
- "pendingApproval": true,
- "createdAt": "2019-08-24T14:15:22Z"
}| code required | string Group invite code |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "description": "string",
- "memberCount": 0,
- "inviteCode": "string",
- "isMember": true,
- "pendingApproval": true,
- "createdAt": "2019-08-24T14:15:22Z"
}| code required | string [ 8 .. 16 ] characters |
{- "code": "stringst"
}{- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "membershipId": "8072cc74-4782-4f2c-827c-699c48ce2092",
- "status": "ACTIVE"
}| qrPayload required | string |
{- "qrPayload": "string"
}{- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "membershipId": "8072cc74-4782-4f2c-827c-699c48ce2092",
- "status": "ACTIVE"
}| groupId required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "code": "string",
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "issuedAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "maxUses": 0,
- "usedCount": 0
}| groupId required | string <uuid> |
| expiresAt | string <date-time> |
| maxUses | integer [ 1 .. 1000 ] |
{- "expiresAt": "2019-08-24T14:15:22Z",
- "maxUses": 1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "code": "string",
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "issuedAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "maxUses": 0,
- "usedCount": 0
}| groupId required | string <uuid> |
| ttlSeconds | integer [ 60 .. 604800 ] |
{- "ttlSeconds": 60
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "payload": "string",
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "issuedAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z"
}Creates a PENDING media row and returns a presigned PUT URL for Cloudflare R2. Client uploads bytes directly to R2, then calls complete.
| purpose required | string Enum: "USER_AVATAR" "USER_PAYMENT_QR" "GROUP_AVATAR" "GROUP_CUSTOM_EMOJI" "USER_CUSTOM_EMOJI" "POST_IMAGE" "POST_VIDEO" "COMMENT_ATTACHMENT" |
| contentType required | string |
| contentLength required | integer <int64> >= 1 |
object |
{- "purpose": "USER_AVATAR",
- "contentType": "string",
- "contentLength": 1,
- "context": {
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55"
}
}{- "uploadId": "ef523ba8-509e-47af-8e2c-5fa751596497",
- "presignedUrl": "string",
- "requiredHeaders": {
- "property1": "string",
- "property2": "string"
}, - "expiresAt": "2019-08-24T14:15:22Z"
}Verifies object on R2 (HeadObject) and marks media READY.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| etag | string or null |
{- "etag": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "url": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Returns filter catalog metadata (LUT, matrix, AR) for mobile clients.
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "name": "string",
- "type": "LUT",
- "thumbnailUrl": "string",
- "assetUrl": "string",
- "version": 0,
- "minAppVersion": "string"
}
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "slug": "string",
- "name": "string",
- "type": "LUT",
- "thumbnailUrl": "string",
- "assetUrl": "string",
- "version": 0,
- "minAppVersion": "string"
}{- "kind": "participant",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "creatorDisplayName": "string",
- "description": "string",
- "currency": "string",
- "amount": "string",
- "guestDisplayName": "string",
- "maskedPhone": "string",
- "expiredOrClaimed": true,
- "claimed": true,
- "paymentStatus": "UNPAID",
- "canPayWithoutApp": true,
- "participants": [
- {
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "displayName": "string",
- "amount": "string"
}
], - "qrImageUrl": "string",
- "maskedEmail": "string"
}| token required | string |
| files required | Array of strings <binary> [ 1 .. 3 ] items [ items <binary > ] |
| note | string <= 500 characters |
{- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "paymentStatus": "string",
- "commentId": "ee0469af-2fa1-4b7e-b5f1-8e711a95821b"
}| token required | string |
| splitId | string <uuid> Required when claiming via a table QR token |
{- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f"
}{- "expenseId": "a2142719-090a-410b-ad70-ea5efeb1c9dc",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f"
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}Returns one claim URL per guest split that still has no Splick user. Only the bill creator or payer can call this. Other callers receive 404. The URL is a bearer secret; do not log it.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "invites": [
- {
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "displayName": "string",
- "inviteChannel": "email",
- "inviteUrl": "string"
}
]
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| rotate | boolean Default: false |
{- "tableUrl": "string"
}Returns expenses visible to the authenticated user for the requested page.
Response is a JSON array (iOS compatibility); use page and limit query params for paging.
Prefer keyset pagination via optional cursor (opaque, from the previous page's last
item createdAt + id). When cursor is set, page is ignored. First page: omit cursor
(or page=0). hasMore = response length equals limit.
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 |
| cursor | string Opaque keyset cursor from the previous page (Base64 of |
| groupId | string <uuid> |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}
]| property name* additional property | any |
{ }{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 |
| groupId | string <uuid> |
| from | string <date-time> |
| to | string <date-time> |
| direction | string Default: "ALL" Enum: "ALL" "OWED" "OWES" |
| status | string Default: "OPEN" Enum: "OPEN" "SETTLED" |
{- "content": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "-150000",
- "currency": "VND",
- "guestKey": "string"
}
], - "page": 0,
- "limit": 0,
- "totalElements": 0,
- "totalPages": 0,
- "nextCursor": "string"
}Returns settled cash-flow totals for the authenticated user over the last N calendar months (including the current month).
| months | integer [ 1 .. 24 ] Default: 12 Number of months to include (1–24), including the current month. |
{- "currency": "VND",
- "currentMonth": {
- "year": 2026,
- "month": 7,
- "totalSettledReceived": "1200000",
- "totalSettledPaid": "3500000"
}, - "months": [
- {
- "year": 2026,
- "month": 7,
- "totalSettledReceived": "1200000",
- "totalSettledPaid": "3500000"
}
]
}Lightweight BFF payload for the Overview tab: net balance with highlighted counterparties, action items that need attention, recent expenses, and this-month vs last-month spending.
{- "balance": {
- "youOwe": "string",
- "owedToYou": "string",
- "netBalance": "string",
- "currency": "string",
- "topBalances": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "-150000",
- "currency": "VND",
- "guestKey": "string"
}
]
}, - "needsAttention": {
- "pendingPaymentRequestCount": 0,
- "expensesNeedingConfirmationCount": 0,
- "outstandingSettlementCount": 0,
- "totalActionItems": 0,
- "items": [
- {
- "type": "PAYMENT_REQUEST",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "string",
- "amount": "string",
- "currency": "string",
- "counterparty": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3"
}
]
}, - "recentExpenses": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "amount": "string",
- "currency": "string",
- "category": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "participants": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55"
}
], - "totalSpending": {
- "currentPeriodTotal": "string",
- "previousPeriodTotal": "string",
- "percentageChange": "string",
- "currency": "string"
}
}Returns the actor's share of spending as a time series (line/area chart) and category
totals (donut chart). WEEK uses weekly buckets for the last 4 weeks. MONTH uses
monthly buckets from the start of the lookback window.
| period | string Default: "MONTH" Enum: "WEEK" "MONTH" |
| months | integer [ 1 .. 12 ] Default: 3 Lookback window in calendar months for MONTH period (1–12). Ignored for WEEK. |
{- "trend": [
- {
- "bucketStart": "2019-08-24T14:15:22Z",
- "amount": "string"
}
], - "categories": [
- {
- "category": "string",
- "amount": "string",
- "percentage": "string"
}
], - "currency": "string"
}Groups that have expenses involving the actor, with group spending, amount the actor paid, and the actor's net balance in each group.
{- "groups": [
- {
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupName": "string",
- "groupAvatarUrl": "string",
- "totalGroupSpending": "string",
- "userPaidTotal": "string",
- "userBalance": "string",
- "currency": "string",
- "memberAvatars": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
]
}
]
}| guestKey required | string guestKey from a debt balance row |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 |
| cursor | string Opaque keyset cursor from the previous page (Base64 of |
| status | string Default: "ALL" Enum: "OPEN" "SETTLED" "ALL" |
{- "content": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}
], - "page": 0,
- "limit": 0,
- "totalElements": 0,
- "totalPages": 0,
- "nextCursor": "string"
}| guestKey required | string |
{- "counterparty": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "actorOwesTotal": "150000",
- "counterpartyOwesTotal": "50000",
- "netAmount": "100000",
- "netDirection": "ACTOR_OWES",
- "currency": "string",
- "unpaidSplitCount": 0,
- "expensesInvolved": 0,
- "pendingSettlement": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "debtorUserId": "ba83c7c7-c6ba-4ac9-9f4c-a9dfbd672734",
- "creditorUserId": "bf5caf55-7654-430b-9e9c-3d43708dac8c",
- "amount": "string",
- "currency": "string",
- "note": "string",
- "status": "PENDING_APPROVAL",
- "rejectReason": "string",
- "splitCount": 1,
- "createdAt": "2019-08-24T14:15:22Z",
- "reviewedAt": "2019-08-24T14:15:22Z"
}
}Returns canonical expenses across all groups where the authenticated user and counterparty
are the direct debtor and creditor. Prefer keyset pagination via optional cursor.
When cursor is set, page is ignored and totalElements/totalPages may be zero.
nextCursor is present when another page may exist.
| counterpartyId required | string <uuid> |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 |
| cursor | string Opaque keyset cursor from the previous page (Base64 of |
| status | string Default: "OPEN" Enum: "OPEN" "SETTLED" "ALL" |
{- "content": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}
], - "page": 0,
- "limit": 0,
- "totalElements": 0,
- "totalPages": 0,
- "nextCursor": "string"
}Returns a single-currency netting summary. Responds with 409 when open debts span multiple currencies.
| counterpartyId required | string <uuid> |
{- "counterparty": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "actorOwesTotal": "150000",
- "counterpartyOwesTotal": "50000",
- "netAmount": "100000",
- "netDirection": "ACTOR_OWES",
- "currency": "string",
- "unpaidSplitCount": 0,
- "expensesInvolved": 0,
- "pendingSettlement": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "debtorUserId": "ba83c7c7-c6ba-4ac9-9f4c-a9dfbd672734",
- "creditorUserId": "bf5caf55-7654-430b-9e9c-3d43708dac8c",
- "amount": "string",
- "currency": "string",
- "note": "string",
- "status": "PENDING_APPROVAL",
- "rejectReason": "string",
- "splitCount": 1,
- "createdAt": "2019-08-24T14:15:22Z",
- "reviewedAt": "2019-08-24T14:15:22Z"
}
}Snapshots all currently open direct splits between the actor and counterparty. For each snapshot split that still has a live SHARE_BILL postId and is not already PENDING_APPROVAL/PAID, the service creates a feed EVIDENCE comment with the submitted screenshots and links payment_evidence_submissions.bulk_settlement_id. Splits remain open until the creditor approves per-post evidence or approves this bulk settlement.
| counterpartyId required | string <uuid> |
| evidenceUrl | string <uri> <= 2048 characters ^https:// Legacy single evidence URL. Prefer evidenceUrls when submitting multiple screenshots. |
| evidenceUrls | Array of strings <uri> [ 1 .. 3 ] items [ items <uri > <= 2048 characters ^https:// ] Transfer screenshots (1–3 HTTPS URLs). Required unless evidenceUrl is provided. |
| note | string or null <= 500 characters |
{- "note": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "debtorUserId": "ba83c7c7-c6ba-4ac9-9f4c-a9dfbd672734",
- "creditorUserId": "bf5caf55-7654-430b-9e9c-3d43708dac8c",
- "amount": "string",
- "currency": "string",
- "note": "string",
- "status": "PENDING_APPROVAL",
- "rejectReason": "string",
- "splitCount": 1,
- "createdAt": "2019-08-24T14:15:22Z",
- "reviewedAt": "2019-08-24T14:15:22Z"
}Only the snapshot creditor may approve. Approval marks snapshot splits paid, approves any still-pending payment_evidence_submissions linked by bulk_settlement_id, and cascades APPROVED status onto the related feed EVIDENCE comments.
| settlementId required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "debtorUserId": "ba83c7c7-c6ba-4ac9-9f4c-a9dfbd672734",
- "creditorUserId": "bf5caf55-7654-430b-9e9c-3d43708dac8c",
- "amount": "string",
- "currency": "string",
- "note": "string",
- "status": "PENDING_APPROVAL",
- "rejectReason": "string",
- "splitCount": 1,
- "createdAt": "2019-08-24T14:15:22Z",
- "reviewedAt": "2019-08-24T14:15:22Z"
}Only the snapshot creditor may reject. Split state is not changed.
| settlementId required | string <uuid> |
| reason | string or null <= 500 characters |
{- "reason": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "debtorUserId": "ba83c7c7-c6ba-4ac9-9f4c-a9dfbd672734",
- "creditorUserId": "bf5caf55-7654-430b-9e9c-3d43708dac8c",
- "amount": "string",
- "currency": "string",
- "note": "string",
- "status": "PENDING_APPROVAL",
- "rejectReason": "string",
- "splitCount": 1,
- "createdAt": "2019-08-24T14:15:22Z",
- "reviewedAt": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}Blocked with 409 EXPENSE_LOCKED when linked feed post has interactions.
| expenseId required | string <uuid> |
| property name* additional property | any |
{ }{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}| expenseId required | string <uuid> |
| property name* additional property | any |
{ }{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "description": "string",
- "totalAmount": "string",
- "currency": "string",
- "paidBy": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "amount": "string",
- "isPaid": true,
- "paidAt": "2019-08-24T14:15:22Z",
- "paymentStatus": "UNPAID",
- "guestDisplayName": "string",
- "inviteUrl": "string"
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "category": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "settledAt": "2019-08-24T14:15:22Z",
- "tableInviteUrl": "string",
- "closedAt": "2019-08-24T14:15:22Z",
- "closedReason": "string"
}{- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "authorUsername": "string",
- "authorDisplayName": "string",
- "authorAvatarUrl": "string",
- "caption": "string",
- "checkInPlace": "string",
- "previewImageUrl": "string",
- "mediaType": "string",
- "widthPx": 0,
- "heightPx": 0,
- "feedKind": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Returns visible feed posts as a JSON array for iOS compatibility. Use page and limit for paging. When authorId is provided, only posts authored by that user are returned, while the same audience visibility rules still apply. List cards omit the full reactions array ([]); use reactionCount, reactorCount, and reactionPreview (at most 3 users, actor pinned when they reacted). Open GET /v1/feed/posts/{postId}/reactions for the full grouped list.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| authorId | string <uuid> Optional author UUID. Filters the feed to posts by this author without bypassing the authenticated actor's normal visibility rules. |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}
]Lightweight poll for the home-feed "N new posts" pill. Returns how many visible posts authored by others sort strictly ahead of (afterCreatedAt, afterId) under created_at DESC, id DESC. Does not hydrate post bodies. Count is capped at 99. Own posts are excluded. Hidden posts are excluded.
| afterCreatedAt required | string <date-time> Created-at of the newest post currently shown at the top of the client's feed. |
| afterId required | string <uuid> Id of that same head post (tie-break with afterCreatedAt). |
{- "count": 0
}Returns a flat, paginated list of image and video media items sorted newest first. Default view shows own posts and friends' posts. Optional filters: authorId (repeatable; self or friend), groupId (repeatable; posts tagged with any selected group; caller must be an active member of each), q (caption search, min 1 char), feedKind (checkIn for moments, shareBill for bill-split posts). When both authorId and groupId are set, matching photos from either filter are returned (OR). Use cursor for keyset pagination; when cursor is sent the response is a wrapper with nextCursor. Image URLs are stable CDN links — clients may cache bytes by URL across filter changes.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| limit | integer [ 1 .. 100 ] Default: 50 |
| authorId | Array of strings <uuid> <= 50 items [ items <uuid > ] Repeat to filter by multiple authors (OR). Each id must be self or a friend. |
| groupId | Array of strings <uuid> <= 50 items [ items <uuid > ] Repeat to filter by multiple groups (OR). Caller must be an active member of each. |
| q | string [ 1 .. 100 ] characters |
| feedKind | string Enum: "checkIn" "shareBill" Filter by post kind. Omit for all photos. |
| cursor | string |
[ ]Returns the bill host payment profile (QR and bank account) so a participant can transfer money before uploading proof. Caller must be the host or a person on the bill. configured is false when the host has not saved transfer details.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "qrImageUrl": "string",
- "accountName": "string",
- "accountNumber": "string",
- "bankName": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "configured": true
}Live counters for the Splick Bot profile. reminderCount is the number of people on every bill-split post. paidCount is how many of those people have a paid expense split. startedAt is the earlier of the first user account and the first post, used as the bot's experience start.
{- "reminderCount": 0,
- "paidCount": 0,
- "startedAt": "2019-08-24T14:15:22Z"
}Returns the live posting streak and whether the user already posted today in their profile IANA time zone (default Asia/Ho_Chi_Minh). The streak is consecutive calendar days with at least one IMAGE or VIDEO post. If the user has not posted yet today, yesterday's run still counts until that local day ends without a post. Missing a full calendar day resets the streak to 0.
{- "currentStreak": 7,
- "hasTodayPhoto": true,
- "canRestore": false,
- "recoverableStreak": 12,
- "restoresRemaining": 3
}Restores the posting streak that broke at the start of a missed calendar day, if the request is still inside a 48-hour window in the user's IANA time zone and the user has remaining monthly restores (3 per calendar month, reset on the 1st). After a successful restore the live streak equals the length immediately before the break, even if the user has not posted today.
{- "currentStreak": 7,
- "hasTodayPhoto": true,
- "canRestore": false,
- "recoverableStreak": 12,
- "restoresRemaining": 3
}Ranks the caller among friends or all users by the live posting streak or by best streak. Friends includes the caller and every active friend, including people whose streak is 0. Global omits users whose live streak and best streak are both 0, and omits users blocked in either direction. Sort defaults to the live streak. When that streak is equal, the person with more image or video posts ranks higher. When the streak and the post count are both equal, those people share a rank. The response contains at most 25 people. The caller's row is always returned in viewer; viewer.rank is null on the global board when the caller has no live streak and no best streak. nextCursor is always null.
| scope required | string Enum: "friends" "global" |
| sort | string Default: "current" Enum: "current" "best" |
| limit | integer [ 1 .. 25 ] Default: 25 |
| cursor | string Accepted for older clients. The board always returns the top 25, so this value does not move the window and nextCursor is null. |
{- "viewer": {
- "rank": 1,
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "currentStreak": 0,
- "bestStreak": 0,
- "isSelf": true
}, - "entries": [
- {
- "rank": 1,
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "currentStreak": 0,
- "bestStreak": 0,
- "isSelf": true
}
], - "nextCursor": "string"
}Returns one entry per calendar day in the requested month in the user's IANA time zone. Days where the authenticated user published at least one IMAGE or VIDEO post include firstPhotoUrl, firstThumbnailUrl, and photoCount > 0. A video day's cover is its thumbnail when one exists. Empty days have photoCount: 0 and null URLs. Days are ordered newest-first (end of month → start of month).
| year required | integer >= 2020 Example: year=2026 |
| month required | integer [ 1 .. 12 ] Example: month=6 |
[- {
- "date": "2026-06-12",
- "firstPhotoUrl": "string",
- "firstThumbnailUrl": "string",
- "photoCount": 3
}
]Returns all IMAGE and VIDEO media items the authenticated user published on the given calendar date in the user's IANA time zone, ordered by post creation time and sort_order. Used to populate the day-detail carousel in the streak tab.
| date required | string <date> Example: 2026-06-12 |
[- {
- "mediaItemId": "4f8ad02a-e871-4be1-b126-4101e272c59a",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "caption": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "sortOrder": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
]| q required | string <= 100 characters |
| limit | integer [ 1 .. 20 ] Default: 10 |
| lat | number <double> [ -90 .. 90 ] |
| lon | number <double> [ -180 .. 180 ] |
{- "locations": [
- {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}
]
}| lat required | number <double> [ -90 .. 90 ] |
| lon required | number <double> [ -180 .. 180 ] |
| radius | integer [ 1 .. 10000 ] Default: 2000 |
| limit | integer [ 1 .. 20 ] Default: 10 |
| page | integer [ 0 .. 10 ] Default: 0 Zero-based page. Results stay ordered from nearest to farthest inside the radius. |
{- "locations": [
- {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}
]
}| caption | string <= 2000 characters |
| groupId | string or null <uuid> First tagged social group (legacy). Combined with |
| groupIds | Array of strings or null <uuid> <= 10 items [ items <uuid > ] Additional or complete list of tagged social groups (max 10 unique). |
| feedKind | string Enum: "check_in" "share_bill" |
| checkInPlace | string or null <= 500 characters |
object (PostLocationResponse) | |
Array of objects (CreatePostMediaItemRequest) [ 1 .. 10 ] items Up to 10 media items (images and videos, mixed). | |
| companionIds | Array of strings <uuid> [ items <uuid > ] |
| mediaId | string or null <uuid> |
object (ShareBillRequest) | |
| companionGroupName | string or null <= 200 characters Display name of the social group tagged on a share-bill post. Not a feed groupId. |
object (PostAudienceRequest) |
{- "caption": "string",
- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "feedKind": "check_in",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "mediaItems": [
- {
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "image",
- "durationSecs": 60,
- "sortOrder": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "companionIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splitType": "string",
- "participants": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "customAmounts": {
- "property1": "string",
- "property2": "string"
}, - "autoReminderEnabled": false,
- "pendingCompanions": [
- {
- "displayName": "string",
- "email": "user@example.com",
- "amount": "string",
- "inviteChannel": "EMAIL"
}
]
}, - "companionGroupName": "string",
- "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}Records views for up to 20 posts in a single call. Posts that are deleted, inaccessible, or authored by the caller are silently skipped. Returns the assembled view for each successfully recorded post.
| postIds required | Array of strings <uuid> [ 1 .. 20 ] items [ items <uuid > ] |
{- "postIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}
]Records a view for the authenticated viewer (except author). Returns full comments and viewers. Reaction rows are omitted (reactions: []); use reactionPreview / counts on the card, or GET /v1/feed/posts/{postId}/reactions for the full grouped list. Visibility follows audience plus ongoing access for post companions and bill-split participants, including after the viewer unfriends the author.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}Author-only. Updates caption, media items, audience, and tagged companions. Snapshots the previous caption, media, audience, and companions into edit history before applying the change. Location and bill split are not editable. Omit audience or companionIds to leave that field unchanged.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| caption | string or null <= 2000 characters |
required | Array of objects (CreatePostMediaItemRequest) [ 1 .. 10 ] items Up to 10 media items (images and videos, mixed). |
object (PostAudienceRequest) | |
| companionIds | Array of strings or null <uuid> [ items <uuid > ] Omit to keep current tagged friends. Empty list clears tags. |
{- "caption": "string",
- "mediaItems": [
- {
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "image",
- "durationSecs": 60,
- "sortOrder": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "companionIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Hides the post from the caller's feed only. Other viewers are unaffected. Idempotent when the post is already hidden.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Reports the post for moderation review and hides it from the caller's feed. Authors cannot report their own posts. Idempotent when the caller already reported the same post (existing report is left unchanged; hide is still applied). When reason is OTHER, note is required.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| reason required | string (ReportPostReason) Enum: "SPAM" "HARASSMENT" "HATE_SPEECH" "NUDITY" "VIOLENCE" "MISINFORMATION" "SCAM" "OTHER" Why the caller is reporting the post |
| note | string or null <= 500 characters Optional details; required when reason is OTHER |
{- "reason": "SPAM",
- "note": "string"
}{ }Previous post snapshots, newest first. Visible to anyone who can view the post. Includes caption, media, audience, and companions when those fields were captured. The live post is the current version and is not included.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "items": [
- {
- "revisionNumber": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "caption": "string",
- "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
]
}
]
}Returns all reactors grouped by user with per-emoji counts, sorted by total reaction count descending then userId. Same visibility rules as GET /v1/feed/posts/{postId}.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "reactionCount": 0,
- "reactorCount": 0,
- "items": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
]
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| emoji required | string <= 64 characters |
{- "emoji": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Pages users who viewed the post (excluding the author), newest first. Only the post author may call this. viewCount is the total, which may exceed viewers.length.
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 Viewers per page (1–100). |
{- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "limit": 0,
- "hasMore": true,
- "viewCount": 0
}Pages top-level comments (parentCommentId is null) using page/limit. filter applies to roots only: COMMENTS (STANDARD), EVIDENCE, or ALL. Every descendant of a returned root is included in the same comments array, regardless of type. Soft-deleted comments are returned as tombstones (body null).
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 Number of root comments per page (1–100). Children do not count toward limit. |
| filter | string Default: "ALL" Enum: "COMMENTS" "EVIDENCE" "ALL" |
{- "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "page": 0,
- "limit": 1,
- "hasMore": true
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| body | string or null <= 4000 characters |
| parentCommentId | string or null <uuid> Root comment to reply under (server flattens reply-to-reply). |
Array of objects (CreateCommentAttachmentRequest) |
{- "body": "string",
- "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
]
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| commentId required | string <uuid> |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
{ }Returns unique reactors with their emoji counts, ordered by reaction count. Pass emoji to return only people who reacted with that emoji.
| commentId required | string <uuid> |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| emoji | string <= 64 characters When set, only reactors who used this emoji are returned. |
{- "reactionCount": 0,
- "reactorCount": 0,
- "items": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
]
}Adds the emoji, or removes it when the caller already reacted with the same emoji.
| commentId required | string <uuid> |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| emoji required | string <= 64 characters |
{- "emoji": "string"
}{- "reaction": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| targetUserIds | Array of strings <uuid> [ items <uuid > ] Optional subset of unpaid participants; omit to remind all unpaid |
| message required | string <= 500 characters Text included in the Splick Bot reminder comment |
Array of objects (CreateCommentAttachmentRequest) <= 1 items Optional GIF attached to the Splick Bot reminder comment |
{- "targetUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "message": "string",
- "attachments": [
- {
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
]
}{- "sentCount": 0,
- "skippedCount": 0
}| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| splitId required | string <uuid> |
| message | string <= 500 characters |
required | Array of objects (CreateCommentAttachmentRequest) non-empty |
{- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "message": "string",
- "attachments": [
- {
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
]
}{- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "commentId": "ee0469af-2fa1-4b7e-b5f1-8e711a95821b"
}| evidenceId required | string <uuid> |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| message | string <= 500 characters Optional approve note. Server creates one evidence-moderation reply authored by the reviewer that tags the evidence submitter and appends this note (or a default thank-you when omitted). |
{- "message": "string"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| splitId required | string <uuid> |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| message | string <= 500 characters Optional approve note. Server creates one evidence-moderation reply authored by the reviewer that tags the evidence submitter and appends this note (or a default thank-you when omitted). |
{- "message": "string"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| evidenceId required | string <uuid> |
| unresolved | string Inserted by splick-docs prepare-openapi. The backend snapshot references a parameter that is not defined. |
| reason required | string <= 500 characters |
{- "reason": "string"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| page | integer >= 0 Default: 0 |
| size | integer [ 1 .. 100 ] Default: 20 |
| category | string Enum: "ALL" "POSTS" "FRIENDS" "EXPENSES" Optional filter by notification type group. ALL (default) returns every type. POSTS is feed/post/streak types. EXPENSES is bills, settlements, and payment evidence. FRIENDS is friend requests and group invites. Chat/group-message types appear only under ALL. |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "string",
- "title": "string",
- "body": "string",
- "isRead": true,
- "referenceId": "8502eb05-558d-4480-8511-c1011710b340",
- "actorUserId": "94141e08-adc7-44ce-bed3-45f031b9f36f",
- "destination": {
- "screen": "POST_DETAIL",
- "postId": "1d33c5d7-f0cb-41cc-a647-907f16832fc3",
- "commentId": "ee0469af-2fa1-4b7e-b5f1-8e711a95821b"
}, - "createdAt": "2019-08-24T14:15:22Z"
}
]Returns badge counts for tab icons and the notification bell. notifications is unseen home-feed posts, friends is incoming pending friend requests, expenses is counterparties the current user still owes, and messages is unread conversations (one per peer or group), not the sum of unread messages. inbox is unread notification-inbox rows (excludes chat types). Opening the bell does not clear inbox; mark-read / mark-all-read does. Optimized for polling.
{- "notifications": 0,
- "friends": 0,
- "expenses": 0,
- "messages": 0,
- "inbox": 0,
- "total": 0
}Marks the notification as read and clicked. Mobile clients call this when the user taps a notification item.
| notificationId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Records that the notification inbox was opened. Does not mark individual notifications as read and does not change the bell inbox unread count. Clients should not use this to clear the bell badge.
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| token required | string <= 4096 characters |
| platform required | string Enum: "ios" "android" |
| bundleId required | string iOS bundle id or Android applicationId / package name. |
| environment | string Enum: "sandbox" "production" Required for iOS APNs. Optional for Android FCM. |
{- "token": "string",
- "platform": "ios",
- "bundleId": "com.splick.app",
- "environment": "sandbox"
}{ }| page | integer Default: 0 |
| limit | integer Default: 20 |
| type | string Enum: "DIRECT" "GROUP" Optional inbox filter by conversation type. |
| unreadOnly | boolean Default: false When true, return only conversations with unread messages. |
| closeFriendsOnly | boolean Default: false When true, return only DIRECT conversations whose peer the caller marked as a close friend. Empty when the caller has no close friends. |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}
], - "nextCursor": "string",
- "hasMore": true
}Returns an existing direct conversation or creates one. Blocked users cannot start a new conversation (403).
| friendUserId required | string <uuid> |
{- "friendUserId": "6501e41b-0761-451a-aad4-339fc41162aa"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}Hides the conversation and existing messages for the caller only. The other participants keep the thread. New messages after deletion bring the chat back to the inbox.
| conversationId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| conversationId required | string <uuid> |
| page | integer Default: 0 |
| limit | integer Default: 30 |
| after | integer <int64> Return messages with sequenceNo strictly greater than this value (forward sync). |
| before | integer <int64> Return messages with sequenceNo strictly less than this value (older page). |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}
], - "nextCursor": "string",
- "hasMore": true
}| conversationId required | string <uuid> |
| body | string <= 2000 characters |
| clientMessageId required | string <uuid> |
Array of objects (MessageAttachmentRequest) <= 5 items | |
| replyToMessageId | string or null <uuid> |
{- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyToMessageId": "666dd795-555f-462a-8c3b-fb8ab1fdc45f"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}| conversationId required | string <uuid> |
| messageId required | string <uuid> |
| body required | string [ 1 .. 2000 ] characters |
{- "body": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}Soft-deletes the message for all participants. The row remains in the timeline with recalled=true and an empty body so clients can render a placeholder.
| conversationId required | string <uuid> |
| messageId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| conversationId required | string <uuid> |
| messageId required | string <uuid> |
| emoji required | string <= 64 characters |
{- "emoji": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}| conversationId required | string <uuid> |
| messageId required | string <uuid> |
| reactionId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| conversationId required | string <uuid> |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "previewText": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "pinnedAt": "2019-08-24T14:15:22Z",
- "pinnedBy": "51699c6f-7ea1-4ed9-8927-11448e2e6c19"
}
]| conversationId required | string <uuid> |
| messageId required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "previewText": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "pinnedAt": "2019-08-24T14:15:22Z",
- "pinnedBy": "51699c6f-7ea1-4ed9-8927-11448e2e6c19"
}| conversationId required | string <uuid> |
| messageId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| conversationId required | string <uuid> |
| upToMessageId required | string <uuid> |
{- "upToMessageId": "c2de52f7-b6ea-43ee-8d36-5df53357ff03"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Used when the recipient app has the message (including from a push) but the messaging websocket is not connected. Idempotent. Advances the caller's delivery cursor and notifies the sender.
| conversationId required | string <uuid> |
| messageId required | string <uuid> |
{- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85"
}{ }| conversationId required | string <uuid> |
| notificationsEnabled required | boolean |
| notificationSound required | string Enum: "default" "note" "chime" "pop" "silent" |
| mutedUntil | string or null <date-time> Mute until this instant (UTC). Omit or null with notificationsEnabled=false to mute indefinitely. Ignored when notificationsEnabled=true. |
{- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}| conversationId required | string <uuid> |
| wallpaper | string or null <= 2048 characters Preset id or https image URL. Null or blank clears the wallpaper back to the default background. |
{- "wallpaper": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}| bubbleTheme | string or null Enum: "rat" "ox" "tiger" "rabbit" "dragon" "snake" "horse" "goat" "monkey" "rooster" "dog" "pig" "capybara" "shiba" "cat" "alien" Zodiac bubble id. Null or omitted clears the theme. |
{- "bubbleTheme": "rat"
}{- "bubbleTheme": "rat"
}| q required | string [ 2 .. 100 ] characters Message body search query (minimum 2 characters) |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 50 ] Default: 20 |
| conversationId | string <uuid> When set, only search messages in this conversation |
[- {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "body": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}
}
]| groupId | string or null <uuid> Optional social group id to keep messaging and social groups aligned. |
| name required | string <= 100 characters |
| avatarUrl | string or null <= 500 characters |
| memberUserIds required | Array of strings <uuid> non-empty [ items <uuid > ] |
{- "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "name": "string",
- "avatarUrl": "string",
- "memberUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}| groupId required | string <uuid> |
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "role": "ADMIN",
- "status": "ACTIVE"
}
]| groupId required | string <uuid> |
| memberUserId required | string <uuid> |
| shareChatHistory | boolean Default: true When true (default), the new member can read existing group messages. When false, they only see messages sent after they join. |
{- "memberUserId": "691033db-7716-4808-9ff9-a10a4f88c52c",
- "shareChatHistory": true
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| groupId required | string <uuid> |
| memberUserId required | string <uuid> |
{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}| groupId required | string <uuid> |
| name required | string <= 100 characters |
{- "name": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}| groupId required | string <uuid> |
| avatarUrl required | string <= 2048 characters |
{- "avatarUrl": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}| groupId required | string <uuid> |
| newAdminUserId required | string <uuid> |
{- "newAdminUserId": "207e0b94-1bd8-4440-a934-1aad1963024a"
}{- "status": 0,
- "error": "string",
- "message": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "traceId": "string"
}Returns a one-time ticket for upgrading to GET /v1/messaging/ws?ticket={ticket}. Prefer tickets over putting the access JWT in the WebSocket query string.
{- "ticket": "string"
}Returns online state and last-seen timestamps for up to 100 user IDs.
| userIds required | Array of strings <uuid> [ 1 .. 100 ] items [ items <uuid > ] |
{- "userIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "items": [
- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}
]
}Returns GIF/sticker assets uploaded for a group (stored on R2).
Optional keyword filters by name or tag.
| groupId required | string <uuid> |
| keyword | string <= 100 characters |
[- {
- "id": "string",
- "width": 0,
- "height": 0
}
][- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "provider": "klipy",
- "externalId": "string",
- "name": "string",
- "width": 0,
- "height": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
]| provider required | string Enum: "klipy" "custom" |
| externalId required | string <= 128 characters |
| url required | string <uri> <= 2048 characters |
| previewUrl | string or null <uri> <= 2048 characters |
| name | string or null <= 255 characters |
| width | integer or null |
| height | integer or null |
{- "provider": "klipy",
- "externalId": "string",
- "name": "string",
- "width": 0,
- "height": 0
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "provider": "klipy",
- "externalId": "string",
- "name": "string",
- "width": 0,
- "height": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "provider": "klipy",
- "externalId": "string",
- "name": "string",
- "width": 0,
- "height": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}
]| provider required | string Enum: "klipy" "custom" |
| externalId required | string <= 128 characters |
| url required | string <uri> <= 2048 characters |
| previewUrl | string or null <uri> <= 2048 characters |
| name | string or null <= 255 characters |
| width | integer or null |
| height | integer or null |
{- "provider": "klipy",
- "externalId": "string",
- "name": "string",
- "width": 0,
- "height": 0
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "provider": "klipy",
- "externalId": "string",
- "name": "string",
- "width": 0,
- "height": 0,
- "createdAt": "2019-08-24T14:15:22Z"
}Internal communication-service endpoint for single email delivery using raw content or a template.
| userId | string or null <uuid> |
| to required | string <email> |
| subject required | string |
| textBody | string or null |
| htmlBody | string or null |
| from | string or null <email> |
| fromName | string or null |
| cc | Array of strings <email> [ items <email > ] |
| bcc | Array of strings <email> [ items <email > ] |
| replyTo | string or null <email> |
| templateId | string or null |
object | |
| locale | string or null |
Array of objects (AttachmentRequest) |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "to": "user@example.com",
- "subject": "string",
- "textBody": "string",
- "htmlBody": "string",
- "from": "user@example.com",
- "fromName": "string",
- "cc": [
- "user@example.com"
], - "bcc": [
- "user@example.com"
], - "replyTo": "user@example.com",
- "templateId": "string",
- "templateVariables": {
- "property1": "string",
- "property2": "string"
}, - "locale": "string",
- "attachments": [
- {
- "filename": "string",
- "contentType": "string",
- "base64Content": "string"
}
]
}{- "messageId": "string",
- "acceptedAt": "2019-08-24T14:15:22Z"
}Internal endpoint that queues email dispatch on the service async executor and returns immediately.
| userId | string or null <uuid> |
| to required | string <email> |
| subject required | string |
| textBody | string or null |
| htmlBody | string or null |
| from | string or null <email> |
| fromName | string or null |
| cc | Array of strings <email> [ items <email > ] |
| bcc | Array of strings <email> [ items <email > ] |
| replyTo | string or null <email> |
| templateId | string or null |
object | |
| locale | string or null |
Array of objects (AttachmentRequest) |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "to": "user@example.com",
- "subject": "string",
- "textBody": "string",
- "htmlBody": "string",
- "from": "user@example.com",
- "fromName": "string",
- "cc": [
- "user@example.com"
], - "bcc": [
- "user@example.com"
], - "replyTo": "user@example.com",
- "templateId": "string",
- "templateVariables": {
- "property1": "string",
- "property2": "string"
}, - "locale": "string",
- "attachments": [
- {
- "filename": "string",
- "contentType": "string",
- "base64Content": "string"
}
]
}{- "messageId": "string",
- "acceptedAt": "2019-08-24T14:15:22Z"
}Internal endpoint for up to 100 recipients per request. Returns a job id for later delivery-status queries.
required | Array of objects (BulkRecipient) [ 1 .. 100 ] items |
| subject required | string |
| textBody | string or null |
| htmlBody | string or null |
| from | string or null <email> |
| fromName | string or null |
| cc | Array of strings <email> [ items <email > ] |
| bcc | Array of strings <email> [ items <email > ] |
| replyTo | string or null <email> |
| templateId | string or null |
object | |
| locale | string or null |
Array of objects (AttachmentRequest) |
{- "recipients": [
- {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "to": "user@example.com",
- "variables": {
- "property1": "string",
- "property2": "string"
}
}
], - "subject": "string",
- "textBody": "string",
- "htmlBody": "string",
- "from": "user@example.com",
- "fromName": "string",
- "cc": [
- "user@example.com"
], - "bcc": [
- "user@example.com"
], - "replyTo": "user@example.com",
- "templateId": "string",
- "templateVariables": {
- "property1": "string",
- "property2": "string"
}, - "locale": "string",
- "attachments": [
- {
- "filename": "string",
- "contentType": "string",
- "base64Content": "string"
}
]
}{- "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39",
- "totalCount": 0,
- "submittedAt": "2019-08-24T14:15:22Z"
}Email-specific delivery history with optional filters for bulk jobs and recipient.
| jobId | string <uuid> |
| recipient | string |
| status | string (EmailDeliveryStatus) Enum: "PENDING" "SENT" "DELIVERED" "FAILED" "BOUNCED" "COMPLAINED" |
| page | integer Default: 0 |
| size | integer Default: 20 |
{- "content": [
- {
- "messageId": "string",
- "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "recipient": "string",
- "channel": "EMAIL",
- "subject": "string",
- "templateId": "string",
- "status": "PENDING",
- "provider": "string",
- "providerMsgId": "string",
- "errorMessage": "string",
- "sentAt": "2019-08-24T14:15:22Z",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}{- "messageId": "string",
- "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "recipient": "string",
- "channel": "EMAIL",
- "subject": "string",
- "templateId": "string",
- "status": "PENDING",
- "provider": "string",
- "providerMsgId": "string",
- "errorMessage": "string",
- "sentAt": "2019-08-24T14:15:22Z",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}Unified delivery history across EMAIL, SMS, and PUSH channels.
| userId | string <uuid> |
| channel | string (DeliveryChannel) Enum: "EMAIL" "SMS" "PUSH" |
| status | string (EmailDeliveryStatus) Enum: "PENDING" "SENT" "DELIVERED" "FAILED" "BOUNCED" "COMPLAINED" |
| recipient | string |
| templateId | string |
| from | string <date-time> |
| to | string <date-time> |
| page | integer Default: 0 |
| size | integer Default: 20 |
{- "content": [
- {
- "messageId": "string",
- "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "recipient": "string",
- "channel": "EMAIL",
- "subject": "string",
- "templateId": "string",
- "status": "PENDING",
- "provider": "string",
- "providerMsgId": "string",
- "errorMessage": "string",
- "sentAt": "2019-08-24T14:15:22Z",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "page": {
- "page": 0,
- "size": 0,
- "totalElements": 0,
- "totalPages": 0
}
}Admin view of current daily/monthly email quota counters from Postgres (email_provider_quota_usage). Returns app-wide totals plus per-provider used/limit/remaining for the smart-routing provider pool.
{- "routingMode": "smart",
- "dailyPeriodKey": "20261005",
- "monthlyPeriodKey": "202610",
- "total": {
- "dailyUsed": 0,
- "monthlyUsed": 0,
- "dailyLimit": 0,
- "monthlyLimit": 0,
- "dailyRemaining": 0,
- "monthlyRemaining": 0
}, - "providers": [
- {
- "provider": "resend",
- "enabled": true,
- "dailyUsed": 0,
- "dailyLimit": 0,
- "dailyRemaining": 0,
- "monthlyUsed": 0,
- "monthlyLimit": 0,
- "monthlyRemaining": 0,
- "remaining": 0
}
]
}{- "messageId": "string",
- "jobId": "9d222c6d-893e-4e79-8201-3c9ca16a0f39",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "recipient": "string",
- "channel": "EMAIL",
- "subject": "string",
- "templateId": "string",
- "status": "PENDING",
- "provider": "string",
- "providerMsgId": "string",
- "errorMessage": "string",
- "sentAt": "2019-08-24T14:15:22Z",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z"
}Resend delivery callback endpoint. Signature verification uses the Svix headers and the configured webhook secret.
| property name* additional property | any |
{ }{ }Requires Authorization: Bearer <COMMUNICATION_BREVO_WEBHOOK_SECRET>.
Maps sent/delivered/bounce/spam events to delivery log status.
| property name* additional property | any |
{ }{ }Requires HTTP Basic auth (COMMUNICATION_MAILJET_WEBHOOK_USER /
COMMUNICATION_MAILJET_WEBHOOK_SECRET). Mailjet sent maps to DELIVERED.
| property name* additional property | any |
{ }{ }Verifies HMAC-SHA256 Mailtrap-Signature with
COMMUNICATION_MAILTRAP_WEBHOOK_SIGNING_SECRET.
| property name* additional property | any |
{ }{ }Requires query token or header X-Webhook-Token
matching COMMUNICATION_SENDPULSE_WEBHOOK_SECRET.
| token | string |
| property name* additional property | any |
{ }{ }Service-to-service lookup of a user's preferred locale (vi|en) and avatar URL. Used by notification-service for localized push copy and actor avatar backfill. Requires header X-Internal-Api-Key.
| userId required | string <uuid> |
{- "preferredLocale": "vi",
- "avatarUrl": "string"
}Service-to-service lookup of a user's payment profile. Used by social-service for friend-only reads. Requires header X-Internal-Api-Key.
| userId required | string <uuid> |
{- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "qrImageUrl": "string",
- "accountName": "string",
- "accountNumber": "string",
- "bankName": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}Ops-only listing of product trial waitlist rows. Not exposed via Kong; call auth-service directly on the internal network. Requires header X-Internal-Api-Key.
| status | string Enum: "PENDING" "WHITELISTED" "APPROVED" "REJECTED" Omit to return every status. |
| platform | string Enum: "ios" "android" Omit to return every platform. |
string Case-insensitive substring match on the registrant email. | |
| from | string <date> Inclusive start of createdAt, as a calendar date in Asia/Ho_Chi_Minh. |
| to | string <date> Inclusive end of createdAt, as a calendar date in Asia/Ho_Chi_Minh. |
| page | integer >= 0 Default: 0 |
| limit | integer [ 1 .. 100 ] Default: 20 |
{- "items": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "page": 0,
- "limit": 0,
- "total": 0,
- "hasMore": true
}Exports Android emails in Google Play Console tester-list format (one email per line, no header, UTF-8 without BOM). Android PENDING rows are marked WHITELISTED in the same transaction. iOS rows are omitted. Cap 5000 rows. Not exposed via Kong. Requires header X-Internal-Api-Key.
| status | string Enum: "PENDING" "WHITELISTED" "APPROVED" "REJECTED" |
| platform | string Enum: "ios" "android" |
string | |
| from | string <date> |
| to | string <date> |
{ }Approves a trial registration and enqueues an approval email. iOS may be approved from PENDING; Android requires WHITELISTED first. Idempotent when already APPROVED (200, no second email). Not exposed via Kong. Requires header X-Internal-Api-Key.
| id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}Marks a PENDING or WHITELISTED trial registration as REJECTED. No rejection email is sent. Idempotent when already REJECTED. Not exposed via Kong. Requires header X-Internal-Api-Key.
| id required | string <uuid> |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "platform": "ios",
- "status": "PENDING",
- "locale": "en",
- "approvedAt": "2019-08-24T14:15:22Z",
- "rejectedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "shortcode": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
][- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "shortcode": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
]| alias | string or null <= 30 characters Optional shortcode alias (lowercase letters, digits, underscore). Auto-generated if blank. |
| mediaId required | string <uuid> |
{- "alias": "string",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "shortcode": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}Aggregates badge counts, feed first page, streak summary, conversations, and custom emojis in one request.
{- "badgeCounts": {
- "notifications": 0,
- "friends": 0,
- "expenses": 0,
- "messages": 0,
- "inbox": 0,
- "total": 0
}, - "currentStreak": 0,
- "hasTodayPhoto": true,
- "feedFirstPage": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "mediaItems": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mediaUrl": "string",
- "thumbnailUrl": "string",
- "mediaType": "string",
- "durationSeconds": 0,
- "sortOrder": 0,
- "widthPx": 0,
- "heightPx": 0,
- "music": {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "clipStartMillis": 0,
- "clipEndMillis": 1
}
}
], - "caption": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "reactionCount": 0,
- "reactorCount": 0,
- "reactionPreview": [
- {
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "emojiCounts": [
- {
- "emoji": "string",
- "count": 1
}
]
}
], - "groupId": "eb54e96e-21b8-4f54-9cd4-80fccbd06f55",
- "groupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "createdAt": "2019-08-24T14:15:22Z",
- "editedAt": "2019-08-24T14:15:22Z",
- "companions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "feedKind": "string",
- "checkInPlace": "string",
- "location": {
- "placeId": "string",
- "displayName": "string",
- "lat": 0.1,
- "lon": 0.1,
- "name": "string",
- "address": "string",
- "distanceMeters": 0,
- "checkInCount": 0
}, - "audience": {
- "mode": "friends",
- "allowedGroupIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "allowedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "excludedUserIds": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}, - "billSplit": {
- "totalAmount": "string",
- "currency": "string",
- "splits": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "guest": {
- "displayName": "string",
- "status": "pending",
- "inviteChannel": "email"
}, - "amount": "string",
- "isPaid": true,
- "paymentStatus": "UNPAID",
- "latestEvidenceCommentId": "e5275706-5d20-4565-9aab-2712b137bd69",
- "lastRejectedAt": "2019-08-24T14:15:22Z",
- "reminderCount": 0,
- "inviteUrl": "string"
}
], - "tableInviteUrl": "string"
}, - "comments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "author": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}, - "body": "string",
- "mentions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string"
}
], - "parentCommentId": "32135137-e98b-4a27-b840-a577578abf9d",
- "attachments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "image",
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "fileName": "string",
- "thumbnailUrl": "string",
- "sizeBytes": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "deletedAt": "2019-08-24T14:15:22Z",
- "commentType": "STANDARD",
- "evidenceId": "84c8ea22-9959-4357-9a32-7546d09a0037",
- "splitId": "de34ca5c-3404-42f1-84f9-e8d3dd216a8f",
- "evidenceStatus": "PENDING",
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}
], - "commentCount": 0,
- "viewCount": 0,
- "viewers": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "viewedAt": "2019-08-24T14:15:22Z"
}
]
}
], - "conversations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "DIRECT",
- "unreadCount": 0,
- "peer": {
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "username": "string",
- "displayName": "string",
- "avatarUrl": "string",
- "online": true,
- "lastSeenAt": "2019-08-24T14:15:22Z"
}, - "groupName": "string",
- "groupAvatarUrl": "string",
- "memberCount": 0,
- "lastMessage": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "conversationId": "ee6e55e8-45fe-4a3e-9bc8-4669f9fdf77a",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "clientMessageId": "6751c24a-b4eb-49b8-a2cb-e2427e57e61b",
- "createdAt": "2019-08-24T14:15:22Z",
- "sequenceNo": 0,
- "editedAt": "2019-08-24T14:15:22Z",
- "recalled": false,
- "reactions": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "emoji": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "status": "sent",
- "attachments": [
- {
- "mediaId": "5a8ffac5-2288-485d-b463-90c3cd9941ad",
- "url": "string",
- "thumbnailUrl": "string"
}
], - "replyPreview": {
- "messageId": "8540d774-4863-4d2b-b788-4ecb19412e85",
- "senderId": "6b2f63ba-164c-48c9-87b1-690cee2b3da3",
- "senderDisplayName": "string",
- "body": "string",
- "hasImageAttachment": true
}, - "type": "USER",
- "senderBubbleTheme": "rat"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "notificationsEnabled": true,
- "notificationSound": "default",
- "mutedUntil": "2019-08-24T14:15:22Z",
- "leftAt": "2019-08-24T14:15:22Z",
- "closeFriend": false,
- "wallpaper": "string"
}
], - "customEmojis": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ownerId": "4d206909-730f-409a-88f6-dcfaa8fc28cc",
- "shortcode": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
]
}Public version check for the Android client. Show an update only when latestVersionCode is greater than the installed versionCode. latestVersionName is display text and is not compared. No authentication.
{- "latestVersionCode": 0,
- "latestVersionName": "1.0.6",
- "forceUpdate": true
}Public version check for the iOS client. Show an update only when latestVersionCode is greater than CFBundleVersion. latestVersionName is display text and is not compared. channel=app-store reads the highest ios row. channel=testflight reads the highest ios-testflight row. No authentication.
| channel | string Default: "app-store" Enum: "app-store" "testflight" |
{- "latestVersionCode": 0,
- "latestVersionName": "1.0.6",
- "forceUpdate": true
}| schema required | string |
| ids | Array of integers |
{- "schema": "string",
- "ids": [
- 0
]
}{ }| entityType required | string Enum: "IP" "DEVICE" |
| entityValue required | string |
| reason required | string |
| durationMinutes | integer |
{- "entityType": "IP",
- "entityValue": "string",
- "reason": "string",
- "durationMinutes": 0
}{ }Signs an ES256 developer token for MusicKit clients. The MusicKit private key stays on the server. Requires an authenticated Splick user. Returns 503 when MusicKit credentials are not configured and 429 when the caller exceeds the token rate limit. Does not return a music user token.
{- "token": "string",
- "expiresAt": "2019-08-24T14:15:22Z"
}Aggregates metadata from Apple Music, Audius, Deezer, and iTunes. Returns an empty list with provider outcomes when every provider fails. Does not return signed audio URLs.
| q required | string [ 1 .. 100 ] characters |
| market | string^[A-Za-z]{2}$ |
| limit | integer [ 1 .. 100 ] Default: 100 |
| pageToken | string |
{- "tracks": [
- {
- "catalogTrackId": "b91c8262-53cb-4eb8-918b-dd6aeecbdbb4",
- "title": "string",
- "artists": [
- "string"
], - "albumTitle": "string",
- "durationMillis": 0,
- "isrc": "string",
- "artwork": {
- "originalUrl": "string",
- "derivedUrl": "string"
}, - "references": [
- {
- "provider": "string",
- "externalId": "string",
- "canonicalUrl": "string",
- "isrc": "string",
- "matchStatus": "string"
}
], - "capabilities": [
- "string"
], - "provenance": "string",
- "saved": true
}
], - "nextPageToken": "string",
- "outcomes": [
- {
- "provider": "string",
- "status": "string",
- "count": 0,
- "code": "string"
}
]
}Ranks tracks by how many posts and notes currently attach them. Metadata comes from those attachments. Does not return signed audio URLs.
| limit | integer [ 1 .. 100 ] Default: 100 |
| pageToken | string |
{- "tracks": [
- {
- "catalogTrackId": "b91c8262-53cb-4eb8-918b-dd6aeecbdbb4",
- "title": "string",
- "artists": [
- "string"
], - "albumTitle": "string",
- "durationMillis": 0,
- "isrc": "string",
- "artwork": {
- "originalUrl": "string",
- "derivedUrl": "string"
}, - "references": [
- {
- "provider": "string",
- "externalId": "string",
- "canonicalUrl": "string",
- "isrc": "string",
- "matchStatus": "string"
}
], - "capabilities": [
- "string"
], - "provenance": "string",
- "saved": true
}
], - "nextPageToken": "string",
- "outcomes": [
- {
- "provider": "string",
- "status": "string",
- "count": 0,
- "code": "string"
}
]
}Returns one page of saved tracks, newest first. Pass pageToken to load the next page.
| limit | integer [ 1 .. 100 ] Default: 100 |
| pageToken | string |
{- "tracks": [
- {
- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "saved": true
}
], - "nextPageToken": "string"
}| provider required | string |
| externalId required | string |
| title required | string |
| artist | string |
| artworkUrl | string or null |
{- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string"
}{- "provider": "string",
- "externalId": "string",
- "title": "string",
- "artist": "string",
- "artworkUrl": "string",
- "saved": true
}Returns 404 until the background ingest job has committed the track.
| trackId required | string <uuid> |
{- "catalogTrackId": "b91c8262-53cb-4eb8-918b-dd6aeecbdbb4",
- "title": "string",
- "artists": [
- "string"
], - "albumTitle": "string",
- "durationMillis": 0,
- "isrc": "string",
- "artwork": {
- "originalUrl": "string",
- "derivedUrl": "string"
}, - "references": [
- {
- "provider": "string",
- "externalId": "string",
- "canonicalUrl": "string",
- "isrc": "string",
- "matchStatus": "string"
}
], - "capabilities": [
- "string"
], - "provenance": "string",
- "saved": true
}| trackId required | string <uuid> |
| provider | string |
| externalId | string |
| resourceType required | string Enum: "PREVIEW" "STREAM" "EXTERNAL_LINK" |
| preferredProvider | string |
{- "provider": "string",
- "externalId": "string",
- "resourceType": "PREVIEW",
- "preferredProvider": "string"
}{- "availability": "string",
- "provider": "string",
- "externalId": "string",
- "resourceType": "string",
- "url": "string",
- "mimeType": "string",
- "durationMillis": 0,
- "expiryState": "string",
- "expiresAt": "2019-08-24T14:15:22Z",
- "resolvedAt": "2019-08-24T14:15:22Z",
- "usage": "string",
- "license": "string",
- "refreshSupported": true
}Uses provider and externalId. Does not require a catalog row.
| provider | string |
| externalId | string |
| resourceType required | string Enum: "PREVIEW" "STREAM" "EXTERNAL_LINK" |
| preferredProvider | string |
{- "provider": "string",
- "externalId": "string",
- "resourceType": "PREVIEW",
- "preferredProvider": "string"
}{- "availability": "string",
- "provider": "string",
- "externalId": "string",
- "resourceType": "string",
- "url": "string",
- "mimeType": "string",
- "durationMillis": 0,
- "expiryState": "string",
- "expiresAt": "2019-08-24T14:15:22Z",
- "resolvedAt": "2019-08-24T14:15:22Z",
- "usage": "string",
- "license": "string",
- "refreshSupported": true
}