Gmail API release notes 2014-2019

This page contains release notes for the Gmail API in 2019.

12 November 2019 New message.import() implementation

messages.import() is now implemented using a more performant backend implementation. The new version is API-compatible with the previous implementation and all clients automatically started using the new behavior as of a few weeks ago. The new backend supports parallel message.import() calls efficiently and clients can now import messages in parallel for a user to achieve higher migration throughput. The quota cost of the message.import() API method has been decreased to reflect the new performance.

7 Febuary 2017 History type filtering for history.list()

history.list() now supports filtering history records by type.

30 November 2016 New messages.batchModify() method

messages.batchModify() is a new method that allows modifying labels on multiple messages by message IDs, in a single batch operation.

1 November 2016: New metadata scope

The Gmail API now supports a new gmail.metadata scope. This scope gives developers acccess to a user's mailbox including history records, labels, and email headers, but not email body's or attachments.

1 July 2016: New endpoints for settings

We've introduced several new endpoints for managing mail settings. Refer to the following guides for details:

Also, drafts.list() has a new request parameter, q, that restricts results to just the messages matching the specified query.

25 February 2016: New messages.batchDelete() method

messages.batchDelete() is a new method that allows deleting multiple messages, by message IDs, in a single batch operation.

13 January 2016: New Option for drafts.list()

drafts.list() now has a new option, includeSpamTrash, which is used to determine if the response should include drafts with the SPAM or TRASH label applied. The default is currently set to true for this option, but we plan on switching it to false shortly.

22 June 2015: Labels from history.list()

history.list() now returns all current Message.labelIds as part of the response in messagesAdded, messagesDeleted, labelsAdded, and labelsRemoved, so it's easy to determine full state of an email before and after a change.

18 June 2015: Message internalDate field

Added a new Message.internalDate field that exposes the message's creation timestamp in the mailbox.

29 May 2015: Gmail API push notifications

The Gmail API now supports sending push notifications on mailbox updates, providing real-time server notification without the need for constant polling. Utilizing Cloud Pub/Sub you can now use webhooks, for example, to receive callbacks when updates happen. Additionally, these notifications can be filtered to specific Gmail labels. See the push notifications guide to get started.

31 March 2015: New scopes for labels and inserting messages

We've introduced two new, finer-grained ACL scopes to better protect users and accomodate apps that don't need full mailbox data access:

18 March 2015: New options to messages insert

messages.insert() now supports the deleted request parameter and allows setting SENT and DRAFT labels.

25 February 2015: More details from history list

history.list() now provides details of the change type in each history record. For example, using messagesAdded, messagesDeleted, labelsAdded or labelsDeleted it's possible to easily tell how a message was changed and typically avoids the need for additional calls to synchronize your client.

11 February 2015: New options to messages import

messages.import() now supports three new parameters to better support Email Migration use cases. See the messages.import() docs for how to use the new neverMarkSpam, processForCalendar and deleted request parameters.

23 January 2015: Message import labels support and default change

You can now specify message.labelIds on messages.import() requests to automatically apply the given labels to the message.

Consequentially, in the next few weeks the default behavior will change to stop automatically adding INBOX and UNREAD labels to messages.import() emails; when message.labelIds is not specified imported mail will only be visible in All Mail. If you want INBOX and/or UNREAD labels applied, please specify them in the message.labelIds field.

15 January 2015: Per-user quotas increased

Default per-user quotas have been increased from 25 units/user/second to 250 units/user/second and some method costs have been adjusted slightly.

22 October 2014: New format parameter for retrieving threads

You can now specify the return format for the threads.get(). The available formats are full, metadata, and minimal, similar to the messages.get() method. Note that raw format is not allowed for threads.get() to avoid unexpectedly large amounts of data being returned.

16 October 2014: New GetProfile method

A new getProfile() method is now available. It provides mailbox-wide info like current history ID and total message and thread counts.

6 October 2014: A new IMPORTANT label and new fields for counting messages with a given label

We've added a new IMPORTANT label to match functionality with the Gmail web interface.

Additionally, we've added four new fields to the Labels resource to simplify counting how many messages have a given label applied.

The new fields are: messagesTotal, messagesUnread, threadsTotal, and threadsUnread.

8 September 2014: New message format available

We've made some changes to messages.get(). You can now request the metadata return format to return only the email headers and metadata such as identifiers and labels.

2 September 2014: Change to internal date behavior

You can now specify the internalDateSource for both messages.insert() and messages.import().

We'd like to switch the default behavior for this flag to be something more intuitive and intend to change the default behavior on September 15th, 2014. After that point messages.insert() will default to using receivedTime and messages.import() will default to using dateHeader. If you care about the internal date source for messages.insert() or messages.import() make sure you start specifying this request query parameter before then.

11 July 2014: Update to method quota costs

Quota costs for all methods in the API have been reduced by a factor of 10. For example, if a method previously cost 150 quota units, it now costs 15. For a complete list of API method costs, see the per-method quota usage chart.

25 June 25 2014: Gmail API is released!

The Gmail API is now publicly available!