Genius Decision App Cases API

The Cases API from Genius Decision App — 3 operation(s) for cases.

GitHub OpenAPI

Operations 6

GET /api/cases List cases owned by the account #
POST /api/cases Persist a case; does not execute or prove admission #
GET /api/cases/{case_id} Read case history, jobs and feedback #
PATCH /api/cases/{case_id} Update title or store revised input #
DELETE /api/cases/{case_id} Delete an owned case #
POST /api/cases/{case_id}/run Queue an owned case revision or recover its existing job #

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/geniusdecision-app:geniusdecision-app-cases-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

geniusdecision-app-cases-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Genius Decision — agent integration Cases API
  version: 0.2.0
  description: 'Genius bounded beta: HTTP agent integration subset. Public discovery; no-human-registration synthetic demo; automatic machine registration for synthetic/non-personal data; separate existing human-account keys. Machine Bearer keys are scoped, revocable and expire after 7 days (demo: 1 hour). Rotation only retains/reduces scopes. Human keys retain full account permissions. No MCP or OAuth. HTTP acceptance is distinct from formal admission and empirical evidence. Body limit 128 KiB; input limit 110000 JSON bytes. Declared choice profile: /static/decisions.html; explicit review and confirmation required. No general narrative solver or real-world CAG/PVS claim.'
servers:
- url: /
security:
- AccountBearer: []
tags:
- name: Cases
paths:
  /api/cases:
    get:
      operationId: listGeniusCases
      summary: List cases owned by the account
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  cases:
                    type: array
                    items:
                      $ref: '#/components/schemas/Case'
                required:
                - cases
        default:
          description: HTTP failure, not a motor result. 400 invalid input, 401 unauthorized, 403 origin/CSRF, 404 unavailable, 409 conflict/retry required, 413 size limit, 415 content type, 429 quota, 503 suspended/backup/storage unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-required-agent-scope: cases:read
      tags:
      - Cases
    post:
      operationId: createGeniusCase
      summary: Persist a case; does not execute or prove admission
      description: Not idempotent. After a lost response, inspect the case list before retrying. Input must be no more than 110000 bytes; full body at most 128 KiB.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCase'
      responses:
        '201':
          description: Case persisted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CaseEnvelope'
        default:
          description: HTTP failure, not a motor result. 400 invalid input, 401 unauthorized, 403 origin/CSRF, 404 unavailable, 409 conflict/retry required, 413 size limit, 415 content type, 429 quota, 503 suspended/backup/storage unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-required-agent-scope: cases:write
      tags:
      - Cases
  /api/cases/{case_id}:
    parameters:
    - name: case_id
      in: path
      required: true
      schema:
        type: string
        pattern: ^[a-f0-9]{32}$
    get:
      operationId: readGeniusCase
      summary: Read case history, jobs and feedback
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CaseDetails'
        default:
          description: HTTP failure, not a motor result. 400 invalid input, 401 unauthorized, 403 origin/CSRF, 404 unavailable, 409 conflict/retry required, 413 size limit, 415 content type, 429 quota, 503 suspended/backup/storage unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-required-agent-scope: cases:read
      tags:
      - Cases
    patch:
      operationId: reviseGeniusCase
      summary: Update title or store revised input
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CaseEnvelope'
        default:
          description: HTTP failure, not a motor result. 400 invalid input, 401 unauthorized, 403 origin/CSRF, 404 unavailable, 409 conflict/retry required, 413 size limit, 415 content type, 429 quota, 503 suspended/backup/storage unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 120
                input:
                  oneOf:
                  - $ref: '#/components/schemas/HoursInput'
                  - $ref: '#/components/schemas/FdqInput'
              minProperties: 1
              additionalProperties: false
      description: Input must match the existing case profile. Send a complete replacement input. A changed input creates a revision but does not execute it.
      x-required-agent-scope: cases:write
      tags:
      - Cases
    delete:
      operationId: deleteGeniusCase
      summary: Delete an owned case
      description: Destructive. Automatic machine keys require the optional cases:delete scope.
      x-required-agent-scope: cases:delete
      responses:
        '204':
          description: Deleted.
        default:
          description: HTTP failure, not a motor result. 400 invalid policy/scopes/input; 401 missing/revoked/expired credential; 403 missing permission; 409 changed policy; 429 shared quota; 503 paused/backup/registration unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Cases
  /api/cases/{case_id}/run:
    parameters:
    - name: case_id
      in: path
      required: true
      schema:
        type: string
        pattern: ^[a-f0-9]{32}$
    post:
      operationId: runGeniusCase
      summary: Queue an owned case revision or recover its existing job
      description: Omitted revision uses current_revision. Queued/running/completed jobs of the same revision are reused. A failed/cancelled/interrupted attempt requires explicit retry:true. An active job on another revision can conflict.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                revision:
                  type: integer
                  minimum: 1
                retry:
                  type: boolean
                  default: false
      responses:
        '200':
          description: Existing completed job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobEnvelope'
        '202':
          description: Queued or running.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobEnvelope'
        default:
          description: HTTP failure, not a motor result. 400 invalid input, 401 unauthorized, 403 origin/CSRF, 404 unavailable, 409 conflict/retry required, 413 size limit, 415 content type, 429 quota, 503 suspended/backup/storage unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-required-agent-scope: jobs:run
      tags:
      - Cases
