Upcoming changes to Tweets

Introduction

This document outlines the set of changes to Tweets so that people can express even more in 140 characters: 1) to allow for richer public conversations that are easier to follow on Twitter and 2) to ensure people can attach media to Tweets without sacrificing the characters they have to express themselves.

These changes touch many aspects of the Twitter platform. To that end, we have prepared these technical materials to help you transition your products and applications to the new Tweet format. The following sections will step through the planned technical changes.

What is changing?

We are simplifying the way that replies work on Twitter by moving some of the “scaffolding” of Tweets into display elements so they no longer count towards the character limit within the Tweet.

  • Replies: @names that auto-populate at the start of a reply Tweet will not count towards the character limit (but new non-reply Tweets starting with a @mention will count, as will @mentions added explicitly by the user in the body of the Tweet). Additionally, new Tweets that begin with a username will no longer have to use the ”.@” convention in order to have those Tweets reach all of their followers.
  • Media attachments: A URL at the end of Tweets generated from attaching photos, a video, GIF, poll, Quote Tweet, or DM deep link will also not count towards the character limit (URLs typed or pasted inside the Tweet will be counted towards the character limit as they do today).

This change will introduce new limits around the numbers of specific elements that may be included as part of a Tweet (specifically, mentions).

These changes are shipping in the coming months. Our goal is to give developers and partners this advance notice of changes to the format of Tweets so that they can prepare their products and applications appropriately.

Compatibility, and what this means for developers

Backward and forward compatibility for third party clients and other API users are our primary considerations.

There are a number of areas that will be impacted by the change:

  • the public REST and Streaming APIs
  • the Ads API
  • the Gnip data products
  • display products, such as Fabric’s Twitter Kit for embedded Tweets and timelines displayed on iOS, Android, and Web.

Tweet object changes

The following things will change within Tweet payloads:

  • The displayed text in a Tweet does not exceed 140 characters, but - when usernames or attachment URLs are included at the appropriate points in the Tweet - the text content of the overall Tweet JSON object will be able to exceed 140 characters. Developers must avoid hard-coding length assumptions into their applications.
  • The text shall be logically divided into three regions:
    • A hidden prefix region that may contain one or more space-separated @mentions which shall not be rendered as part of the display text, but must instead be rendered as metadata.
    • A display text region, which remains a maximum of 140 characters in length.
    • A hidden suffix region that may contain one attachment URL which shall not be rendered as part of the display text, but must instead be rendered as metadata. This region is limited to containing a single URL entity that identifies an attachment resource: currently, one to four photos, a GIF, video, poll, Quote Tweet, or DM deep link.
      • Note: URLs for Quote Tweet or DM deep links which are typed or pasted into a Tweet will still count against the character limit. In the near future, we will add an API parameter attachment_url to the POST statuses/update endpoint to attach these URLs to a Tweet. They will not count against the character limit when this method is used.
  • If the text contains a hidden prefix or suffix region, then the Tweet object shall contain values to identify the start and end indices of the region of the text to be displayed as the Tweet text.
  • Example payloads are provided in the appendix.

What does this look like?

This diagram shows the high-level change to Tweets, and the elements that will be hidden in the user interface.

When rendered in apps or on the web, the hidden @mentions shall appear outside of the visible Tweet body, in a format similar to below. When a Tweet is in reply to multiple people, the name of the person whom the author is directly replying to should be prioritized.

Terminology

Classic Tweet - A Tweet object where the total length of the text content does not exceed 140 characters. It may or may not contain leading and/or trailing text that shall be hidden by newer clients.

Extended Tweet - A Tweet object which includes hidden entities (e.g. leading @mentions and trailing attachment) and where the text content exceeds 140 characters in length. The display text region shall not exceed 140 characters.

Rendering modes

There will be two modes for rendering Tweet JSON objects to API clients: compatibility mode and extended mode. Compatibility mode is the default mode for the public REST and Streaming APIs and Gnip products, and is designed to not break existing clients.

REST API clients may opt into the extended mode via a request parameter.

In the future, an additional announcement will be made when the time is right to make a change for the rendering mode to default to extended mode.

Compatibility Mode JSON Rendering

In compatibility mode, Classic Tweets will be rendered exactly as today.

For Extended Tweets in compatibility mode, the following will be true:

  1. The existing text field will contain a truncated version of the Tweet text, followed by an ellipsis character, a space, and a shortened self-permalink URL. The total length of this text value shall not exceed 140 characters.
  2. The existing truncated field will be set to true.
  3. The existing entity fields (mentions, urls, media, etc.), will only contain entities that are fully contained within the text value. The from and to indices within each entity must be a valid code point index within the text value. The truncation point will avoid truncating mid-entity. A URL entity for the appended self-permalink will be appended to the list of entities.
  4. The payload may contain a new dictionary field named extended_tweet (this is specific to the Streaming and Gnip APIs). This will contain the following sub-fields:
    • full_text: contains the full, untruncated Tweet text.
    • display_text_range: an array of two unicode code point indices, identifying the inclusive start and exclusive end of the displayable content of the Tweet.
    • entities/extended_entities, etc.: The full set of entities.
  5. If the Tweet contains a Quote Tweet permalink URL, then the resulting embedded Quoted Tweet, if any, will still be included even if the permalink URL is not included in the truncated text.
  6. If the Tweet contains a URL entity that results in an attached card, then the card will still be included even if the original URL entity is not included in the truncated text.
  7. Since native media is only represented via entities, those will be missing from the truncated list of entities, but will be in extended_tweet.entities.

Extended Mode JSON Rendering

In extended mode, the following will be true both for Classic Tweets and Extended Tweets:

  1. The text field is no longer included; instead, the payload will contain a field named full_text, which contains the entire untruncated Tweet text.
  2. The payload shall contain a field named display_text_range, which is an array of two unicode code point indices, identifying the inclusive start and exclusive end of the displayable content of the tweet.
  3. The truncated field will be set to false.
  4. The entity fields will contain all entities, both hidden and displayable.

