Telegram supports specifying files in many different formats. In order to accommodate them all, there are multiple structs and type aliases required.

All of these types implement the RequestFileData interface.

FilePathA local path to a file
FileIDExisting file ID on Telegram's servers
FileURLURL to file, must be served with expected MIME type
FileReaderUse an io.Reader to provide a file. Lazily read to save memory.
FileBytes[]byte containing file data. Prefer to use FileReader to save memory.


A path to a local file.

file := tgbotapi.FilePath("tests/image.jpg")


An ID previously uploaded to Telegram. IDs may only be reused by the same bot that received them. Additionally, thumbnail IDs cannot be reused.

file := tgbotapi.FileID("AgACAgIAAxkDAALesF8dCjAAAa_…")


A URL to an existing resource. It must be served with a correct MIME type to work as expected.

file := tgbotapi.FileURL("")


Use an io.Reader to provide file contents as needed. Requires a filename for the virtual file.

var reader io.Reader

file := tgbotapi.FileReader{
    Name: "image.jpg",
    Reader: reader,


Use a []byte to provide file contents. Generally try to avoid this as it results in high memory usage. Also requires a filename for the virtual file.

var data []byte

file := tgbotapi.FileBytes{
    Name: "image.jpg",
    Bytes: data,