anthid-com Organization Controls API

Organization-level control configuration

Operations 5

GET /v1/controls/organizations Get current organization control #
PUT /v1/controls/organizations Upsert organization control #
DELETE /v1/controls/organizations Delete organization control #
PATCH /v1/controls/organizations Patch organization control #
GET /v1/controls/organizations/{org_id} Get organization control #

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/anthid-com:anthid-com-organization-controls-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

anthid-com-organization-controls-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Organization Controls API
  description: Organization-level control configuration
  license:
    name: ''
  version: 0.1.0
servers:
- url: https://api.anthid.com
  description: Production
tags:
- name: Organization Controls
  description: Organization-level control configuration
paths:
  /v1/controls/organizations:
    get:
      tags:
      - Organization Controls
      summary: Get current organization control
      description: Returns the caller's organization manual control. Requires Controls Premium. Users need an organization role; API keys need both `paper:control:read` and `live:control:read`.
      operationId: getPrincipalOrganizationControl
      responses:
        '200':
          description: Current organization control found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationControl'
              example:
                created_at: '2026-08-05T16:20:00Z'
                manual_reason: Trading paused during compliance review
                manually_disabled: true
                organization_id: 550e8400-e29b-41d4-a716-446655440222
                updated_at: '2026-08-05T16:25:00Z'
                version: 3
        '401':
          description: Missing or invalid authentication credentials, or missing organization context
          content:
            application/json:
              schema:
                type: string
        '403':
          description: Caller lacks Controls Premium or organization control read access
          content:
            application/json:
              schema:
                type: string
        '404':
          description: Organization control was not found
          content:
            application/json:
              schema:
                type: string
        '429':
          description: Caller exceeded the request rate limit
        '500':
          description: Server error
          content:
            application/json:
              schema:
                type: string
      security:
      - bearerAuth: []
      - apiKeyAuth: []
    put:
      tags:
      - Organization Controls
      summary: Upsert organization control
      description: Creates or replaces the caller's organization manual control. Omitted optional fields are cleared. Requires Controls Premium. Users need an admin role; API keys need both `paper:control:edit` and `live:control:edit`.
      operationId: upsertOrganizationControl
      requestBody:
        description: Manual disable flag and optional operator-facing reason
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpsertControlRequest'
            example:
              manual_reason: Trading paused during compliance review
              manually_disabled: true
        required: true
      responses:
        '200':
          description: Organization control upserted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationControl'
              example:
                created_at: '2026-08-12T16:20:00Z'
                manual_reason: Trading paused during compliance review
                manually_disabled: true
                organization_id: 550e8400-e29b-41d4-a716-446655440222
                updated_at: '2026-08-12T16:20:00Z'
                version: 1
        '400':
          description: Request body is invalid
          content:
            application/json:
              schema:
                type: string
            text/plain:
              schema:
                type: string
        '401':
          description: Missing or invalid authentication credentials, or missing organization context
          content:
            application/json:
              schema:
                type: string
        '403':
          description: Caller lacks Controls Premium or organization control edit access
          content:
            application/json:
              schema:
                type: string
        '413':
          description: Request body exceeds the size limit
          content:
            text/plain:
              schema:
                type: string
        '415':
          description: Content-Type must be application/json
          content:
            text/plain:
              schema:
                type: string
        '422':
          description: JSON does not match the request schema
          content:
            text/plain:
              schema:
                type: string
        '429':
          description: Caller exceeded the request rate limit
        '500':
          description: Server error
          content:
            application/json:
              schema:
                type: string
      security:
      - bearerAuth: []
      - apiKeyAuth: []
    delete:
      tags:
      - Organization Controls
      summary: Delete organization control
      description: Deletes the caller's organization manual control. Requires Controls Premium. Users need an admin role; API keys need both `paper:control:edit` and `live:control:edit`.
      operationId: deleteOrganizationControl
      responses:
        '200':
          description: Organization control deleted, or was already deleted. `deleted_at` is when it was first removed and does not move on a repeat call.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeletedResponse'
              example:
                deleted: true
                deleted_at: '2026-08-12T16:20:00Z'
                resource: organization_control
        '401':
          description: Missing or invalid authentication credentials, or missing organization context
          content:
            application/json:
              schema:
                type: string
        '403':
          description: Caller lacks Controls Premium or organization control edit access
          content:
            application/json:
              schema:
                type: string
        '404':
          description: No control of this kind has ever existed here
          content:
            application/json:
              schema:
                type: string
        '429':
          description: Caller exceeded the request rate limit
        '500':
          description: Server error
          content:
            application/json:
              schema:
                type: string
      security:
      - bearerAuth: []
      - apiKeyAuth: []
    patch:
      tags:
      - Organization Controls
      summary: Patch organization control
      description: Creates or patches the caller's organization manual control. Omitted and null fields are unchanged; `clear` removes named fields. Requires Controls Premium. Users need an admin role; API keys need both `paper:control:edit` and `live:control:edit`.
      operationId: patchOrganizationControl
      requestBody:
        description: Fields to change, and fields to remove
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchControlRequest'
            example:
              clear:
              - manual_reason
              manually_disabled: true
        required: true
      responses:
        '200':
          description: Organization control patched
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationControl'
              example:
                created_at: '2026-08-12T16:20:00Z'
                manual_reason: null
                manually_disabled: true
                organization_id: 550e8400-e29b-41d4-a716-446655440222
                updated_at: '2026-08-13T09:15:00Z'
                version: 2
        '400':
          description: No fields changed, or a field is both set and cleared; malformed JSON or path parameters also fail
          content:
            application/json:
              schema:
                type: string
            text/plain:
              schema:
                type: string
        '401':
          description: Missing or invalid authentication credentials, or missing organization context
          content:
            application/json:
              schema:
                type: string
        '403':
          description: Caller lacks Controls Premium or organization control edit access
          content:
            application/json:
              schema:
                type: string
        '413':
          description: Request body exceeds the size limit
          content:
            text/plain:
              schema:
                type: string
        '415':
          description: Content-Type must be application/json
          content:
            text/plain:
              schema:
                type: string
        '422':
          description: JSON does not match the request schema
          content:
            text/plain:
              schema:
                type: string
        '429':
          description: Caller exceeded the request rate limit
        '500':
          description: Server error
          content:
            application/json:
              schema:
                type: string
      security:
      - bearerAuth: []
      - apiKeyAuth: []
  /v1/controls/organizations/{org_id}:
    get:
      tags:
      - Organization Controls
      summary: Get organization control
      description: Returns the manual control for an organization. This route requires service-account credentials with `control:read`.
      operationId: getOrganizationControl
      parameters:
      - name: org_id
        in: path
        description: Organization ID
        required: true
        schema:
          type: string
          format: uuid
        example: 550e8400-e29b-41d4-a716-446655440222
      responses:
        '200':
          description: Organization control found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationControl'
              example:
                created_at: '2026-08-12T16:20:00Z'
                manual_reason: Trading paused during compliance review
                manually_disabled: true
                organization_id: 550e8400-e29b-41d4-a716-446655440222
                updated_at: '2026-08-12T16:20:00Z'
                version: 1
        '400':
          description: Organization ID is not a UUID
          content:
            text/plain:
              schema:
                type: string
        '401':
          description: Missing or invalid service credentials
        '403':
          description: Caller is not a service account or lacks the `control:read` scope
          content:
            application/json:
              schema:
                type: string
        '404':
          description: Organization control was not found
          content:
            application/json:
              schema:
                type: string
        '429':
          description: Caller exceeded the request rate limit
        '500':
          description: Unexpected server error while reading the control
          content:
            application/json:
              schema:
                type: string
      security:
      - clientCredentials: []
