Awesome Open Source
Awesome Open Source


NPM GitHub Actions Downloads Telegram channel

Telegram API JS (MTProto) client library for browser and nodejs


yarn add @mtproto/core -E
# or
npm i @mtproto/core -E

Quick start

You need api_id and api_hash. If you do not have them yet, then get them according to the official instructions: creating your Telegram application.

const { MTProto } = require('@mtproto/core');

const api_id = 'YOU_API_ID';
const api_hash = 'YOU_API_HASH';

// 1. Create an instance
const mtproto = new MTProto({

// 2. Provide params for initConnection method (optional)
  app_version: '10.0.0',

// 3. Get the user country code'help.getNearestDc').then(result => {



new MTProto({ api_id, api_hash, test, customLocalStorage }) => mtproto

api_id: number and api_hash: string

api_id and api_hash are required. If you do not have them yet, then get them according to the official instructions: creating your Telegram application.

test: boolean

Default: false. Use test data centers. On test servers, you can use test phone numbers.

customLocalStorage: localStorage

Default for browser: window.localStorage. Default for nodejs: node-localstorage. Custom storage for save auth data. Your localStorage must follow this API:

class MyAsyncLocalStorage {
  setItem(key: string, value: string): Promise<void>;
  getItem(key: string): Promise<string|null>;

We have ready-made storage:

  1. tempLocalStorage only stores data while the script is running


const { tempLocalStorage } = require('@mtproto/core/src/storage/temp');

const mtproto = new MTProto({
  customLocalStorage: tempLocalStorage,
});, params, options) => Promise

method: string

Method name from methods list.

params: object

Parameters for method from{method}#parameters.

  1. If the method needs the flags parameter, flags is calculated automatically 🙃

  2. If you need to pass a constructor use _. Example for users.getFullUser:

const params = {
  id: {
    _: 'inputUserSelf',

options.dcId: number

Specific DC id. By default, it is 2. You can change the default value using mtproto.setDefaultDc method.

options.syncAuth: boolean

Default: true. Copy authorization to all DC if the response contains auth.authorization.

Example:'help.getNearestDc', {}, {
  dcId: 1
}).then(result => {
  console.log('result:', result);
  // { _: 'nearestDc', country: 'RU', this_dc: 1, nearest_dc: 2 }
}).catch(error => {
  console.log('error.error_code:', error.error_code);
  console.log('error.error_message:', error.error_message);

mtproto.updates.on(updates, listener)

Method for handles updates.

Example of handling a updateShort with updateUserStatus:

mtproto.updates.on('updateShort', message => {
  const { update } = message;

  if (update._ === 'updateUserStatus') {
    const { user_id, status } = update;

    console.log(`User with id ${user_id} change status to ${status}`);

mtproto.setDefaultDc(dcId) => Promise

If a migration error occurs, you can use this function to change the default data center. You can also use options.dcId.

See the example in the authentication.


Provide params for initConnection method. I recommend running this function immediately after creating an instance of MTProto.

See the example in the quick start.

getSRPParams({ g, p, salt1, salt2, gB, password }) => { A, M1 }

Function to calculate parameters for 2FA (Two-factor authentication). For more information about parameters, see the article on the Telegram website.

See the example in the authentication.

Useful references

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
javascript (67,535
api (1,593
library (1,261
browser (425
client (370
telegram (312
messenger (106
telegram-api (35
mtproto (24
lib (23
tdlib (14

Find Open Source By Browsing 7,000 Topics Across 59 Categories