Twitter/X Bookmarks API
Endpoints related to retrieving, managing bookmarks of a user
Endpoints related to retrieving, managing bookmarks of a user
openapi: 3.0.0
info:
description: X API v2 available endpoints
version: '2.166'
title: X API v2 Account Activity Bookmarks API
termsOfService: https://developer.x.com/en/developer-terms/agreement-and-policy.html
contact:
name: X Developers
url: https://developer.x.com/
license:
name: X Developer Agreement and Policy
url: https://developer.x.com/en/developer-terms/agreement-and-policy.html
servers:
- description: X API
url: https://api.x.com
tags:
- name: Bookmarks
description: Endpoints related to retrieving, managing bookmarks of a user
externalDocs:
description: Find out more
url: https://developer.twitter.com/en/docs/twitter-api/bookmarks
paths:
/2/users/{id}/bookmarks:
get:
security:
- OAuth2UserToken:
- bookmark.read
- tweet.read
- users.read
tags:
- Bookmarks
summary: Get Bookmarks
description: Retrieves a list of Posts bookmarked by the authenticated user.
externalDocs:
url: https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/get-users-id-bookmarks
operationId: getUsersBookmarks
parameters:
- name: id
in: path
description: The ID of the authenticated source User for whom to return results.
required: true
schema:
$ref: '#/components/schemas/UserIdMatchesAuthenticatedUser'
style: simple
- name: max_results
in: query
description: The maximum number of results.
required: false
schema:
type: integer
minimum: 1
maximum: 100
format: int32
style: form
- name: pagination_token
in: query
description: This parameter is used to get the next 'page' of results.
required: false
schema:
$ref: '#/components/schemas/PaginationToken36'
style: form
- $ref: '#/components/parameters/TweetFieldsParameter'
- $ref: '#/components/parameters/TweetExpansionsParameter'
- $ref: '#/components/parameters/MediaFieldsParameter'
- $ref: '#/components/parameters/PollFieldsParameter'
- $ref: '#/components/parameters/UserFieldsParameter'
- $ref: '#/components/parameters/PlaceFieldsParameter'
responses:
'200':
description: The request has succeeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Get2UsersIdBookmarksResponse'
default:
description: The request has failed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
post:
security:
- OAuth2UserToken:
- bookmark.write
- tweet.read
- users.read
tags:
- Bookmarks
summary: Create Bookmark
description: Adds a post to the authenticated user’s bookmarks.
externalDocs:
url: https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/post-users-id-bookmarks
operationId: createUsersBookmark
parameters:
- name: id
in: path
description: The ID of the authenticated source User for whom to add bookmarks.
required: true
schema:
$ref: '#/components/schemas/UserIdMatchesAuthenticatedUser'
style: simple
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BookmarkAddRequest'
required: true
responses:
'200':
description: The request has succeeded.
content:
application/json:
schema:
$ref: '#/components/schemas/BookmarkMutationResponse'
default:
description: The request has failed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
/2/users/{id}/bookmarks/folders:
get:
security:
- OAuth2UserToken:
- bookmark.read
- users.read
tags:
- Bookmarks
summary: Get Bookmark folders
description: Retrieves a list of Bookmark folders created by the authenticated user.
externalDocs:
url: https://developer.x.com
operationId: getUsersBookmarkFolders
parameters:
- name: id
in: path
description: The ID of the authenticated source User for whom to return results.
required: true
schema:
$ref: '#/components/schemas/UserIdMatchesAuthenticatedUser'
style: simple
- name: max_results
in: query
description: The maximum number of results.
required: false
schema:
type: integer
minimum: 1
maximum: 100
format: int32
style: form
- name: pagination_token
in: query
description: This parameter is used to get the next 'page' of results.
required: false
schema:
$ref: '#/components/schemas/PaginationToken36'
style: form
responses:
'200':
description: The request has succeeded.
content:
application/json:
schema:
$ref: '#/components/schemas/BookmarkFoldersResponse'
default:
description: The request has failed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
/2/users/{id}/bookmarks/folders/{folder_id}:
get:
security:
- OAuth2UserToken:
- bookmark.read
- tweet.read
- users.read
tags:
- Bookmarks
summary: Get Bookmarks by folder ID
description: Retrieves Posts in a specific Bookmark folder by its ID for the authenticated user.
externalDocs:
url: https://developer.x.com
operationId: getUsersBookmarksByFolderId
parameters:
- name: id
in: path
description: The ID of the authenticated source User for whom to return results.
required: true
schema:
$ref: '#/components/schemas/UserIdMatchesAuthenticatedUser'
style: simple
- name: folder_id
in: path
description: The ID of the Bookmark Folder that the authenticated User is trying to fetch Posts for.
required: true
schema:
$ref: '#/components/schemas/BookmarkFolderId'
style: simple
responses:
'200':
description: The request has succeeded.
content:
application/json:
schema:
$ref: '#/components/schemas/BookmarkFolderPostsResponse'
default:
description: The request has failed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
/2/users/{id}/bookmarks/{tweet_id}:
delete:
security:
- OAuth2UserToken:
- bookmark.write
- tweet.read
- users.read
tags:
- Bookmarks
summary: Delete Bookmark
description: Removes a Post from the authenticated user’s Bookmarks by its ID.
externalDocs:
url: https://developer.twitter.com/en/docs/twitter-api/tweets/bookmarks/api-reference/delete-users-id-bookmarks-tweet_id
operationId: deleteUsersBookmark
parameters:
- name: id
in: path
description: The ID of the authenticated source User whose bookmark is to be removed.
required: true
schema:
$ref: '#/components/schemas/UserIdMatchesAuthenticatedUser'
style: simple
- name: tweet_id
in: path
description: The ID of the Post that the source User is removing from bookmarks.
required: true
schema:
$ref: '#/components/schemas/TweetId'
style: simple
responses:
'200':
description: The request has succeeded.
content:
application/json:
schema:
$ref: '#/components/schemas/BookmarkMutationResponse'
default:
description: The request has failed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
components:
parameters:
TweetExpansionsParameter:
name: expansions
in: query
description: A comma separated list of fields to expand.
schema:
type: array
description: The list of fields you can expand for a [Tweet](#Tweet) object. If the field has an ID, it can be expanded into a full object.
minItems: 1
uniqueItems: true
items:
type: string
enum:
- article.cover_media
- article.media_entities
- attachments.media_keys
- attachments.media_source_tweet
- attachments.poll_ids
- author_id
- edit_history_tweet_ids
- entities.mentions.username
- geo.place_id
- in_reply_to_user_id
- entities.note.mentions.username
- referenced_tweets.id
- referenced_tweets.id.attachments.media_keys
- referenced_tweets.id.author_id
example:
- article.cover_media
- article.media_entities
- attachments.media_keys
- attachments.media_source_tweet
- attachments.poll_ids
- author_id
- edit_history_tweet_ids
- entities.mentions.username
- geo.place_id
- in_reply_to_user_id
- entities.note.mentions.username
- referenced_tweets.id
- referenced_tweets.id.attachments.media_keys
- referenced_tweets.id.author_id
explode: false
style: form
TweetFieldsParameter:
name: tweet.fields
in: query
description: A comma separated list of Tweet fields to display.
required: false
schema:
type: array
description: The fields available for a Tweet object.
minItems: 1
uniqueItems: true
items:
type: string
enum:
- article
- attachments
- author_id
- card_uri
- community_id
- context_annotations
- conversation_id
- created_at
- display_text_range
- edit_controls
- edit_history_tweet_ids
- entities
- geo
- id
- in_reply_to_user_id
- lang
- matched_media_notes
- media_metadata
- non_public_metrics
- note_request_suggestions
- note_tweet
- organic_metrics
- paid_partnership
- possibly_sensitive
- promoted_metrics
- public_metrics
- referenced_tweets
- reply_settings
- scopes
- source
- suggested_source_links
- suggested_source_links_with_counts
- text
- withheld
example:
- article
- attachments
- author_id
- card_uri
- community_id
- context_annotations
- conversation_id
- created_at
- display_text_range
- edit_controls
- edit_history_tweet_ids
- entities
- geo
- id
- in_reply_to_user_id
- lang
- matched_media_notes
- media_metadata
- non_public_metrics
- note_request_suggestions
- note_tweet
- organic_metrics
- paid_partnership
- possibly_sensitive
- promoted_metrics
- public_metrics
- referenced_tweets
- reply_settings
- scopes
- source
- suggested_source_links
- suggested_source_links_with_counts
- text
- withheld
explode: false
style: form
PollFieldsParameter:
name: poll.fields
in: query
description: A comma separated list of Poll fields to display.
required: false
schema:
type: array
description: The fields available for a Poll object.
minItems: 1
uniqueItems: true
items:
type: string
enum:
- duration_minutes
- end_datetime
- id
- options
- voting_status
example:
- duration_minutes
- end_datetime
- id
- options
- voting_status
explode: false
style: form
UserFieldsParameter:
name: user.fields
in: query
description: A comma separated list of User fields to display.
required: false
schema:
type: array
description: The fields available for a User object.
minItems: 1
uniqueItems: true
items:
type: string
enum:
- affiliation
- confirmed_email
- connection_status
- created_at
- description
- entities
- id
- is_identity_verified
- location
- most_recent_tweet_id
- name
- parody
- pinned_tweet_id
- profile_banner_url
- profile_image_url
- protected
- public_metrics
- receives_your_dm
- subscription
- subscription_type
- url
- username
- verified
- verified_followers_count
- verified_type
- withheld
example:
- affiliation
- confirmed_email
- connection_status
- created_at
- description
- entities
- id
- is_identity_verified
- location
- most_recent_tweet_id
- name
- parody
- pinned_tweet_id
- profile_banner_url
- profile_image_url
- protected
- public_metrics
- receives_your_dm
- subscription
- subscription_type
- url
- username
- verified
- verified_followers_count
- verified_type
- withheld
explode: false
style: form
PlaceFieldsParameter:
name: place.fields
in: query
description: A comma separated list of Place fields to display.
required: false
schema:
type: array
description: The fields available for a Place object.
minItems: 1
uniqueItems: true
items:
type: string
enum:
- contained_within
- country
- country_code
- full_name
- geo
- id
- name
- place_type
example:
- contained_within
- country
- country_code
- full_name
- geo
- id
- name
- place_type
explode: false
style: form
MediaFieldsParameter:
name: media.fields
in: query
description: A comma separated list of Media fields to display.
required: false
schema:
type: array
description: The fields available for a Media object.
minItems: 1
uniqueItems: true
items:
type: string
enum:
- alt_text
- duration_ms
- height
- media_key
- non_public_metrics
- organic_metrics
- preview_image_url
- promoted_metrics
- public_metrics
- type
- url
- variants
- width
example:
- alt_text
- duration_ms
- height
- media_key
- non_public_metrics
- organic_metrics
- preview_image_url
- promoted_metrics
- public_metrics
- type
- url
- variants
- width
explode: false
style: form
schemas:
HashtagEntity:
allOf:
- $ref: '#/components/schemas/EntityIndicesInclusiveExclusive'
- $ref: '#/components/schemas/HashtagFields'
PlaceId:
type: string
description: The identifier for this place.
example: f7eb2fa2fea288b1
ContextAnnotationEntityFields:
type: object
description: Represents the data for the context annotation entity.
required:
- id
properties:
description:
type: string
description: Description of the context annotation entity.
id:
type: string
description: The unique id for a context annotation entity.
pattern: ^[0-9]{1,19}$
name:
type: string
description: Name of the context annotation entity.
PaginationToken36:
type: string
description: A base36 pagination token.
minLength: 1
Media:
type: object
required:
- type
properties:
height:
$ref: '#/components/schemas/MediaHeight'
media_key:
$ref: '#/components/schemas/MediaKey'
type:
type: string
width:
$ref: '#/components/schemas/MediaWidth'
discriminator:
propertyName: type
mapping:
animated_gif: '#/components/schemas/AnimatedGif'
photo: '#/components/schemas/Photo'
video: '#/components/schemas/Video'
User:
type: object
description: The X User object.
required:
- id
- name
- username
properties:
affiliation:
type: object
description: Metadata about a user's affiliation.
properties:
badge_url:
type: string
description: The badge URL corresponding to the affiliation.
format: uri
description:
type: string
description: The description of the affiliation.
url:
type: string
description: The URL, if available, to details about an affiliation.
format: uri
user_id:
type: array
minItems: 1
items:
$ref: '#/components/schemas/UserId'
connection_status:
type: array
description: Returns detailed information about the relationship between two users.
minItems: 0
items:
type: string
description: Type of connection between users.
enum:
- follow_request_received
- follow_request_sent
- blocking
- followed_by
- following
- muting
created_at:
type: string
description: Creation time of this User.
format: date-time
description:
type: string
description: The text of this User's profile description (also known as bio), if the User provided one.
entities:
type: object
description: A list of metadata found in the User's profile description.
properties:
description:
$ref: '#/components/schemas/FullTextEntities'
url:
type: object
description: Expanded details for the URL specified in the User's profile, with start and end indices.
properties:
urls:
type: array
minItems: 1
items:
$ref: '#/components/schemas/UrlEntity'
id:
$ref: '#/components/schemas/UserId'
location:
type: string
description: The location specified in the User's profile, if the User provided one. As this is a freeform value, it may not indicate a valid location, but it may be fuzzily evaluated when performing searches with location queries.
most_recent_tweet_id:
$ref: '#/components/schemas/TweetId'
name:
type: string
description: The friendly name of this User, as shown on their profile.
pinned_tweet_id:
$ref: '#/components/schemas/TweetId'
profile_banner_url:
type: string
description: The URL to the profile banner for this User.
format: uri
profile_image_url:
type: string
description: The URL to the profile image for this User.
format: uri
protected:
type: boolean
description: Indicates if this User has chosen to protect their Posts (in other words, if this User's Posts are private).
public_metrics:
type: object
description: A list of metrics for this User.
required:
- followers_count
- following_count
- tweet_count
- listed_count
properties:
followers_count:
type: integer
description: Number of Users who are following this User.
following_count:
type: integer
description: Number of Users this User is following.
like_count:
type: integer
description: The number of likes created by this User.
listed_count:
type: integer
description: The number of lists that include this User.
tweet_count:
type: integer
description: The number of Posts (including Retweets) posted by this User.
receives_your_dm:
type: boolean
description: Indicates if you can send a DM to this User
subscription_type:
type: string
description: 'The X Blue subscription type of the user, eg: Basic, Premium, PremiumPlus or None.'
enum:
- Basic
- Premium
- PremiumPlus
- None
url:
type: string
description: The URL specified in the User's profile.
username:
$ref: '#/components/schemas/UserName'
verified:
type: boolean
description: Indicate if this User is a verified X User.
verified_type:
type: string
description: 'The X Blue verified type of the user, eg: blue, government, business or none.'
enum:
- blue
- government
- business
- none
withheld:
$ref: '#/components/schemas/UserWithheld'
example:
created_at: '2013-12-14T04:35:55Z'
id: '2244994945'
name: X Dev
protected: false
username: TwitterDev
UserName:
type: string
description: The X handle (screen name) of this user.
pattern: ^[A-Za-z0-9_]{1,15}$
MentionEntity:
allOf:
- $ref: '#/components/schemas/EntityIndicesInclusiveExclusive'
- $ref: '#/components/schemas/MentionFields'
ContextAnnotation:
type: object
description: Annotation inferred from the Tweet text.
required:
- domain
- entity
properties:
domain:
$ref: '#/components/schemas/ContextAnnotationDomainFields'
entity:
$ref: '#/components/schemas/ContextAnnotationEntityFields'
UserId:
type: string
description: Unique identifier of this User. This is returned as a string in order to avoid complications with languages and tools that cannot handle large integers.
pattern: ^[0-9]{1,19}$
example: '2244994945'
Get2UsersIdBookmarksResponse:
type: object
properties:
data:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Tweet'
errors:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Problem'
includes:
$ref: '#/components/schemas/Expansions'
meta:
type: object
properties:
next_token:
$ref: '#/components/schemas/NextToken'
previous_token:
$ref: '#/components/schemas/PreviousToken'
result_count:
$ref: '#/components/schemas/ResultCount'
Expansions:
type: object
properties:
media:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Media'
places:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Place'
polls:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Poll'
topics:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Topic'
tweets:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Tweet'
users:
type: array
minItems: 1
items:
$ref: '#/components/schemas/User'
CommunityId:
type: string
description: The unique identifier of this Community.
pattern: ^[0-9]{1,19}$
example: '1146654567674912769'
EntityIndicesInclusiveInclusive:
type: object
description: Represent a boundary range (start and end index) for a recognized entity (for example a hashtag or a mention). `start` must be smaller than `end`. The start index is inclusive, the end index is inclusive.
required:
- start
- end
properties:
end:
type: integer
description: Index (zero-based) at which position this entity ends. The index is inclusive.
minimum: 0
example: 61
start:
type: integer
description: Index (zero-based) at which position this entity starts. The index is inclusive.
minimum: 0
example: 50
PollOption:
type: object
description: Describes a choice in a Poll object.
required:
- position
- label
- votes
properties:
label:
$ref: '#/components/schemas/PollOptionLabel'
position:
type: integer
description: Position of this choice in the poll.
votes:
type: integer
description: Number of users who voted for this choice.
NoteId:
type: string
description: The unique identifier of this Community Note.
pattern: ^[0-9]{1,19}$
example: '1146654567674912769'
ReplySettingsWithVerifiedUsers:
type: string
description: Shows who can reply a Tweet. Fields returned are everyone, mentioned_users, subscribers, verified and following.
pattern: ^[A-Za-z]{1,12}$
enum:
- everyone
- mentionedUsers
- following
- other
- subscribers
- verified
CashtagFields:
type: object
description: Represent the portion of text recognized as a Cashtag, and its start and end position within the text.
required:
- tag
properties:
tag:
type: string
example: TWTR
PlaceType:
type: string
enum:
- poi
- neighborhood
- city
- admin
- country
- unknown
example: city
Geo:
type: object
required:
- type
- bbox
- properties
properties:
bbox:
type: array
minItems: 4
maxItems: 4
items:
type: number
minimum: -180
maximum: 180
format: double
example:
- -105.193475
- 39.60973
- -105.053164
- 39.761974
geometry:
$ref: '#/components/schemas/Point'
properties:
type: object
type:
type: string
enum:
- Feature
BookmarkFolderPostsResponse:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
$ref: '#/components/schemas/TweetId'
errors:
type: array
minItems: 1
items:
$ref: '#/components/schemas/Problem'
meta:
type: object
properties:
next_token:
$ref: '#/components/schemas/NextToken'
Problem:
type: object
description: An HTTP Problem Details object, as defined in IETF RFC 7807 (https://tools.ietf.org/html/rfc7807).
required:
- type
- title
properties:
detail:
type: string
status:
type: integer
title:
type: string
type:
type: string
discriminator:
propertyName: type
mapping:
about:blank: '#/components/schemas/GenericProblem'
https://api.twitter.com/2/problems/client-disconnected: '#/components/schemas/ClientDisconnectedProblem'
https://api.twitter.com/2/problems/client-forbidden: '#/components/schemas/ClientForbiddenProblem'
https://api.twitter.com/2/problems/conflict: '#/components/schemas/ConflictProblem'
https://api.twitter.com/2/problems/disallowed-resource: '#/components/schemas/DisallowedResourceProblem'
https://api.twitter.com/2/problems/duplicate-rules: '#/components/schemas/DuplicateRuleProblem'
https://api.twitter.com/2/problems/invalid-request: '#/components/schemas/InvalidRequestProblem'
https://api.twitter.com/2/problems/invalid-rules: '#/components/schemas/InvalidRuleProblem'
https://api.twitter.com/2/problems/noncompliant-rules: '#/components/schemas/NonCompliantRulesProblem'
https://api.twitter.com/2/problems/not-authorized-for-field: '#/components/schemas/FieldUnauthorizedProblem'
https://api.twitter.com/2/problems/not-authorized-for-resource: '#/components/schemas/ResourceUnauthorizedProblem'
https://api.twitter.com/2/problems/operational-disconnect: '#/components/schemas/OperationalDisconnectProblem'
https://api.twitter.com/2/problems/resource-not-found: '#/components/schemas/ResourceNotFoundProblem'
https://api.twitter.com/2/problems/resource-unavailable: '#/components/schemas/ResourceUnavailableProblem'
https://api.twitter.com/2/problems/rule-cap: '#/components/schemas/RulesCapProblem'
https://api.twitter.com/2/problems/streaming-connection: '#/components/schemas/ConnectionExceptionProblem'
https://api.twitter.com/2/problems/unsupported-authentication: '#/components/schemas/UnsupportedAuthenticationProblem'
https://api.twitter.com/2/problems/usage-capped: '#/components/schemas/UsageCapExceededProblem'
UserWithheld:
type: object
description: Indicates withholding details for [withheld content](https://help.twitter.com/en/rules-and-policies/tweet-withheld-by-country).
required:
- country_codes
properties:
country_codes:
type: array
description: Provides a list of countries where this content is not available.
minItems: 1
uniqueItems: true
items:
$ref: '#/components/schemas/CountryCode'
scope:
type: string
description: Indicates that the content being withheld is a `user`.
enum:
- user
Poll:
type: object
description: Represent a Poll attached to a Tweet.
required:
- id
- options
properties:
duration_minutes:
type: integer
minimum: 5
maximum: 10080
format: int32
end_datetime:
type: string
format: date-time
id:
$ref: '#/components/schemas/PollId'
options:
type: array
minItems: 2
maxItems: 4
items:
$ref: '#/components/schemas/PollOption'
voting_status:
type: string
enum:
- open
- closed
ResultCount:
type: integer
description: The number of results returned in this response.
format: int32
CashtagEntity:
allOf:
- $ref: '#/components/s
# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/twitter-x/refs/heads/main/openapi/twitter-x-bookmarks-api-openapi.yml