# MadelineProto, a PHP MTProto telegram client
Created by Daniil Gentili
Do join the official channel, [@MadelineProto](https://t.me/MadelineProto) and the [support groups](https://t.me/pwrtelegramgroup)!
[Now with Telegram TON blockchain integration](https://github.com/danog/MadelineProto/blob/master/ton/README.md)!
Approved by Telegram!
## What's this?
This library can be used to easily interact with Telegram **without** the bot API, just like the official apps.
It can login with a phone number (MTProto API), or with a bot token (MTProto API, **no bot API involved!**).
[It is now fully async](https://docs.madelineproto.xyz/docs/ASYNC.html)!
## Getting started ([now fully async!](https://docs.madelineproto.xyz/docs/ASYNC.html))
```php
async(true);
$MadelineProto->loop(function () use ($MadelineProto) {
yield $MadelineProto->start();
$me = yield $MadelineProto->getSelf();
$MadelineProto->logger($me);
if (!$me['bot']) {
yield $MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => "Hi!\nThanks for creating MadelineProto! <3"]);
yield $MadelineProto->channels->joinChannel(['channel' => '@MadelineProto']);
try {
yield $MadelineProto->messages->importChatInvite(['hash' => 'https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg']);
} catch (\danog\MadelineProto\RPCErrorException $e) {
$MadelineProto->logger($e);
}
yield $MadelineProto->messages->sendMessage(['peer' => 'https://t.me/joinchat/Bgrajz6K-aJKu0IpGsLpBg', 'message' => 'Testing MadelineProto!']);
}
yield $MadelineProto->echo('OK, done!');
});
```
[Try this code now!](https://try.madelineproto.xyz) or run this code in a browser or in a console.
Tip: if you receive an error (or nothing), [send us](https://t.me/pwrtelegramgroup) the error message and the `MadelineProto.log` file that was created in the same directory (if running from a browser).
## Documentation
* [Async](https://docs.madelineproto.xyz/docs/ASYNC.html)
* [Usage](https://docs.madelineproto.xyz/docs/ASYNC.html#usage)
* [Enabling the MadelineProto async API](https://docs.madelineproto.xyz/docs/ASYNC.html#enabling-the-madelineproto-async-api)
* [Using the MadelineProto async API](https://docs.madelineproto.xyz/docs/ASYNC.html#using-the-madelineproto-async-api)
* [Async in event handler](https://docs.madelineproto.xyz/docs/ASYNC.html#async-in-event-handler)
* [Async in callback handler](https://docs.madelineproto.xyz/docs/ASYNC.html#async-in-callback-handler)
* [Wrapped async](https://docs.madelineproto.xyz/docs/ASYNC.html#wrapped-async)
* [Multiple async](https://docs.madelineproto.xyz/docs/ASYNC.html#multiple-async)
* [ArrayAccess async](https://docs.madelineproto.xyz/docs/ASYNC.html#arrayaccess-async)
* [Ignored async](https://docs.madelineproto.xyz/docs/ASYNC.html#ignored-async)
* [Blocking async](https://docs.madelineproto.xyz/docs/ASYNC.html#blocking-async)
* [MadelineProto and AMPHP async APIs](https://docs.madelineproto.xyz/docs/ASYNC.html#madelineproto-and-amphp-async-apis)
* [Helper methods](https://docs.madelineproto.xyz/docs/ASYNC.html#helper-methods)
* [Async sleep](https://docs.madelineproto.xyz/docs/ASYNC.html#async-sleep-does-not-block-the-main-thread)
* [Async readline](https://docs.madelineproto.xyz/docs/ASYNC.html#async-readline-does-not-block-the-main-thread)
* [Async echo](https://docs.madelineproto.xyz/docs/ASYNC.html#async-echo-does-not-block-the-main-thread)
* [MadelineProto artax HTTP client](https://docs.madelineproto.xyz/docs/ASYNC.html#madelineproto-artax-http-client)
* [Async forking](https://docs.madelineproto.xyz/docs/ASYNC.html#async-forking-does-green-thread-forking)
* [Async flock](https://docs.madelineproto.xyz/docs/ASYNC.html#async-flock)
* [Combining async operations](https://docs.madelineproto.xyz/docs/ASYNC.html#combining-async-operations)
* [MadelineProto async loop APIs](https://docs.madelineproto.xyz/docs/ASYNC.html#async-loop-apis)
* [Loop](https://docs.madelineproto.xyz/docs/ASYNC.html#loop)
* [ResumableLoop](https://docs.madelineproto.xyz/docs/ASYNC.html#resumableloop)
* [SignalLoop](https://docs.madelineproto.xyz/docs/ASYNC.html#signalloop)
* [ResumableSignalLoop](https://docs.madelineproto.xyz/docs/ASYNC.html#resumablesignalloop)
* [GenericLoop](https://docs.madelineproto.xyz/docs/ASYNC.html#genericloop)
* [Creating a client](https://docs.madelineproto.xyz/docs/CREATING_A_CLIENT.html)
* [Login](https://docs.madelineproto.xyz/docs/LOGIN.html)
* [Getting permission to use the telegram API](https://docs.madelineproto.xyz/docs/LOGIN.html#getting-permission-to-use-the-telegram-api)
* [Automatic](https://docs.madelineproto.xyz/docs/LOGIN.html#automatic-now-fully-async)
* [Manual (user)](https://docs.madelineproto.xyz/docs/LOGIN.html#manual-user)
* [API ID](https://docs.madelineproto.xyz/docs/LOGIN.html#api-id)
* [Manual (bot)](https://docs.madelineproto.xyz/docs/LOGIN.html#manual-bot)
* [Logout](https://docs.madelineproto.xyz/docs/LOGIN.html#logout)
* [Changing 2FA password](https://docs.madelineproto.xyz/docs/LOGIN.html#changing-2fa-password)
* [Features](https://docs.madelineproto.xyz/docs/FEATURES.html)
* [Requirements](https://docs.madelineproto.xyz/docs/REQUIREMENTS.html)
* [Installation](https://docs.madelineproto.xyz/docs/INSTALLATION.html)
* [Simple](https://docs.madelineproto.xyz/docs/INSTALLATION.html#simple)
* [Simple (manual)](https://docs.madelineproto.xyz/docs/INSTALLATION.html#simple-manual)
* [Composer from scratch](https://docs.madelineproto.xyz/docs/INSTALLATION.html#composer-from-scratch)
* [Composer from existing project](https://docs.madelineproto.xyz/docs/INSTALLATION.html#composer-from-existing-project)
* [Handling updates (new messages)](https://docs.madelineproto.xyz/docs/UPDATES.html)
* [Self-restart on webhosts](https://docs.madelineproto.xyz/docs/UPDATES.html#self-restart-on-webhosts)
* [Async Event driven](https://docs.madelineproto.xyz/docs/UPDATES.html#async-event-driven)
* [Multi-account: Async Combined Event driven update handling](https://docs.madelineproto.xyz/docs/UPDATES.html#async-combined-event-driven)
* [Async Callback](https://docs.madelineproto.xyz/docs/UPDATES.html#async-callback)
* [Noop (default)](https://docs.madelineproto.xyz/docs/UPDATES.html#noop)
* [Fetch all updates from the beginning](https://docs.madelineproto.xyz/docs/UPDATES.html#fetch-all-updates-from-the-beginning)
* [Settings](https://docs.madelineproto.xyz/docs/SETTINGS.html)
* [Getting info about the current user](https://docs.madelineproto.xyz/docs/SELF.html)
* [Exceptions](https://docs.madelineproto.xyz/docs/EXCEPTIONS.html)
* [List of exception types](https://docs.madelineproto.xyz/docs/EXCEPTIONS.html#list-of-exception-types)
* [Pretty TL trace](https://docs.madelineproto.xyz/docs/EXCEPTIONS.html#pretty-tl-trace)
* [Getting the TL trace](https://docs.madelineproto.xyz/docs/EXCEPTIONS.html#getting-the-tl-trace)
* [Avoiding FLOOD_WAITs](https://docs.madelineproto.xyz/docs/FLOOD_WAIT.html)
* [Logging](https://docs.madelineproto.xyz/docs/LOGGING.html)
* [Telegram VoIP phone calls](https://docs.madelineproto.xyz/docs/CALLS.html)
* [Requesting a call](https://docs.madelineproto.xyz/docs/CALLS.html#requesting-a-call)
* [Playing mp3 files](https://docs.madelineproto.xyz/docs/CALLS.html#playing-mp3-files)
* [Playing streams](https://docs.madelineproto.xyz/docs/CALLS.html#playing-streams)
* [Changing audio quality](https://docs.madelineproto.xyz/docs/CALLS.html#changing-audio-quality)
* [Putting it all together](https://docs.madelineproto.xyz/docs/CALLS.html#putting-it-all-together)
* [Accepting calls](https://docs.madelineproto.xyz/docs/CALLS.html#accepting-calls)
* [Uploading and downloading files](https://docs.madelineproto.xyz/docs/FILES.html)
* [Uploading & sending files](https://docs.madelineproto.xyz/docs/FILES.html#sending-files)
* [Security notice](https://docs.madelineproto.xyz/docs/FILES.html#security-notice)
* [Photos](https://docs.madelineproto.xyz/docs/FILES.html#inputmediauploadedphoto)
* [Documents](https://docs.madelineproto.xyz/docs/FILES.html#inputmediauploadeddocument)
* [Documents](https://docs.madelineproto.xyz/docs/FILES.html#documentattributefilename-to-send-a-document)
* [Photos as documents](https://docs.madelineproto.xyz/docs/FILES.html#documentattributeimagesize-to-send-a-photo-as-document)
* [GIFs](https://docs.madelineproto.xyz/docs/FILES.html#documentattributeanimated-to-send-a-gif)
* [Videos](https://docs.madelineproto.xyz/docs/FILES.html#documentattributevideo-to-send-a-video)
* [Audio & Voice](https://docs.madelineproto.xyz/docs/FILES.html#documentattributeaudio-to-send-an-audio-file)
* [Uploading files](https://docs.madelineproto.xyz/docs/FILES.html#uploading-files)
* [Bot API file IDs](https://docs.madelineproto.xyz/docs/FILES.html#bot-api-file-ids)
* [Reusing uploaded files](https://docs.madelineproto.xyz/docs/FILES.html#reusing-uploaded-files)
* [Downloading files](https://docs.madelineproto.xyz/docs/FILES.html#downloading-files)
* [Extracting download info](https://docs.madelineproto.xyz/docs/FILES.html#extracting-download-info)
* [Downloading profile pictures](https://docs.madelineproto.xyz/docs/FILES.html#downloading-profile-pictures)
* [Download to directory](https://docs.madelineproto.xyz/docs/FILES.html#download-to-directory)
* [Download to file](https://docs.madelineproto.xyz/docs/FILES.html#download-to-file)
* [Download to browser (streaming)](https://docs.madelineproto.xyz/docs/FILES.html#download-to-browser-with-streams)
* [Getting progress](https://docs.madelineproto.xyz/docs/FILES.html#getting-progress)
* [Getting info about chats](https://docs.madelineproto.xyz/docs/CHAT_INFO.html)
* [Full chat info with full list of participants](https://docs.madelineproto.xyz/docs/CHAT_INFO.html#get_pwr_chat-now-fully-async)
* [Full chat info](https://docs.madelineproto.xyz/docs/CHAT_INFO.html#get_full_info-now-fully-async)
* [Reduced chat info (very fast)](https://docs.madelineproto.xyz/docs/CHAT_INFO.html#get_info-now-fully-async)
* [Just the chat ID (extremely fast)](https://docs.madelineproto.xyz/docs/CHAT_INFO.html#get_id-now-fully-async)
* [Getting all chats (dialogs)](https://docs.madelineproto.xyz/docs/DIALOGS.html)
* [Dialog list](https://docs.madelineproto.xyz/docs/DIALOGS.html#get_dialogs-now-fully-async)
* [Full dialog info](https://docs.madelineproto.xyz/docs/DIALOGS.html#get_full_dialogs-now-fully-async)
* [Inline buttons ([now fully async!](https://docs.madelineproto.xyz/docs/ASYNC.html))](https://docs.madelineproto.xyz/docs/INLINE_BUTTONS.html)
* [Secret chats](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html)
* [Requesting secret chats](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html#requesting-secret-chats-now-fully-async)
* [Accepting secret chats](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html#accepting-secret-chats-now-fully-async)
* [Checking secret chat status](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html#checking-secret-chat-status-now-fully-async)
* [Sending secret messages](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html#sending-secret-messages-now-fully-async)
* [Lua binding](https://docs.madelineproto.xyz/docs/LUA.html)
* [Using a proxy](https://docs.madelineproto.xyz/docs/PROXY.html)
* [How to set a proxy](https://docs.madelineproto.xyz/docs/PROXY.html#how-to-set-a-proxy)
* [Multiple proxies with automatic switch](https://docs.madelineproto.xyz/docs/PROXY.html#multiple-proxies-with-automatic-switch)
* [Use pre-built MTProxy](https://docs.madelineproto.xyz/docs/PROXY.html#mtproxy)
* [Use pre-built Socks5 proxy](https://docs.madelineproto.xyz/docs/PROXY.html#socks5-proxy)
* [Use pre-built HTTP proxy](https://docs.madelineproto.xyz/docs/PROXY.html#http-proxy)
* [Build your own proxy](https://docs.madelineproto.xyz/docs/PROXY.html#build-your-proxy)
* [Using methods](https://docs.madelineproto.xyz/docs/USING_METHODS.html)
* [FULL API Documentation with descriptions](https://docs.madelineproto.xyz/API_docs/methods/)
* [Logout](https://docs.madelineproto.xyz/logout.html)
* [Login](https://docs.madelineproto.xyz/docs/LOGIN.html)
* [Change 2FA password](https://docs.madelineproto.xyz/update2fa.html)
* [Get all chats, broadcast a message to all chats](https://docs.madelineproto.xyz/docs/DIALOGS.html)
* [Get the full participant list of a channel/group/supergroup](https://docs.madelineproto.xyz/getPwrChat.html)
* [Get full info about a user/chat/supergroup/channel](https://docs.madelineproto.xyz/getFullInfo.html)
* [Get info about a user/chat/supergroup/channel](https://docs.madelineproto.xyz/getInfo.html)
* [Get info about the currently logged-in user](https://docs.madelineproto.xyz/getSelf.html)
* [Upload or download files up to 1.5 GB](https://docs.madelineproto.xyz/docs/FILES.html)
* [Make a phone call and play a song](https://docs.madelineproto.xyz/docs/CALLS.html)
* [Create a secret chat bot](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html)
* Accept incoming call: phone.acceptCall
* Accept the new terms of service: help.acceptTermsOfService
* Add GIF to saved gifs list: messages.saveGif
* Add a sticker to a stickerset, bots only. The sticker set must have been created by the bot.: stickers.addStickerToSet
* Add an existing telegram user as contact: contacts.addContact
* Add/remove sticker from recent stickers list: messages.saveRecentSticker
* Adds a user to a chat and sends a service message on it.: messages.addChatUser
* Adds the user to the blacklist.: contacts.block
* Answer an inline query, for bots only: messages.setInlineBotResults
* Answers a custom query; for bots only: bots.answerWebhookJSONQuery
* Associate a group to a channel as [discussion group](https://telegram.org/blog/privacy-discussions-web-bots) for that channel: channels.setDiscussionGroup
* Associate a stickerset to the supergroup: channels.setStickers
* Ban/unban/kick a user in a [supergroup/channel](https://core.telegram.org/api/channel).: channels.editBanned
* Binds a temporary authorization key `temp_auth_key_id` to the permanent authorization key `perm_auth_key_id`. Each permanent key may only be bound to one temporary key at a time, binding a new temporary key overwrites the previous one.
* Cancel the code that was sent to verify an email to use as [2FA recovery method](https://core.telegram.org/api/srp).: account.cancelPasswordEmail
* Cancel the login verification code: auth.cancelCode
* Cancels a request for creation and/or delete info on secret chat.: messages.discardEncryption
* Chanages chat name and sends a service message on it.: messages.editChatTitle
* Change media autodownload settings: account.saveAutoDownloadSettings
* Change privacy settings of current account: account.setPrivacy
* Change the phone number of the current account: account.changePhone
* Change the photo of a [channel/supergroup](https://core.telegram.org/api/channel): channels.editPhoto
* Change the username of a supergroup/channel: channels.updateUsername
* Changes chat photo and sends a service message on it: messages.editChatPhoto
* Changes the absolute position of a sticker in the set to which it belongs; for bots only. The sticker set must have been created by the bot: stickers.changeStickerPosition
* Changes username for the current user.: account.updateUsername
* Check if a username is free and can be assigned to a channel/supergroup: channels.checkUsername
* Check the validity of a chat invite link and get basic info about it: messages.checkChatInvite
* Clear all [drafts](https://core.telegram.org/api/drafts).: messages.clearAllDrafts
* Clear recent stickers: messages.clearRecentStickers
* Clear saved payment information: payments.clearSavedInfo
* Confirm a phone number to cancel account deletion, for more info [click here »](https://core.telegram.org/api/account-deletion): account.confirmPhone
* Confirms creation of a secret chat: messages.acceptEncryption
* Confirms receipt of messages by a client, cancels PUSH-notification sending.: messages.receivedMessages
* Confirms receipt of messages in a secret chat by client, cancels push notifications.: messages.receivedQueue
* Create a [supergroup/channel](https://core.telegram.org/api/channel).: channels.createChannel
* Create a stickerset, bots only.: stickers.createStickerSet
* Create a theme: account.createTheme
* Create and upload a new wallpaper: account.uploadWallPaper
* Creates a new chat.: messages.createChat
* Delete a [channel/supergroup](https://core.telegram.org/api/channel): channels.deleteChannel
* Delete a folder: folders.deleteFolder
* Delete all messages sent by a certain user in a [supergroup](https://core.telegram.org/api/channel): channels.deleteUserHistory
* Delete all temporary authorization keys **except for** the ones specified: auth.dropTempAuthKeys
* Delete contacts by phone number: contacts.deleteByPhones
* Delete installed wallpapers: account.resetWallPapers
* Delete messages in a [channel/supergroup](https://core.telegram.org/api/channel): channels.deleteMessages
* Delete saved contacts: contacts.resetSaved
* Delete scheduled messages: messages.deleteScheduledMessages
* Delete stored [Telegram Passport](https://core.telegram.org/passport) documents, [for more info see the passport docs »](https://core.telegram.org/passport/encryption#encryption): account.deleteSecureValue
* Delete the history of a [supergroup](https://core.telegram.org/api/channel): channels.deleteHistory
* Delete the user's account from the telegram servers. Can be used, for example, to delete the account of a user that provided the login code, but forgot the [2FA password and no recovery method is configured](https://core.telegram.org/api/srp).: account.deleteAccount
* Deletes a device by its token, stops sending PUSH-notifications to it.: account.unregisterDevice
* Deletes a user from a chat and sends a service message on it.: messages.deleteChatUser
* Deletes communication history.: messages.deleteHistory
* Deletes messages by their identifiers.: messages.deleteMessages
* Deletes profile photos.: photos.deletePhotos
* Deletes several contacts from the list.: contacts.deleteContacts
* Deletes the user from the blacklist.: contacts.unblock
* Download a [CDN](https://core.telegram.org/cdn) file.: upload.getCdnFile
* Edit an inline bot message: messages.editInlineBotMessage
* Edit location of geogroup: channels.editLocation
* Edit message: messages.editMessage
* Edit peers in folder: folders.editPeerFolders
* Edit the default banned rights of a [channel/supergroup/group](https://core.telegram.org/api/channel).: messages.editChatDefaultBannedRights
* Edit the description of a [group/supergroup/channel](https://core.telegram.org/api/channel).: messages.editChatAbout
* Edit the name of a [channel/supergroup](https://core.telegram.org/api/channel): channels.editTitle
* Edits notification settings from a given user/group, from all users/all groups.: account.updateNotifySettings
* Enable/disable [top peers](https://core.telegram.org/api/top-rating): contacts.toggleTopPeers
* Enable/disable message signatures in channels: channels.toggleSignatures
* Export an invite link for a chat: messages.exportChatInvite
* Find out if a media message's caption can be edited: messages.getMessageEditData
* Finish account takeout session: account.finishTakeoutSession
* Forwards messages by their IDs.: messages.forwardMessages
* Get SHA256 hashes for verifying downloaded [CDN](https://core.telegram.org/cdn) files: upload.getCdnFileHashes
* Get SHA256 hashes for verifying downloaded files: upload.getFileHashes
* Get [channel/supergroup](https://core.telegram.org/api/channel) messages: channels.getMessages
* Get [channels/supergroups/geogroups](https://core.telegram.org/api/channel) we're admin in. Usually called when the user exceeds the [limit](../constructors/config.md) for owned public [channels/supergroups/geogroups](https://core.telegram.org/api/channel), and the user is given the choice to remove one of his channels/supergroups/geogroups.: channels.getAdminedPublicChannels
* Get [instant view](https://instantview.telegram.org) page: messages.getWebPage
* Get [passport](https://core.telegram.org/passport) configuration: help.getPassportConfig
* Get a document by its SHA256 hash, mainly used for gifs: messages.getDocumentByHash
* Get a list of [channels/supergroups](https://core.telegram.org/api/channel) we left: channels.getLeftChannels
* Get a payment form: payments.getPaymentForm
* Get all archived stickers: messages.getArchivedStickers
* Get all chats, channels and supergroups: messages.getAllChats
* Get all contacts: contacts.getSaved
* Get all groups that can be used as [discussion groups](https://telegram.org/blog/privacy-discussions-web-bots): channels.getGroupsForDiscussion
* Get all installed stickers: messages.getAllStickers
* Get all saved [Telegram Passport](https://core.telegram.org/passport) documents, [for more info see the passport docs »](https://core.telegram.org/passport/encryption#encryption): account.getAllSecureValues
* Get and increase the view counter of a message sent or forwarded from a [channel](https://core.telegram.org/api/channel): messages.getMessagesViews
* Get app-specific configuration: help.getAppConfig
* Get changed emoji keywords: messages.getEmojiKeywordsDifference
* Get changelog of current app: help.getAppChangelog
* Get chats in common with a user: messages.getCommonChats
* Get configuration for [CDN](https://core.telegram.org/cdn) file downloads.: help.getCdnConfig
* Get contact by telegram IDs: contacts.getContactIDs
* Get contacts near you: contacts.getLocated
* Get count of online users in a chat: messages.getOnlines
* Get days to live of account: account.getAccountTTL
* Get dialog info of specified peers: messages.getPeerDialogs
* Get dialogs manually marked as unread: messages.getDialogUnreadMarks
* Get faved stickers: messages.getFavedStickers
* Get featured stickers: messages.getFeaturedStickers
* Get full info about a channel: channels.getFullChannel
* Get highscores of a game sent using an inline bot: messages.getInlineGameHighScores
* Get highscores of a game: messages.getGameHighScores
* Get info about [channels/supergroups](https://core.telegram.org/api/channel): channels.getChannels
* Get info about a [channel/supergroup](https://core.telegram.org/api/channel) participant: channels.getParticipant
* Get info about a `t.me` link: help.getDeepLinkInfo
* Get info about a certain wallpaper: account.getWallPaper
* Get info about a stickerset: messages.getStickerSet
* Get info about an emoji keyword localization: messages.getEmojiKeywordsLanguages
* Get information about a language in a localization pack: langpack.getLanguage
* Get information about all languages in a localization pack: langpack.getLanguages
* Get installed mask stickers: messages.getMaskStickers
* Get installed themes: account.getThemes
* Get link and embed info of a message in a [channel/supergroup](https://core.telegram.org/api/channel): channels.exportMessageLink
* Get live location history of a certain user: messages.getRecentLocations
* Get localization pack strings: langpack.getLangPack
* Get localized emoji keywords: messages.getEmojiKeywords
* Get localized name of the telegram support user: help.getSupportName
* Get logged-in sessions: account.getAuthorizations
* Get media autodownload settings: account.getAutoDownloadSettings
* Get message ranges for saving the user's chat history: messages.getSplitRanges
* Get more info about a Seamless Telegram Login authorization request, for more info [click here »](https://core.telegram.org/api/url-authorization): messages.requestUrlAuth
* Get most used peers: contacts.getTopPeers
* Get new [updates](https://core.telegram.org/api/updates).: updates.getDifference
* Get new strings in languagepack: langpack.getDifference
* Get payment receipt: payments.getPaymentReceipt
* Get peer settings: messages.getPeerSettings
* Get phone call configuration to be passed to libtgvoip's shared config: phone.getCallConfig
* Get pinned dialogs: messages.getPinnedDialogs
* Get poll results: messages.getPollResults
* Get preview of webpage: messages.getWebPagePreview
* Get privacy settings of current account: account.getPrivacy
* Get private info associated to the password info (recovery email, telegram [passport](https://core.telegram.org/passport) info & so on): account.getPasswordSettings
* Get promotion info of the currently-used MTProxy: help.getProxyData
* Get recent stickers: messages.getRecentStickers
* Get recently used `t.me` links: help.getRecentMeUrls
* Get saved GIFs: messages.getSavedGifs
* Get saved [Telegram Passport](https://core.telegram.org/passport) document, [for more info see the passport docs »](https://core.telegram.org/passport/encryption#encryption): account.getSecureValue
* Get saved payment information: payments.getSavedInfo
* Get scheduled messages: messages.getScheduledHistory
* Get scheduled messages: messages.getScheduledMessages
* Get stickers attached to a photo or video: messages.getAttachedStickers
* Get stickers by emoji: messages.getStickers
* Get strings from a language pack: langpack.getStrings
* Get temporary payment password: account.getTmpPassword
* Get the admin log of a [channel/supergroup](https://core.telegram.org/api/channel): channels.getAdminLog
* Get the number of results that would be found by a [messages.search](../methods/messages.search.md) call with the same parameters: messages.getSearchCounters
* Get the participants of a channel: channels.getParticipants
* Get theme information: account.getTheme
* Get unread messages where we were mentioned: messages.getUnreadMentions
* Get web [login widget](https://core.telegram.org/widgets/login) authorizations: account.getWebAuthorizations
* Gets back found messages: messages.search
* Gets back the conversation history with one interlocutor / within a chat: messages.getHistory
* Gets current notification settings for a given user/group, from all users/all groups.: account.getNotifySettings
* Hide/unhide message history for new channel/supergroup users: channels.togglePreHistoryHidden
* If the [peer settings](../constructors/peerSettings.md) of a new user allow us to add him as contact, add that user as contact: contacts.acceptContact
* If you sent an invoice requesting a shipping address and the parameter is\_flexible was specified, the bot will receive an [updateBotShippingQuery](../constructors/updateBotShippingQuery.md) update. Use this method to reply to shipping queries.: messages.setBotShippingResults
* Import a chat invite and join a private chat/supergroup/channel: messages.importChatInvite
* Imports contacts: saves a full list on the server, adds already registered contacts to the contact list, returns added contacts and their info.: contacts.importContacts
* Informs the server about the number of pending bot updates if they haven't been processed for a long time; for bots only: help.setBotUpdatesStatus
* Initialize connection: initConnection
* Install a stickerset: messages.installStickerSet
* Install a theme: account.installTheme
* Install wallpaper: account.installWallPaper
* Install/uninstall wallpaper: account.saveWallPaper
* Installs a previously uploaded photo as a profile photo.: photos.updateProfilePhoto
* Internal use: help.editUserInfo
* Internal use: help.getUserInfo
* Intialize account takeout session: account.initTakeoutSession
* Invite users to a channel/supergroup: channels.inviteToChannel
* Invoke a method within a takeout session: invokeWithTakeout
* Invoke a request without subscribing the used connection for [updates](https://core.telegram.org/api/updates) (this is enabled by default for [file queries](https://core.telegram.org/api/files)).: invokeWithoutUpdates
* Invoke the specified query using the specified API [layer](https://core.telegram.org/api/invoking#layers): invokeWithLayer
* Invoke with the given message range: invokeWithMessagesRange
* Invokes a query after a successfull completion of previous queries: invokeAfterMsgs
* Invokes a query after successfull completion of one of the previous queries.: invokeAfterMsg
* Join a channel/supergroup: channels.joinChannel
* Leave a [channel/supergroup](https://core.telegram.org/api/channel): channels.leaveChannel
* Log out an active [authorized session](https://core.telegram.org/api/auth) by its hash: account.resetAuthorization
* Log out an active web [telegram login](https://core.telegram.org/widgets/login) session: account.resetWebAuthorization
* Login as a bot: auth.importBotAuthorization
* Logs in a user using a key transmitted from his native data-centre.: auth.importAuthorization
* Logs out the user.: auth.logOut
* Look for updates of telegram's terms of service: help.getTermsOfServiceUpdate
* Make a user admin in a [legacy group](https://core.telegram.org/api/channel).: messages.editChatAdmin
* Manually mark dialog as unread: messages.markDialogUnread
* Mark [channel/supergroup](https://core.telegram.org/api/channel) history as read: channels.readHistory
* Mark [channel/supergroup](https://core.telegram.org/api/channel) message contents as read: channels.readMessageContents
* Mark a sticker as favorite: messages.faveSticker
* Mark mentions as read: messages.readMentions
* Mark new featured stickers as read: messages.readFeaturedStickers
* Marks message history as read.: messages.readHistory
* Marks message history within a secret chat as read.: messages.readEncryptedHistory
* Modify the admin rights of a user in a [supergroup/channel](https://core.telegram.org/api/channel).: channels.editAdmin
* Notifies the sender about the recipient having listened a voice message or watched a video.: messages.readMessageContents
* Notify the other user in a private chat that a screenshot of the chat was taken: messages.sendScreenshotNotification
* Notify the user that the sent [passport](https://core.telegram.org/passport) data contains some errors The user will not be able to re-submit their Passport data to you until the errors are fixed (the contents of the field for which you returned the error must change).
* Obtain configuration for two-factor authorization with password: account.getPassword
* Once the user has confirmed their payment and shipping details, the bot receives an [updateBotPrecheckoutQuery](../constructors/updateBotPrecheckoutQuery.md) update.
* Optional: notify the server that the user is currently busy in a call: this will automatically refuse all incoming phone calls until the current phone call is ended.: phone.receivedCall
* Pin a message: messages.updatePinnedMessage
* Pin/unpin a dialog: messages.toggleDialogPin
* Press an inline callback button and get a callback answer from the bot: messages.getBotCallbackAnswer
* Query an inline bot: messages.getInlineBotResults
* Rate a call: phone.setCallRating
* Refuse or end running call: phone.discardCall
* Register device to receive [PUSH notifications](https://core.telegram.org/api/push-updates): account.registerDevice
* Registers a validated phone number in the system.: auth.signUp
* Remove a sticker from the set where it belongs, bots only. The sticker set must have been created by the bot.: stickers.removeStickerFromSet
* Reorder installed stickersets: messages.reorderStickerSets
* Reorder pinned dialogs: messages.reorderPinnedDialogs
* Report a message in a chat for violation of telegram's Terms of Service: messages.report
* Report a new incoming chat for spam, if the [peer settings](../constructors/peerSettings.md) of the chat allow us to do that: messages.reportSpam
* Report a peer for violation of telegram's Terms of Service: account.reportPeer
* Report a secret chat for spam: messages.reportEncryptedSpam
* Reports some messages from a user in a supergroup as spam; requires administrator rights in the supergroup: channels.reportSpam
* Request a reupload of a certain file to a [CDN DC](https://core.telegram.org/cdn).: upload.reuploadCdnFile
* Request recovery code of a [2FA password](https://core.telegram.org/api/srp), only for accounts with a [recovery email configured](https://core.telegram.org/api/srp#email-verification).: auth.requestPasswordRecovery
* Resend the code to verify an email to use as [2FA recovery method](https://core.telegram.org/api/srp).: account.resendPasswordEmail
* Resend the login code via another medium, the phone code type is determined by the return value of the previous auth.sendCode/auth.resendCode: see [login](https://core.telegram.org/api/auth) for more info.: auth.resendCode
* Reset [rating](https://core.telegram.org/api/top-rating) of top peer: contacts.resetTopPeerRating
* Reset all active web [telegram login](https://core.telegram.org/widgets/login) sessions: account.resetWebAuthorizations
* Reset the [2FA password](https://core.telegram.org/api/srp) using the recovery code sent using [auth.requestPasswordRecovery](../methods/auth.requestPasswordRecovery.md).: auth.recoverPassword
* Resets all notification settings from users and groups.: account.resetNotifySettings
* Resolve a @username to get peer info: contacts.resolveUsername
* Returns URL with the chat statistics. Currently this method can be used only for channels: messages.getStatsURL
* Returns a Telegram Passport authorization form for sharing data with a service: account.getAuthorizationForm
* Returns a current state of updates.: updates.getState
* Returns a list of available wallpapers.: account.getWallPapers
* Returns an HTTP URL which can be used to automatically log in into translation platform and suggest new emoji replacements. The URL will be valid for 30 seconds after generation: messages.getEmojiURL
* Returns basic user info according to their identifiers.: users.getUsers
* Returns chat basic info on their IDs.: messages.getChats
* Returns configuration parameters for Diffie-Hellman key generation. Can also return a random sequence of bytes of required length.: messages.getDhConfig
* Returns content of a whole file or its part.: upload.getFile
* Returns content of an HTTP file or a part, by proxying the request through telegram.: upload.getWebFile
* Returns current configuration, icluding data center configuration.: help.getConfig
* Returns data for copying authorization to another data-centre.: auth.exportAuthorization
* Returns extended user info by ID.: users.getFullUser
* Returns full chat info according to its ID.: messages.getFullChat
* Returns info on data centre nearest to the user.: help.getNearestDc
* Returns information on update availability for the current application.: help.getAppUpdate
* Returns list of chats with non-default notification settings: account.getNotifyExceptions
* Returns text of a text message with an invitation.: help.getInviteText
* Returns the current user dialog list.: messages.getDialogs
* Returns the current user's contact list.: contacts.getContacts
* Returns the difference between the current state of updates of a certain channel and transmitted.: updates.getChannelDifference
* Returns the list of blocked users.: contacts.getBlocked
* Returns the list of contact statuses.: contacts.getStatuses
* Returns the list of messages by their IDs.: messages.getMessages
* Returns the list of user photos.: photos.getUserPhotos
* Returns the support user for the 'ask a question' feature.: help.getSupport
* Returns users found by username substring.: contacts.search
* Save a message [draft](https://core.telegram.org/api/drafts) associated to a chat.: messages.saveDraft
* Save a theme: account.saveTheme
* Save get all message [drafts](https://core.telegram.org/api/drafts).: messages.getAllDrafts
* Saves a part of a large file (over 10Mb in size) to be later passed to one of the methods.: upload.saveBigFilePart
* Saves a part of file for futher sending to one of the methods.: upload.saveFilePart
* Saves logs of application on the server.: help.saveAppLog
* Search for GIFs: messages.searchGifs
* Search for messages and peers globally: messages.searchGlobal
* Search for stickersets: messages.searchStickerSets
* Securely save [Telegram Passport](https://core.telegram.org/passport) document, [for more info see the passport docs »](https://core.telegram.org/passport/encryption#encryption): account.saveSecureValue
* Send a media: messages.sendMedia
* Send a result obtained using [messages.getInlineBotResults](../methods/messages.getInlineBotResults.md).: messages.sendInlineBotResult
* Send an album of media: messages.sendMultiMedia
* Send compiled payment form: payments.sendPaymentForm
* Send confirmation code to cancel account deletion, for more info [click here »](https://core.telegram.org/api/account-deletion): account.sendConfirmPhoneCode
* Send phone call debug data to server: phone.saveCallDebug
* Send scheduled messages right away: messages.sendScheduledMessages
* Send the verification code for login: auth.sendCode
* Send the verification email code for telegram [passport](https://core.telegram.org/passport).: account.sendVerifyEmailCode
* Send the verification phone code for telegram [passport](https://core.telegram.org/passport).: account.sendVerifyPhoneCode
* Send typing event by the current user to a secret chat.: messages.setEncryptedTyping
* Sends a Telegram Passport authorization form, effectively sharing data with the service: account.acceptAuthorization
* Sends a current user typing event (see [SendMessageAction](../types/SendMessageAction.md) for all event types) to a conversation partner or group.: messages.setTyping
* Sends a custom request; for bots only: bots.sendCustomRequest
* Sends a message to a chat: messages.sendMessage
* Sends a message with a file attachment to a secret chat: messages.sendEncryptedFile
* Sends a request to start a secret chat to the user.: messages.requestEncryption
* Sends a service message to a secret chat.: messages.sendEncryptedService
* Sends a text message to a secret chat.: messages.sendEncrypted
* Set a new 2FA password: account.updatePasswordSettings
* Set account self-destruction period: account.setAccountTTL
* Set the callback answer to a user button press (bots only): messages.setBotCallbackAnswer
* Should be called after the user hides the report spam/add as contact bar of a new chat, effectively prevents the user from executing the actions specified in the [peer's settings](../constructors/peerSettings.md).: messages.hidePeerSettingsBar
* Signs in a user with a validated phone number.: auth.signIn
* Start a conversation with a bot using a [deep linking parameter](https://core.telegram.org/bots#deep-linking): messages.startBot
* Start a telegram phone call: phone.requestCall
* Submit requested order information for validation: payments.validateRequestedInfo
* Terminates all user's authorized sessions except for the current one.
* Toggle contact sign up notifications: account.setContactSignUpNotification
* Toggle supergroup slow mode: if enabled, users will only be able to send one message every `seconds` seconds: channels.toggleSlowMode
* Transfer channel ownership: channels.editCreator
* Try logging to an account protected by a [2FA password](https://core.telegram.org/api/srp).: auth.checkPassword
* Turn a [legacy group into a supergroup](https://core.telegram.org/api/channel): messages.migrateChat
* Uninstall a stickerset: messages.uninstallStickerSet
* Update theme: account.updateTheme
* Updates current user profile photo.: photos.uploadProfilePhoto
* Updates online user status.: account.updateStatus
* Updates user profile.: account.updateProfile
* Upload a file and associate it to a chat (without actually sending it to the chat): messages.uploadMedia
* Upload encrypted file and associate it to a secret chat: messages.uploadEncryptedFile
* Upload theme: account.uploadTheme
* Use this method to set the score of the specified user in a game sent as a normal message (bots only).: messages.setGameScore
* Use this method to set the score of the specified user in a game sent as an inline message (bots only).: messages.setInlineGameScore
* Use this to accept a Seamless Telegram Login authorization request, for more info [click here »](https://core.telegram.org/api/url-authorization): messages.acceptUrlAuth
* Validates a username and checks availability.: account.checkUsername
* Verify a new phone number to associate to the current account: account.sendChangePhoneCode
* Verify a phone number for telegram [passport](https://core.telegram.org/passport).: account.verifyPhone
* Verify an email address for telegram [passport](https://core.telegram.org/passport).: account.verifyEmail
* Verify an email to use as [2FA recovery method](https://core.telegram.org/api/srp).: account.confirmPasswordEmail
* Vote in a [poll](../constructors/poll.md): messages.sendVote
* When client-side passcode lock feature is enabled, will not show message texts in incoming [PUSH notifications](https://core.telegram.org/api/push-updates).: account.updateDeviceLocked
* Whether the user will receive notifications when contacts sign up: account.getContactSignUpNotification
* [Complete phone call E2E encryption key exchange »](https://core.telegram.org/api/end-to-end/voice-calls): phone.confirmCall
* [Peers](https://docs.madelineproto.xyz/docs/USING_METHODS.html#peers)
* [Files](https://docs.madelineproto.xyz/docs/FILES.html)
* [Secret chats](https://docs.madelineproto.xyz/docs/USING_METHODS.html#secret-chats)
* [Entities (Markdown & HTML)](https://docs.madelineproto.xyz/docs/USING_METHODS.html#entities)
* [reply_markup (keyboards & inline keyboards)](https://docs.madelineproto.xyz/docs/USING_METHODS.html#reply_markup)
* [bot API objects](https://docs.madelineproto.xyz/docs/USING_METHODS.html#bot-api-objects)
* [No result](https://docs.madelineproto.xyz/docs/USING_METHODS.html#no-result)
* [Queues](https://docs.madelineproto.xyz/docs/USING_METHODS.html#queues)
* [Multiple method calls](https://docs.madelineproto.xyz/docs/USING_METHODS.html#multiple-method-calls)
* [Contributing](https://docs.madelineproto.xyz/docs/CONTRIB.html)
* [Translation](https://docs.madelineproto.xyz/docs/CONTRIB.html#translation)
* [Contribution guide](https://docs.madelineproto.xyz/docs/CONTRIB.html#contribution-guide)
* [Credits](https://docs.madelineproto.xyz/docs/CONTRIB.html#credits)
* [Web templates for `$MadelineProto->start()`](https://docs.madelineproto.xyz/docs/TEMPLATES.html)
## Very complex and complete examples
You can find examples for nearly every MadelineProto function in
* [magnaluna webradio](https://magna.madelineproto.xyz) - Multifeatured Telegram VoIP webradio
* [`tests/testing.php`](https://github.com/danog/MadelineProto/blob/master/tests/testing.php) - examples for making/receiving calls, making secret chats, sending secret chat messages, videos, audios, voice recordings, gifs, stickers, photos, sending normal messages, videos, audios, voice recordings, gifs, stickers, photos.
* [`bot.php`](https://github.com/danog/MadelineProto/blob/master/examples/bot.php) - examples for sending normal messages, downloading any media
* [`secret_bot.php`](https://github.com/danog/MadelineProto/blob/master/examples/secret_bot.php) - secret chat bot
* [`pipesbot.php`](https://github.com/danog/MadelineProto/blob/master/examples/pipesbot.php) - examples for creating inline bots and using other inline bots via a userbot