Oneprofile AI Apps API

AI apps connected to the workspace: Claude, ChatGPT, Claude Code or any other MCP client a person signed in to Oneprofile's MCP server with.

GitHub OpenAPI

Operations 5

GET /ai-apps/ List connected AI apps #
GET /ai-apps/requests/{request_id}/ Read an AI app's request to connect #
POST /ai-apps/requests/{request_id}/approve/ Connect an AI app #
POST /ai-apps/requests/{request_id}/reject/ Turn down an AI app #
DELETE /ai-apps/{ai_app_id}/ Disconnect an AI app #

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/getoneprofile-ai:getoneprofile-ai-ai-apps-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

getoneprofile-ai-ai-apps-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: support@getoneprofile.ai
    name: Oneprofile Support
  description: REST API reference for Oneprofile, the GTM data layer for your CRM. Manage tables, enrichments, and integrations. Authenticate with an API key to get started.
  termsOfService: https://www.getoneprofile.ai/terms
  title: Reference | Oneprofile AI Apps API
  version: 1.0.42765316646
tags:
- description: 'AI apps connected to the workspace: Claude, ChatGPT, Claude Code or any other MCP client a person signed in to Oneprofile''s MCP server with.'
  name: ai_apps
paths:
  /ai-apps/:
    get:
      description: 'The AI apps (Claude, ChatGPT, Claude Code and others) people have connected to this workspace through Oneprofile''s MCP server: which app, who connected it, whether it may make changes, and when it was last used.'
      operationId: list_ai_apps
      parameters:
      - description: The number of items to return.
        in: query
        name: limit
        required: false
        schema:
          default: 10
          description: The number of items to return.
          maximum: 100
          minimum: 1
          title: Limit
          type: integer
      - in: query
        name: order_by
        required: false
        schema:
          $ref: '#/components/schemas/OrderingParametersForIdCreatedAt'
          default: created_at
          enum:
          - id
          - created_at
          type: string
      - in: query
        name: order_direction
        required: false
        schema:
          default: desc
          enum:
          - asc
          - desc
          title: Order Direction
          type: string
      - description: Set the cursor to the next or previous page. You can get the cursor from the previous page's response.
        in: query
        name: cursor
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Set the cursor to the next or previous page. You can get the cursor from the previous page's response.
          title: Cursor for pagination.
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResponse_AiAppReadSchema_'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Invalid request made to the API.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Service unavailable.
      security:
      - APIKeyHeader: []
      - HTTPBearer: []
      summary: List connected AI apps
      tags:
      - ai_apps
  /ai-apps/requests/{request_id}/:
    get:
      description: 'What the consent page shows: the app asking to connect, where the person returns afterwards, and the workspaces they may connect it to. Only the signed-in person may read it.'
      operationId: get_ai_app_request
      parameters:
      - in: path
        name: request_id
        required: true
        schema:
          maxLength: 64
          minLength: 1
          title: Request Id
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiAppRequestReadSchema'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Asked through an AI, not a person.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: The request expired or was answered.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Invalid request made to the API.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Workspaces could not be read.
      security:
      - APIKeyHeader: []
      - HTTPBearer: []
      summary: Read an AI app's request to connect
      tags:
      - ai_apps
  /ai-apps/requests/{request_id}/approve/:
    post:
      description: 'The person''s yes on the consent page: connects the app to the workspace they picked, with the access they chose, and answers where to send them back to the app. Connecting the same app to the same workspace again replaces the earlier connection. With dry_run, every check runs and the request keeps waiting; the address carries a placeholder where the code would be.'
      operationId: approve_ai_app_request
      parameters:
      - in: path
        name: request_id
        required: true
        schema:
          maxLength: 64
          minLength: 1
          title: Request Id
          type: string
      - description: Run every check and answer as the real call would, changing nothing.
        in: query
        name: dry_run
        required: false
        schema:
          default: false
          description: Run every check and answer as the real call would, changing nothing.
          title: Dry Run
          type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiAppApproveSchema'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiAppAnswerSchema'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Asked through an AI, not a person.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: The request expired or was answered.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Invalid request made to the API.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Workspaces could not be read.
      security:
      - APIKeyHeader: []
      - HTTPBearer: []
      summary: Connect an AI app
      tags:
      - ai_apps
  /ai-apps/requests/{request_id}/reject/:
    post:
      description: 'The person''s no on the consent page: nothing is connected, and the answer says where to send them back to the app. With dry_run, the request keeps waiting.'
      operationId: reject_ai_app_request
      parameters:
      - in: path
        name: request_id
        required: true
        schema:
          maxLength: 64
          minLength: 1
          title: Request Id
          type: string
      - description: Run every check and answer as the real call would, changing nothing.
        in: query
        name: dry_run
        required: false
        schema:
          default: false
          description: Run every check and answer as the real call would, changing nothing.
          title: Dry Run
          type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiAppAnswerSchema'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Asked through an AI, not a person.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: The request expired or was answered.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Invalid request made to the API.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Service unavailable.
      security:
      - APIKeyHeader: []
      - HTTPBearer: []
      summary: Turn down an AI app
      tags:
      - ai_apps
  /ai-apps/{ai_app_id}/:
    delete:
      description: 'Disconnect an AI app from this workspace: its sign-in stops working at once, and the app has to be connected again to use Oneprofile. You can disconnect your own apps; a workspace admin can disconnect anybody''s.'
      operationId: disconnect_ai_app
      parameters:
      - in: path
        name: ai_app_id
        required: true
        schema:
          format: uuid
          title: Ai App Id
          type: string
      - description: Report what would be disconnected, and disconnect nothing.
        in: query
        name: dry_run
        required: false
        schema:
          default: false
          description: Report what would be disconnected, and disconnect nothing.
          title: Dry Run
          type: boolean
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessfullyDeletedResponse'
          description: Successful Response
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Somebody else's app, and not an admin.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: No such connected app.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Invalid request made to the API.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Internal server error.
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Bad gateway error.
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerErrorResponse'
          description: Service unavailable.
      security:
      - APIKeyHeader: []
      - HTTPBearer: []
      summary: Disconnect an AI app
      tags:
      - ai_apps
