Discovery

Discovery is a feature that allows users to find and join new communities on Discord, open to all guilds that meet the requirements. Discovery happens within the client or the marketing page.

Searching Discovery

Discord utilizes Algolia to power search for discovery. You can search for guilds by name, description, keywords, and more. Reference the Algolia Search documentation for more information on how to search. A proxied version of the Algolia Search API is available, with limited parameter support.

Algolia Credentials

These credentials are for production only.

Application ID: NKTZZ4AIZU
API Key: aca0d7082e4e63af5ba5917d5e96bed0

Discoverable Guild Object

A partial guild object returned from discovery, Get Emoji Guild, and Get Sticker Guild endpoints.

Discoverable Guild Structure
FieldTypeDescription
idsnowflakeThe ID of the guild
namestringThe name of the guild (2-100 characters)
icon?stringThe guild's icon hash
description?stringThe description for the guild
banner?stringThe guild's banner hash
splash?stringThe guild's splash hash
discovery_splash?stringThe guild's discovery splash hash
featuresarray[string]Enabled guild features
vanity_url_code?stringThe guild's vanity invite code
preferred_localestringThe preferred locale of the guild; used in discovery and notices from Discord (default "en-US")
premium_subscription_countintegerThe number of premium subscriptions (boosts) the guild currently has
approximate_member_countintegerApproximate number of members in the guild
approximate_presence_countintegerApproximate number of online members in the guild
emojis? 1array[emoji object]Custom guild emojis; limited to 30 entries
emoji_count? 1integerTotal number of custom guild emojis
stickers? 1array[sticker object]Custom guild stickers; limited to 30 entries
sticker_count? 1integerTotal number of custom guild stickers
auto_removedbooleanWhether the guild has automatically been removed from discovery for not hitting required targets
primary_category_idintegerThe ID of the primary discovery category set for the guild
primary_category? 3discovery categoryThe primary discovery category set for the guild
keywords?array[string]The discovery search keywords for the guild (max 30 characters, max 10)
is_publishedbooleanWhether the guild's landing web page is currently published
reasons_to_join? 2array[discovery reason object]The reasons to join the guild shown in the discovery web page (max 4)
social_links? 2?array[string]The guild's social media links shown in the discovery web page (max 256 characters, max 9)
about? 2?stringThe guild's long description shown in the discovery web page (max 2400 characters)
category_ids? 2array[snowflake]The IDs of discovery subcategories set for the guild (max 5)
categories? 3array[discovery category]The discovery categories set for the guild (max 5)
created_at? 2ISO8601 timestampWhen the guild was created

1 The presence of these fields is dependent on the endpoint used to retrieve the guild. Get Emoji Guild will return emoji-related fields, and Get Sticker Guild will return sticker-related fields.

2 These fields are only returned when using the Get Discovery Slug endpoint.

3 These fields are only returned when searching discovery.

Example Discoverable Guild
{
"id": "752630786561409076",
"name": "Elite Creative",
"description": "The largest Fortnite Creative server across the globe. Join a Creative community offering events, 1v1s. and more!",
"icon": "278da1c7740e394657c1179f4782aef1",
"splash": "2b4ae5cdd71038b4880b1b57a6e5dacb",
"banner": "57e939e67aebaf232d28205603020b55",
"approximate_presence_count": 21125,
"approximate_member_count": 155455,
"premium_subscription_count": 17,
"preferred_locale": "en-US",
"auto_removed": false,
"discovery_splash": "9d7ec672b89b320ef7a51e5b6ae453b8",
"primary_category_id": 1,
"vanity_url_code": "creative",
"is_published": true,
"keywords": [
"Fortnite",
"Creative",
"Fortnite Creative",
"Boxfights",
"Zonewars",
"Buildfights",
"1v1",
"EU",
"NA",
"Creator"
],
"features": [
"ANIMATED_BANNER",
"ANIMATED_ICON",
"AUTO_MODERATION",
"BANNER",
"COMMUNITY",
"DISCOVERABLE",
"ENABLED_DISCOVERABLE_BEFORE",
"GUILD_ONBOARDING_EVER_ENABLED",
"GUILD_WEB_PAGE_VANITY_URL",
"INVITE_SPLASH",
"NEWS",
"PREVIEW_ENABLED",
"RAID_ALERTS_ENABLED",
"ROLE_ICONS",
"VANITY_URL",
"WELCOME_SCREEN_ENABLED"
],
"emojis": [],
"emoji_count": 339
}

