Qodo API Openapi API

Use the User management API to list, invite, update, and remove members in your Qodo organization. The API is currently available for eligible single-tenant organizations. Qodo must enable API access for your organization before you can use these endpoints.

Operations 5

GET /platform/v1/admin/users List organization members #
GET /platform/v1/admin/users/{member_id} Get a single member #
PATCH /platform/v1/admin/users/{member_id} Update a member's role or team #
DELETE /platform/v1/admin/users/{member_id} Remove a member #
POST /platform/v1/admin/invites Invite users to the organization #

Work with this as data

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/codiumai:qodo-api-openapi-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

codiumai-openapi-openapi.json Raw ↑
{
  "openapi": "3.0.3",
  "info": {
    "title": "Qodo API",
    "version": "2026-09-03",
    "description": "Use the User management API to list, invite, update, and remove members in your Qodo organization. The API is currently available for eligible single-tenant organizations. Qodo must enable API access for your organization before you can use these endpoints.\n\nAuthenticate with a personal `sk-` API key that belongs to an organization owner. See [Set up the User management API](/account-management/user-management-api).\n\nThe `/platform/v1` segment versions the API contract. It is independent of the Qodo 1.x and Qodo 2.x product documentation versions."
  },
  "servers": [
    {
      "url": "https://qodo-platform.{tenant}.st.qodo.ai",
      "description": "Your Qodo single-tenant API host",
      "variables": {
        "tenant": {
          "default": "your-tenant",
          "description": "Replace this value with your Qodo tenant subdomain before sending a request."
        }
      }
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "API reference",
      "description": "Manage registered users and pending invitations. Organization owner access is required."
    }
  ],
  "paths": {
    "/platform/v1/admin/users": {
      "get": {
        "tags": [
          "API reference"
        ],
        "summary": "List organization members",
        "description": "Lists registered users and pending invitations in the caller's workspace.",
        "operationId": "listOrganizationMembers",
        "parameters": [
          {
            "$ref": "#/components/parameters/RequestId"
          },
          {
            "name": "page",
            "in": "query",
            "description": "1-based page number.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "description": "Number of members per page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Filter by enterprise user name or email address.",
            "schema": {
              "type": "string",
              "default": ""
            }
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "Filter by team ID.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "member_type",
            "in": "query",
            "description": "Filter by registered users or pending invitations.",
            "schema": {
              "$ref": "#/components/schemas/MemberType"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A paginated list of members.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MemberPage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/PortalRedirect"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "501": {
            "$ref": "#/components/responses/NotSupported"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/platform/v1/admin/users/{member_id}": {
      "parameters": [
        {
          "name": "member_id",
          "in": "path",
          "required": true,
          "description": "The user's email address or the pending invitation ID.",
          "schema": {
            "type": "string"
          }
        },
        {
          "$ref": "#/components/parameters/RequestId"
        }
      ],
      "get": {
        "tags": [
          "API reference"
        ],
        "summary": "Get a single member",
        "description": "Returns a registered user or pending invitation in the caller's workspace.",
        "operationId": "getOrganizationMember",
        "responses": {
          "200": {
            "description": "The requested member.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Member"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/PortalRedirect"
          },
          "501": {
            "$ref": "#/components/responses/NotSupported"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      },
      "patch": {
        "tags": [
          "API reference"
        ],
        "summary": "Update a member's role or team",
        "description": "Updates a registered member's organization role, team role, or team. Send at least one field. Send `organization_permission` and `team_id` in separate requests. A team must belong to the caller's workspace, and a pending invitation cannot be updated. The last organization owner cannot be demoted.",
        "operationId": "updateOrganizationMember",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateMemberRequest"
              },
              "examples": {
                "changeOrganizationRole": {
                  "summary": "Change the organization role",
                  "value": {
                    "organization_permission": "owner"
                  }
                },
                "moveToTeam": {
                  "summary": "Move a member to a team",
                  "value": {
                    "team_id": "team-123",
                    "permission": "user"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The changes applied to the member.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateMemberResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/PortalRedirect"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "501": {
            "$ref": "#/components/responses/NotSupported"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      },
      "delete": {
        "tags": [
          "API reference"
        ],
        "summary": "Remove a member",
        "description": "Removes a registered user or pending invitation from the caller's workspace. In organizations that allow domain-based sign-up, a removed user can join again at the next sign-in.\n\nAPI-key revocation is not yet part of this operation. Do not use this endpoint as the only step in an automated offboarding workflow until Qodo confirms that API-key revocation is enabled for your deployment.",
        "operationId": "removeOrganizationMember",
        "responses": {
          "200": {
            "description": "Confirmation that the member was removed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoveMemberResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/PortalRedirect"
          },
          "501": {
            "$ref": "#/components/responses/NotSupported"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/platform/v1/admin/invites": {
      "post": {
        "tags": [
          "API reference"
        ],
        "summary": "Invite users to the organization",
        "description": "Creates one or more organization invitations. Each email domain must be registered to the organization. If you provide a team ID, the team must belong to the caller's workspace. Requests with more than two email addresses are processed in the background.",
        "operationId": "inviteUsersToOrganization",
        "parameters": [
          {
            "$ref": "#/components/parameters/RequestId"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteUsersRequest"
              },
              "example": {
                "emails": [
                  "developer@example.com",
                  "reviewer@example.com"
                ],
                "team_id": "team-123"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The invitations were accepted for processing.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InviteUsersResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/PortalRedirect"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "501": {
            "$ref": "#/components/responses/NotSupported"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "sk-",
        "description": "A personal `sk-` API key that belongs to an organization owner. Send it as `Authorization: Bearer sk-...`. See [Set up the User management API](/account-management/user-management-api)."
      }
    },
    "parameters": {
      "RequestId": {
        "name": "request-id",
        "in": "header",
        "required": false,
        "description": "A unique request ID generated by the client for request tracing.",
        "schema": {
          "type": "string"
        }
      }
    },
    "schemas": {
      "MemberType": {
        "type": "string",
        "enum": [
          "user",
          "invite"
        ],
        "description": "Whether the member is a registered user or a pending invitation."
      },
      "OrganizationPermission": {
        "type": "string",
        "enum": [
          "owner",
          "user"
        ]
      },
      "TeamPermission": {
        "type": "string",
        "enum": [
          "owner",
          "user"
        ]
      },
      "GitProvider": {
        "type": "string",
        "enum": [
          "github",
          "gitlab",
          "bitbucket",
          "azure"
        ]
      },
      "Team": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "id"
        ]
      },
      "Member": {
        "type": "object",
        "properties": {
          "member_id": {
            "type": "string",
            "description": "Use this value in the get, update, and remove member endpoints."
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/MemberType"
          },
          "last_login": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "team": {
            "type": "object",
            "allOf": [
              {
                "$ref": "#/components/schemas/Team"
              }
            ],
            "nullable": true
          },
          "team_role": {
            "type": "string",
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamPermission"
              }
            ],
            "nullable": true
          },
          "is_organization_owner": {
            "type": "boolean"
          },
          "linked_git_accounts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GitProvider"
            },
            "nullable": true
          },
          "enterprise_user_name": {
            "type": "string",
            "nullable": true
          },
          "baseUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "member_id",
          "email",
          "type",
          "team_role",
          "is_organization_owner"
        ]
      },
      "MemberPage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Member"
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "page": {
            "type": "integer",
            "minimum": 1
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100
          },
          "pages": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "items",
          "total",
          "page",
          "size",
          "pages"
        ]
      },
      "InviteUsersRequest": {
        "type": "object",
        "properties": {
          "emails": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            },
            "minItems": 1,
            "maxItems": 200
          },
          "team_id": {
            "type": "string",
            "nullable": true,
            "pattern": "^(?!\\s*$)(?!\\s*-\\s*$).+",
            "description": "A team in the caller's workspace."
          }
        },
        "required": [
          "emails"
        ]
      },
      "InviteUsersResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        },
        "required": [
          "message",
          "data"
        ]
      },
      "UpdateMemberRequest": {
        "type": "object",
        "description": "Provide at least one field. Send `organization_permission` and `team_id` in separate requests.",
        "minProperties": 1,
        "additionalProperties": false,
        "not": {
          "type": "object",
          "properties": {
            "organization_permission": {},
            "team_id": {}
          },
          "required": [
            "organization_permission",
            "team_id"
          ]
        },
        "properties": {
          "organization_permission": {
            "$ref": "#/components/schemas/OrganizationPermission"
          },
          "permission": {
            "$ref": "#/components/schemas/TeamPermission"
          },
          "team_id": {
            "type": "string",
            "minLength": 1,
            "pattern": "^(?!\\s*$)(?!\\s*-\\s*$).+",
            "description": "A team in the caller's workspace."
          }
        }
      },
      "UpdateMemberResponse": {
        "type": "object",
        "properties": {
          "member_id": {
            "type": "string"
          },
          "organization_permission": {
            "type": "string",
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationPermission"
              }
            ],
            "nullable": true
          },
          "permission": {
            "type": "string",
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamPermission"
              }
            ],
            "nullable": true
          },
          "team_id": {
            "type": "string",
            "nullable": true
          }
        },
        "required": [
          "member_id"
        ]
      },
      "RemoveMemberResponse": {
        "type": "object",
        "properties": {
          "member_id": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "member_id",
          "message"
        ]
      },
      "HttpError": {
        "type": "object",
        "properties": {
          "detail": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "additionalProperties": true
              }
            ]
          }
        },
        "required": [
          "detail"
        ]
      },
      "PortalRedirectError": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "object",
            "properties": {
              "redirectTo": {
                "type": "string",
                "format": "uri"
              }
            },
            "required": [
              "redirectTo"
            ]
          }
        },
        "required": [
          "detail"
        ]
      },
      "ValidationErrorDetail": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "loc": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            }
          },
          "msg": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "loc",
          "msg"
        ]
      },
      "ValidationError": {
        "type": "object",
        "properties": {
          "detail": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationErrorDetail"
            }
          }
        },
        "required": [
          "detail"
        ]
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "The bearer credential or authenticated identity is invalid.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/HttpError"
            }
          }
        }
      },
      "Forbidden": {
        "description": "The caller is not an organization owner, lacks workspace context, or API access is not enabled for the organization.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/HttpError"
            }
          }
        }
      },
      "NotFound": {
        "description": "The member or team was not found in the caller's workspace.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/HttpError"
            }
          }
        }
      },
      "PortalRedirect": {
        "description": "The single-tenant identity flow returned another Qodo tenant host. Inspect `detail.redirectTo`, but do not forward credentials automatically.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PortalRedirectError"
            }
          }
        }
      },
      "BadRequest": {
        "description": "The requested member operation is not supported in the member's current state.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/HttpError"
            }
          }
        }
      },
      "ValidationError": {
        "description": "Request validation failed.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ValidationError"
            }
          }
        }
      },
      "NotSupported": {
        "description": "The User management API is not supported for this deployment.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/HttpError"
            }
          }
        }
      },
      "Unavailable": {
        "description": "API availability or authorization could not be verified.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/HttpError"
            }
          }
        }
      }
    }
  }
}