components:
  schemas:
    ForbiddenResponse:
      properties:
        detail:
          description: The detail of why the request is forbidden.
          title: Detail
          type: string
      required:
      - detail
      title: ForbiddenResponse
      type: object
    PaginatedResponse_AiAppReadSchema_:
      properties:
        data:
          description: The list of ResponseItems.
          items:
            $ref: '#/components/schemas/AiAppReadSchema'
          title: Data
          type: array
        next_page_cursor:
          anyOf:
          - type: string
          - type: 'null'
          description: The cursor to the next page. If there are no more pages, this is None.
        previous_page_cursor:
          anyOf:
          - type: string
          - type: 'null'
          description: The cursor to the previous page. If there are no previous pages, this is None.
      title: PaginatedResponse[AiAppReadSchema]
      type: object
    UnprocessableEntityIssue:
      properties:
        input:
          anyOf:
          - type: string
          - type: integer
          - type: number
          - type: boolean
          - items: {}
            type: array
          - additionalProperties: true
            type: object
          description: The user's input that caused the error.
          title: Input
        loc:
          description: The location of the error. Always contains 1 or 2 elements. The first element is the type of location (e.g. 'body', 'query', 'path', 'header'). The second element is the name of the field that caused the error. If the error is not related to a specific field, the second element is not present.
          items:
            type: string
          title: Loc
          type: array
        msg:
          description: The message of the error. The error message to show to the user.
          title: Msg
          type: string
        type:
          description: The type of the error. Useful for frontend code to handle different types of errors.
          title: Type
          type: string
      required:
      - loc
      - msg
      - type
      - input
      title: UnprocessableEntityIssue
      type: object
    AiAppWorkspaceChoiceSchema:
      description: A workspace the person may connect the app to.
      properties:
        can_write:
          description: Whether an AI app may make changes in this workspace (a paid plan).
          title: Can Write
          type: boolean
        name:
          title: Name
          type: string
        workspace_id:
          title: Workspace Id
          type: string
      required:
      - workspace_id
      - name
      - can_write
      title: AiAppWorkspaceChoiceSchema
      type: object
    AiAppAccess:
      description: 'What a person let one AI app do in their workspace when they connected it.


        Chosen on the consent page. A workspace that is not on a paid plan reads

        as READ whatever was chosen, because making changes from an AI app is a

        paid entitlement; that is checked on every call, not stored here.'
      enum:
      - read
      - write
      title: AiAppAccess
      type: string
    AiAppBrand:
      description: Whose mark the dashboard shows beside a connected app.
      enum:
      - claude
      - chatgpt
      - other
      title: AiAppBrand
      type: string
    ServerErrorResponse:
      properties:
        detail:
          description: The detail of why the server returned an error.
          title: Detail
          type: string
      required:
      - detail
      title: ServerErrorResponse
      type: object
    AiAppAnswerSchema:
      description: Where to send the person once they have answered.
      properties:
        redirect_url:
          title: Redirect Url
          type: string
      required:
      - redirect_url
      title: AiAppAnswerSchema
      type: object
    AiAppRequestReadSchema:
      description: An AI app asking to connect, as the consent page shows it.
      properties:
        app_name:
          description: What to call the app.
          title: App Name
          type: string
        brand:
          $ref: '#/components/schemas/AiAppBrand'
          description: Whose mark to show beside the name.
        is_local:
          description: Whether the app runs on this computer.
          title: Is Local
          type: boolean
        recognised:
          description: Whether the app is recognised by a host its maker controls; an unrecognised app is shown as unverified.
          title: Recognised
          type: boolean
        redirect_host:
          description: Where the person returns after answering.
          title: Redirect Host
          type: string
        workspaces:
          items:
            $ref: '#/components/schemas/AiAppWorkspaceChoiceSchema'
          title: Workspaces
          type: array
      required:
      - app_name
      - brand
      - recognised
      - is_local
      - redirect_host
      - workspaces
      title: AiAppRequestReadSchema
      type: object
    AiAppReadSchema:
      description: An AI app connected to the workspace.
      properties:
        access:
          $ref: '#/components/schemas/AiAppAccess'
        app_name:
          title: App Name
          type: string
        brand:
          $ref: '#/components/schemas/AiAppBrand'
        created_at:
          format: date-time
          title: Created At
          type: string
        id:
          format: uuid
          title: Id
          type: string
        last_used_at:
          anyOf:
          - format: date-time
            type: string
          - type: 'null'
          title: Last Used At
        person_email:
          title: Person Email
          type: string
        person_name:
          description: Their full name, or their email when they have none.
          title: Person Name
          type: string
        redirect_host:
          title: Redirect Host
          type: string
        user_id:
          description: The person who connected it.
          title: User Id
          type: string
      required:
      - id
      - app_name
      - brand
      - redirect_host
      - access
      - user_id
      - person_name
      - person_email
      - last_used_at
      - created_at
      title: AiAppReadSchema
      type: object
    AiAppApproveSchema:
      description: 'The person''s yes: which workspace, and what the app may do there.'
      properties:
        access:
          $ref: '#/components/schemas/AiAppAccess'
        workspace_id:
          maxLength: 255
          minLength: 1
          title: Workspace Id
          type: string
      required:
      - workspace_id
      - access
      title: AiAppApproveSchema
      type: object
    OrderingParametersForIdCreatedAt:
      enum:
      - id
      - created_at
      title: OrderingParametersForIdCreatedAt
      type: string
    UnprocessableEntityResponse:
      properties:
        detail:
          description: The detail of the error. This is the error message to show to the user. You should also use the issues field to show more detailed error messages per field. Use this field for a single liner error message.
          title: Detail
          type: string
        issues:
          description: The issues that caused the error. There can be multiple issues. Each issue is a user-facing error message.
          items:
            $ref: '#/components/schemas/UnprocessableEntityIssue'
          title: Issues
          type: array
      required:
      - detail
      - issues
      title: UnprocessableEntityResponse
      type: object
    UnauthorizedResponse:
      properties:
        detail:
          description: The detail of why the request is unauthorized.
          title: Detail
          type: string
      required:
      - detail
      title: UnauthorizedResponse
      type: object
    NotFoundResponse:
      properties:
        detail:
          description: The detail of why the resource was not found.
          title: Detail
          type: string
      required:
      - detail
      title: NotFoundResponse
      type: object
    SuccessfullyDeletedResponse:
      properties:
        count:
          default: 1
          description: The number of resources that were deleted.
          title: Count
          type: integer
        detail:
          description: The detail of why the resource was deleted.
          title: Detail
          type: string
      required:
      - detail
      title: SuccessfullyDeletedResponse
      type: object
  securitySchemes:
    APIKeyHeader:
      in: header
      name: X-API-Key
      type: apiKey
    HTTPBearer:
      scheme: bearer
      type: http