Skip to content

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 /api/user #

Get the current user

Bearer token

Profile of the authenticated user.

Parameters

No parameters.

Request

curl
curl 'https://minchatapp.com/api/user' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "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
}
POST /api/user #

Update the profile

Bearer token multipart/form-data

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
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

HTTP 200
{
  "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 /api/user #

Delete the account

Bearer token Rate limit: 10/10 min

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
curl -X DELETE 'https://minchatapp.com/api/user' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

Responds with HTTP 200.

POST /api/user/email/request #

Request an email change

Bearer token Rate limit: 5/10 min

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
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.

POST /api/user/email/confirm #

Confirm the email change

Bearer token Rate limit: 10/min

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
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.

GET /api/user/auto-delete #

Default auto-delete timer

Bearer token

period in seconds (0 = off), applied to new chats.

Parameters

No parameters.

Request

curl
curl 'https://minchatapp.com/api/user/auto-delete' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "period": 0
}
POST /api/user/auto-delete #

Set the default auto-delete timer

Bearer token

Parameters

Name Type Description
period
required body
integer
Seconds, 0 = off, max one year.
≥ 0≤ 31536000

Request

curl
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

HTTP 200
{
  "period": 604800
}
GET /api/user/client-state #

Get synced client state

Bearer token

Cross-device state: privacy settings, folders, archived and pinned chats, quick reactions.

Parameters

No parameters.

Request

curl
curl 'https://minchatapp.com/api/user/client-state' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "privacy": [],
  "global_privacy": [],
  "folders": [],
  "archived": [],
  "pinned": [],
  "quick_reactions": []
}
PUT /api/user/client-state #

Update synced client state

Bearer token

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
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

HTTP 200
{
  "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
    }
  ]
}
GET /api/username-available #

Check a username

Bearer token Rate limit: 60/min

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
curl 'https://minchatapp.com/api/username-available?username=…' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "success": true,
  "username": "weather_bot",
  "available": true,
  "reason": null,
  "code": null
}
GET /api/blocks #

List blocked users

Bearer token

Parameters

No parameters.

Request

curl
curl 'https://minchatapp.com/api/blocks' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
[
  {
    "id": 4,
    "name": "Gleb Orlov",
    "avatar": null
  }
]
POST /api/blocks #

Block a user

Bearer token Rate limit: 30/min

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
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

HTTP 200
{
  "success": true
}
DELETE /api/blocks/{userId} #

Unblock a user

Bearer token

Parameters

Name Type Description
userId
required path
integer
User id.

Request

curl
curl -X DELETE 'https://minchatapp.com/api/blocks/2' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "success": true
}
POST /api/user/contact-link/rotate #

Rotate the contact link

Bearer token Rate limit: 10/min

The old token stops working.

Parameters

No parameters.

Request

curl
curl -X POST 'https://minchatapp.com/api/user/contact-link/rotate' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "token": "g2uGkOSB5TtE",
  "url": "https://minchatapp.com/u/g2uGkOSB5TtE",
  "username_url": "https://minchatapp.com/u/anna_s"
}
POST /api/contact-links/{token}/open #

Open a contact link

Bearer token Rate limit: 30/min

Creates (or returns) the private chat with the link owner.

Parameters

Name Type Description
token
required path
string
Token from the link.

Request

curl
curl -X POST 'https://minchatapp.com/api/contact-links/KRNaDjeuvS2A/open' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "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
  }
}
GET /api/invites #

My registration invites

Bearer token

Non-personal invite codes created by the user.

Parameters

No parameters.

Request

curl
curl 'https://minchatapp.com/api/invites' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "success": true,
  "invites": [],
  "limits": {
    "max_active": 10
  }
}
POST /api/invites #

Create a registration invite

Bearer token Rate limit: 20/10 min

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
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

HTTP 200
{
  "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": []
  }
}
GET /api/invites/personal #

Personal invite link

Bearer token

Returns (creating if needed) the personal invite code.

Parameters

No parameters.

Request

curl
curl 'https://minchatapp.com/api/invites/personal' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

HTTP 200
{
  "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"
}
POST /api/invites/personal/rotate #

Rotate the personal invite

Bearer token Rate limit: 20/10 min

Parameters

No parameters.

Request

curl
curl -X POST 'https://minchatapp.com/api/invites/personal/rotate' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

Responds with HTTP 200.

DELETE /api/invites/{invite} #

Revoke an invite

Bearer token

403 for someone else's invite.

Parameters

Name Type Description
invite
required path
integer
Invite id.

Request

curl
curl -X DELETE 'https://minchatapp.com/api/invites/7' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'

Response

Responds with HTTP 200.