Limits

There will be restrictions placed on the content of the text. This is to improve the end-user experience, and to encourage high quality content. Tweets will be rejected at creation time if they exceed the new entity limits, via new API error codes. These restrictions will be enforced on all Tweets, regardless of overall character count (this represents a change to the existing methods that support creating new Tweets).

The numbers listed below are intended as initial guidelines.

  • overall Tweet text: limited to 3,000 Unicode code-points, after applying Unicode Normalization Form C.
  • @mentions: a limit of 50 @mentions per Tweet in the hidden region. This is enforced on the server side, so that users cannot exceed this number.
  • existing numbers and sizes of media attachments remain unchanged (up to 4 images represented by a single URL, or 1 GIF, or 1 video). Links that are added to the Tweet in order to link to media attached via the Twitter app or website (aka “native media links”) do not count, but links typed or pasted into the compose box may do so.

API changes

Public REST API endpoints

The REST API endpoints that create new Tweets (statuses/update) will accept a new boolean parameter when a Tweet is sent as a reply to a conversation: auto_populate_reply_metadata (true to enable, false to disable, false being the default). The existing in_reply_to_status_id must also be set. The leading @mentions will subsequently be looked up from the original status, and added to the new Tweet from there. In cases where the original status has been deleted, the reply will fail. This is a change to existing behaviour.

For older clients that are not updated for the auto_populate_reply_metadata option, mentions will continue to be included in the body of the Tweet and the server will decide on how to render the new Tweet.

Any endpoints that return Tweets will accept a new tweet_mode request parameter.

Valid request values are compat and extended, which give compatibility mode and extended mode, respectively.

The default mode (if no parameter is provided) is compatibility mode, to support older clients and display methods.

Tweets rendered in compatibility mode via the public REST API will not contain the extended_tweet field. REST API clients that wish to get the full text can instead opt into extended mode.

Error codes

Due to the limitations listed above, new API response and error codes will be introduced. These reflect the new content requirements listed in the Limits section above.

386The Tweet exceeds the number of allowed attachment types.Corresponds with HTTP 403. A Tweet is limited to a single attachment resource (media, Quote Tweet, etc.)

Public Streams

The Streaming API does not provide the same ability to provide query parameters to configure request options. Therefore, the Streaming API will render all Tweets in compatibility mode at this time.

Tweets rendered in compatibility mode for the streaming APIs, unlike for the REST APIs, will include the extended_tweet field for any extended tweet. This is necessary to avoid breaking existing clients by sending text that is longer than they expect in the existing text field, and also to provide the entirety of the data in a single stream. If there is an extended_tweet field, it will also include the ranges described above.

Streaming API consumers should update their code to first check for the presence of the extended_tweet dictionary, and use that in preference to the truncated data as is applicable for their use case. When extended_tweet is not present, they must fall back to using the existing fields.

In the future, a date for a switchover to extended mode will be announced, after which time apps should be able to process the newer Tweet payloads.

Gnip (REST and Streaming APIs)

In the case of Data products, both the REST and Streaming endpoints will follow a similar pattern to the public Streaming API, and the current versions of the data products APIs will render Tweets in compatibility mode, with the extended_tweet field.

The impact is intended to be a minimal, additive and opt-in, non-breaking change. Gnip customers will have to make a code change to “opt-in” to utilize the new additive fields when present. They may also want to prepare for the impacts of increased payload sizes, including storage and bandwidth implications.

In addition to payload changes, upon release of new Tweet payloads, Gnip operators and enrichments will begin to analyze the longer text and entities as opposed to the truncated version.

Tweet display on Web, iOS, Android

Web

Twitter’s web embed products are powered by our widgets.js JavaScript library which will be automatically updated to support new Tweet display formats without additional configuration needed from publishers.

iOS, Android

A future version of the Twitter Kit libraries will support retrieving extended Tweets and displaying the results inside new templates. An application developer will decide to update their version of Twitter Kit after it is available, build the new code with their app, and release the change as part of their regular app update process.

Tweet Web Intent, Twitter Kit Tweet Composer

We currently have no planned changes to the Tweet web intent, or to the Tweet Composer functionality included in Twitter Kit.?

Appendix: Example API payloads

The following examples demonstrate the differences between Tweet JSON objects in the REST API endpoints, once the API changes described above are active.

