Miro · Capability

Miro Developer Platform — Legal holds

Miro Developer Platform — Legal holds. 12 operations. Lead operation: Get all cases. Self-contained Naftiko capability covering one Miro business surface.

Run with Naftiko MiroLegal holds

What You Can Do

GET
Getallcases — Get all cases
/v1/v2/orgs/{org-id}/cases
POST
Createcase — Create case
/v1/v2/orgs/{org-id}/cases
DELETE
Deletecase — Close case
/v1/v2/orgs/{org-id}/cases/{case-id}
GET
Getcase — Get case
/v1/v2/orgs/{org-id}/cases/{case-id}
PUT
Editcase — Edit case
/v1/v2/orgs/{org-id}/cases/{case-id}
GET
Getlegalholdexportjobs — Get board export jobs of a case
/v1/v2/orgs/{org-id}/cases/{case-id}/export-jobs
GET
Getalllegalholds — Get all legal holds within a case
/v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds
POST
Createlegalhold — Create legal hold
/v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds
DELETE
Deletelegalhold — Close legal hold
/v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds/{legal-hold-id}
GET
Getlegalhold — Get legal hold information
/v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds/{legal-hold-id}
PUT
Editlegalhold — Edit legal hold
/v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds/{legal-hold-id}
GET
Getlegalholdcontentitems — Get content items under legal hold
/v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds/{legal-hold-id}/content-items

MCP Tools

get-all-cases

Get all cases

read-only idempotent
create-case

Create case

close-case

Close case

idempotent
get-case

Get case

read-only idempotent
edit-case

Edit case

idempotent
get-board-export-jobs-case

Get board export jobs of a case

read-only idempotent
get-all-legal-holds-within

Get all legal holds within a case

read-only idempotent
create-legal-hold

Create legal hold

close-legal-hold

Close legal hold

idempotent
get-legal-hold-information

Get legal hold information

read-only idempotent
edit-legal-hold

Edit legal hold

idempotent
get-content-items-under-legal

Get content items under legal hold

read-only idempotent

Capability Spec