Discovery Requirements Object

A guild's progress on meeting the requirements of joining discovery.

Discovery Requirements Structure
FieldTypeDescription
guild_id?snowflakeThe ID of the guild
safe_environment?booleanWhether the guild has not been flagged by Trust & Safety
healthy?booleanWhether the guild meets activity requirements
health_score_pending?booleanWhether the guild's activity metrics have not yet been calculated
size?booleanWhether the guild meets the minimum member count requirement
nsfw_properties?discovery NSFW properties objectDisallowed terms found in the guild's name, description, and channel names
protected?booleanWhether the guild has the MFA requirement for moderation actions enabled
sufficient 1booleanWhether the guild meets the requirements to be in Discovery
sufficient_without_grace_period 1booleanWhether the grace period can allow the guild to remain in Discovery
valid_rules_channel?booleanWhether the guild has a rules channel set
retention_healthy?booleanWhether the guild meets the new member retention requirement
engagement_healthy?booleanWhether the guild meets the weekly visitor and communicator requirements
age?booleanWhether the guild meets the minimum age requirement
minimum_age??integerThe minimum guild age requirement (in days)
health_score?discovery health score objectThe guild's activity metrics
minimum_size??integerThe minimum guild member count requirement
grace_period_end_date?ISO8601 timestampWhen the guild's grace period ends

1 Certain guilds, such as those that are verified, are exempt from discovery requirements. These guilds will not have a fully populated discovery requirements object, and are guaranteed to receive only sufficient and sufficient_without_grace_period.

Discovery NSFW Properties Structure
FieldTypeDescription
channels?array[snowflake]The IDs of the channels with names containing disallowed terms
channel_banned_keywords?map[snowflake, array[string]]The disallowed terms found in the given channel names
name?stringThe guild name, if it contains disallowed terms
name_banned_keywords?array[string]The disallowed terms found in the guild name
description?stringThe guild description, if it contains disallowed terms
description_banned_keywords?array[string]The disallowed terms found in the guild description
Discovery Health Score Structure
FieldTypeDescription
avg_nonnew_communicators?stringAverage weekly number of users who talk in the guild and have been on Discord for 8 weeks+
avg_nonnew_participators?stringAverage weekly number of users who view the guild and have been on Discord for 8 weeks+
num_intentful_joiners?stringAverage number of users who join the guild per week
perc_ret_w1_intentful?floatPercentage of new members who remain in the guild for at least a week
Example Discovery Requirements
{
"guild_id": "1046920999469330512",
"safe_environment": true,
"healthy": true,
"health_score_pending": false,
"size": true,
"nsfw_properties": {
"channels": ["1060703057651978261"],
"channels_banned_keywords": {
"1060703057651978261": ["risque"]
},
"name": "Alien Network",
"name_banned_keywords": ["alien"],
"description": "Where the 👽s 👽 and sometimes very 👽 things happen 😨.",
"description_banned_keywords": ["👽"]
},
"protected": true,
"sufficient": false,
"sufficient_without_grace_period": true,
"valid_rules_channel": true,
"retention_healthy": true,
"engagement_healthy": true,
"age": true,
"minimum_age": 56,
"health_score": {
"avg_nonnew_participators": "1738",
"avg_nonnew_communicators": "348",
"num_intentful_joiners": "834",
"perc_ret_w1_intentful": 0.37651924871356596
},
"minimum_size": 1000,
"grace_period_end_date": "2037-07-01T17:47:49.974000+00:00"
}

