Hoshin Kanri Matrices API

The Matrices API from Hoshin Kanri — 2 operation(s) for matrices.

GitHub OpenAPI

Operations 5

GET /api/matrices List matrices #
POST /api/matrices Create a matrix #
GET /api/matrices/{id} Get a matrix with its elements and links #
PUT /api/matrices/{id} Update a matrix #
DELETE /api/matrices/{id} Delete a matrix #

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/hoshin-app:hoshin-app-matrices-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

hoshin-app-matrices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hoshin Kanri Matrices API
  version: 0.9.0
  description: 'Beta: operations and fields may still change. Covers the operations the Hoshin MCP server uses. For an AI agent, prefer MCP at https://hoshin.app/mcp. An admin creates a token from the API tokens link in the app header. Error messages are in English; rely on the `error` code.'
servers:
- url: https://hoshin.app
tags:
- name: Matrices
paths:
  /api/matrices:
    get:
      operationId: listMatrices
      tags:
      - Matrices
      summary: List matrices
      parameters:
      - name: isActive
        in: query
        required: false
        description: '"true" returns active matrices; any other value returns archived ones.'
        schema:
          type: string
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 200
          default: 50
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          minimum: 0
          default: 0
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MatrixList'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    post:
      operationId: createMatrix
      tags:
      - Matrices
      summary: Create a matrix
      description: Making it the default takes an admin, except for the first matrix. Refused to a read-only token.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 200
                description:
                  type:
                  - string
                  - 'null'
                  maxLength: 10000
                periodType:
                  type: string
                  enum:
                  - annual
                  - quarterly
                  - custom
                periodStart:
                  type:
                  - string
                  - 'null'
                  format: date
                periodEnd:
                  type:
                  - string
                  - 'null'
                  format: date
                isDefault:
                  type: boolean
                parentMatrixId:
                  type:
                  - string
                  - 'null'
                  format: uuid
              required:
              - name
      security:
      - bearerAuth: []
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MatrixCreated'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/matrices/{id}:
    get:
      operationId: getMatrix
      tags:
      - Matrices
      summary: Get a matrix with its elements and links
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: elements
        in: query
        required: false
        description: '"false" leaves out elements and correlations.'
        schema:
          type: string
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MatrixDetail'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      operationId: updateMatrix
      tags:
      - Matrices
      summary: Update a matrix
      description: Also sets its parent in a cascade. Changing the default matrix takes an admin. Refused to a read-only token.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 200
                description:
                  type:
                  - string
                  - 'null'
                  maxLength: 10000
                periodType:
                  type: string
                  enum:
                  - annual
                  - quarterly
                  - custom
                periodStart:
                  type:
                  - string
                  - 'null'
                  format: date
                periodEnd:
                  type:
                  - string
                  - 'null'
                  format: date
                isActive:
                  type: boolean
                isDefault:
                  type: boolean
                parentMatrixId:
                  type:
                  - string
                  - 'null'
                  format: uuid
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Matrix'
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    delete:
      operationId: deleteMatrix
      tags:
      - Matrices
      summary: Delete a matrix
      description: For good, with its elements, correlations, readings, updates and public links; matrices below it are detached. Deleting the default matrix takes an admin. To set a matrix aside, update it with isActive false. Refused to a read-only token.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                    - true
                  message:
                    type: string
                required:
                - success
                - message
        default:
          description: Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Stable machine-readable code, among them UNAUTHORIZED, FORBIDDEN, MATRIX_EDIT_RESTRICTED, DEFAULT_MATRIX_ADMIN_ONLY, NOT_FOUND, INVALID_ID, VALIDATION_ERROR, EMPTY_UPDATE, NOT_ADJACENT, TOO_MANY_SHARES.
        message:
          type: string
        issues:
          type: array
          items:
            type: object
            additionalProperties: {}
          description: Invalid fields, on VALIDATION_ERROR.
      required:
      - error
    MatrixList:
      type: object
      properties:
        matrices:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              description:
                type:
                - string
                - 'null'
              periodType:
                type: string
                enum:
                - annual
                - quarterly
                - custom
              periodStart:
                type:
                - string
                - 'null'
                format: date-time
              periodEnd:
                type:
                - string
                - 'null'
                format: date-time
              ownerId:
                type:
                - string
                - 'null'
                format: uuid
              isActive:
                type: boolean
              isDefault:
                type: boolean
              parentMatrixId:
                type:
                - string
                - 'null'
                format: uuid
              createdAt:
                type: string
                format: date-time
              updatedAt:
                type: string
                format: date-time
              ownerName:
                type:
                - string
                - 'null'
              elementsCount:
                type: integer
            required:
            - id
            - name
            - description
            - periodType
            - periodStart
            - periodEnd
            - ownerId
            - isActive
            - isDefault
            - parentMatrixId
            - createdAt
            - updatedAt
            - ownerName
            - elementsCount
        total:
          type: integer
        limit:
          type: integer
        offset:
          type: integer
      required:
      - matrices
      - total
      - limit
      - offset
    Matrix:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type:
          - string
          - 'null'
        periodType:
          type: string
          enum:
          - annual
          - quarterly
          - custom
        periodStart:
          type:
          - string
          - 'null'
          format: date-time
        periodEnd:
          type:
          - string
          - 'null'
          format: date-time
        ownerId:
          type:
          - string
          - 'null'
          format: uuid
        isActive:
          type: boolean
        isDefault:
          type: boolean
        parentMatrixId:
          type:
          - string
          - 'null'
          format: uuid
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
      - id
      - name
      - description
      - periodType
      - periodStart
      - periodEnd
      - ownerId
      - isActive
      - isDefault
      - parentMatrixId
      - createdAt
      - updatedAt
    Correlation:
      type: object
      properties:
        id:
          type: string
          format: uuid
        fromElementId:
          type: string
          format: uuid
        fromTitle:
          type: string
        fromQuadrant:
          type: string
          enum:
          - north
          - east
          - south
          - west
          description: 'Role of the element, not its place on the drawing: north = breakthrough objectives (3-5 year vision), east = annual objectives, south = initiatives, west = KPIs. A matrix drawn with the vision at the bottom uses the same values.'
        toElementId:
          type: string
          format: uuid
        toTitle:
          type: string
        toQuadrant:
          type: string
          enum:
          - north
          - east
          - south
          - west
          description: 'Role of the element, not its place on the drawing: north = breakthrough objectives (3-5 year vision), east = annual objectives, south = initiatives, west = KPIs. A matrix drawn with the vision at the bottom uses the same values.'
        strength:
          type: string
          enum:
          - strong
          - medium
          - weak
          - none
      required:
      - id
      - fromElementId
      - fromTitle
      - fromQuadrant
      - toElementId
      - toTitle
      - toQuadrant
      - strength
    Element:
      type: object
      properties:
        id:
          type: string
          format: uuid
        matrixId:
          type: string
          format: uuid
        quadrant:
          type: string
          enum:
          - north
          - east
          - south
          - west
          description: 'Role of the element, not its place on the drawing: north = breakthrough objectives (3-5 year vision), east = annual objectives, south = initiatives, west = KPIs. A matrix drawn with the vision at the bottom uses the same values.'
        position:
          type: integer
        title:
          type: string
        description:
          type:
          - string
          - 'null'
        status:
          type: string
          enum:
          - draft
          - active
          - completed
          - cancelled
        ownerId:
          type:
          - string
          - 'null'
          format: uuid
        ownerName:
          type:
          - string
          - 'null'
        targetValue:
          type:
          - string
          - 'null'
        currentValue:
          type:
          - string
          - 'null'
        unit:
          type:
          - string
          - 'null'
        indicatorType:
          type:
          - string
          - 'null'
          enum:
          - result
          - performance
          - null
        dueDate:
          type:
          - string
          - 'null'
          format: date-time
        completedAt:
          type:
          - string
          - 'null'
          format: date-time
        color:
          type:
          - string
          - 'null'
        icon:
          type:
          - string
          - 'null'
        externalRef:
          type:
          - string
          - 'null'
        links:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              ref:
                type: string
            required:
            - label
            - ref
          description: 'Links to third-party tools: a free label and a free reference (URL, ticket or project number, path).'
        parentElementId:
          type:
          - string
          - 'null'
          format: uuid
        progress:
          type:
          - integer
          - 'null'
          description: Last progress reported (0-100); null on a KPI or before any update.
        visibility:
          type: string
          enum:
          - shared
          - internal
        sheet:
          type: object
          properties:
            sponsor:
              type: string
              minLength: 1
              maxLength: 100
              description: Sponsor, when not the owner of the initiative.
            why:
              type: string
              minLength: 1
              maxLength: 2000
              description: The problem it addresses and the annual objective it serves.
            expectedResult:
              type: string
              minLength: 1
              maxLength: 1000
              description: What "done" means.
            measuredBy:
              type: string
              format: uuid
              description: The KPI (west element of the same matrix) that measures the result.
            milestones:
              type: array
              items:
                type: object
                properties:
                  title:
                    type: string
                    minLength: 1
                    maxLength: 200
                  date:
                    type:
                    - string
                    - 'null'
                    format: date
                    description: YYYY-MM-DD
                  status:
                    type: string
                    enum:
                    - planned
                    - done
                    - late
                    description: '"planned", "done" (reached) or "late".'
                required:
                - title
                - status
              maxItems: 8
              description: 3 to 6 dated milestones, 8 at most.
            nextAction:
              type: object
              properties:
                title:
                  type: string
                  minLength: 1
                  maxLength: 300
                owner:
                  type:
                  - string
                  - 'null'
                  minLength: 1
                  maxLength: 100
                  description: Who does it, as people name them.
                due:
                  type:
                  - string
                  - 'null'
                  format: date
                  description: YYYY-MM-DD
              required:
              - title
            health:
              type: string
              enum:
              - green
              - amber
              - red
              description: Weather of the initiative, updated at each review. Requires healthNote.
            healthNote:
              type: string
              minLength: 1
              maxLength: 500
              description: One sentence that justifies the weather.
            blockers:
              type: string
              minLength: 1
              maxLength: 2000
              description: Risks, and what needs an arbitration or a decision of the committee.
            resources:
              type: string
              minLength: 1
              maxLength: 1000
              description: Budget, time, hires needed.
            healthAt:
              type: string
              description: When the weather was last set (ISO datetime).
          description: 'Initiatives (south) only, else empty: the sheet a committee reads in two minutes.'
        kpiDefinition:
          type: object
          properties:
            formula:
              type: string
              minLength: 1
              maxLength: 1000
              description: How the value is computed, e.g. "active accounts / signed accounts, at month end".
            sourceSystem:
              type: string
              minLength: 1
              maxLength: 100
              description: The system the value is read in (e.g. "HubSpot", "Pennylane").
            sourceRef:
              type: string
              minLength: 1
              maxLength: 500
              description: 'Where in it: a report, a saved query, a URL.'
            dataOwner:
              type: string
              minLength: 1
              maxLength: 100
              description: Who answers for the number.
            frequency:
              type: string
              enum:
              - monthly
              - quarterly
              description: How often a reading is due.
          description: 'KPIs (west) only, else empty: how the value is computed and where it is read.'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
      - id
      - matrixId
      - quadrant
      - position
      - title
      - description
      - status
      - ownerId
      - ownerName
      - targetValue
      - currentValue
      - unit
      - indicatorType
      - dueDate
      - completedAt
      - color
      - icon
      - externalRef
      - links
      - parentElementId
      - progress
      - visibility
      - sheet
      - kpiDefinition
      - createdAt
      - updatedAt
    MatrixDetail:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type:
          - string
          - 'null'
        periodType:
          type: string
          enum:
          - annual
          - quarterly
          - custom
        periodStart:
          type:
          - string
          - 'null'
          format: date-time
        periodEnd:
          type:
          - string
          - 'null'
          format: date-time
        ownerId:
          type:
          - string
          - 'null'
          format: uuid
        isActive:
          type: boolean
        isDefault:
          type: boolean
        parentMatrixId:
          type:
          - string
          - 'null'
          format: uuid
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        ownerName:
          type:
          - string
          - 'null'
        parentMatrix:
          type:
          - object
          - 'null'
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
          required:
          - id
          - name
        childMatrices:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
            required:
            - id
            - name
        access:
          type: object
          properties:
            restricted:
              type: boolean
            editors:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  displayName:
                    type: string
                required:
                - id
                - displayName
            canEdit:
              type: boolean
            canManage:
              type: boolean
            canSetDefault:
              type: boolean
          required:
          - restricted
          - editors
          - canEdit
          - canManage
          - canSetDefault
        elements:
          type: object
          properties:
            north:
              type: array
              items:
                $ref: '#/components/schemas/Element'
            east:
              type: array
              items:
                $ref: '#/components/schemas/Element'
            south:
              type: array
              items:
                $ref: '#/components/schemas/Element'
            west:
              type: array
              items:
                $ref: '#/components/schemas/Element'
          required:
          - north
          - east
          - south
          - west
          description: Absent with elements=false.
        correlations:
          type: array
          items:
            $ref: '#/components/schemas/Correlation'
          description: Absent with elements=false.
      required:
      - id
      - name
      - description
      - periodType
      - periodStart
      - periodEnd
      - ownerId
      - isActive
      - isDefault
      - parentMatrixId
      - createdAt
      - updatedAt
      - ownerName
      - parentMatrix
      - childMatrices
      - access
    MatrixCreated:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        description:
          type:
          - string
          - 'null'
        periodType:
          type: string
          enum:
          - annual
          - quarterly
          - custom
        periodStart:
          type:
          - string
          - 'null'
          format: date-time
        periodEnd:
          type:
          - string
          - 'null'
          format: date-time
        ownerId:
          type:
          - string
          - 'null'
          format: uuid
        isActive:
          type: boolean
        isDefault:
          type: boolean
        parentMatrixId:
          type:
          - string
          - 'null'
          format: uuid
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        elementsCount:
          type: integer
      required:
      - id
      - name
      - description
      - periodType
      - periodStart
      - periodEnd
      - ownerId
      - isActive
      - isDefault
      - parentMatrixId
      - createdAt
      - updatedAt
      - elementsCount
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'An API token, hk_..., or an OAuth 2.1 access token. OAuth needs PKCE S256 and a registered client: https://hoshin.app/.well-known/oauth-authorization-server'