miro-legal-holds.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Miro Developer Platform — Legal holds
  description: 'Miro Developer Platform — Legal holds. 12 operations. Lead operation: Get all cases. Self-contained Naftiko
    capability covering one Miro business surface.'
  tags:
  - Miro
  - Legal holds
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    MIRO_API_KEY: MIRO_API_KEY
capability:
  consumes:
  - type: http
    namespace: miro-legal-holds
    baseUri: https://api.miro.com
    description: Miro Developer Platform — Legal holds business capability. Self-contained, no shared references.
    resources:
    - name: v2-orgs-org_id-cases
      path: /v2/orgs/{org_id}/cases
      operations:
      - name: getallcases
        method: GET
        description: Get all cases
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to retrieve the list of cases.
          required: true
      - name: createcase
        method: POST
        description: Create case
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization in which you want to create a new case.
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: v2-orgs-org_id-cases-case_id
      path: /v2/orgs/{org_id}/cases/{case_id}
      operations:
      - name: deletecase
        method: DELETE
        description: Close case
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization in which you want to close a case.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case you want to close.
          required: true
      - name: getcase
        method: GET
        description: Get case
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to retrieve the case information.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case you want to retrieve.
          required: true
      - name: editcase
        method: PUT
        description: Edit case
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to edit the case information.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case you want to edit.
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: v2-orgs-org_id-cases-case_id-export-jobs
      path: /v2/orgs/{org_id}/cases/{case_id}/export-jobs
      operations:
      - name: getlegalholdexportjobs
        method: GET
        description: Get board export jobs of a case
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to retrieve the list of export jobs within a case.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case for which you want to retrieve the list of export jobs.
          required: true
    - name: v2-orgs-org_id-cases-case_id-legal-holds
      path: /v2/orgs/{org_id}/cases/{case_id}/legal-holds
      operations:
      - name: getalllegalholds
        method: GET
        description: Get all legal holds within a case
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to retrieve the list of legal holds within a case.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case for which you want to retrieve the list of legal holds.
          required: true
      - name: createlegalhold
        method: POST
        description: Create legal hold
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization in which you want to create a new legal hold.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case in which you want to create a new legal hold.
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: v2-orgs-org_id-cases-case_id-legal-holds-legal_hold_id
      path: /v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}
      operations:
      - name: deletelegalhold
        method: DELETE
        description: Close legal hold
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization in which you want to close a legal hold.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case in which you want to close a legal hold.
          required: true
        - name: legal_hold_id
          in: path
          type: string
          description: The ID of the legal hold you want to close.
          required: true
      - name: getlegalhold
        method: GET
        description: Get legal hold information
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to retrieve the legal hold information.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case for which you want to retrieve the legal hold information.
          required: true
        - name: legal_hold_id
          in: path
          type: string
          description: The ID of the legal hold you want to retrieve.
          required: true
      - name: editlegalhold
        method: PUT
        description: Edit legal hold
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to edit the legal hold information.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case for which you want to edit the legal hold information.
          required: true
        - name: legal_hold_id
          in: path
          type: string
          description: The ID of the legal hold you want to edit.
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: v2-orgs-org_id-cases-case_id-legal-holds-legal_hold_id-content-items
      path: /v2/orgs/{org_id}/cases/{case_id}/legal-holds/{legal_hold_id}/content-items
      operations:
      - name: getlegalholdcontentitems
        method: GET
        description: Get content items under legal hold
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: org_id
          in: path
          type: string
          description: The ID of the organization for which you want to retrieve the list of content items under hold.
          required: true
        - name: case_id
          in: path
          type: string
          description: The ID of the case for which you want to retrieve the list of content items under hold.
          required: true
        - name: legal_hold_id
          in: path
          type: string
          description: The ID of the legal hold for which you want to retrieve the list of content items under hold.
          required: true
    authentication:
      type: bearer
      token: '{{env.MIRO_API_KEY}}'
  exposes:
  - type: rest
    namespace: miro-legal-holds-rest
    port: 8080
    description: REST adapter for Miro Developer Platform — Legal holds. One Spectral-compliant resource per consumed operation,
      prefixed with /v1.
    resources:
    - path: /v1/v2/orgs/{org-id}/cases
      name: v2-orgs-org-id-cases
      description: REST surface for v2-orgs-org_id-cases.
      operations:
      - method: GET
        name: getallcases
        description: Get all cases
        call: miro-legal-holds.getallcases
        with:
          org_id: rest.org_id
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: createcase
        description: Create case
        call: miro-legal-holds.createcase
        with:
          org_id: rest.org_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/v2/orgs/{org-id}/cases/{case-id}
      name: v2-orgs-org-id-cases-case-id
      description: REST surface for v2-orgs-org_id-cases-case_id.
      operations:
      - method: DELETE
        name: deletecase
        description: Close case
        call: miro-legal-holds.deletecase
        with:
          org_id: rest.org_id
          case_id: rest.case_id
        outputParameters:
        - type: object
          mapping: $.
      - method: GET
        name: getcase
        description: Get case
        call: miro-legal-holds.getcase
        with:
          org_id: rest.org_id
          case_id: rest.case_id
        outputParameters:
        - type: object
          mapping: $.
      - method: PUT
        name: editcase
        description: Edit case
        call: miro-legal-holds.editcase
        with:
          org_id: rest.org_id
          case_id: rest.case_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/v2/orgs/{org-id}/cases/{case-id}/export-jobs
      name: v2-orgs-org-id-cases-case-id-export-jobs
      description: REST surface for v2-orgs-org_id-cases-case_id-export-jobs.
      operations:
      - method: GET
        name: getlegalholdexportjobs
        description: Get board export jobs of a case
        call: miro-legal-holds.getlegalholdexportjobs
        with:
          org_id: rest.org_id
          case_id: rest.case_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds
      name: v2-orgs-org-id-cases-case-id-legal-holds
      description: REST surface for v2-orgs-org_id-cases-case_id-legal-holds.
      operations:
      - method: GET
        name: getalllegalholds
        description: Get all legal holds within a case
        call: miro-legal-holds.getalllegalholds
        with:
          org_id: rest.org_id
          case_id: rest.case_id
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: createlegalhold
        description: Create legal hold
        call: miro-legal-holds.createlegalhold
        with:
          org_id: rest.org_id
          case_id: rest.case_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds/{legal-hold-id}
      name: v2-orgs-org-id-cases-case-id-legal-holds-legal-hold-id
      description: REST surface for v2-orgs-org_id-cases-case_id-legal-holds-legal_hold_id.
      operations:
      - method: DELETE
        name: deletelegalhold
        description: Close legal hold
        call: miro-legal-holds.deletelegalhold
        with:
          org_id: rest.org_id
          case_id: rest.case_id
          legal_hold_id: rest.legal_hold_id
        outputParameters:
        - type: object
          mapping: $.
      - method: GET
        name: getlegalhold
        description: Get legal hold information
        call: miro-legal-holds.getlegalhold
        with:
          org_id: rest.org_id
          case_id: rest.case_id
          legal_hold_id: rest.legal_hold_id
        outputParameters:
        - type: object
          mapping: $.
      - method: PUT
        name: editlegalhold
        description: Edit legal hold
        call: miro-legal-holds.editlegalhold
        with:
          org_id: rest.org_id
          case_id: rest.case_id
          legal_hold_id: rest.legal_hold_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/v2/orgs/{org-id}/cases/{case-id}/legal-holds/{legal-hold-id}/content-items
      name: v2-orgs-org-id-cases-case-id-legal-holds-legal-hold-id-content-items
      description: REST surface for v2-orgs-org_id-cases-case_id-legal-holds-legal_hold_id-content-items.
      operations:
      - method: GET
        name: getlegalholdcontentitems
        description: Get content items under legal hold
        call: miro-legal-holds.getlegalholdcontentitems
        with:
          org_id: rest.org_id
          case_id: rest.case_id
          legal_hold_id: rest.legal_hold_id
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: miro-legal-holds-mcp
    port: 9090
    transport: http
    description: MCP adapter for Miro Developer Platform — Legal holds. One tool per consumed operation, routed inline through
      this capability's consumes block.
    tools:
    - name: get-all-cases
      description: Get all cases
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: miro-legal-holds.getallcases
      with:
        org_id: tools.org_id
      outputParameters:
      - type: object
        mapping: $.
    - name: create-case
      description: Create case
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: miro-legal-holds.createcase
      with:
        org_id: tools.org_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: close-case
      description: Close case
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: miro-legal-holds.deletecase
      with:
        org_id: tools.org_id
        case_id: tools.case_id
      outputParameters:
      - type: object
        mapping: $.
    - name: get-case
      description: Get case
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: miro-legal-holds.getcase
      with:
        org_id: tools.org_id
        case_id: tools.case_id
      outputParameters:
      - type: object
        mapping: $.
    - name: edit-case
      description: Edit case
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: miro-legal-holds.editcase
      with:
        org_id: tools.org_id
        case_id: tools.case_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: get-board-export-jobs-case
      description: Get board export jobs of a case
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: miro-legal-holds.getlegalholdexportjobs
      with:
        org_id: tools.org_id
        case_id: tools.case_id
      outputParameters:
      - type: object
        mapping: $.
    - name: get-all-legal-holds-within
      description: Get all legal holds within a case
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: miro-legal-holds.getalllegalholds
      with:
        org_id: tools.org_id
        case_id: tools.case_id
      outputParameters:
      - type: object
        mapping: $.
    - name: create-legal-hold
      description: Create legal hold
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: miro-legal-holds.createlegalhold
      with:
        org_id: tools.org_id
        case_id: tools.case_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: close-legal-hold
      description: Close legal hold
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: miro-legal-holds.deletelegalhold
      with:
        org_id: tools.org_id
        case_id: tools.case_id
        legal_hold_id: tools.legal_hold_id
      outputParameters:
      - type: object
        mapping: $.
    - name: get-legal-hold-information
      description: Get legal hold information
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: miro-legal-holds.getlegalhold
      with:
        org_id: tools.org_id
        case_id: tools.case_id
        legal_hold_id: tools.legal_hold_id
      outputParameters:
      - type: object
        mapping: $.
    - name: edit-legal-hold
      description: Edit legal hold
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: miro-legal-holds.editlegalhold
      with:
        org_id: tools.org_id
        case_id: tools.case_id
        legal_hold_id: tools.legal_hold_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: get-content-items-under-legal
      description: Get content items under legal hold
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: miro-legal-holds.getlegalholdcontentitems
      with:
        org_id: tools.org_id
        case_id: tools.case_id
        legal_hold_id: tools.legal_hold_id
      outputParameters:
      - type: object
        mapping: $.