Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/doit-support-requests-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: DoiT Support Requests API
description: Programmatic access to DoiT Platform
version: v1
servers:
- url: https://api.doit.com
security:
- api_key: []
- tenantId: []
api_key: []
tags:
- name: Support Requests
description: Create and manage support tickets with DoiT.
paths:
/support/v1/tickets:
get:
tags:
- Support Requests
summary: List requests
description: 'Returns a list of all historical requests that your account has access to.
Tickets are returned in reverse chronological order by default.'
operationId: idOfTickets
x-cli-name: list-tickets
x-cli-aliases:
- id-of-tickets
parameters:
- name: maxResults
in: query
description: The maximum number of results to return in a single page. Leverage the page tokens to iterate through the entire collection.
schema:
minimum: 1
maximum: 100
type: integer
format: int64
default: 100
- $ref: '#/components/parameters/pageToken'
- name: filter
in: query
description: 'An expression for filtering the results of the request. The syntax is `key:[<value>]`. e.g: "severity:normal". Multiple filters can be
connected using a pipe |. Note that using different keys in the same
filter results in “AND,” while using the same key multiple times in
the same filter results in “OR”.
'
schema:
type: string
- name: minCreationTime
in: query
description: Min value for tickets creation time, in milliseconds since the POSIX epoch. If set, only tickets created after or at this timestamp are returned.
schema:
type: string
- name: maxCreationTime
in: query
description: Max value for tickets creation time, in milliseconds since the POSIX epoch. If set, only tickets created before or at this timestamp are returned.
schema:
type: string
responses:
'200':
description: OK - List of historical requests returned.
content:
application/json:
schema:
$ref: '#/components/schemas/TicketsList'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'502':
$ref: '#/components/responses/502'
'503':
$ref: '#/components/responses/503'
post:
tags:
- Support Requests
summary: Create a request
description: Creates a new support request
operationId: idOfTicketsPost
x-cli-name: create-ticket
x-cli-aliases:
- id-of-tickets-post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TicketCreateFormExtAPI'
required: true
responses:
'201':
description: Created - New support request created.
content:
application/json:
schema:
$ref: '#/components/schemas/TicketResponseExtAPI'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
x-codegen-request-body-name: Body
/support/v1/tickets/{ticketId}:
get:
tags:
- Support Requests
summary: Get a request
description: Returns the details of a single support request by its ID.
operationId: idOfTicketGet
x-cli-name: get-ticket
x-cli-aliases:
- id-of-ticket-get
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
responses:
'200':
description: OK - Support request details returned.
content:
application/json:
schema:
$ref: '#/components/schemas/TicketDetailExtAPI'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'502':
$ref: '#/components/responses/502'
'503':
$ref: '#/components/responses/503'
patch:
tags:
- Support Requests
summary: Update a request
description: 'Partially updates a support request. Supports setting the request
`status` and/or `assignee`. DoiT employees may set any of `open`,
`pending`, `hold`, or `solved` and may set the `assignee`; customers may
set only `solved` (parity with the console "mark as resolved" action)
and may not set an assignee. `closed` is not settable via the API
(Zendesk auto-closes from `solved`). The `assignee` is a DoiT-employee
email, resolved server-side to a Zendesk agent; an email that does not
resolve to an active agent returns `400`. At least one mutable field
must be present. The response echoes the fields that were applied.'
operationId: idOfTicketUpdate
x-cli-name: update-ticket
x-cli-aliases:
- id-of-ticket-update
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
requestBody:
required: true
content:
application/json:
schema:
type: object
minProperties: 1
properties:
status:
type: string
description: The status to set on the request.
enum:
- open
- pending
- hold
- solved
assignee:
type: string
format: email
description: 'Email of the DoiT employee to assign the request to,
resolved to a Zendesk agent. DoiT employees only.'
responses:
'200':
description: OK - Request updated. Echoes the fields that were applied.
content:
application/json:
schema:
type: object
properties:
id:
type: integer
format: int64
status:
type: string
assignee:
type: string
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
/support/v1/tickets/{ticketId}/comments:
get:
tags:
- Support Requests
summary: List request comments
description: 'Returns all comments on a support request. For customers, only public
comments are returned. For DoiT employees, both public and private
comments are returned. All comments are returned in a single response
(no pagination).'
operationId: idOfTicketCommentsList
x-cli-name: list-ticket-comments
x-cli-aliases:
- id-of-ticket-comments-list
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
responses:
'200':
description: OK - List of comments returned.
content:
application/json:
schema:
$ref: '#/components/schemas/CommentsResponseExtAPI'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'502':
$ref: '#/components/responses/502'
'503':
$ref: '#/components/responses/503'
post:
tags:
- Support Requests
summary: Add a comment
description: 'Adds a comment to an existing support request. For customers, comments
are always public. For DoiT employees, comments can be marked as
private (internal notes) by setting the `private` field to `true`.'
operationId: idOfTicketCommentsPost
x-cli-name: create-ticket-comment
x-cli-aliases:
- id-of-ticket-comments-post
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCommentRequest'
responses:
'201':
description: Created - Comment added to the support request.
content:
application/json:
schema:
$ref: '#/components/schemas/CommentExtAPI'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
/support/v1/tickets/{ticketId}/tags:
get:
tags:
- Support Requests
summary: List tags on a support request
description: 'Returns the tags currently set on a support request.
DoiT employee (doer) callers receive the full tag set verbatim,
including internal namespaces (e.g. `tier/*`, `synapse_*`). Customer
callers receive only tags under the `customer_tag/` namespace, with
that prefix stripped (e.g. a tag added as `billing` reads back as
`billing`). Always present; empty array when the caller has no visible
tags.'
operationId: listTicketTags
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/TagsGetResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
post:
tags:
- Support Requests
summary: Add tags to a support request
description: 'Adds one or more tags to an existing support request. The operation is
surgical — only the tags listed in the request are added; existing tags
on the ticket are preserved. Re-adding a tag that is already present is
a successful no-op.
All submitted tags are normalized (trim + lowercase) before storage. For
customers, the system additionally applies a `customer_tag/` namespace
prefix to prevent collisions with internal DoiT process tags. The
response echoes the actual stored strings so callers can verify the
transform.'
operationId: idOfTicketTagsAdd
x-cli-name: add-ticket-tags
x-cli-aliases:
- id-of-ticket-tags-add
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TagsRequest'
responses:
'200':
description: OK - Tags added (or already present).
content:
application/json:
schema:
$ref: '#/components/schemas/TagsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
delete:
tags:
- Support Requests
summary: Remove tags from a support request
description: 'Removes one or more tags from an existing support request. The operation
is surgical — only the tags listed in the request are removed; tags not
listed are preserved. Removing a tag that is not present is a successful
no-op.
For customers, the system applies the same `customer_tag/` namespace
mapping as on add, so a customer who added `my_tag` (stored as
`customer_tag/my_tag`) can remove it by sending `my_tag`.'
operationId: idOfTicketTagsRemove
x-cli-name: remove-ticket-tags
x-cli-aliases:
- id-of-ticket-tags-remove
parameters:
- name: ticketId
in: path
required: true
description: The unique identifier of the support request.
schema:
type: integer
format: int64
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TagsRequest'
responses:
'200':
description: OK - Tags removed (or already absent).
content:
application/json:
schema:
$ref: '#/components/schemas/TagsResponse'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
components:
responses:
'400':
description: Bad Request - The server cannot process the request, often due to a malformed request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - Invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Not Found - The requested resource does not exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: Service Unavailable - The upstream support system is temporarily unavailable (rate limited, upstream 5xx, or a network error). Retry after the interval indicated by the Retry-After header.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden - The client is not authorized to perform the request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'502':
description: Bad Gateway - The upstream support system returned an error that a retry will not resolve (e.g. an authentication or configuration problem). Escalation is required.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
CreateCommentRequest:
type: object
description: Request body for adding a comment to a support ticket.
required:
- body
properties:
body:
type: string
description: The text content of the comment. Must not be empty.
private:
type: boolean
description: If true, creates a private internal note. Only honored for DoiT employees; ignored for customers.
default: false
TicketsList:
type: object
description: List of support tickets.
properties:
pageToken:
type: string
description: Page token, returned by a previous call, to request the next page of results.
rowCount:
type: integer
description: Tickets rows count
format: int64
tickets:
type: array
items:
$ref: '#/components/schemas/TicketListItem'
TicketResponseExtAPI:
type: object
description: Response returned after creating a ticket.
properties:
created:
type: integer
description: Ticket creation time.
format: int64
id:
type: integer
description: Ticket ID.
format: int64
platform:
type: string
description: Ticket platform.
enum:
- doit
- google_cloud_platform
- amazon_web_services
- microsoft_azure
product:
type: string
description: Ticket product.
requester:
type: string
description: Email address of the requester.
severity:
type: string
description: Severity of the ticket.
enum:
- low
- normal
- high
- urgent
status:
type: string
description: Ticket status.
subject:
type: string
description: Ticket subject.
urlUI:
type: string
description: URL to access the ticket in DoiT console.
Error:
type: object
description: Standard error response structure.
properties:
error:
type: string
description: Detailed error message.
CommentExtAPI:
type: object
description: A comment on a support ticket.
properties:
id:
type: integer
description: Comment ID.
format: int64
body:
type: string
description: The text content of the comment.
author:
type: string
description: Email address of the comment author.
created:
type: integer
description: The time when this comment was created, in milliseconds since the epoch.
format: int64
attachments:
type: array
description: File attachments on the comment.
items:
type: object
properties:
id:
type: integer
format: int64
file_name:
type: string
content_url:
type: string
TagsResponse:
type: object
description: 'Response body echoing the tags the operation actually acted on, after
server-side transformation (trim + lowercase + customer namespace prefix
where applicable).
'
properties:
applied_tags:
type: array
items:
type: string
description: The tags that were stored on (POST) or removed from (DELETE) the ticket.
TicketDetailExtAPI:
type: object
description: Detailed information about a single support ticket.
properties:
id:
type: integer
description: Ticket ID.
format: int64
subject:
type: string
description: The subject of the ticket.
description:
type: string
description: The body of the initial ticket message.
requester:
type: string
description: Email address of the ticket requester.
severity:
type: string
description: Ticket severity.
enum:
- low
- normal
- high
- urgent
platform:
type: string
description: Platform of the ticket.
enum:
- doit
- google_cloud_platform
- amazon_web_services
- microsoft_azure
product:
type: string
description: Ticket product.
platform_info:
type: string
description: 'The cloud asset identifier(s) the requester selected on the support
form''s asset-selector control — typically the GCP project ID, AWS
account ID, Azure subscription ID, or equivalent. May contain
multiple identifiers as a comma-separated list (no spaces) when the
requester selected more than one asset, e.g.
"111111111111,222222222222". Empty string when the ticket has no
asset value (e.g. older tickets or tickets opened through paths that
bypass the form selector).'
example: cmp-playground
status:
type: string
description: Ticket status.
createTime:
type: integer
description: The time when this ticket was created, in milliseconds since the epoch.
format: int64
updateTime:
type: integer
description: The time when this ticket was last updated, in milliseconds since the epoch.
format: int64
urlUI:
type: string
description: Link to the ticket in DoiT console.
is_public:
type: boolean
description: Whether the ticket is public.
tags:
type: array
items:
type: string
description: 'Ticket tags, filtered by caller type. DoiT employee (doer) callers
receive the full tag set verbatim, including internal namespaces
(e.g. `tier/*`, `synapse_*`). Customer callers receive only tags
under the `customer_tag/` namespace, with that prefix stripped
(e.g. a tag added as `billing` reads back as `billing`). Always
present; empty array when the caller has no visible tags.'
TicketExtAPI:
type: object
description: Payload to create a support ticket via API.
required:
- body
- platform
- product
- severity
- subject
properties:
body:
type: string
description: The body of the ticket (can include html formatting).
x-cloudflow-format: multiReference
created:
type: string
description: Ticket creation time.
platform:
type: string
description: Platform of the ticket.
enum:
- doit
- google_cloud_platform
- amazon_web_services
- microsoft_azure
product:
type: string
description: Ticket product details.
severity:
type: string
description: Ticket severity.
enum:
- low
- normal
- high
- urgent
x-cloudflow-format: noReference
subject:
type: string
description: The subject of the ticket.
TicketListItem:
type: object
description: Summary information about a support ticket.
properties:
createTime:
type: integer
description: The time when this ticket was created, in milliseconds since the epoch.
format: int64
id:
type: integer
description: Ticket ID (e.g., "33234").
format: int64
is_public:
type: boolean
description: Whether the ticket is public.
platform:
type: string
description: Platform of the ticket.
enum:
- doit
- google_cloud_platform
- amazon_web_services
- microsoft_azure
product:
type: string
description: Ticket product.
requester:
type: string
description: The ticket requester in the form of user@domain.com
severity:
type: string
description: Ticket severity.
status:
type: string
description: Ticket status.
subject:
type: string
description: The subject of the ticket.
updateTime:
type: integer
description: The time when this ticket was last updated, in milliseconds since the epoch.
format: int64
urlUI:
type: string
description: Link to the report in DoiT console.
tags:
type: array
items:
type: string
description: 'Ticket tags, filtered by caller type. DoiT employee (doer) callers
receive the full tag set verbatim, including internal namespaces
(e.g. `tier/*`, `synapse_*`). Customer callers receive only tags
under the `customer_tag/` namespace, with that prefix stripped.
Always present; empty array when the caller has no visible tags.'
CommentsResponseExtAPI:
type: object
description: Response containing all comments on a support ticket.
properties:
comments:
type: array
items:
$ref: '#/components/schemas/CommentExtAPI'
TicketCreateFormExtAPI:
type: object
description: Wrapper object for creating support tickets via the external API.
x-cloudflow-labels:
ticket: Ticket details
properties:
ticket:
$ref: '#/components/schemas/TicketExtAPI'
required:
- ticket
TagsRequest:
type: object
description: 'Request body for adding (POST) or removing (DELETE) tags on a support
request. The operation is surgical — only the tags listed are affected;
any other tags on the ticket are preserved.
'
required:
- tags
properties:
tags:
type: array
minItems: 1
maxItems: 50
items:
type: string
minLength: 1
maxLength: 80
description: List of tags to add or remove. Customer-submitted tags are auto-prefixed with `customer_tag/`.
TagsGetResponse:
type: object
description: 'Response body for GET /support/v1/tickets/{ticketId}/tags. Contains
the current tags visible to the caller.'
properties:
tags:
type: array
items:
type: string
description: 'Ticket tags, filtered by caller type. DoiT employee (doer) callers
receive the full tag set verbatim, including internal namespaces
(e.g. `tier/*`, `synapse_*`). Customer callers receive only tags
under the `customer_tag/` namespace, with that prefix stripped.
Always present; empty array when the caller has no visible tags.'
parameters:
pageToken:
name: pageToken
in: query
description: Page token, returned by a previous call, to request the next page of results
schema:
type: string
securitySchemes:
api_key:
type: apiKey
name: Authorization
description: Use the "Bearer <API_KEY>" format or sign in for autofill
in: header
tenantId:
type: apiKey
name: X-Tenant-Id
description: 'Tenant (customer) ID that sets the request''s customer context.
Required when the credential can access more than one tenant; omit when the
credential is scoped to exactly one tenant (the server resolves that tenant
automatically). If omitted for a multi-tenant credential, the request fails
with `400` and code `tenant_id_required`. If the value conflicts with the
credential''s tenant scope, the request fails with `400` and code
`tenant_id_mismatch`.
Use this header over the legacy `customerContext` query parameter, which
only applies to legacy API keys and is ignored by personal and service-account
API tokens.
'
in: header
oauth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://console.doit.com/sign-in/oauth
tokenUrl: https://console.doit.com/api/auth/token
scopes:
dci: Access All Data
x-samples-languages:
- curl
- go
- node
- python
x-cli-config:
security: oauth2
params:
client_id: cli