Classic Tweet, compatibility mode
{
  "created_at": "Mon Mar 07 15:13:47 +0000 2016",
  "id": 706860403981099008,
  "id_str": "706860403981099008",
  "text": "Peek-a-boo! https://t.co/R3P6waHxRa",
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [],
    "urls": [],
    "media": [
      {
        "id": 706860403746181121,
        "id_str": "706860403746181121",
        "indices": [
          12,
          35
        ],
        "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "url": "https://t.co/R3P6waHxRa",
        "display_url": "pic.twitter.com/R3P6waHxRa",
        "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",
        "type": "photo",
        "sizes": {
          "medium": {
            "w": 600,
            "h": 398,
            "resize": "fit"
          },
          "small": {
            "w": 340,
            "h": 226,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "large": {
            "w": 1024,
            "h": 680,
            "resize": "fit"
          }
        }
      }
    ]
  },
  "extended_entities": {
    "media": [
      {
        "id": 706860403746181121,
        "id_str": "706860403746181121",
        "indices": [
          12,
          35
        ],
        "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "url": "https://t.co/R3P6waHxRa",
        "display_url": "pic.twitter.com/R3P6waHxRa",
        "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",
        "type": "photo",
        "sizes": {
          "medium": {
            "w": 600,
            "h": 398,
            "resize": "fit"
          },
          "small": {
            "w": 340,
            "h": 226,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "large": {
            "w": 1024,
            "h": 680,
            "resize": "fit"
          }
        }
      }
    ]
  },
  "truncated": false,
  "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",
  "in_reply_to_status_id": null,
  "in_reply_to_status_id_str": null,
  "in_reply_to_user_id": null,
  "in_reply_to_user_id_str": null,
  "in_reply_to_screen_name": null,
  "user": {
    "id": 15062340,
    "id_str": "15062340",
    "name": "/dev/cloud/jeremy",
    "screen_name": "jeremycloud",
    "location": "Madison, Wisconsin",
    "description": "Professional yak shaver. Amateur bike shedder.",
    "url": "https://t.co/FcYeBkOpVY",
    "entities": {
      "url": {
        "urls": [
          {
            "url": "https://t.co/FcYeBkOpVY",
            "expanded_url": "http://about.me/jeremy.cloud",
            "display_url": "about.me/jeremy.cloud",
            "indices": [
              0,
              23
            ]
          }
        ]
      },
      "description": {
        "urls": []
      }
    },
    "protected": false,
    "followers_count": 4324,
    "friends_count": 410,
    "listed_count": 103,
    "created_at": "Mon Jun 09 17:00:58 +0000 2008",
    "favourites_count": 815,
    "utc_offset": -18000,
    "time_zone": "Central Time (US & Canada)",
    "geo_enabled": true,
    "verified": false,
    "statuses_count": 2218,
    "lang": "en",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "000000",
    "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
    "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
    "profile_link_color": "4A913C",
    "profile_sidebar_border_color": "000000",
    "profile_sidebar_fill_color": "000000",
    "profile_text_color": "000000",
    "profile_use_background_image": false,
    "has_extended_profile": true,
    "default_profile": false,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "is_quote_status": false,
  "retweet_count": 0,
  "favorite_count": 8,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Classic Tweet, extended mode
{
  "created_at": "Mon Mar 07 15:13:47 +0000 2016",
  "id": 706860403981099008,
  "id_str": "706860403981099008",
  "full_text": "Peek-a-boo! https://t.co/R3P6waHxRa",
  "display_text_range": [
    0,
    35
  ],
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [],
    "urls": [],
    "media": [
      {
        "id": 706860403746181121,
        "id_str": "706860403746181121",
        "indices": [
          12,
          35
        ],
        "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "url": "https://t.co/R3P6waHxRa",
        "display_url": "pic.twitter.com/R3P6waHxRa",
        "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",
        "type": "photo",
        "sizes": {
          "medium": {
            "w": 600,
            "h": 398,
            "resize": "fit"
          },
          "small": {
            "w": 340,
            "h": 226,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "large": {
            "w": 1024,
            "h": 680,
            "resize": "fit"
          }
        }
      }
    ]
  },
  "extended_entities": {
    "media": [
      {
        "id": 706860403746181121,
        "id_str": "706860403746181121",
        "indices": [
          12,
          35
        ],
        "media_url": "http://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "media_url_https": "https://pbs.twimg.com/media/Cc9FyscUkAEQaOw.jpg",
        "url": "https://t.co/R3P6waHxRa",
        "display_url": "pic.twitter.com/R3P6waHxRa",
        "expanded_url": "http://twitter.com/jeremycloud/status/706860403981099008/photo/1",
        "type": "photo",
        "sizes": {
          "medium": {
            "w": 600,
            "h": 398,
            "resize": "fit"
          },
          "small": {
            "w": 340,
            "h": 226,
            "resize": "fit"
          },
          "thumb": {
            "w": 150,
            "h": 150,
            "resize": "crop"
          },
          "large": {
            "w": 1024,
            "h": 680,
            "resize": "fit"
          }
        }
      }
    ]
  },
  "truncated": false,
  "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",
  "in_reply_to_status_id": null,
  "in_reply_to_status_id_str": null,
  "in_reply_to_user_id": null,
  "in_reply_to_user_id_str": null,
  "in_reply_to_screen_name": null,
  "user": {
    "id": 15062340,
    "id_str": "15062340",
    "name": "/dev/cloud/jeremy",
    "screen_name": "jeremycloud",
    "location": "Madison, Wisconsin",
    "description": "Professional yak shaver. Amateur bike shedder.",
    "url": "https://t.co/FcYeBkOpVY",
    "entities": {
      "url": {
        "urls": [
          {
            "url": "https://t.co/FcYeBkOpVY",
            "expanded_url": "http://about.me/jeremy.cloud",
            "display_url": "about.me/jeremy.cloud",
            "indices": [
              0,
              23
            ]
          }
        ]
      },
      "description": {
        "urls": []
      }
    },
    "protected": false,
    "followers_count": 4324,
    "friends_count": 410,
    "listed_count": 103,
    "created_at": "Mon Jun 09 17:00:58 +0000 2008",
    "favourites_count": 815,
    "utc_offset": -18000,
    "time_zone": "Central Time (US & Canada)",
    "geo_enabled": true,
    "verified": false,
    "statuses_count": 2218,
    "lang": "en",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "000000",
    "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
    "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
    "profile_link_color": "4A913C",
    "profile_sidebar_border_color": "000000",
    "profile_sidebar_fill_color": "000000",
    "profile_text_color": "000000",
    "profile_use_background_image": false,
    "has_extended_profile": true,
    "default_profile": false,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "is_quote_status": false,
  "retweet_count": 0,
  "favorite_count": 8,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Classic Tweet, compatibility mode, hidden text
{
  "created_at": "Thu Mar 10 23:12:12 +0000 2016",
  "id": 708067963060916224,
  "id_str": "708067963060916224",
  "text": "@jeremycloud Who would win in a battle between a Barred Owl and a Cooper's Hawk? https://t.co/FamikDro2h",
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [
      {
        "screen_name": "jeremycloud",
        "name": "/dev/cloud/jeremy",
        "id": 15062340,
        "id_str": "15062340",
        "indices": [
          0,
          12
        ]
      }
    ],
    "urls": [
      {
        "url": "https://t.co/FamikDro2h",
        "expanded_url": "https://twitter.com/jeremycloud/status/703621193417379840",
        "display_url": "twitter.com/jeremycloud/st…",
        "indices": [
          81,
          104
        ]
      }
    ]
  },
  "truncated": false,
  "source": "bonesTwurl",
  "in_reply_to_status_id": 704059336788606976,
  "in_reply_to_status_id_str": "704059336788606976",
  "in_reply_to_user_id": 15062340,
  "in_reply_to_user_id_str": "15062340",
  "in_reply_to_screen_name": "jeremycloud",
  "user": {
    "id": 4449621923,
    "id_str": "4449621923",
    "name": "Mr Bones",
    "screen_name": "MrBonesDroid",
    "location": "",
    "profile_location": null,
    "description": "",
    "url": null,
    "entities": {
    "description": {
	"urls": []
     }
    },
    "protected": true,
    "followers_count": 5,
    "friends_count": 7,
    "listed_count": 0,
    "created_at": "Fri Dec 11 15:18:02 +0000 2015",
    "favourites_count": 7,
    "utc_offset": -25200,
    "time_zone": "Pacific Time (US & Canada)",
    "geo_enabled": false,
    "verified": false,
    "statuses_count": 35,
    "lang": "en-gb",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "F5F8FA",
    "profile_background_image_url": null,
    "profile_background_image_url_https": null,
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_link_color": "2B7BB9",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "has_extended_profile": false,
    "default_profile": true,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "quoted_status_id": 703621193417379840,
  "quoted_status_id_str": "703621193417379840",
  "quoted_status": {
    "created_at": "Sat Feb 27 16:42:19 +0000 2016",
    "id": 703621193417379840,
    "id_str": "703621193417379840",
    "text": "Cooper’s Hawk https://t.co/nppuOGne9X",
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": [],
      "media": [
        {
          "id": 703621193182502913,
          "id_str": "703621193182502913",
          "indices": [
            14,
            37
          ],
          "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "url": "https://t.co/nppuOGne9X",
          "display_url": "pic.twitter.com/nppuOGne9X",
          "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 398,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 1024,
              "h": 680,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 226,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "extended_entities": {
      "media": [
        {
          "id": 703621193182502913,
          "id_str": "703621193182502913",
          "indices": [
            14,
            37
          ],
          "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "url": "https://t.co/nppuOGne9X",
          "display_url": "pic.twitter.com/nppuOGne9X",
          "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 398,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 1024,
              "h": 680,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 226,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "truncated": false,
    "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 15062340,
      "id_str": "15062340",
      "name": "/dev/cloud/jeremy",
      "screen_name": "jeremycloud",
      "location": "Madison, Wisconsin",
      "description": "Professional yak shaver. Amateur bike shedder.",
      "url": "https://t.co/FcYeBkOpVY",
      "entities": {
        "url": {
          "urls": [
            {
              "url": "https://t.co/FcYeBkOpVY",
              "expanded_url": "http://about.me/jeremy.cloud",
              "display_url": "about.me/jeremy.cloud",
              "indices": [
                0,
                23
              ]
            }
          ]
        },
        "description": {
          "urls": []
        }
      },
      "protected": false,
      "followers_count": 4329,
      "friends_count": 411,
      "listed_count": 103,
      "created_at": "Mon Jun 09 17:00:58 +0000 2008",
      "favourites_count": 803,
      "utc_offset": -21600,
      "time_zone": "Central Time (US & Canada)",
      "geo_enabled": true,
      "verified": false,
      "statuses_count": 2216,
      "lang": "en",
      "contributors_enabled": false,
      "is_translator": false,
      "is_translation_enabled": false,
      "profile_background_color": "000000",
      "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_tile": false,
      "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
      "profile_link_color": "4A913C",
      "profile_sidebar_border_color": "000000",
      "profile_sidebar_fill_color": "000000",
      "profile_text_color": "000000",
      "profile_use_background_image": false,
      "has_extended_profile": true,
      "default_profile": false,
      "default_profile_image": false,
      "following": true,
      "follow_request_sent": false,
      "notifications": false
    },
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "is_quote_status": false,
    "retweet_count": 0,
    "favorite_count": 2,
    "favorited": false,
    "retweeted": false,
    "possibly_sensitive": false,
    "possibly_sensitive_appealable": false,
    "lang": "en"
  },
  "is_quote_status": true,
  "retweet_count": 0,
  "favorite_count": 0,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Classic Tweet, extended mode, hidden text
{
  "created_at": "Thu Mar 10 23:12:12 +0000 2016",
  "id": 708067963060916224,
  "id_str": "708067963060916224",
  "full_text": "@jeremycloud Who would win in a battle between a Barred Owl and a Cooper's Hawk? https://t.co/FamikDro2h",
  "display_text_range": [
    13,
    80
  ],
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [
      {
        "screen_name": "jeremycloud",
        "name": "/dev/cloud/jeremy",
        "id": 15062340,
        "id_str": "15062340",
        "indices": [
          0,
          12
        ]
      }
    ],
    "urls": [
      {
        "url": "https://t.co/FamikDro2h",
        "expanded_url": "https://twitter.com/jeremycloud/status/703621193417379840",
        "display_url": "twitter.com/jeremycloud/st…",
        "indices": [
          81,
          104
        ]
      }
    ]
  },
  "truncated": false,
  "source": "bonesTwurl",
  "in_reply_to_status_id": 704059336788606976,
  "in_reply_to_status_id_str": "704059336788606976",
  "in_reply_to_user_id": 15062340,
  "in_reply_to_user_id_str": "15062340",
  "in_reply_to_screen_name": "jeremycloud",
  "user": {
    "id": 4449621923,
    "id_str": "4449621923",
    "name": "Mr Bones",
    "screen_name": "MrBonesDroid",
    "location": "",
    "profile_location": null,
    "description": "",
    "url": null,
    "entities": {
    "description": {
	"urls": []
     }
    },
    "protected": true,
    "followers_count": 5,
    "friends_count": 7,
    "listed_count": 0,
    "created_at": "Fri Dec 11 15:18:02 +0000 2015",
    "favourites_count": 7,
    "utc_offset": -25200,
    "time_zone": "Pacific Time (US & Canada)",
    "geo_enabled": false,
    "verified": false,
    "statuses_count": 35,
    "lang": "en-gb",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "F5F8FA",
    "profile_background_image_url": null,
    "profile_background_image_url_https": null,
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_link_color": "2B7BB9",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "has_extended_profile": false,
    "default_profile": true,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "quoted_status_id": 703621193417379840,
  "quoted_status_id_str": "703621193417379840",
  "quoted_status": {
    "created_at": "Sat Feb 27 16:42:19 +0000 2016",
    "id": 703621193417379840,
    "id_str": "703621193417379840",
    "full_text": "Cooper’s Hawk https://t.co/nppuOGne9X",
    "display_text_range": [
      0,
      37
    ],
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": [],
      "media": [
        {
          "id": 703621193182502913,
          "id_str": "703621193182502913",
          "indices": [
            14,
            37
          ],
          "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "url": "https://t.co/nppuOGne9X",
          "display_url": "pic.twitter.com/nppuOGne9X",
          "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 398,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 1024,
              "h": 680,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 226,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "extended_entities": {
      "media": [
        {
          "id": 703621193182502913,
          "id_str": "703621193182502913",
          "indices": [
            14,
            37
          ],
          "media_url": "http://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcPDv0wUYAE3D-2.jpg",
          "url": "https://t.co/nppuOGne9X",
          "display_url": "pic.twitter.com/nppuOGne9X",
          "expanded_url": "http://twitter.com/jeremycloud/status/703621193417379840/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 398,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 1024,
              "h": 680,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 226,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "truncated": false,
    "source": "<a href=\"http://www.apple.com/\" rel=\"nofollow\">OS X</a>",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 15062340,
      "id_str": "15062340",
      "name": "/dev/cloud/jeremy",
      "screen_name": "jeremycloud",
      "location": "Madison, Wisconsin",
      "description": "Professional yak shaver. Amateur bike shedder.",
      "url": "https://t.co/FcYeBkOpVY",
      "entities": {
        "url": {
          "urls": [
            {
              "url": "https://t.co/FcYeBkOpVY",
              "expanded_url": "http://about.me/jeremy.cloud",
              "display_url": "about.me/jeremy.cloud",
              "indices": [
                0,
                23
              ]
            }
          ]
        },
        "description": {
          "urls": []
        }
      },
      "protected": false,
      "followers_count": 4329,
      "friends_count": 411,
      "listed_count": 103,
      "created_at": "Mon Jun 09 17:00:58 +0000 2008",
      "favourites_count": 803,
      "utc_offset": -21600,
      "time_zone": "Central Time (US & Canada)",
      "geo_enabled": true,
      "verified": false,
      "statuses_count": 2216,
      "lang": "en",
      "contributors_enabled": false,
      "is_translator": false,
      "is_translation_enabled": false,
      "profile_background_color": "000000",
      "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_tile": false,
      "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
      "profile_link_color": "4A913C",
      "profile_sidebar_border_color": "000000",
      "profile_sidebar_fill_color": "000000",
      "profile_text_color": "000000",
      "profile_use_background_image": false,
      "has_extended_profile": true,
      "default_profile": false,
      "default_profile_image": false,
      "following": true,
      "follow_request_sent": false,
      "notifications": false
    },
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "is_quote_status": false,
    "retweet_count": 0,
    "favorite_count": 2,
    "favorited": false,
    "retweeted": false,
    "possibly_sensitive": false,
    "possibly_sensitive_appealable": false,
    "lang": "en"
  },
  "is_quote_status": true,
  "retweet_count": 0,
  "favorite_count": 0,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Extended Tweet, compatibility mode
{
  "created_at": "Mon Mar 28 14:39:13 +0000 2016",
  "id": 714461850188926976,
  "id_str": "714461850188926976",
  "text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the … https://t.co/OY7qmdJQnO",
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [
      {
        "screen_name": "jeremycloud",
        "name": "/dev/cloud/jeremy",
        "id": 15062340,
        "id_str": "15062340",
        "indices": [
          0,
          12
        ]
      }
    ],
    "urls": [
      {
        "url": "https://t.co/OY7qmdJQnO",
        "expanded_url": "https://twitter.com/i/web/status/714461850188926976",
        "display_url": "twitter.com/i/web/status/7…",
        "indices": [
          117,
          140
        ]
      }
    ]
  },
  "truncated": true,
  "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",
  "in_reply_to_status_id": 706860403981099008,
  "in_reply_to_status_id_str": "706860403981099008",
  "in_reply_to_user_id": 15062340,
  "in_reply_to_user_id_str": "15062340",
  "in_reply_to_screen_name": "jeremycloud",
  "user": {
    "id": 4449621923,
    "id_str": "4449621923",
    "name": "Mr Bones",
    "screen_name": "MrBonesDroid",
    "location": "",
    "profile_location": null,
    "description": "",
    "url": null,
    "entities": {
    "description": {
	"urls": []
     }
    },
    "protected": true,
    "followers_count": 5,
    "friends_count": 7,
    "listed_count": 0,
    "created_at": "Fri Dec 11 15:18:02 +0000 2015",
    "favourites_count": 7,
    "utc_offset": -25200,
    "time_zone": "Pacific Time (US & Canada)",
    "geo_enabled": false,
    "verified": false,
    "statuses_count": 35,
    "lang": "en-gb",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "F5F8FA",
    "profile_background_image_url": null,
    "profile_background_image_url_https": null,
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_link_color": "2B7BB9",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "has_extended_profile": false,
    "default_profile": true,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "quoted_status_id": 704059336788606976,
  "quoted_status_id_str": "704059336788606976",
  "quoted_status": {
    "created_at": "Sun Feb 28 21:43:21 +0000 2016",
    "id": 704059336788606976,
    "id_str": "704059336788606976",
    "text": "My favorite photographic subject, up closer than ever before. https://t.co/K958bKh9Sd",
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": [],
      "media": [
        {
          "id": 704059330149031936,
          "id_str": "704059330149031936",
          "indices": [
            62,
            85
          ],
          "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "url": "https://t.co/K958bKh9Sd",
          "display_url": "pic.twitter.com/K958bKh9Sd",
          "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 600,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 871,
              "h": 871,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 340,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "extended_entities": {
      "media": [
        {
          "id": 704059330149031936,
          "id_str": "704059330149031936",
          "indices": [
            62,
            85
          ],
          "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "url": "https://t.co/K958bKh9Sd",
          "display_url": "pic.twitter.com/K958bKh9Sd",
          "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 600,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 871,
              "h": 871,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 340,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "truncated": false,
    "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 15062340,
      "id_str": "15062340",
      "name": "/dev/cloud/jeremy",
      "screen_name": "jeremycloud",
      "location": "Madison, Wisconsin",
      "description": "Professional yak shaver. Amateur bike shedder.",
      "url": "https://t.co/FcYeBkOpVY",
      "entities": {
        "url": {
          "urls": [
            {
              "url": "https://t.co/FcYeBkOpVY",
              "expanded_url": "http://about.me/jeremy.cloud",
              "display_url": "about.me/jeremy.cloud",
              "indices": [
                0,
                23
              ]
            }
          ]
        },
        "description": {
          "urls": []
        }
      },
      "protected": false,
      "followers_count": 4324,
      "friends_count": 410,
      "listed_count": 103,
      "created_at": "Mon Jun 09 17:00:58 +0000 2008",
      "favourites_count": 815,
      "utc_offset": -18000,
      "time_zone": "Central Time (US & Canada)",
      "geo_enabled": true,
      "verified": false,
      "statuses_count": 2218,
      "lang": "en",
      "contributors_enabled": false,
      "is_translator": false,
      "is_translation_enabled": false,
      "profile_background_color": "000000",
      "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_tile": false,
      "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
      "profile_link_color": "4A913C",
      "profile_sidebar_border_color": "000000",
      "profile_sidebar_fill_color": "000000",
      "profile_text_color": "000000",
      "profile_use_background_image": false,
      "has_extended_profile": true,
      "default_profile": false,
      "default_profile_image": false,
      "following": true,
      "follow_request_sent": false,
      "notifications": false
    },
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "is_quote_status": false,
    "retweet_count": 0,
    "favorite_count": 11,
    "favorited": false,
    "retweeted": false,
    "possibly_sensitive": false,
    "possibly_sensitive_appealable": false,
    "lang": "en"
  },
  "is_quote_status": true,
  "retweet_count": 0,
  "favorite_count": 0,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Extended Tweet, compatibility mode (streaming, with extended_tweet)
{
  "created_at": "Mon Mar 28 14:39:13 +0000 2016",
  "id": 714461850188926976,
  "id_str": "714461850188926976",
  "text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the … https://t.co/OY7qmdJQnO",
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [
      {
        "screen_name": "jeremycloud",
        "name": "/dev/cloud/jeremy",
        "id": 15062340,
        "id_str": "15062340",
        "indices": [
          0,
          12
        ]
      }
    ],
    "urls": [
      {
        "url": "https://t.co/OY7qmdJQnO",
        "expanded_url": "https://twitter.com/i/web/status/714461850188926976",
        "display_url": "twitter.com/i/web/status/7…",
        "indices": [
          117,
          140
        ]
      }
    ]
  },
  "truncated": true,
  "extended_tweet": {
    "full_text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the owl's nest https://t.co/Q0pkaU4ORH",
    "display_text_range": [
      13,
      125
    ],
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [
        {
          "screen_name": "jeremycloud",
          "name": "/dev/cloud/jeremy",
          "id": 15062340,
          "id_str": "15062340",
          "indices": [
            0,
            12
          ]
        }
      ],
      "urls": [
        {
          "url": "https://t.co/Q0pkaU4ORH",
          "expanded_url": "https://twitter.com/jeremycloud/status/704059336788606976",
          "display_url": "twitter.com/jeremycloud/st…",
          "indices": [
            126,
            149
          ]
        }
      ]
    }
  },
  "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",
  "in_reply_to_status_id": 706860403981099008,
  "in_reply_to_status_id_str": "706860403981099008",
  "in_reply_to_user_id": 15062340,
  "in_reply_to_user_id_str": "15062340",
  "in_reply_to_screen_name": "jeremycloud",
  "user": {
    "id": 4449621923,
    "id_str": "4449621923",
    "name": "Mr Bones",
    "screen_name": "MrBonesDroid",
    "location": "",
    "profile_location": null,
    "description": "",
    "url": null,
    "entities": {
    "description": {
	"urls": []
     }
    },
    "protected": true,
    "followers_count": 5,
    "friends_count": 7,
    "listed_count": 0,
    "created_at": "Fri Dec 11 15:18:02 +0000 2015",
    "favourites_count": 7,
    "utc_offset": -25200,
    "time_zone": "Pacific Time (US & Canada)",
    "geo_enabled": false,
    "verified": false,
    "statuses_count": 35,
    "lang": "en-gb",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "F5F8FA",
    "profile_background_image_url": null,
    "profile_background_image_url_https": null,
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_link_color": "2B7BB9",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "has_extended_profile": false,
    "default_profile": true,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "quoted_status_id": 704059336788606976,
  "quoted_status_id_str": "704059336788606976",
  "quoted_status": {
    "created_at": "Sun Feb 28 21:43:21 +0000 2016",
    "id": 704059336788606976,
    "id_str": "704059336788606976",
    "text": "My favorite photographic subject, up closer than ever before. https://t.co/K958bKh9Sd",
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": [],
      "media": [
        {
          "id": 704059330149031936,
          "id_str": "704059330149031936",
          "indices": [
            62,
            85
          ],
          "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "url": "https://t.co/K958bKh9Sd",
          "display_url": "pic.twitter.com/K958bKh9Sd",
          "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 600,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 871,
              "h": 871,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 340,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "extended_entities": {
      "media": [
        {
          "id": 704059330149031936,
          "id_str": "704059330149031936",
          "indices": [
            62,
            85
          ],
          "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "url": "https://t.co/K958bKh9Sd",
          "display_url": "pic.twitter.com/K958bKh9Sd",
          "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 600,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 871,
              "h": 871,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 340,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "truncated": false,
    "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 15062340,
      "id_str": "15062340",
      "name": "/dev/cloud/jeremy",
      "screen_name": "jeremycloud",
      "location": "Madison, Wisconsin",
      "description": "Professional yak shaver. Amateur bike shedder.",
      "url": "https://t.co/FcYeBkOpVY",
      "entities": {
        "url": {
          "urls": [
            {
              "url": "https://t.co/FcYeBkOpVY",
              "expanded_url": "http://about.me/jeremy.cloud",
              "display_url": "about.me/jeremy.cloud",
              "indices": [
                0,
                23
              ]
            }
          ]
        },
        "description": {
          "urls": []
        }
      },
      "protected": false,
      "followers_count": 4324,
      "friends_count": 410,
      "listed_count": 103,
      "created_at": "Mon Jun 09 17:00:58 +0000 2008",
      "favourites_count": 815,
      "utc_offset": -18000,
      "time_zone": "Central Time (US & Canada)",
      "geo_enabled": true,
      "verified": false,
      "statuses_count": 2218,
      "lang": "en",
      "contributors_enabled": false,
      "is_translator": false,
      "is_translation_enabled": false,
      "profile_background_color": "000000",
      "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_tile": false,
      "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
      "profile_link_color": "4A913C",
      "profile_sidebar_border_color": "000000",
      "profile_sidebar_fill_color": "000000",
      "profile_text_color": "000000",
      "profile_use_background_image": false,
      "has_extended_profile": true,
      "default_profile": false,
      "default_profile_image": false,
      "following": true,
      "follow_request_sent": false,
      "notifications": false
    },
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "is_quote_status": false,
    "retweet_count": 0,
    "favorite_count": 11,
    "favorited": false,
    "retweeted": false,
    "possibly_sensitive": false,
    "possibly_sensitive_appealable": false,
    "lang": "en"
  },
  "is_quote_status": true,
  "retweet_count": 0,
  "favorite_count": 0,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Extended Tweet, extended mode
{
  "created_at": "Mon Mar 28 14:39:13 +0000 2016",
  "id": 714461850188926976,
  "id_str": "714461850188926976",
  "full_text": "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the owl's nest https://t.co/Q0pkaU4ORH",
  "display_text_range": [
    13,
    125
  ],
  "entities": {
    "hashtags": [],
    "symbols": [],
    "user_mentions": [
      {
        "screen_name": "jeremycloud",
        "name": "/dev/cloud/jeremy",
        "id": 15062340,
        "id_str": "15062340",
        "indices": [
          0,
          12
        ]
      }
    ],
    "urls": [
      {
        "url": "https://t.co/Q0pkaU4ORH",
        "expanded_url": "https://twitter.com/jeremycloud/status/704059336788606976",
        "display_url": "twitter.com/jeremycloud/st…",
        "indices": [
          126,
          149
        ]
      }
    ]
  },
  "truncated": false,
  "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",
  "in_reply_to_status_id": 706860403981099008,
  "in_reply_to_status_id_str": "706860403981099008",
  "in_reply_to_user_id": 15062340,
  "in_reply_to_user_id_str": "15062340",
  "in_reply_to_screen_name": "jeremycloud",
  "user": {
    "id": 4449621923,
    "id_str": "4449621923",
    "name": "Mr Bones",
    "screen_name": "MrBonesDroid",
    "location": "",
    "profile_location": null,
    "description": "",
    "url": null,
    "entities": {
    "description": {
	"urls": []
     }
    },
    "protected": true,
    "followers_count": 5,
    "friends_count": 7,
    "listed_count": 0,
    "created_at": "Fri Dec 11 15:18:02 +0000 2015",
    "favourites_count": 7,
    "utc_offset": -25200,
    "time_zone": "Pacific Time (US & Canada)",
    "geo_enabled": false,
    "verified": false,
    "statuses_count": 35,
    "lang": "en-gb",
    "contributors_enabled": false,
    "is_translator": false,
    "is_translation_enabled": false,
    "profile_background_color": "F5F8FA",
    "profile_background_image_url": null,
    "profile_background_image_url_https": null,
    "profile_background_tile": false,
    "profile_image_url": "http://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_image_url_https": "https://pbs.twimg.com/profile_images/677097663288860672/zZxWCPSI_normal.jpg",
    "profile_link_color": "2B7BB9",
    "profile_sidebar_border_color": "C0DEED",
    "profile_sidebar_fill_color": "DDEEF6",
    "profile_text_color": "333333",
    "profile_use_background_image": true,
    "has_extended_profile": false,
    "default_profile": true,
    "default_profile_image": false,
    "following": true,
    "follow_request_sent": false,
    "notifications": false
  },
  "geo": null,
  "coordinates": null,
  "place": null,
  "contributors": null,
  "quoted_status_id": 704059336788606976,
  "quoted_status_id_str": "704059336788606976",
  "quoted_status": {
    "created_at": "Sun Feb 28 21:43:21 +0000 2016",
    "id": 704059336788606976,
    "id_str": "704059336788606976",
    "full_text": "My favorite photographic subject, up closer than ever before. https://t.co/K958bKh9Sd",
    "display_text_range": [
      0,
      85
    ],
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [],
      "urls": [],
      "media": [
        {
          "id": 704059330149031936,
          "id_str": "704059330149031936",
          "indices": [
            62,
            85
          ],
          "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "url": "https://t.co/K958bKh9Sd",
          "display_url": "pic.twitter.com/K958bKh9Sd",
          "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 600,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 871,
              "h": 871,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 340,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "extended_entities": {
      "media": [
        {
          "id": 704059330149031936,
          "id_str": "704059330149031936",
          "indices": [
            62,
            85
          ],
          "media_url": "http://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "media_url_https": "https://pbs.twimg.com/media/CcVSOwJVIAAKwE6.jpg",
          "url": "https://t.co/K958bKh9Sd",
          "display_url": "pic.twitter.com/K958bKh9Sd",
          "expanded_url": "http://twitter.com/jeremycloud/status/704059336788606976/photo/1",
          "type": "photo",
          "sizes": {
            "medium": {
              "w": 600,
              "h": 600,
              "resize": "fit"
            },
            "thumb": {
              "w": 150,
              "h": 150,
              "resize": "crop"
            },
            "large": {
              "w": 871,
              "h": 871,
              "resize": "fit"
            },
            "small": {
              "w": 340,
              "h": 340,
              "resize": "fit"
            }
          }
        }
      ]
    },
    "truncated": false,
    "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
    "in_reply_to_status_id": null,
    "in_reply_to_status_id_str": null,
    "in_reply_to_user_id": null,
    "in_reply_to_user_id_str": null,
    "in_reply_to_screen_name": null,
    "user": {
      "id": 15062340,
      "id_str": "15062340",
      "name": "/dev/cloud/jeremy",
      "screen_name": "jeremycloud",
      "location": "Madison, Wisconsin",
      "description": "Professional yak shaver. Amateur bike shedder.",
      "url": "https://t.co/FcYeBkOpVY",
      "entities": {
        "url": {
          "urls": [
            {
              "url": "https://t.co/FcYeBkOpVY",
              "expanded_url": "http://about.me/jeremy.cloud",
              "display_url": "about.me/jeremy.cloud",
              "indices": [
                0,
                23
              ]
            }
          ]
        },
        "description": {
          "urls": []
        }
      },
      "protected": false,
      "followers_count": 4324,
      "friends_count": 410,
      "listed_count": 103,
      "created_at": "Mon Jun 09 17:00:58 +0000 2008",
      "favourites_count": 815,
      "utc_offset": -18000,
      "time_zone": "Central Time (US & Canada)",
      "geo_enabled": true,
      "verified": false,
      "statuses_count": 2218,
      "lang": "en",
      "contributors_enabled": false,
      "is_translator": false,
      "is_translation_enabled": false,
      "profile_background_color": "000000",
      "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
      "profile_background_tile": false,
      "profile_image_url": "http://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_image_url_https": "https://pbs.twimg.com/profile_images/436903139183054849/i_MbCcoW_normal.jpeg",
      "profile_banner_url": "https://pbs.twimg.com/profile_banners/15062340/1447451621",
      "profile_link_color": "4A913C",
      "profile_sidebar_border_color": "000000",
      "profile_sidebar_fill_color": "000000",
      "profile_text_color": "000000",
      "profile_use_background_image": false,
      "has_extended_profile": true,
      "default_profile": false,
      "default_profile_image": false,
      "following": true,
      "follow_request_sent": false,
      "notifications": false
    },
    "geo": null,
    "coordinates": null,
    "place": null,
    "contributors": null,
    "is_quote_status": false,
    "retweet_count": 0,
    "favorite_count": 11,
    "favorited": false,
    "retweeted": false,
    "possibly_sensitive": false,
    "possibly_sensitive_appealable": false,
    "lang": "en"
  },
  "is_quote_status": true,
  "retweet_count": 0,
  "favorite_count": 0,
  "favorited": false,
  "retweeted": false,
  "possibly_sensitive": false,
  "possibly_sensitive_appealable": false,
  "lang": "en"
}
Additive to Gnip ActivityStreams payload
...
  "long_object" : {
    "body" : "@jeremycloud It's neat to have owls and raccoons around until you realize that raccoons will eat the eggs from the owl's nest https://t.co/Q0pkaU4ORH",
    "display_text_range": [ 13, 125 ],
    "twitter_entities" : {
      "user_mentions" : [ {
        "screen_name" : "jeremycloud",
        "name" : "/dev/cloud/jeremy",
        "id" : 15062340,
        "id_str" : "15062340",
        "indices" : [ 108, 120 ]
      } ],
      "urls" : [ {
	   "url": "https://t.co/Q0pkaU4ORH",
          "expanded_url": "https://twitter.com/jeremycloud/status/704059336788606976",
          "display_url": "twitter.com/jeremycloud/st…",
          "indices": [ 126, 149 ]
      } ],
      "media" : [ ],
      "hashtags" : [ ]
    },
    "twitter_extended_entities": {
        "media": [ ]
    }
  },
...