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:
https://www.googleapis.com/auth/gmail.insert
: Allowsmessages.insert()
andmessages.import()
only.https://www.googleapis.com/auth/gmail.labels
: Allowsall label operations
only.
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!