ControlUp SAML API

The SAML API from ControlUp — 2 operation(s) for saml.

Operations 4

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /organizations/{orgId}/saml Get the SAML SSO configuration · Get SAML configuration #
Ask an LLM
“What SAML settings are currently saved for my organization?”
“Which IdP and default role is my SAML SSO using?”
Tell an agent
Show the SAML configuration for organization {orgId}.
Get the current SAML SSO settings of org {orgId}.
POST /organizations/{orgId}/saml Set up SAML SSO, overwriting any existing · Create SAML settings #
Ask an LLM
“Can I configure SAML SSO from scratch with my IdP's certificate and SSO URL?”
“Does creating SAML settings overwrite the existing configuration?”
Tell an agent
Configure SAML for org {orgId} with SSO URL {ssoServiceUrl}, certificate {certificate}, IdP {idpPartnerName}, URN {urn} and default role {defaultRoleId}.
Replace org {orgId}'s whole SAML setup using IdP {idpPartnerName}.
PATCH /organizations/{orgId}/saml Update specific SAML settings · Update SAML settings #
Ask an LLM
“Can I rotate just the SAML signing certificate?”
“Can I change only the default role for SAML users?”
Tell an agent
Update the SAML certificate for org {orgId} to {certificate}.
Change the SAML default role of org {orgId} to {defaultRoleId}.
POST /organizations/{orgId}/saml/{idpName} Auto-configure SAML from an IdP integration · Create SAML settings from IdP integration #
Ask an LLM
“Can SAML SSO be set up automatically from my Entra ID integration?”
“Is there a shortcut so I don't have to enter SAML settings by hand?”
Tell an agent
Configure SAML for org {orgId} automatically from IdP {idpName}.
Use the {idpName} integration to set up SAML SSO for organization {orgId}.

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/controlup:controlup-saml-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

controlup-saml-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Dex SAML API
  version: 1.0.0
  description: Dex API Description
  contact: {}
