openapi: 3.2.0 info: title: Moov Support API version: v2026.01.00 contact: name: Moov Developer Support email: help@moov.io url: https://moov.io license: name: Unlicensed url: http://www.apache.org/licenses/LICENSE-2.0.html description: 'Operations tagged Support across 2 of this provider''s published API definitions: moov-api-v2026.01.00-openapi.yml, moov-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.moov.io description: Production API host variables: {} security: - BasicAuth: [] tags: - name: Support paths: /accounts/{accountID}/tickets: post: operationId: createTicket description: 'Create a support ticket for a Moov account. To access this endpoint using an access token you''ll need to specify the `/accounts/{accountID}/tickets.write` scope. If you''re creating the ticket on behalf of another account, then you''ll need to specify the `/accounts/{partnerAccountID}/tickets.write` and `/accounts/{accountID}/profile.read` scopes.' parameters: - $ref: '#/components/parameters/VersionHeader' - name: accountID in: path required: true schema: type: string responses: '200': description: The request completed successfully. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/Ticket' '400': description: The server could not understand the request due to invalid syntax. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/GenericError' '401': description: The request contained missing or expired authentication. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '403': description: The user is not authorized to make the request. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '404': description: The requested resource was not found. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '409': description: The request conflicted with the current state of the target resource. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/GenericError' '422': description: The request was well-formed, but the contents failed validation. Check the request for missing or invalid fields. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/CreateTicketError' '429': description: Request was refused due to rate limiting. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '500': description: The request failed due to an unexpected error. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '504': description: The request failed because a downstream service failed to respond. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string tags: - Support requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateTicket' summary: Create ticket x-summary-source: derived get: operationId: listTickets description: 'List all the support tickets created under a Moov account. To access this endpoint using an access token you''ll need to specify the `/accounts/{accountID}/tickets.read` scope. If you''re listing another account''s tickets, then you''ll need to specify the `/accounts/{partnerAccountID}/tickets.read` and `/accounts/{accountID}/profile.read` scopes.' parameters: - $ref: '#/components/parameters/VersionHeader' - $ref: '#/components/parameters/CursorPagination.cursor' - $ref: '#/components/parameters/CursorPagination.count' - $ref: '#/components/parameters/TicketListFilters.status' - $ref: '#/components/parameters/TicketListFilters.foreignID' - name: accountID in: path required: true schema: type: string responses: '200': description: The request completed successfully. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: type: object required: - items properties: items: type: array items: $ref: '#/components/schemas/Ticket' nextPage: $ref: '#/components/schemas/ItemListNextPage' description: A paginated list of items. The `nextPage` field is omitted if there are no more pages available. '401': description: The request contained missing or expired authentication. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '403': description: The user is not authorized to make the request. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '429': description: Request was refused due to rate limiting. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '500': description: The request failed due to an unexpected error. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '504': description: The request failed because a downstream service failed to respond. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string tags: - Support summary: List tickets x-summary-source: derived servers: - url: https://api.moov.io description: Production API host variables: {} /accounts/{accountID}/tickets/{ticketID}: get: operationId: getTicket description: 'Retrieve a support ticket by ID. To access this endpoint using an access token you''ll need to specify the `/accounts/{accountID}/tickets.read` scope. If you''re retrieving another account''s ticket, then you''ll need to specify the `/accounts/{partnerAccountID}/tickets.read` and `/accounts/{accountID}/profile.read` scopes.' parameters: - $ref: '#/components/parameters/VersionHeader' - name: accountID in: path required: true schema: type: string - name: ticketID in: path required: true schema: type: string responses: '200': description: The request completed successfully. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/Ticket' '401': description: The request contained missing or expired authentication. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '403': description: The user is not authorized to make the request. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '404': description: The requested resource was not found. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '429': description: Request was refused due to rate limiting. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '500': description: The request failed due to an unexpected error. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '504': description: The request failed because a downstream service failed to respond. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string tags: - Support summary: Get ticket x-summary-source: derived patch: operationId: updateTicket description: 'Updates a support ticket. To access this endpoint using an access token you''ll need to specify the `/accounts/{accountID}/tickets.write` scope. If you''re updating the ticket on behalf of another account, then you''ll need to specify the `/accounts/{partnerAccountID}/tickets.write` and `/accounts/{accountID}/profile.read` scopes.' parameters: - $ref: '#/components/parameters/VersionHeader' - name: accountID in: path required: true schema: type: string - name: ticketID in: path required: true schema: type: string responses: '200': description: The request completed successfully. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/Ticket' '400': description: The server could not understand the request due to invalid syntax. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/GenericError' '401': description: The request contained missing or expired authentication. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '403': description: The user is not authorized to make the request. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '404': description: The requested resource was not found. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '409': description: The request conflicted with the current state of the target resource. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/GenericError' '422': description: The request was well-formed, but the contents failed validation. Check the request for missing or invalid fields. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: $ref: '#/components/schemas/UpdateTicketError' '429': description: Request was refused due to rate limiting. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '500': description: The request failed due to an unexpected error. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '504': description: The request failed because a downstream service failed to respond. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string tags: - Support requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateTicket' summary: Update ticket x-summary-source: derived servers: - url: https://api.moov.io description: Production API host variables: {} /accounts/{accountID}/tickets/{ticketID}/messages: get: operationId: listTicketMessages description: 'List all the messages for a support ticket. To access this endpoint using an access token you''ll need to specify the `/accounts/{accountID}/tickets.read` scope. If you''re listing another account''s messages, then you''ll need to specify the `/accounts/{partnerAccountID}/tickets.read` and `/accounts/{accountID}/profile.read` scopes.' parameters: - $ref: '#/components/parameters/VersionHeader' - name: accountID in: path required: true schema: type: string - name: ticketID in: path required: true schema: type: string responses: '200': description: The request completed successfully. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string content: application/json: schema: type: array items: $ref: '#/components/schemas/TicketMessage' '401': description: The request contained missing or expired authentication. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '403': description: The user is not authorized to make the request. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '429': description: Request was refused due to rate limiting. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '500': description: The request failed due to an unexpected error. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string '504': description: The request failed because a downstream service failed to respond. headers: x-request-id: required: true description: A unique identifier used to trace requests. schema: type: string tags: - Support summary: List ticket messages x-summary-source: derived servers: - url: https://api.moov.io description: Production API host variables: {} components: schemas: Count: type: integer format: int64 description: Limits the maximum number of results returned, or determines the page size when used with `skip` or `cursor` for pagination. example: 20 TicketMessage: type: object required: - author - body - sentOn properties: author: type: string body: type: string format: html sentOn: type: string format: date-time TicketContact: type: object required: - email properties: email: type: string name: type: string CreateTicket: type: object required: - title - body - contact properties: title: type: string body: type: string format: html author: type: string contact: $ref: '#/components/schemas/TicketContact' foreignID: type: string description: Request to create a new support ticket. UpdateTicketError: type: object properties: status: type: string ItemListNextPage: type: object required: - cursor properties: cursor: type: string description: The cursor value to use for the next page of items. UpdateTicketStatus: type: string enum: - closed Cursor: type: string description: The value used to retrieve a page of items. CreateTicketContactError: type: object properties: email: type: string name: type: string CreateTicketError: type: object properties: title: type: string body: type: string author: type: string contact: $ref: '#/components/schemas/CreateTicketContactError' foreignID: type: string TicketStatus: type: string enum: - new - in-progress - on-hold - closed Ticket: type: object required: - ticketID - number - title - contact - status - createdOn - updatedOn properties: ticketID: type: string number: type: integer title: type: string contact: $ref: '#/components/schemas/TicketContact' status: $ref: '#/components/schemas/TicketStatus' createdOn: type: string format: date-time updatedOn: type: string format: date-time latestMessageOn: type: string format: date-time closedOn: type: string format: date-time foreignID: type: string GenericError: type: object required: - error properties: error: type: string UpdateTicket: type: object properties: status: $ref: '#/components/schemas/UpdateTicketStatus' description: Request to update a support ticket. parameters: TicketListFilters.foreignID: name: foreignID in: query required: false schema: type: string explode: false CursorPagination.cursor: name: cursor in: query required: false schema: $ref: '#/components/schemas/Cursor' explode: false CursorPagination.count: name: count in: query required: false description: Page size. When omitted, the server defaults to `200`. schema: $ref: '#/components/schemas/Count' explode: false TicketListFilters.status: name: status in: query required: false schema: $ref: '#/components/schemas/TicketStatus' explode: false VersionHeader: name: X-Moov-Version in: header required: false description: 'Set this header to v2026.01.00 to use the API described in this specification. When omitted, the server defaults to v2024.01.00, the earliest supported version, which may not match the behavior documented here. An unrecognized well-formed version uses the latest supported version that is not newer than the requested version, when one exists. For example, `v2026.08.00` uses `v2026.07.00`. A malformed value, such as `2022`, returns a `404` response.' schema: type: string enum: - v2026.01.00 example: v2026.01.00 x-speakeasy-ignore: true x-speakeasy-ignore: true securitySchemes: BasicAuth: type: http scheme: Basic externalDocs: url: https://docs.moov.io/ description: Moov Guides and API Documentation x-refined-from: - moov-api-v2026.01.00-openapi.yml - moov-openapi.yml