components:
  schemas:
    CaseDetails:
      type: object
      properties:
        case:
          $ref: '#/components/schemas/Case'
        revisions:
          type: array
          items:
            type: object
            properties:
              version:
                type: integer
              input:
                type: object
              input_json:
                type: string
              input_sha256:
                type: string
              created_at:
                type: integer
            required:
            - version
            - input
            - input_json
            - input_sha256
            - created_at
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/Job'
        feedback:
          type: array
          items:
            type: object
      required:
      - case
      - revisions
      - jobs
      - feedback
    CaseEnvelope:
      type: object
      properties:
        case:
          $ref: '#/components/schemas/Case'
      required:
      - case
    FdqInput:
      type: object
      properties:
        permission_confirmed:
          const: true
          description: Explicit authority to process the submitted data; not an assertion of human consent on someone's behalf.
        scope_acknowledged:
          const: true
          description: Explicit acknowledgment of the bounded, low-risk profile.
        evidence_origin:
          type: string
          enum:
          - synthetic
          - user_declared
          description: A declaration, not verified field evidence.
        query_kind:
          enum:
          - frontier
          - selector
        input_json:
          type: string
          minLength: 2
          maxLength: 110000
        result_json:
          type: string
          minLength: 2
          maxLength: 110000
        certificate_json:
          type: string
          minLength: 2
          maxLength: 110000
      required:
      - permission_confirmed
      - scope_acknowledged
      - query_kind
      - input_json
      - result_json
      - certificate_json
    CreateCase:
      oneOf:
      - type: object
        properties:
          title:
            type: string
            minLength: 1
            maxLength: 120
          consumer_type:
            enum:
            - human
            - application
            - agent
            description: Caller declaration only. Use agent or application for an integration.
          profile:
            const: hours
          input:
            $ref: '#/components/schemas/HoursInput'
        required:
        - title
        - profile
        - input
      - type: object
        properties:
          title:
            type: string
            minLength: 1
            maxLength: 120
          consumer_type:
            enum:
            - human
            - application
            - agent
            description: Caller declaration only. Use agent or application for an integration.
          profile:
            const: fdq
          input:
            $ref: '#/components/schemas/FdqInput'
        required:
        - title
        - profile
        - input
      - type: object
        properties:
          title:
            type: string
            minLength: 1
            maxLength: 120
          consumer_type:
            enum:
            - human
            - application
            - agent
            description: Caller declaration only. Use agent or application for an integration.
          profile:
            const: choice
          input:
            $ref: '#/components/schemas/ChoiceInput'
        required:
        - title
        - profile
        - input
      description: Automatically registered agents always use consumer_type agent (defaulted by the server); human or application is rejected for these principals. Their data policy is synthetic/non-personal only.
    Job:
      type: object
      properties:
        id:
          type: string
        case_id:
          type: string
        revision:
          type: integer
        status:
          enum:
          - queued
          - running
          - completed
          - failed
          - cancelled
          - interrupted
        error:
          type:
          - string
          - 'null'
        created_at:
          type: integer
        started_at:
          type:
          - integer
          - 'null'
        finished_at:
          type:
          - integer
          - 'null'
        result:
          type:
          - object
          - 'null'
          description: Preserve the complete response envelope. See full documentation for RC01 semantics.
        result_json:
          type:
          - string
          - 'null'
          description: Original result JSON text; preserve exactly to avoid numeric rounding.
        admission:
          type:
          - object
          - 'null'
        artifacts:
          type:
          - object
          - 'null'
          properties:
            url:
              type: string
            sha256:
              type: string
            size:
              type: integer
      required:
      - id
      - case_id
      - revision
      - status
      - result
      - result_json
    HoursInput:
      type: object
      properties:
        permission_confirmed:
          const: true
          description: Explicit authority to process the submitted data; not an assertion of human consent on someone's behalf.
        scope_acknowledged:
          const: true
          description: Explicit acknowledgment of the bounded, low-risk profile.
        evidence_origin:
          type: string
          enum:
          - synthetic
          - user_declared
          description: A declaration, not verified field evidence.
        assignments:
          type: array
          minItems: 1
          maxItems: 100
          items:
            type: object
            properties:
              id:
                type: string
                pattern: ^[A-Za-z0-9_-]+$
                maxLength: 64
                minLength: 1
              credit:
                type:
                - string
                - 'null'
                minLength: 1
                maxLength: 64
                description: Exact nonnegative integer, decimal or fraction; no exponent. null means unknown.
            required:
            - id
        target:
          type:
          - string
          - 'null'
          minLength: 1
          maxLength: 64
          description: Exact nonnegative numeric string, or null for unknown.
      required:
      - assignments
      - permission_confirmed
      - scope_acknowledged
    Case:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        profile:
          enum:
          - hours
          - fdq
          - choice
        consumer_type:
          type: string
        current_revision:
          type: integer
        created_at:
          type: integer
        updated_at:
          type: integer
      required:
      - id
      - title
      - profile
      - consumer_type
      - current_revision
      - created_at
      - updated_at
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
          required:
          - code
          - message
      required:
      - error
    ChoiceInput:
      type: object
      properties:
        context:
          type: object
          properties:
            question:
              type: string
              minLength: 1
              maxLength: 600
            category:
              enum:
              - leisure
              - personal_organization
            horizon:
              type: string
              minLength: 1
              maxLength: 100
          required:
          - question
          - category
          - horizon
          additionalProperties: false
        criteria:
          type: array
          minItems: 1
          maxItems: 5
          items:
            type: object
            properties:
              id:
                type: string
                pattern: ^[A-Za-z][A-Za-z0-9_]{0,31}$
              label:
                type: string
                minLength: 1
                maxLength: 60
              unit:
                type: string
                minLength: 1
                maxLength: 30
              direction:
                enum:
                - min
                - max
              limit:
                type:
                - string
                - 'null'
                pattern: ^(?:0|[1-9][0-9]*)(?:\.[0-9]+|/[1-9][0-9]*)?$
                maxLength: 32
                description: Nonnegative exact quantity <= 1000000, denominator <= 1000000; null stays unknown.
            required:
            - id
            - label
            - unit
            - direction
            - limit
            additionalProperties: false
        alternatives:
          type: array
          minItems: 2
          maxItems: 8
          items:
            type: object
            properties:
              id:
                type: string
                pattern: ^[A-Za-z][A-Za-z0-9_]{0,31}$
              label:
                type: string
                minLength: 1
                maxLength: 80
              source:
                type: string
                minLength: 1
                maxLength: 200
              values:
                type: object
                additionalProperties:
                  type:
                  - string
                  - 'null'
                  pattern: ^(?:0|[1-9][0-9]*)(?:\.[0-9]+|/[1-9][0-9]*)?$
                  maxLength: 32
                  description: Nonnegative exact quantity <= 1000000, denominator <= 1000000; null stays unknown.
                description: Exactly one entry per declared criterion ID; same unit for every alternative.
            required:
            - id
            - label
            - source
            - values
            additionalProperties: false
        selection:
          type: object
          properties:
            mode:
              enum:
              - unique
              - lexicographic
            criteria_order:
              type: array
              items:
                type: string
                pattern: ^[A-Za-z][A-Za-z0-9_]{0,31}$
              maxItems: 5
              uniqueItems: true
              description: Empty for unique; permutation of all criteria for lexicographic.
          required:
          - mode
          - criteria_order
          additionalProperties: false
        model_confirmation:
          type: string
          pattern: ^[a-f0-9]{64}$
          description: Digest from review, bound to all model fields, confirmed by the decision owner.
        permission_confirmed:
          const: true
        scope_acknowledged:
          const: true
        evidence_origin:
          enum:
          - synthetic
          - user_declared
      required:
      - context
      - criteria
      - alternatives
      - selection
      - model_confirmation
      - permission_confirmed
      - scope_acknowledged
      - evidence_origin
      additionalProperties: false
    JobEnvelope:
      type: object
      properties:
        job:
          $ref: '#/components/schemas/Job'
      required:
      - job
  securitySchemes:
    AccountBearer:
      type: http
      scheme: bearer
      description: HTTPS Authorization Bearer only. ga_ machine credentials carry enforced scopes and expiry for their own isolated space. gb_ human-account API keys retain full-account access. Neither is a JWT. No key in a query string.
externalDocs:
  description: Full API contract and limitations
  url: https://geniusdecision.app/static/api.html
x-genius-mcp-available: true
x-genius-credential-scope:
  human: full-account
  automatic_agent: enforced-scopes-and-expiry
x-genius-client-safety:
  human_consent_never_inferred: true
  automatic_agent_data_policy: synthetic_or_non_personal_only
  synthetic_examples_are_not_empirical_evidence: true
  no_automatic_write_retries: true
x-genius-mcp:
  url: /mcp
  transport: streamable-http
  protocol_versions:
  - '2026-07-28'
  - '2025-11-25'
  - '2025-06-18'
  - '2025-03-26'
  public_tools:
  - get_capabilities
  - read_demo_result
  - run_demo
  private_authentication: scoped-machine-bearer-header
  oauth: false
x-genius-saved-demo:
  json: /static/demo-result.json
  html: /static/demo.html
  live_execution_on_get: false
  evidence_origin: synthetic