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: 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'