Discovery Metadata Object

A guild's discovery settings.

Discovery Metadata Structure
FieldTypeDescription
guild_idsnowflakeThe ID of the guild
primary_category_idintegerThe ID of the primary discovery category set for the guild
keywords?array[string]The discovery search keywords for the guild (max 30 characters, max 10)
emoji_discoverability_enabledbooleanWhether the guild is shown as a source through custom emojis and stickers
partner_actioned_timestamp?ISO8601 timestampWhen the guild's partner application was actioned by an employee
partner_application_timestamp?ISO8601 timestampWhen the guild applied for partnership
is_publishedbooleanWhether the guild's landing web page is currently published
reasons_to_joinarray[discovery reason object]The reasons to join the guild shown in the discovery web page (max 4)
social_links?array[string]The guild's social media links shown in the discovery web page (max 256 characters, max 9)
about?stringThe guild's long description shown in the discovery web page (max 2400 characters)
category_idsarray[snowflake]The IDs of discovery subcategories set for the guild (max 5)
Discovery Reason Structure
FieldTypeDescription
reasonstringThe reason to join the guild
emoji_id?snowflakeThe ID of a guild's custom emoji
emoji_name?stringThe unicode character of the emoji
Example Discovery Metadata
{
"guild_id": "1046920999469330512",
"primary_category_id": 49,
"keywords": ["test"],
"emoji_discoverability_enabled": true,
"partner_actioned_timestamp": null,
"partner_application_timestamp": null,
"is_published": false,
"reasons_to_join": [
{ "reason": "Alien", "emoji_id": null, "emoji_name": "👽" },
{ "reason": "Alien", "emoji_id": null, "emoji_name": "👽" },
{ "reason": "Alien", "emoji_id": null, "emoji_name": "👽" },
{ "reason": "Alien", "emoji_id": null, "emoji_name": "👽" }
],
"social_links": ["https://twitter.com/alien"],
"about": "Alien\nAlien\nAlien\nAlien\nAlien\nAlien",
"category_ids": [48]
}

Discovery Category Object

Discovery Category Structure
FieldTypeDescription
idintegerThe ID of the category
namestringThe name of the category
is_primarybooleanWhether the category can be used as a guild's primary category
Example Discovery Category
{
"id": 1,
"name": "Gaming",
"is_primary": true
}

Endpoints

Get Discoverable Guilds

GET/discoverable-guilds

Returns a list of discoverable guild objects representing the guilds that are available for the current user to discover.

Query String Params
FieldTypeDescription
guild_ids? 1array[snowflake]The IDs of the discoverable guilds to return (max 48)
application_ids? 1array[snowflake]The IDs of the applications to return matching discoverable guilds for (max 48)
categories? 1array[integer]The IDs of the discovery categories to filter results by
limit? 2integerThe maximum number of guilds to return (max 48, default 48)
offset? 2integerNumber of guilds to skip before returning guilds (default 0)

1 Only one of guild_ids, application_ids, or categories may be specified. If both are specified, only guild_ids or application_ids is respected.

2 Pagination parameters are ignored if guild_ids or application_ids are specified.

Response Body
FieldTypeDescription
guildsarray[discoverable guild object]The guilds that match the query
totalintegerThe total number of guilds that match the query
limitintegerThe number of guilds returned in the response
offsetintegerThe number of guilds skipped before returning guilds

Search Discoverable Guilds

GET/discovery/search

Returns a list of discoverable guild objects representing the guilds that match the query. This endpoint is a proxy for searching using the Algolia API. See the Algolia Search documentation for more information.

Query String Params
FieldTypeDescription
query?stringThe query to match
limit?integerThe maximum number of guilds to return (1-48, default 48)
offset?integerNumber of guilds to skip before returning guilds (default 0)

Get Discovery Slug

