openapi: 3.0.3 info: title: 'Ticketeer API Documentation' description: '' version: 1.0.0 servers: - url: 'https://ticketeer.bot' tags: - name: Channel description: "\nEndpoints for interacting with guild channels." - name: Guild description: "\nEndpoints for managing guilds." - name: Ticket description: '' - name: 'Ticket (from channel)' description: '' - name: User description: "\nEndpoints for the authenticated user." components: securitySchemes: default: type: http scheme: bearer description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.' security: - default: [] paths: '/api/v1/guild/{guild_id}/channel/{channel_id}': post: summary: 'Send a message to a channel.' operationId: sendAMessageToAChannel description: "Sends a message to a specific channel in the guild. Supports text channels, forum channels (creates a thread), and thread channels (via webhook).\nWhen a message_id is provided, the existing message is edited instead of sending a new one." parameters: [] responses: { } tags: - Channel requestBody: required: false content: application/json: schema: type: object properties: username: type: string description: 'Override the default username (sends as webhook)' example: Foo avatar_url: type: string description: 'Override the default avatar URL (sends as webhook)' example: 'https://example.com/avatar.png' thread_name: type: string description: 'Thread name, required for forum channels' example: 'Support Request' content: type: string description: 'The message content, up to 2000 characters' example: 'Hello, world!' tts: type: boolean description: 'Whether the message is text-to-speech' example: null allowed_mentions: type: object description: 'Allowed mentions for the message' example: null properties: { } embeds: type: object description: 'Array of embed objects to include in the message, up to 10' example: null properties: { } components: type: object description: 'Array of message component objects to include' example: null properties: { } flags: type: integer description: 'Message flags combined as a bitfield' example: 0 applied_tags: type: object description: 'Array of tag IDs to apply to a forum thread' example: null properties: { } poll: type: object description: 'A poll object to include in the message' example: null properties: { } parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/{message_id}': post: summary: 'Update a message in a channel.' operationId: updateAMessageInAChannel description: 'Updates a message in a specific channel in the guild.' parameters: [] responses: { } tags: - Channel requestBody: required: false content: application/json: schema: type: object properties: username: type: string description: 'Override the default username (sends as webhook)' example: Foo avatar_url: type: string description: 'Override the default avatar URL (sends as webhook)' example: 'https://example.com/avatar.png' thread_name: type: string description: 'Thread name, required for forum channels' example: 'Support Request' content: type: string description: 'The message content, up to 2000 characters' example: 'Hello, world!' tts: type: boolean description: 'Whether the message is text-to-speech' example: null allowed_mentions: type: object description: 'Allowed mentions for the message' example: null properties: { } embeds: type: object description: 'Array of embed objects to include in the message, up to 10' example: null properties: { } components: type: object description: 'Array of message component objects to include' example: null properties: { } flags: type: integer description: 'Message flags combined as a bitfield' example: 0 applied_tags: type: object description: 'Array of tag IDs to apply to a forum thread' example: null properties: { } poll: type: object description: 'A poll object to include in the message' example: null properties: { } parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer - in: path name: message_id description: 'The ID of the message.' example: architecto required: true schema: type: string '/api/v1/guild/{guild_id}/message/{custom_message_id}/{channel_id}': post: summary: 'Send a custom message to a channel.' operationId: sendACustomMessageToAChannel description: 'Sends a custom message to a specific channel in the guild. When a message_id is provided, the existing message is edited instead.' parameters: [] responses: { } tags: - Channel requestBody: required: false content: application/json: schema: type: object properties: username: type: string description: 'Override the default username (sends as webhook)' example: Foo avatar_url: type: string description: 'Override the default avatar URL (sends as webhook)' example: 'https://example.com/avatar.png' thread_name: type: string description: 'Thread name, required for forum channels' example: 'Hello World' context: type: object description: 'Context variables to pass to the custom message template' example: null properties: { } parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: custom_message_id description: 'The ID of the custom message.' example: architecto required: true schema: type: string - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/message/{custom_message_id}/{channel_id}/{message_id}': post: summary: 'Update a custom message in a channel.' operationId: updateACustomMessageInAChannel description: 'Updates a custom message in a specific channel in the guild.' parameters: [] responses: { } tags: - Channel requestBody: required: false content: application/json: schema: type: object properties: username: type: string description: 'Override the default username (sends as webhook)' example: Foo avatar_url: type: string description: 'Override the default avatar URL (sends as webhook)' example: 'https://example.com/avatar.png' thread_name: type: string description: 'Thread name, required for forum channels' example: 'Hello World' context: type: object description: 'Context variables to pass to the custom message template' example: null properties: { } parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: custom_message_id description: 'The ID of the custom message.' example: architecto required: true schema: type: string - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer - in: path name: message_id description: 'The ID of the message.' example: architecto required: true schema: type: string '/api/v1/guild/{guild_id}': get: summary: 'Get guild.' operationId: getGuild description: 'Returns details for a specific guild.' parameters: [] responses: 200: description: 'The guild' content: application/json: schema: type: object example: id: '571707999220136938' name: 'My Server' premium: '672951452783139208' premium_ends_at: '2024-01-01T00:00:00.000000Z' joined_at: '2024-01-01T00:00:00.000000Z' properties: id: type: string example: '571707999220136938' description: 'The guild snowflake ID' name: type: string example: 'My Server' description: 'The guild name' premium: type: string example: '672951452783139208' description: 'Whether the guild has premium' premium_ends_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When premium expires' nullable: true joined_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the bot joined the guild' nullable: true required: - id - name tags: - Guild parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/sync': post: summary: 'Sync guild channels, roles, emotes and permissions.' operationId: syncGuildChannelsRolesEmotesAndPermissions description: 'Triggers a sync for the specified guild, including channels, roles, permissions, and tickets.' parameters: [] responses: { } tags: - Guild parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/groups': get: summary: 'List ticket groups.' operationId: listTicketGroups description: 'Returns all ticket groups for the specified guild.' parameters: [] responses: 200: description: 'List of ticket groups' content: application/json: schema: type: object example: data: - id: '120128186398635144' name: Support count: 5 current_page: 1 first_page_url: '/?page=1' from: 1 last_page: 1 last_page_url: '/?page=1' next_page_url: null path: / per_page: 30 prev_page_url: null to: 1 total: 1 properties: data: type: array example: - id: '120128186398635144' name: Support count: 5 description: 'The list of items for the current page.' items: type: object properties: id: type: string example: '120128186398635144' description: 'The ticket group snowflake ID' name: type: string example: Support description: 'The ticket group name' count: type: integer example: 5 description: 'Number of tickets in this group' required: - id - name - count current_page: type: integer example: 1 description: 'The current page number.' first_page_url: type: string example: '/?page=1' description: 'URL to the first page.' from: type: integer example: 1 description: 'The index of the first item on this page.' nullable: true last_page: type: integer example: 1 description: 'The last page number.' last_page_url: type: string example: '/?page=1' description: 'URL to the last page.' next_page_url: type: string example: null description: 'URL to the next page.' nullable: true path: type: string example: / description: 'The base URL for the paginator.' per_page: type: integer example: 30 description: 'The number of items per page.' prev_page_url: type: string example: null description: 'URL to the previous page.' nullable: true to: type: integer example: 1 description: 'The index of the last item on this page.' nullable: true total: type: integer example: 1 description: 'The total number of items.' required: - data - current_page - first_page_url - from - last_page - last_page_url - next_page_url - path - per_page - prev_page_url - to - total tags: - Guild parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/panels': get: summary: 'List ticket panels.' operationId: listTicketPanels description: 'Returns all ticket panels for the specified guild.' parameters: [] responses: 200: description: 'List of panels' content: application/json: schema: type: object example: data: - id: '151295371372419517' name: 'Hello, world!' current_page: 1 first_page_url: '/?page=1' from: 1 last_page: 1 last_page_url: '/?page=1' next_page_url: null path: / per_page: 30 prev_page_url: null to: 1 total: 1 properties: data: type: array example: - id: '151295371372419517' name: 'Hello, world!' description: 'The list of items for the current page.' items: type: object properties: id: type: string example: '151295371372419517' description: 'The ticket panel snowflake ID' name: type: string example: 'Hello, world!' description: 'The ticket panel name' required: - id - name current_page: type: integer example: 1 description: 'The current page number.' first_page_url: type: string example: '/?page=1' description: 'URL to the first page.' from: type: integer example: 1 description: 'The index of the first item on this page.' nullable: true last_page: type: integer example: 1 description: 'The last page number.' last_page_url: type: string example: '/?page=1' description: 'URL to the last page.' next_page_url: type: string example: null description: 'URL to the next page.' nullable: true path: type: string example: / description: 'The base URL for the paginator.' per_page: type: integer example: 30 description: 'The number of items per page.' prev_page_url: type: string example: null description: 'URL to the previous page.' nullable: true to: type: integer example: 1 description: 'The index of the last item on this page.' nullable: true total: type: integer example: 1 description: 'The total number of items.' required: - data - current_page - first_page_url - from - last_page - last_page_url - next_page_url - path - per_page - prev_page_url - to - total tags: - Guild parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/stats': get: summary: 'Get guild ticket stats.' operationId: getGuildTicketStats description: 'Returns the ticket statistics for the specified guild.' parameters: [] responses: 503: description: '' content: application/json: schema: type: object example: success: false status: 503 message: 'Service Unavailable' properties: success: type: boolean example: false status: type: integer example: 503 message: type: string example: 'Service Unavailable' tags: - Guild parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/messages': get: summary: 'List custom messages.' operationId: listCustomMessages description: 'Returns all custom messages for the specified guild.' parameters: [] responses: 200: description: 'List of custom messages' content: application/json: schema: type: object example: data: - id: '338909650515657603' name: 'Hello, world!' current_page: 1 first_page_url: '/?page=1' from: 1 last_page: 1 last_page_url: '/?page=1' next_page_url: null path: / per_page: 30 prev_page_url: null to: 1 total: 1 properties: data: type: array example: - id: '338909650515657603' name: 'Hello, world!' description: 'The list of items for the current page.' items: type: object properties: id: type: string example: '338909650515657603' description: 'The custom message identifier' name: type: string example: 'Hello, world!' description: 'The custom message name' required: - id - name current_page: type: integer example: 1 description: 'The current page number.' first_page_url: type: string example: '/?page=1' description: 'URL to the first page.' from: type: integer example: 1 description: 'The index of the first item on this page.' nullable: true last_page: type: integer example: 1 description: 'The last page number.' last_page_url: type: string example: '/?page=1' description: 'URL to the last page.' next_page_url: type: string example: null description: 'URL to the next page.' nullable: true path: type: string example: / description: 'The base URL for the paginator.' per_page: type: integer example: 30 description: 'The number of items per page.' prev_page_url: type: string example: null description: 'URL to the previous page.' nullable: true to: type: integer example: 1 description: 'The index of the last item on this page.' nullable: true total: type: integer example: 1 description: 'The total number of items.' required: - data - current_page - first_page_url - from - last_page - last_page_url - next_page_url - path - per_page - prev_page_url - to - total tags: - Guild parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket': post: summary: 'Create ticket.' operationId: createTicket description: "Creates a new ticket in the specified guild. Uses the provided ticket group or falls back to the guild's default." parameters: [] responses: 200: description: 'The ticket created' content: application/json: schema: type: object example: id: '991009560223081930' uuid: value group_id: '375163139685838977' guild_id: '720658030022783112' channel_id: '923713927840348980' owner_id: '261106055648330815' assigned_id: '596762699057745444' number: 1 status: open rating: 1 priority: 1 form: - type: type title: 'Hello, world?' value: 'Hello, world!' closed_reason: value created_at: '2024-01-01T00:00:00.000000Z' opened_at: '2024-01-01T00:00:00.000000Z' closed_at: '2024-01-01T00:00:00.000000Z' deleted_at: '2024-01-01T00:00:00.000000Z' last_activity: value properties: id: type: string example: '991009560223081930' description: 'The ticket snowflake ID' uuid: type: string example: value description: 'The ticket UUID (also the encryption key for the ticket assets)' group_id: type: string example: '375163139685838977' description: 'The ticket group snowflake ID' guild_id: type: string example: '720658030022783112' description: 'The guild snowflake ID' channel_id: type: string example: '923713927840348980' description: 'The ticket channel snowflake ID' nullable: true owner_id: type: string example: '261106055648330815' description: 'The ticket owner snowflake ID' nullable: true assigned_id: type: string example: '596762699057745444' description: 'The assigned user snowflake ID' nullable: true number: type: integer example: 1 description: 'The ticket number within the guild' nullable: true status: type: string example: open description: 'The ticket status' nullable: true rating: type: integer example: 1 description: 'The ticket rating' nullable: true priority: type: integer example: 1 description: 'The ticket priority level' nullable: true form: type: array example: - type: type title: 'Hello, world?' value: 'Hello, world!' description: 'The form data for the ticket' nullable: true items: type: object properties: type: type: string example: type description: 'Follows the component type defined in the ticket group' title: type: string example: 'Hello, world?' description: 'The title of the form field' value: type: string example: 'Hello, world!' description: 'The value of the form field' required: - type - title - value closed_reason: type: string example: value description: 'The reason the ticket was closed' nullable: true created_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was created' opened_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was last opened' nullable: true closed_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was closed' nullable: true deleted_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was deleted' nullable: true last_activity: type: string example: value description: 'When the ticket last had activity' nullable: true required: - id - uuid - group_id - guild_id - created_at tags: - Guild requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user opening the ticket' example: null message: type: string description: 'Additional message the new ticket will include' example: 'Hello, world!' nullable: true ticket_group_id: type: string description: 'The ID of the ticket group the new ticket will belong to' example: null nullable: true form: type: array description: 'The form data for the new ticket' example: null items: type: object nullable: true properties: type: type: integer description: 'Follows the component type defined in the ticket group' example: type title: type: string description: 'The title of the form field' example: 'Hello, world?' value: type: object description: 'The value of the form field' example: 'Hello, world!' properties: { } anonymous: type: boolean description: 'Whether the ticket should be created anonymously (the owner of the API token) defaults to false unless the token has the anonymous ability)' example: false required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}': get: summary: 'Get ticket.' operationId: getTicket description: 'Returns details for a specific ticket.' parameters: [] responses: 200: description: 'The ticket' content: application/json: schema: type: object example: id: '991009560223081930' uuid: value group_id: '375163139685838977' guild_id: '720658030022783112' channel_id: '923713927840348980' owner_id: '261106055648330815' assigned_id: '596762699057745444' number: 1 status: open rating: 1 priority: 1 form: - type: type title: 'Hello, world?' value: 'Hello, world!' closed_reason: value created_at: '2024-01-01T00:00:00.000000Z' opened_at: '2024-01-01T00:00:00.000000Z' closed_at: '2024-01-01T00:00:00.000000Z' deleted_at: '2024-01-01T00:00:00.000000Z' last_activity: value properties: id: type: string example: '991009560223081930' description: 'The ticket snowflake ID' uuid: type: string example: value description: 'The ticket UUID (also the encryption key for the ticket assets)' group_id: type: string example: '375163139685838977' description: 'The ticket group snowflake ID' guild_id: type: string example: '720658030022783112' description: 'The guild snowflake ID' channel_id: type: string example: '923713927840348980' description: 'The ticket channel snowflake ID' nullable: true owner_id: type: string example: '261106055648330815' description: 'The ticket owner snowflake ID' nullable: true assigned_id: type: string example: '596762699057745444' description: 'The assigned user snowflake ID' nullable: true number: type: integer example: 1 description: 'The ticket number within the guild' nullable: true status: type: string example: open description: 'The ticket status' nullable: true rating: type: integer example: 1 description: 'The ticket rating' nullable: true priority: type: integer example: 1 description: 'The ticket priority level' nullable: true form: type: array example: - type: type title: 'Hello, world?' value: 'Hello, world!' description: 'The form data for the ticket' nullable: true items: type: object properties: type: type: string example: type description: 'Follows the component type defined in the ticket group' title: type: string example: 'Hello, world?' description: 'The title of the form field' value: type: string example: 'Hello, world!' description: 'The value of the form field' required: - type - title - value closed_reason: type: string example: value description: 'The reason the ticket was closed' nullable: true created_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was created' opened_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was last opened' nullable: true closed_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was closed' nullable: true deleted_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was deleted' nullable: true last_activity: type: string example: value description: 'When the ticket last had activity' nullable: true required: - id - uuid - group_id - guild_id - created_at tags: - Ticket delete: summary: 'Delete ticket.' operationId: deleteTicket description: 'Closes the ticket and deletes the associated channel.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/move': post: summary: 'Change ticket group.' operationId: changeTicketGroup description: 'Moves a ticket to a different ticket group. The target group must use the same mode (thread or channel) as the current group.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: ticket_group_id: type: string description: 'The ID of the target ticket group' example: null reason: type: string description: 'Reason for changing the ticket group' example: 'Hello, world!' required: - ticket_group_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/open': post: summary: 'Open ticket.' operationId: openTicket description: 'Reopens a closed ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/close': post: summary: 'Close ticket.' operationId: closeTicket description: 'Closes an open ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/assign': post: summary: 'Assign ticket.' operationId: assignTicket description: 'Assigns a user to the ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/unassign': post: summary: 'Unassign ticket.' operationId: unassignTicket description: 'Removes the assigned user from the ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/expire': post: summary: 'Set ticket expiry.' operationId: setTicketExpiry description: 'Sets or updates the expiry time for a ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: expire_at: type: string description: 'The expiry timestamp (ISO 8601) or null to remove expiry' example: '2026-03-01T00:00:00Z' clearable: type: boolean description: 'Whether user activity (sending messages) can clear the expiry' example: null reason: type: string description: 'Reason for setting the ticket expiry' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - expire_at parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/eternal': post: summary: 'Set ticket eternal.' operationId: setTicketEternal description: 'Sets or updates the eternal status for a ticket, preventing automatic expiry.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: eternal: type: boolean description: 'Whether the ticket is eternal (never expires)' example: null reason: type: string description: 'Reason for setting the ticket as eternal' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/lock': post: summary: 'Lock ticket.' operationId: lockTicket description: 'Locks a ticket to prevent further messages.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/unlock': post: summary: 'Unlock ticket.' operationId: unlockTicket description: 'Unlocks a previously locked ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/name': post: summary: 'Rename ticket.' operationId: renameTicket description: 'Updates the name of a ticket. If the name is empty, the current name is cleared.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'The new name for the ticket, optional to set to default' example: hello-world nullable: true reason: type: string description: 'Reason for naming the ticket' example: 'Hello, world!' nullable: true anonymous: type: boolean description: 'Rename as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/notes': post: summary: 'Create ticket notes thread.' operationId: createTicketNotesThread description: 'Creates a private notes thread attached to the ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'The new name for the ticket, optional to set to default' example: hello-world nullable: true reason: type: string description: 'Reason for naming the ticket' example: 'Hello, world!' nullable: true anonymous: type: boolean description: 'Rename as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/notes/add': post: summary: 'Add user to ticket notes thread.' operationId: addUserToTicketNotesThread description: "Adds a guild member to the ticket's private notes thread." parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/notes/remove': post: summary: 'Remove user from ticket notes thread.' operationId: removeUserFromTicketNotesThread description: "Removes a guild member from the ticket's private notes thread." parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/priority': post: summary: 'Set ticket priority.' operationId: setTicketPriority description: 'Updates the priority level of a ticket.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: priority: type: integer description: 'The priority level index' example: 1 reason: type: string description: 'Reason for changing the priority' example: 'Hello, world!' nullable: true anonymous: type: boolean description: 'Change priority as bot, defaults to false' example: null required: - priority parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/transcript': get: summary: 'Get ticket transcript.' operationId: getTicketTranscript description: 'Returns the full transcript for a ticket, including channel and thread messages with attachments.' parameters: [] responses: 200: description: 'The ticket transcript' content: application/json: schema: type: object example: guild: id: '123456789' name: example premium: false roles: - id: '123456789' name: example color: value position: 1 hoist: false channels: - id: '123456789' name: example type: 0 parent_id: '123456789' position: 1 group: id: '123456789' name: example form_title: value form_fields: - [] schedule: [] schedule_timezone: value priority_levels: - label: value color: value rating_levels: - label: value color: value ticket: id: '123456789' uuid: value status: value owner_id: '123456789' channel_id: '123456789' thread_id: '123456789' assigned_id: '123456789' number: 1 priority: 1 rating: 1 private: false form: [] locked_at: '2024-01-01T00:00:00.000000Z' opened_at: '2024-01-01T00:00:00.000000Z' closed_reason: value closed_at: '2024-01-01T00:00:00.000000Z' created_at: '2024-01-01T00:00:00.000000Z' deleted_at: '2024-01-01T00:00:00.000000Z' transcript_saved_at: '2024-01-01T00:00:00.000000Z' channel_members: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 channel_messages: [] channel_message_attachments: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false thread_members: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 thread_messages: [] thread_message_attachments: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false properties: guild: type: object properties: id: type: string example: '123456789' name: type: string example: example premium: type: boolean example: false roles: type: array example: - id: '123456789' name: example color: value position: 1 hoist: false items: type: object properties: id: type: string example: '123456789' name: type: string example: example color: type: string example: value position: type: integer example: 1 hoist: type: boolean example: false required: - id - name - color - position channels: type: array example: - id: '123456789' name: example type: 0 parent_id: '123456789' position: 1 items: type: object properties: id: type: string example: '123456789' name: type: string example: example type: type: integer example: 0 parent_id: type: string example: '123456789' nullable: true position: type: integer example: 1 nullable: true required: - id - name - type required: - id - name group: type: object properties: id: type: string example: '123456789' name: type: string example: example form_title: type: string example: value form_fields: type: array example: - [] items: type: array schedule: type: array example: [] schedule_timezone: type: string example: value priority_levels: type: array example: - label: value color: value items: type: object properties: label: type: string example: value description: 'Must not be greater than 80 characters.' color: type: string example: value rating_levels: type: array example: - label: value color: value items: type: object properties: label: type: string example: value description: 'Must not be greater than 80 characters.' color: type: string example: value required: - id - name - form_title - schedule - schedule_timezone ticket: type: object properties: id: type: string example: '123456789' uuid: type: string example: value status: type: string example: value owner_id: type: string example: '123456789' channel_id: type: string example: '123456789' thread_id: type: string example: '123456789' nullable: true assigned_id: type: string example: '123456789' nullable: true number: type: integer example: 1 priority: type: integer example: 1 rating: type: integer example: 1 private: type: boolean example: false form: type: array example: [] nullable: true locked_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true opened_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true closed_reason: type: string example: value nullable: true closed_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true created_at: type: string example: '2024-01-01T00:00:00.000000Z' deleted_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true transcript_saved_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true required: - id - uuid - status - owner_id - channel_id - number - priority - rating - created_at channel_members: type: array example: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 items: type: object properties: id: type: string example: '123456789' avatar: type: string example: 'https://example.com/image.png' name: type: string example: example bot: type: boolean example: false joined_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true roles: type: array example: [] rating: type: integer example: 1 nullable: true required: - id - avatar - name - roles channel_messages: type: array example: [] channel_message_attachments: type: array example: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false items: type: object properties: id: type: string example: '123456789' name: type: string example: example hash: type: string example: value mime: type: string example: value size: type: integer example: 1 url: type: string example: 'https://example.com/image.png' encrypted: type: boolean example: false required: - id - name - hash - mime - size - url thread_members: type: array example: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 items: type: object properties: id: type: string example: '123456789' avatar: type: string example: 'https://example.com/image.png' name: type: string example: example bot: type: boolean example: false joined_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true roles: type: array example: [] rating: type: integer example: 1 nullable: true required: - id - avatar - name - roles thread_messages: type: array example: [] thread_message_attachments: type: array example: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false items: type: object properties: id: type: string example: '123456789' name: type: string example: example hash: type: string example: value mime: type: string example: value size: type: integer example: 1 url: type: string example: 'https://example.com/image.png' encrypted: type: boolean example: false required: - id - name - hash - mime - size - url required: - guild - group - ticket - channel_messages - thread_messages tags: - Ticket parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/save': post: summary: 'Save ticket transcript.' operationId: saveTicketTranscript description: "Saves the current state of a ticket's transcript and returns the updated transcript data." parameters: [] responses: { } tags: - Ticket parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/send/{user_id}': post: summary: 'Send ticket transcript to a user.' operationId: sendTicketTranscriptToAUser description: 'Queues the ticket transcript to be sent to the specified user via DM.' parameters: [] responses: { } tags: - Ticket parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer - in: path name: user_id description: 'The ID of the user.' example: '1001168331996409856' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/owner': post: summary: 'Change ticket owner.' operationId: changeTicketOwner description: 'Transfers ownership of a ticket to another user.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/add': post: summary: 'Add user to ticket.' operationId: addUserToTicket description: 'Adds a guild member to the ticket, granting them access to the ticket channel.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/ticket/{ticket_id}/remove': post: summary: 'Remove user from ticket.' operationId: removeUserFromTicket description: 'Removes a guild member from the ticket, revoking their access to the ticket channel.' parameters: [] responses: { } tags: - Ticket requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: ticket_id description: 'The ID of the ticket.' example: '1419244951635763635' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel}/ticket/send/{user_id}': post: summary: 'Send ticket transcript to a user.' operationId: sendTicketTranscriptToAUser description: 'Queues the ticket transcript to be sent to the specified user via DM.' parameters: [] responses: { } tags: - Ticket parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel description: 'The channel.' example: '1430817781229813802' required: true schema: type: integer - in: path name: user_id description: 'The ID of the user.' example: '1001168331996409856' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket': get: summary: 'Get ticket.' operationId: getTicket description: 'Returns details for a specific ticket.' parameters: [] responses: 200: description: 'The ticket' content: application/json: schema: type: object example: id: '991009560223081930' uuid: value group_id: '375163139685838977' guild_id: '720658030022783112' channel_id: '923713927840348980' owner_id: '261106055648330815' assigned_id: '596762699057745444' number: 1 status: open rating: 1 priority: 1 form: - type: type title: 'Hello, world?' value: 'Hello, world!' closed_reason: value created_at: '2024-01-01T00:00:00.000000Z' opened_at: '2024-01-01T00:00:00.000000Z' closed_at: '2024-01-01T00:00:00.000000Z' deleted_at: '2024-01-01T00:00:00.000000Z' last_activity: value properties: id: type: string example: '991009560223081930' description: 'The ticket snowflake ID' uuid: type: string example: value description: 'The ticket UUID (also the encryption key for the ticket assets)' group_id: type: string example: '375163139685838977' description: 'The ticket group snowflake ID' guild_id: type: string example: '720658030022783112' description: 'The guild snowflake ID' channel_id: type: string example: '923713927840348980' description: 'The ticket channel snowflake ID' nullable: true owner_id: type: string example: '261106055648330815' description: 'The ticket owner snowflake ID' nullable: true assigned_id: type: string example: '596762699057745444' description: 'The assigned user snowflake ID' nullable: true number: type: integer example: 1 description: 'The ticket number within the guild' nullable: true status: type: string example: open description: 'The ticket status' nullable: true rating: type: integer example: 1 description: 'The ticket rating' nullable: true priority: type: integer example: 1 description: 'The ticket priority level' nullable: true form: type: array example: - type: type title: 'Hello, world?' value: 'Hello, world!' description: 'The form data for the ticket' nullable: true items: type: object properties: type: type: string example: type description: 'Follows the component type defined in the ticket group' title: type: string example: 'Hello, world?' description: 'The title of the form field' value: type: string example: 'Hello, world!' description: 'The value of the form field' required: - type - title - value closed_reason: type: string example: value description: 'The reason the ticket was closed' nullable: true created_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was created' opened_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was last opened' nullable: true closed_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was closed' nullable: true deleted_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the ticket was deleted' nullable: true last_activity: type: string example: value description: 'When the ticket last had activity' nullable: true required: - id - uuid - group_id - guild_id - created_at tags: - 'Ticket (from channel)' delete: summary: 'Delete ticket.' operationId: deleteTicket description: 'Closes the ticket and deletes the associated channel.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/move': post: summary: 'Change ticket group.' operationId: changeTicketGroup description: 'Moves a ticket to a different ticket group. The target group must use the same mode (thread or channel) as the current group.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: ticket_group_id: type: string description: 'The ID of the target ticket group' example: null reason: type: string description: 'Reason for changing the ticket group' example: 'Hello, world!' required: - ticket_group_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/open': post: summary: 'Open ticket.' operationId: openTicket description: 'Reopens a closed ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/close': post: summary: 'Close ticket.' operationId: closeTicket description: 'Closes an open ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/assign': post: summary: 'Assign ticket.' operationId: assignTicket description: 'Assigns a user to the ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/unassign': post: summary: 'Unassign ticket.' operationId: unassignTicket description: 'Removes the assigned user from the ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/expire': post: summary: 'Set ticket expiry.' operationId: setTicketExpiry description: 'Sets or updates the expiry time for a ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: expire_at: type: string description: 'The expiry timestamp (ISO 8601) or null to remove expiry' example: '2026-03-01T00:00:00Z' clearable: type: boolean description: 'Whether user activity (sending messages) can clear the expiry' example: null reason: type: string description: 'Reason for setting the ticket expiry' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - expire_at parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/eternal': post: summary: 'Set ticket eternal.' operationId: setTicketEternal description: 'Sets or updates the eternal status for a ticket, preventing automatic expiry.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: eternal: type: boolean description: 'Whether the ticket is eternal (never expires)' example: null reason: type: string description: 'Reason for setting the ticket as eternal' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/lock': post: summary: 'Lock ticket.' operationId: lockTicket description: 'Locks a ticket to prevent further messages.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/unlock': post: summary: 'Unlock ticket.' operationId: unlockTicket description: 'Unlocks a previously locked ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: 'Reason for performing the action on the ticket' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/name': post: summary: 'Rename ticket.' operationId: renameTicket description: 'Updates the name of a ticket. If the name is empty, the current name is cleared.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'The new name for the ticket, optional to set to default' example: hello-world nullable: true reason: type: string description: 'Reason for naming the ticket' example: 'Hello, world!' nullable: true anonymous: type: boolean description: 'Rename as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/notes': post: summary: 'Create ticket notes thread.' operationId: createTicketNotesThread description: 'Creates a private notes thread attached to the ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: false content: application/json: schema: type: object properties: name: type: string description: 'The new name for the ticket, optional to set to default' example: hello-world nullable: true reason: type: string description: 'Reason for naming the ticket' example: 'Hello, world!' nullable: true anonymous: type: boolean description: 'Rename as bot, defaults to false' example: null parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/notes/add': post: summary: 'Add user to ticket notes thread.' operationId: addUserToTicketNotesThread description: "Adds a guild member to the ticket's private notes thread." parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/notes/remove': post: summary: 'Remove user from ticket notes thread.' operationId: removeUserFromTicketNotesThread description: "Removes a guild member from the ticket's private notes thread." parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/priority': post: summary: 'Set ticket priority.' operationId: setTicketPriority description: 'Updates the priority level of a ticket.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: priority: type: integer description: 'The priority level index' example: 1 reason: type: string description: 'Reason for changing the priority' example: 'Hello, world!' nullable: true anonymous: type: boolean description: 'Change priority as bot, defaults to false' example: null required: - priority parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/transcript': get: summary: 'Get ticket transcript.' operationId: getTicketTranscript description: 'Returns the full transcript for a ticket, including channel and thread messages with attachments.' parameters: [] responses: 200: description: 'The ticket transcript' content: application/json: schema: type: object example: guild: id: '123456789' name: example premium: false roles: - id: '123456789' name: example color: value position: 1 hoist: false channels: - id: '123456789' name: example type: 0 parent_id: '123456789' position: 1 group: id: '123456789' name: example form_title: value form_fields: - [] schedule: [] schedule_timezone: value priority_levels: - label: value color: value rating_levels: - label: value color: value ticket: id: '123456789' uuid: value status: value owner_id: '123456789' channel_id: '123456789' thread_id: '123456789' assigned_id: '123456789' number: 1 priority: 1 rating: 1 private: false form: [] locked_at: '2024-01-01T00:00:00.000000Z' opened_at: '2024-01-01T00:00:00.000000Z' closed_reason: value closed_at: '2024-01-01T00:00:00.000000Z' created_at: '2024-01-01T00:00:00.000000Z' deleted_at: '2024-01-01T00:00:00.000000Z' transcript_saved_at: '2024-01-01T00:00:00.000000Z' channel_members: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 channel_messages: [] channel_message_attachments: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false thread_members: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 thread_messages: [] thread_message_attachments: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false properties: guild: type: object properties: id: type: string example: '123456789' name: type: string example: example premium: type: boolean example: false roles: type: array example: - id: '123456789' name: example color: value position: 1 hoist: false items: type: object properties: id: type: string example: '123456789' name: type: string example: example color: type: string example: value position: type: integer example: 1 hoist: type: boolean example: false required: - id - name - color - position channels: type: array example: - id: '123456789' name: example type: 0 parent_id: '123456789' position: 1 items: type: object properties: id: type: string example: '123456789' name: type: string example: example type: type: integer example: 0 parent_id: type: string example: '123456789' nullable: true position: type: integer example: 1 nullable: true required: - id - name - type required: - id - name group: type: object properties: id: type: string example: '123456789' name: type: string example: example form_title: type: string example: value form_fields: type: array example: - [] items: type: array schedule: type: array example: [] schedule_timezone: type: string example: value priority_levels: type: array example: - label: value color: value items: type: object properties: label: type: string example: value description: 'Must not be greater than 80 characters.' color: type: string example: value rating_levels: type: array example: - label: value color: value items: type: object properties: label: type: string example: value description: 'Must not be greater than 80 characters.' color: type: string example: value required: - id - name - form_title - schedule - schedule_timezone ticket: type: object properties: id: type: string example: '123456789' uuid: type: string example: value status: type: string example: value owner_id: type: string example: '123456789' channel_id: type: string example: '123456789' thread_id: type: string example: '123456789' nullable: true assigned_id: type: string example: '123456789' nullable: true number: type: integer example: 1 priority: type: integer example: 1 rating: type: integer example: 1 private: type: boolean example: false form: type: array example: [] nullable: true locked_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true opened_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true closed_reason: type: string example: value nullable: true closed_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true created_at: type: string example: '2024-01-01T00:00:00.000000Z' deleted_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true transcript_saved_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true required: - id - uuid - status - owner_id - channel_id - number - priority - rating - created_at channel_members: type: array example: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 items: type: object properties: id: type: string example: '123456789' avatar: type: string example: 'https://example.com/image.png' name: type: string example: example bot: type: boolean example: false joined_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true roles: type: array example: [] rating: type: integer example: 1 nullable: true required: - id - avatar - name - roles channel_messages: type: array example: [] channel_message_attachments: type: array example: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false items: type: object properties: id: type: string example: '123456789' name: type: string example: example hash: type: string example: value mime: type: string example: value size: type: integer example: 1 url: type: string example: 'https://example.com/image.png' encrypted: type: boolean example: false required: - id - name - hash - mime - size - url thread_members: type: array example: - id: '123456789' avatar: 'https://example.com/image.png' name: example bot: false joined_at: '2024-01-01T00:00:00.000000Z' roles: [] rating: 1 items: type: object properties: id: type: string example: '123456789' avatar: type: string example: 'https://example.com/image.png' name: type: string example: example bot: type: boolean example: false joined_at: type: string example: '2024-01-01T00:00:00.000000Z' nullable: true roles: type: array example: [] rating: type: integer example: 1 nullable: true required: - id - avatar - name - roles thread_messages: type: array example: [] thread_message_attachments: type: array example: - id: '123456789' name: example hash: value mime: value size: 1 url: 'https://example.com/image.png' encrypted: false items: type: object properties: id: type: string example: '123456789' name: type: string example: example hash: type: string example: value mime: type: string example: value size: type: integer example: 1 url: type: string example: 'https://example.com/image.png' encrypted: type: boolean example: false required: - id - name - hash - mime - size - url required: - guild - group - ticket - channel_messages - thread_messages tags: - 'Ticket (from channel)' parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/save': post: summary: 'Save ticket transcript.' operationId: saveTicketTranscript description: "Saves the current state of a ticket's transcript and returns the updated transcript data." parameters: [] responses: { } tags: - 'Ticket (from channel)' parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/owner': post: summary: 'Change ticket owner.' operationId: changeTicketOwner description: 'Transfers ownership of a ticket to another user.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/add': post: summary: 'Add user to ticket.' operationId: addUserToTicket description: 'Adds a guild member to the ticket, granting them access to the ticket channel.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer '/api/v1/guild/{guild_id}/channel/{channel_id}/ticket/remove': post: summary: 'Remove user from ticket.' operationId: removeUserFromTicket description: 'Removes a guild member from the ticket, revoking their access to the ticket channel.' parameters: [] responses: { } tags: - 'Ticket (from channel)' requestBody: required: true content: application/json: schema: type: object properties: user_id: type: string description: 'The ID of the user to perform the action on' example: null reason: type: string description: 'Reason for performing the action on the ticket/user' example: 'Hello, world!' anonymous: type: boolean description: 'Perform action as bot, defaults to false' example: null required: - user_id parameters: - in: path name: guild_id description: 'The ID of the guild.' example: '1241080059528347678' required: true schema: type: integer - in: path name: channel_id description: 'The ID of the channel.' example: '1430817781229813802' required: true schema: type: integer /api/v1/user/me: get: summary: 'Get current user.' operationId: getCurrentUser description: "Returns the currently authenticated user's information." parameters: [] responses: 200: description: 'The authenticated user' content: application/json: schema: type: object example: id: '337842567937046150' name: John username: john discriminator: '0001' avatar: 'https://cdn.discordapp.com/avatars/123/abc.png' locale: en bot: false verified: '934674431964242580' joined_at: '2024-01-01T00:00:00.000000Z' properties: id: type: string example: '337842567937046150' description: 'The user snowflake ID' name: type: string example: John description: 'The user display name' nullable: true username: type: string example: john description: 'The username' discriminator: type: string example: '0001' description: 'The user discriminator' avatar: type: string example: 'https://cdn.discordapp.com/avatars/123/abc.png' description: 'The user avatar URL' locale: type: string example: en description: 'The user locale' nullable: true bot: type: boolean example: false description: 'Whether the user is a bot' verified: type: string example: '934674431964242580' description: 'Whether the user is verified' joined_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the user joined' nullable: true required: - id - username - discriminator - avatar tags: - User /api/v1/user/me/guilds: get: summary: 'List guilds.' operationId: listGuilds description: 'Returns all guilds accessible by the authenticated user. Filters out suspended and deleted guilds.' parameters: [] responses: 200: description: 'List of guilds' content: application/json: schema: type: array items: type: object properties: id: type: string example: '571707999220136938' description: 'The guild snowflake ID' name: type: string example: 'My Server' description: 'The guild name' premium: type: string example: '672951452783139208' description: 'Whether the guild has premium' premium_ends_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When premium expires' nullable: true joined_at: type: string example: '2024-01-01T00:00:00.000000Z' description: 'When the bot joined the guild' nullable: true example: - id: '571707999220136938' name: 'My Server' premium: '672951452783139208' premium_ends_at: '2024-01-01T00:00:00.000000Z' joined_at: '2024-01-01T00:00:00.000000Z' tags: - User