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

stringUsed as a 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 := "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,