servers:
- url: https://api.controlup.com/v1
tags:
- name: SAML
paths:
  /organizations/{orgId}/saml:
    get:
      operationId: OrgSamlPublicController_getOneById
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIResponse_OrganizationSamlSettingsPublic_'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: Returns your currently saved SAML configuration.
      summary: Get SAML configuration
      tags:
      - SAML
      security:
      - apiKey: []
      parameters:
      - description: The format of returned results.
        in: query
        name: _format
        required: false
        schema:
          default: json
          type: string
          enum:
          - json
          - xml
          - csv
        example: json
        style: form
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
    post:
      operationId: OrgSamlPublicController_create
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIResponse_OrganizationSamlSettingsPublic_'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: 'Replaces your current SAML configuration by setting the values of the parameters passed.

        Any existing SAML configuration is overwritten.'
      summary: Create SAML settings
      tags:
      - SAML
      security:
      - apiKey: []
      parameters:
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrganizationSamlSettings'
    patch:
      operationId: OrgSamlPublicController_update
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIResponse_OrganizationSamlSettingsPublic_'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: 'Updates your current SAML configuration by setting the values of the parameters passed.

        Any parameters not passed are not changed.'
      summary: Update SAML settings
      tags:
      - SAML
      security:
      - apiKey: []
      parameters:
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateOrganizationSamlSettings'
  /organizations/{orgId}/saml/{idpName}:
    post:
      operationId: OrgSamlPublicController_configureByIdp
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIResponse_OrganizationSamlSettingsPublic_'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__'
        '401':
          description: 'Unauthorized: Access is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__'
        '403':
          description: 'Forbidden: Access to this resource is denied'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__'
        '404':
          description: 'Not Found: The requested resource could not be found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__'
      description: 'Automatically configures SAML SSO based on an existing integration with Entra ID. Any existing SAML configuration is overwritten.

        To use this endpoint, you must have already created an integration with Entra ID with the permissions required to configure Entra ID SAML settings.

        Use this endpoint as a shortcut so that you don''t have to manually set up SAML SSO. Learn more.'
      summary: Create SAML settings from IdP integration
      tags:
      - SAML
      security:
      - apiKey: []
      parameters:
      - description: ID of your ControlUp organization. You can find your organization ID on the [API Key Management page](how-to-make-api-requests#how-to-find-your-controlup-organization-id) in the DEX platform.
        in: path
        name: orgId
        required: true
        schema:
          $ref: '#/components/schemas/UUID'
      - description: The IdP to use for SAML SSO.
        in: path
        name: idpName
        required: true
        schema:
          $ref: '#/components/schemas/SamlConfigureIdpName'
components:
  schemas:
    HttpStatusCode.FORBIDDEN:
      enum:
      - 403
      type: number
    ErrorMessage.Unauthorized:
      enum:
      - Unauthorized
      type: string
    ErrorCode.NotFound:
      enum:
      - 5
      type: number
    BadRequestErrorMessages:
      enum:
      - Bad Request
      - Invalid Params
      - Unique Field Violation
      type: string
    ErrorCode.Unauthorized:
      enum:
      - 3
      type: number
    ErrorCode.InternalServerError:
      enum:
      - 6
      type: number
    CreateOrganizationSamlSettings:
      properties:
        ssoServiceUrl:
          type: string
          description: IdP login URL.
        sloServiceUrl:
          type: string
          description: IdP logout URL.
        certificate:
          type: string
          description: IdP signing certificate.
        idpPartnerName:
          type: string
          description: Entity / Issuer ID.
        urn:
          type: string
          description: Relying party trust identifier.
        defaultRoleId:
          type: number
          format: double
          description: 'ID of the role assigned to ControlUp accounts automatically provisioned by SAML.


            Default role IDs:

            * Admin - 1

            * Editor - 2

            * Viewer - 3

            * No Permissions - 4

            * VDI and DaaS Admins - 5

            * Access Real-Time DX Console - 6'
      required:
      - defaultRoleId
      - urn
      - idpPartnerName
      - certificate
      - ssoServiceUrl
      type: object
    ErrorResponseBody_ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound__:
      properties:
        metadata:
          $ref: '#/components/schemas/ErrorResponseMetadata'
        error:
          $ref: '#/components/schemas/ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound_'
      required:
      - error
      - metadata
      type: object
    ErrorResponseMetadata:
      properties:
        cuRequestId:
          type: string
        orgId:
          type: string
        userId:
          type: string
        userIp:
          type: string
      required:
      - userIp
      - userId
      - orgId
      - cuRequestId
      type: object
    UUID:
      type: string
      format: uuid
      description: 'Stringified UUIDv4.

        See [RFC 4112](https://tools.ietf.org/html/rfc4122)'
      pattern: ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$
    ErrorResponseBody_ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized__:
      properties:
        metadata:
          $ref: '#/components/schemas/ErrorResponseMetadata'
        error:
          $ref: '#/components/schemas/ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized_'
      required:
      - error
      - metadata
      type: object
    ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.Forbidden'
        code:
          $ref: '#/components/schemas/ErrorCode.Forbidden'
        status:
          $ref: '#/components/schemas/HttpStatusCode.FORBIDDEN'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    SamlConfigureIdpName:
      enum:
      - entra_id
      type: string
    ErrorType_ErrorMessage.Unauthorized.HttpStatusCode.UNAUTHORIZED.ErrorCode.Unauthorized_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.Unauthorized'
        code:
          $ref: '#/components/schemas/ErrorCode.Unauthorized'
        status:
          $ref: '#/components/schemas/HttpStatusCode.UNAUTHORIZED'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    HttpStatusCode.INTERNAL_SERVER_ERROR:
      enum:
      - 500
      type: number
    ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.InternalServerError'
        code:
          $ref: '#/components/schemas/ErrorCode.InternalServerError'
        status:
          $ref: '#/components/schemas/HttpStatusCode.INTERNAL_SERVER_ERROR'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    ? ErrorResponseBody_ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError__
    : properties:
        metadata:
          $ref: '#/components/schemas/ErrorResponseMetadata'
        error:
          $ref: '#/components/schemas/ErrorType_ErrorMessage.InternalServerError.HttpStatusCode.INTERNAL_SERVER_ERROR.ErrorCode.InternalServerError_'
      required:
      - error
      - metadata
      type: object
    HttpStatusCode.BAD_REQUEST:
      enum:
      - 400
      type: number
    ErrorResponseBody_ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes__:
      properties:
        metadata:
          $ref: '#/components/schemas/ErrorResponseMetadata'
        error:
          $ref: '#/components/schemas/ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes_'
      required:
      - error
      - metadata
      type: object
    APIResponse_OrganizationSamlSettingsPublic_:
      properties:
        data:
          allOf:
          - $ref: '#/components/schemas/OrganizationSamlSettingsPublic'
      required:
      - data
      type: object
    ErrorType_BadRequestErrorMessages.HttpStatusCode.BAD_REQUEST.BadRequestErrorCodes_:
      properties:
        message:
          $ref: '#/components/schemas/BadRequestErrorMessages'
        code:
          $ref: '#/components/schemas/BadRequestErrorCodes'
        status:
          $ref: '#/components/schemas/HttpStatusCode.BAD_REQUEST'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    ErrorResponseBody_ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden__:
      properties:
        metadata:
          $ref: '#/components/schemas/ErrorResponseMetadata'
        error:
          $ref: '#/components/schemas/ErrorType_ErrorMessage.Forbidden.HttpStatusCode.FORBIDDEN.ErrorCode.Forbidden_'
      required:
      - error
      - metadata
      type: object
    ErrorMessage.Forbidden:
      enum:
      - Forbidden
      type: string
    UpdateOrganizationSamlSettings:
      properties:
        ssoServiceUrl:
          type: string
          description: IdP login URL.
        sloServiceUrl:
          type: string
          description: IdP logout URL.
        certificate:
          type: string
          description: IdP signing certificate.
        idpPartnerName:
          type: string
          description: Entity / Issuer ID.
        urn:
          type: string
          description: Relying party trust identifier.
        defaultRoleId:
          type: number
          format: double
          description: 'ID of the role assigned to ControlUp accounts automatically provisioned by SAML.


            Default role IDs:

            * Admin - 1

            * Editor - 2

            * Viewer - 3

            * No Permissions - 4

            * VDI and DaaS Admins - 5

            * Access Real-Time DX Console - 6'
      type: object
    HttpStatusCode.UNAUTHORIZED:
      enum:
      - 401
      type: number
    ErrorType_ErrorMessage.NotFound.HttpStatusCode.NOT_FOUND.ErrorCode.NotFound_:
      properties:
        message:
          $ref: '#/components/schemas/ErrorMessage.NotFound'
        code:
          $ref: '#/components/schemas/ErrorCode.NotFound'
        status:
          $ref: '#/components/schemas/HttpStatusCode.NOT_FOUND'
        data:
          additionalProperties: true
          type: object
      required:
      - status
      - code
      - message
      type: object
    ErrorMessage.InternalServerError:
      enum:
      - Internal Server Error
      type: string
    BadRequestErrorCodes:
      enum:
      - 2
      - 14
      - 50
      type: number
    OrganizationSamlSettingsPublic:
      properties:
        ssoServiceUrl:
          type: string
          description: IdP login URL.
        sloServiceUrl:
          type: string
          description: IdP logout URL.
        certificate:
          type: string
          description: IdP signing certificate.
        idpPartnerName:
          type: string
          description: Entity / Issuer ID.
        urn:
          type: string
          description: Relying party trust identifier.
        defaultRoleId:
          type: number
          format: double
          description: 'ID of the role assigned to ControlUp accounts automatically provisioned by SAML.


            Default role IDs:

            * Admin - 1

            * Editor - 2

            * Viewer - 3

            * No Permissions - 4

            * VDI and DaaS Admins - 5

            * Access Real-Time DX Console - 6'
        createdAt:
          type: string
          description: The date at which the SAML settings were first created.
        updatedAt:
          type: string
          description: The date at which the SAML settings were last updated.
      required:
      - defaultRoleId
      - urn
      - idpPartnerName
      - certificate
      - sloServiceUrl
      - ssoServiceUrl
      type: object
      example:
        urn: urn:controlup:dev
        idpPartnerName: urn:dev-3ezru5wuvaevqm0t.us.auth0.com
        ssoServiceUrl: https://dev-3ezru5wuvaevqm0t.us.auth0.com/samlp/6iom84fUqvicEqWzDgV4zYxoARvIIX8u
        sloServiceUrl: https://dev-3ezru5wuvaevqm0t.us.auth0.com/samlp/6iom84fUqvicEqWzDgV4zYxoARvIIX8u
        certificate: 'MIIDHTCCAgWgAwIBAgIJfmBK1ZYElWb0MA0GCSqGSIb3DQEBCwUAMCwxKjAoBgNV

          KGtROwtMVWJW7rrOImKLpEqdv9bzYp3NJhuxpwuQPNXs02LSamwGJFxh2arEKZmR

          KryUffbrcOc3+9gErIx0U58yJK52oEdHJcRq4HvINlBc'
        defaultRoleId: 1
        createdAt: '2024-08-08T19:20:09.859Z'
        updatedAt: '2024-08-08T20:27:47.156Z'
    HttpStatusCode.NOT_FOUND:
      enum:
      - 404
      type: number
    ErrorCode.Forbidden:
      enum:
      - 4
      type: number
    ErrorMessage.NotFound:
      enum:
      - Not Found
      type: string
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
x-readme:
  explorer-enabled: true
  proxy-enabled: false
  samples-languages:
  - shell
  - powershell
  - node
  - javascript
  - python
  - c
  - clojure
  - cplusplus
  - csharp
  - http
  - go
  - java
  - json
  - kotlin
  - objectivec
  - ocaml
  - php
  - r
  - ruby
  - shell
  - swift