GET/discovery/{guild.id}

Returns information about a guild's landing web page or monetization store page. This endpoint requires the guild to either be discoverable and published or have the CREATOR_STORE_PAGE guild feature.

Response Body
FieldTypeDescription
slugstringThe guild's discovery slug; can be appended to https://discord.com/servers/ to get the guild's discovery page
guild?discoverable guild objectThe guild information, if the guild is discoverable
store_page?monetization store page objectThe guild's monetization store page, if enabled
Monetization Store Page Structure
FieldTypeDescription
guildstore page guild objectThe guild information
role_subscriptionstore page role subscription objectThe guild's role subscription information
Store Page Guild Structure
FieldTypeDescription
idsnowflakeThe ID of the guild
namestringThe name of the guild (2-100 characters)
icon_hash?stringThe guild's icon hash
approximate_member_countintegerApproximate number of members in the guild
approximate_presence_countintegerApproximate number of online members in the guild
locked_serverbooleanWhether the entire guild is locked behind a role subscription
invite?partial invite objectA special CREATOR_PAGE invite for the guild
Store Page Role Subscription Structure
FieldTypeDescription
settingsrole subscription settings objectThe guild's role subscription settings
group_listingsarray[role subscription group listing object]The guild's role subscription group listings
trialsarray[role subscription trial object]The guild's role subscription trials
subscriber_count?integerThe number of subscribers to the guild's role subscriptions, if public
benefit_channelsarray[partial channel object]The channels that are unlocked by role subscriptions
benefit_emojisarray[emoji object]The emojis that are unlocked by role subscriptions
purchase_page_invite?partial invite objectA special ROLE_SUBSCRIPTIONS invite for the guild

Get Discovery Categories

GET/discovery/categories

Returns a list of discovery category objects representing the available discovery categories.

Query String Params
FieldTypeDescription
locale?stringThe language to return category names in (default "en-US")
primary_only?booleanWhether to only return categories that can be set as a guild's primary category (default false)

Validate Discovery Search Term

GET/discovery/valid-term

Checks if a discovery search term is allowed.

Query String Params
FieldTypeDescription
termstringThe search term to validate
Response Body
FieldTypeDescription
validbooleanWhether the provided term is valid
Example Response
{ "valid": true }

Get Guild Discovery Requirements

GET/guilds/{guild.id}/discovery-requirements

Returns the discovery requirements object for the guild. Requires the MANAGE_GUILD permission.

Get Guild Discovery Metadata

GET/guilds/{guild.id}/discovery-metadata

Returns the discovery metadata object for the guild. Requires the MANAGE_GUILD permission.

Modify Guild Discovery Metadata

PATCH/guilds/{guild.id}/discovery-metadata

Replaces the discovery metadata for the guild. Requires the MANAGE_GUILD permission. Returns the updated discovery metadata object on success.

JSON Params
FieldTypeDescription
primary_category_id??integerThe ID of the primary discovery category set for the guild (default 0)
keywords??array[string]The discovery search keywords for the guild (max 10)
emoji_discoverability_enabled??booleanWhether the guild is shown as a source through custom emojis and stickers (default true)
is_published??booleanWhether the guild's landing web page is currently published (default false)
reasons_to_join??array[discovery reason object]The reasons to join the guild shown in the discovery web page (max 4)
social_links??array[string]The guild's social media links shown in the discovery web page (max 256 characters, max 9)
about??stringThe guild's long description shown in the discovery web page (max 2400 characters)

Add Guild Discovery Subcategory

PUT/guilds/{guild.id}/discovery-categories/{category.id}

Adds a discovery subcategory to the guild. Requires the MANAGE_GUILD permission. Returns a 204 empty response on success.

Remove Guild Discovery Subcategory

DELETE/guilds/{guild.id}/discovery-categories/{category.id}

Removes a discovery subcategory from the guild. Requires the MANAGE_GUILD permission. Returns a 204 empty response on success.