REST API
Users & profile
Profile, privacy and synced client state, blocks, contact links and invites.
Endpoints of the current account. Privacy settings, chat folders, archive, pinned chats and quick reactions live in the synced client state.
Profile, privacy, contacts#
Get the current user
Profile of the authenticated user.
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/user' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"id": 1,
"name": "Anna Smith",
"email": "anna@example.com",
"created_at": "2026-10-20T11:12:45.000000Z",
"updated_at": "2026-10-21T07:17:33.000000Z",
"avatar": null,
"last_seen_at": "2026-10-21T07:18:22.000000Z",
"push_notifications_enabled": true,
"invited_by_id": null,
"invite_id": null,
"locale": "ru",
"default_history_ttl": 0,
"phone": null,
"about": null,
"birthday": null,
"username": "anna_s",
"is_bot": false,
"phone_verified_at": null,
"avatar_url": null,
"via_google": false
}
Update the profile
Partial update (send only the fields you change). avatar is an image (jpeg/png/gif/webp, ≤ 4000×4000), resized to 800×800 JPEG. username follows the shared username rules (5–32 chars, ^[a-z][a-z0-9_]{4,31}$, must not end with bot). locale sets the language of emails and push notifications.
Parameters
| Name | Type | Description |
|---|---|---|
name
required body
|
string |
Display name. max 255 chars
|
username
optional body
|
string |
Public @username, null to remove.max 32 chars
|
avatar
optional body
|
file |
Avatar image (multipart). max 5 MB
|
push_notifications_enabled
optional body
|
boolean |
Global push switch. |
locale
optional body
|
string |
ru or en.one of:
ru, en |
about
optional body
|
string |
Bio. max 500 chars
|
phone
optional body
|
string |
Phone shown in the profile. max 32 chars
|
birthday
optional body
|
string |
Birthday (date). |
Request
curl -X POST 'https://minchatapp.com/api/user' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"about": "Product designer", "locale": "en"}'
Response
{
"success": true,
"user": {
"id": 1,
"name": "Anna Smith",
"email": "anna@example.com",
"created_at": "2026-10-20T11:12:45.000000Z",
"updated_at": "2026-10-22T09:12:50.000000Z",
"avatar": null,
"last_seen_at": "2026-10-22T09:11:15.000000Z",
"push_notifications_enabled": true,
"invited_by_id": null,
"invite_id": null,
"locale": "en",
"default_history_ttl": 0,
"phone": null,
"about": "Product designer",
"birthday": null,
"username": "anna_s",
"is_bot": false,
"phone_verified_at": null,
"avatar_url": null,
"via_google": false
}
}
Delete the account
Irreversible. Accounts with a password must send password; others send confirmation.
Parameters
| Name | Type | Description |
|---|---|---|
confirmation
required body
|
string |
Confirmation phrase. |
password
required body
|
string |
Current password. |
Request
curl -X DELETE 'https://minchatapp.com/api/user' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
Responds with HTTP 200.
Request an email change
Sends a code to the new address. current_password is required if the account has a password.
Parameters
| Name | Type | Description |
|---|---|---|
email
required body
|
string |
Email address. emailmax 255 chars
|
current_password
optional body
|
string |
Current password. max 256 chars
|
Request
curl -X POST 'https://minchatapp.com/api/user/email/request' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"email": "new@example.com", "current_password": "Secret123"}'
Response
Responds with HTTP 200.
Confirm the email change
Applies the new email; the old address gets a notification.
Parameters
| Name | Type | Description |
|---|---|---|
code
required body
|
string |
Code from the email. max 12 chars
|
Request
curl -X POST 'https://minchatapp.com/api/user/email/confirm' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"code": "123456"}'
Response
Responds with HTTP 200.
Default auto-delete timer
period in seconds (0 = off), applied to new chats.
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/user/auto-delete' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"period": 0
}
Set the default auto-delete timer
Parameters
| Name | Type | Description |
|---|---|---|
period
required body
|
integer |
Seconds, 0 = off, max one year. ≥ 0≤ 31536000
|
Request
curl -X POST 'https://minchatapp.com/api/user/auto-delete' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"period": 604800}'
Response
{
"period": 604800
}
Get synced client state
Cross-device state: privacy settings, folders, archived and pinned chats, quick reactions.
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/user/client-state' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"privacy": [],
"global_privacy": [],
"folders": [],
"archived": [],
"pinned": [],
"quick_reactions": []
}
Update synced client state
Send only the keys you change. quick_reactions is a list of emoji ids (up to 8); null resets to the default set. The response echoes the full state; quick reactions are expanded into emoji cards.
Parameters
| Name | Type | Description |
|---|---|---|
privacy
optional body
|
array |
Per-chat privacy flags. |
global_privacy
optional body
|
array |
Global privacy settings (last seen, etc.). |
folders
optional body
|
array |
Chat folders. max 10 items
|
archived
optional body
|
array |
Archived conversation ids. max 500 items
|
pinned
optional body
|
array |
Pinned conversation ids. max 10 items
|
quick_reactions
optional body
|
array |
Emoji ids for the quick reaction bar. max 8 items
|
quick_reactions.*
optional body
|
integer |
Emoji id. |
Request
curl -X PUT 'https://minchatapp.com/api/user/client-state' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"quick_reactions": [1, 2, 3]}'
Response
{
"privacy": [],
"global_privacy": [],
"folders": [],
"archived": [],
"pinned": [],
"quick_reactions": [
{
"emoji_id": 1,
"set_id": 1,
"set_title": "Min",
"set_active": true,
"shortcode": "thumbsup",
"kind": "unicode",
"unicode": "👍",
"image_url": null,
"count": 0
},
{
"emoji_id": 2,
"set_id": 1,
"set_title": "Min",
"set_active": true,
"shortcode": "heart",
"kind": "unicode",
"unicode": "❤️",
"image_url": null,
"count": 0
},
{
"emoji_id": 3,
"set_id": 1,
"set_title": "Min",
"set_active": true,
"shortcode": "joy",
"kind": "unicode",
"unicode": "😂",
"image_url": null,
"count": 0
}
]
}
Search users
Search by name/username (≥ 2 chars), up to 20 results.
Parameters
| Name | Type | Description |
|---|---|---|
query
required query
|
string |
Search string. min 2 chars
|
Request
curl 'https://minchatapp.com/api/users/search?query=bor' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
[
{
"id": 2,
"name": "Boris Petrov",
"avatar": null,
"last_seen_at": "2026-10-21T06:46:11+00:00",
"status_hidden": false,
"last_seen_bucket": null,
"phone": null,
"about": null,
"birthday": null
}
]
Check a username
Usernames are shared by people, bots and channels. kind: human (default), bot (must end with bot), channel.
Parameters
| Name | Type | Description |
|---|---|---|
username
required query
|
string |
Username to check. max 32 chars
|
kind
optional query
|
string |
human, bot or channel. |
Request
curl 'https://minchatapp.com/api/username-available?username=…' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true,
"username": "weather_bot",
"available": true,
"reason": null,
"code": null
}
List blocked users
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/blocks' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
[
{
"id": 4,
"name": "Gleb Orlov",
"avatar": null
}
]
Block a user
The blocked user can no longer message you in private.
Parameters
| Name | Type | Description |
|---|---|---|
user_id
required body
|
integer |
User id. must exist (users)
|
Request
curl -X POST 'https://minchatapp.com/api/blocks' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"user_id": 4}'
Response
{
"success": true
}
Unblock a user
Parameters
| Name | Type | Description |
|---|---|---|
userId
required path
|
integer |
User id. |
Request
curl -X DELETE 'https://minchatapp.com/api/blocks/2' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true
}
My contact link
Personal link /u/{token} (and /u/{username} when a username is set) that opens a private chat with you.
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/user/contact-link' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"token": "KRNaDjeuvS2A",
"url": "https://minchatapp.com/u/KRNaDjeuvS2A",
"username_url": "https://minchatapp.com/u/anna_s"
}
Rotate the contact link
The old token stops working.
Parameters
No parameters.
Request
curl -X POST 'https://minchatapp.com/api/user/contact-link/rotate' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"token": "g2uGkOSB5TtE",
"url": "https://minchatapp.com/u/g2uGkOSB5TtE",
"username_url": "https://minchatapp.com/u/anna_s"
}
Preview a contact link
Public (Bearer optional). token may also be @username.
Parameters
| Name | Type | Description |
|---|---|---|
token
required path
|
string |
Token from the link. |
Request
curl 'https://minchatapp.com/api/contact-links/KRNaDjeuvS2A' \
-H 'Accept: application/json'
Response
{
"user": {
"id": null,
"name": "Anna Smith",
"username": "anna_s",
"avatar": null,
"is_bot": false
},
"is_self": false
}
Open a contact link
Creates (or returns) the private chat with the link owner.
Parameters
| Name | Type | Description |
|---|---|---|
token
required path
|
string |
Token from the link. |
Request
curl -X POST 'https://minchatapp.com/api/contact-links/KRNaDjeuvS2A/open' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true,
"conversation": {
"id": 5,
"name": "Anna Smith",
"type": "private",
"peer_user_id": 1,
"avatar": null,
"last_message": null,
"unread_count": 0,
"peer_last_seen_at": "2026-10-22T09:12:50+00:00",
"peer_status_hidden": false,
"peer_last_seen_bucket": null,
"peer_calls_allowed": true,
"peer_phone": null,
"peer_about": "Product designer",
"peer_birthday": null
}
}
My registration invites
Non-personal invite codes created by the user.
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/invites' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true,
"invites": [],
"limits": {
"max_active": 10
}
}
Create a registration invite
Up to 10 active codes per user.
Parameters
| Name | Type | Description |
|---|---|---|
max_uses
optional body
|
integer |
Maximum number of uses. ≥ 1≤ 100
|
expires_in_days
optional body
|
integer |
Lifetime in days. ≥ 1≤ 365
|
note
optional body
|
string |
Private note. max 255 chars
|
Request
curl -X POST 'https://minchatapp.com/api/invites' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"max_uses": 1, "expires_in_days": 30, "note": "For a friend"}'
Response
{
"success": true,
"invite": {
"id": 2,
"code": "XQBGFORV1V",
"is_personal": false,
"max_uses": 1,
"uses_count": 0,
"expires_at": "2026-11-21T09:12:50.000000Z",
"revoked_at": null,
"note": "For a friend",
"created_at": "2026-10-22T09:12:50.000000Z",
"is_usable": true,
"invited_users": []
}
}
Personal invite link
Returns (creating if needed) the personal invite code.
Parameters
No parameters.
Request
curl 'https://minchatapp.com/api/invites/personal' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
{
"success": true,
"invite": {
"id": 1,
"code": "I7TSXMCTZX",
"is_personal": true,
"max_uses": 1,
"uses_count": 0,
"expires_at": null,
"revoked_at": null,
"note": null,
"created_at": "2026-10-21T06:47:17.000000Z",
"is_usable": true,
"invited_users": []
},
"url": "https://minchatapp.com/invite/I7TSXMCTZX"
}
Rotate the personal invite
Parameters
No parameters.
Request
curl -X POST 'https://minchatapp.com/api/invites/personal/rotate' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
Responds with HTTP 200.
Revoke an invite
403 for someone else's invite.
Parameters
| Name | Type | Description |
|---|---|---|
invite
required path
|
integer |
Invite id. |
Request
curl -X DELETE 'https://minchatapp.com/api/invites/7' \
-H "Authorization: Bearer $TOKEN" \
-H 'Accept: application/json'
Response
Responds with HTTP 200.