components:
  schemas:
    ManualControlField:
      type: string
      description: 'Fields of a manual control a PATCH may remove.


        An enum rather than free text so a misspelled name is rejected instead of

        silently doing nothing. A caller that believes it re-enabled an account and

        did not is the failure this exists to prevent.'
      enum:
      - manually_disabled
      - manual_reason
    OrganizationControl:
      type: object
      required:
      - organization_id
      - version
      - manually_disabled
      - created_at
      - updated_at
      properties:
        created_at:
          type: string
          format: date-time
        manual_reason:
          type:
          - string
          - 'null'
        manually_disabled:
          type: boolean
        organization_id:
          type: string
          format: uuid
        updated_at:
          type: string
          format: date-time
        version:
          type: integer
          format: int64
    UpsertControlRequest:
      type: object
      required:
      - manually_disabled
      properties:
        manual_reason:
          type:
          - string
          - 'null'
        manually_disabled:
          type: boolean
    DeletedResourceKind:
      type: string
      description: 'The resource a delete acted on.


        Named rather than free text so a caller can branch on it, and so the same

        vocabulary is available when these deletes start emitting events.'
      enum:
      - trading_account
      - test_trading_account
      - broker_credential
      - oauth_client
      - organization
      - user
      - organization_control
      - account_control
      - account_risk_control
      - account_time_control
      - symbol_control
      - symbol_risk_control
      - symbol_time_control
    PatchControlRequest:
      type: object
      properties:
        clear:
          type: array
          items:
            $ref: '#/components/schemas/ManualControlField'
          description: 'Fields to remove. Clearing `manually_disabled` restores its default of

            false, since the column cannot be null.'
        manual_reason:
          type:
          - string
          - 'null'
        manually_disabled:
          type:
          - boolean
          - 'null'
    DeletedResponse:
      type: object
      description: 'The body every successful delete returns.


        Deletes are idempotent, so a caller that retries one it is unsure landed

        gets the same 200 as the caller that deleted it. That leaves the caller

        unable to tell the two apart from the status alone, which is what

        `deleted_at` is for: it is the moment the resource was *first* deleted and

        does not move on a repeat call.'
      required:
      - deleted
      - resource
      - deleted_at
      properties:
        deleted:
          type: boolean
          description: 'Always true. A caller checking one field to confirm the outcome does not

            have to special-case which endpoint it called.'
        deleted_at:
          type: string
          format: date-time
          description: When the resource was first deleted, not when this call was made.
        id:
          type:
          - string
          - 'null'
          description: 'Absent for resources keyed by a natural composite key rather than a

            single identifier, which today is every control in the controls service.

            The path already identifies those, so nothing is lost by omitting it.'
        resource:
          $ref: '#/components/schemas/DeletedResourceKind'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    clientCredentials:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Machine bearer token minted via the client_credentials grant.
x-tagGroups:
- name: Organization
  tags:
  - Organization Controls
- name: Account
  tags:
  - Account Manual Controls
  - Account Risk Controls
  - Account Time Controls
- name: Symbols
  tags:
  - Symbol Manual Controls
  - Symbol Risk Controls
  - Symbol Time Controls
  - Effective Controls
- name: Evaluation
  tags:
  - Control Evaluation