{
    "openapi": "3.1.0",
    "info": {
        "title": "Kanishu Assurance API",
        "version": "v1",
        "description": "Generated from the product's routes (suite/api-kit). Conventions — lists, values, versions, retries, limits — are in the Kanishu API standard; every error uses the envelope below, with the codes in \"API errors\"."
    },
    "servers": [
        {
            "url": "https://assurance.kanishu.com/api/v1"
        }
    ],
    "security": [
        {
            "bearer": []
        }
    ],
    "paths": {
        "/ai/tool": {
            "post": {
                "operationId": "connector.relay",
                "summary": "Handle (ai tool)",
                "tags": [
                    "Ai"
                ],
                "parameters": [
                    {
                        "$ref": "#/components/parameters/RequestId"
                    },
                    {
                        "$ref": "#/components/parameters/IdempotencyKey"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK."
                    },
                    "401": {
                        "$ref": "#/components/responses/E401"
                    },
                    "402": {
                        "$ref": "#/components/responses/E402"
                    },
                    "403": {
                        "$ref": "#/components/responses/E403"
                    },
                    "404": {
                        "$ref": "#/components/responses/E404"
                    },
                    "409": {
                        "$ref": "#/components/responses/E409"
                    },
                    "422": {
                        "$ref": "#/components/responses/E422"
                    },
                    "429": {
                        "$ref": "#/components/responses/E429"
                    },
                    "500": {
                        "$ref": "#/components/responses/E500"
                    },
                    "503": {
                        "$ref": "#/components/responses/E503"
                    }
                },
                "description": "Needs the `ai:relay` scope. Used between Kanishu products; not offered to customers.",
                "x-scope": "ai:relay",
                "x-internal": true
            }
        },
        "/api-access-requests": {
            "post": {
                "operationId": "postApiAccessRequestsStore",
                "summary": "Create in api access requests",
                "tags": [
                    "Api"
                ],
                "parameters": [
                    {
                        "$ref": "#/components/parameters/RequestId"
                    },
                    {
                        "$ref": "#/components/parameters/IdempotencyKey"
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created. The record is in `data`; its address in `Location`.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {}
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/E401"
                    },
                    "402": {
                        "$ref": "#/components/responses/E402"
                    },
                    "403": {
                        "$ref": "#/components/responses/E403"
                    },
                    "404": {
                        "$ref": "#/components/responses/E404"
                    },
                    "409": {
                        "$ref": "#/components/responses/E409"
                    },
                    "422": {
                        "$ref": "#/components/responses/E422"
                    },
                    "429": {
                        "$ref": "#/components/responses/E429"
                    },
                    "500": {
                        "$ref": "#/components/responses/E500"
                    },
                    "503": {
                        "$ref": "#/components/responses/E503"
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "allowed_ips": {
                                        "type": "string",
                                        "nullable": true,
                                        "maxLength": 2000
                                    },
                                    "api_client_id": {
                                        "type": "integer",
                                        "nullable": true
                                    },
                                    "purpose": {
                                        "type": "string",
                                        "maxLength": 1000
                                    },
                                    "scopes": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                ""
                                            ]
                                        },
                                        "minItems": 1
                                    },
                                    "validity_days": {
                                        "type": "integer",
                                        "nullable": true,
                                        "enum": [
                                            "30",
                                            "60",
                                            "90"
                                        ]
                                    }
                                },
                                "required": [
                                    "purpose",
                                    "scopes"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-access-requests/pending": {
            "get": {
                "operationId": "getApiAccessRequestsPendingPending",
                "summary": "Pending (api access requests pending)",
                "tags": [
                    "Api"
                ],
                "parameters": [
                    {
                        "$ref": "#/components/parameters/RequestId"
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Only these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back."
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {}
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E400"
                    },
                    "401": {
                        "$ref": "#/components/responses/E401"
                    },
                    "403": {
                        "$ref": "#/components/responses/E403"
                    },
                    "404": {
                        "$ref": "#/components/responses/E404"
                    },
                    "429": {
                        "$ref": "#/components/responses/E429"
                    },
                    "500": {
                        "$ref": "#/components/responses/E500"
                    },
                    "503": {
                        "$ref": "#/components/responses/E503"
                    }
                }
            }
        },
        "/api-access-requests/{apiAccessRequest}/approve": {
            "post": {
                "operationId": "postApiAccessRequestsApproveApprove",
                "summary": "Approve (api access requests approve)",
                "tags": [
                    "Api"
                ],
                "parameters": [
                    {
                        "$ref": "#/components/parameters/RequestId"
                    },
                    {
                        "name": "apiAccessRequest",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "$ref": "#/components/parameters/IdempotencyKey"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {}
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/E401"
                    },
                    "402": {
                        "$ref": "#/components/responses/E402"
                    },
                    "403": {
                        "$ref": "#/components/responses/E403"
                    },
                    "404": {
                        "$ref": "#/components/responses/E404"
                    },
                    "409": {
                        "$ref": "#/components/responses/E409"
                    },
                    "422": {
                        "$ref": "#/components/responses/E422"
                    },
                    "429": {
                        "$ref": "#/components/responses/E429"
                    },
                    "500": {
                        "$ref": "#/components/responses/E500"
                    },
                    "503": {
                        "$ref": "#/components/responses/E503"
                    }
                }
            }
        },
        "/api-access-requests/{apiAccessRequest}/reject": {
            "post": {
                "operationId": "postApiAccessRequestsRejectReject",
                "summary": "Reject (api access requests reject)",
                "tags": [
                    "Api"
                ],
                "parameters": [
                    {
                        "$ref": "#/components/parameters/RequestId"
                    },
                    {
                        "name": "apiAccessRequest",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "$ref": "#/components/parameters/IdempotencyKey"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {}
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/E401"
                    },
                    "402": {
                        "$ref": "#/components/responses/E402"
                    },
                    "403": {
                        "$ref": "#/components/responses/E403"
                    },
                    "404": {
                        "$ref": "#/components/responses/E404"
                    },
                    "409": {
                        "$ref": "#/components/responses/E409"
                    },
                    "422": {
                        "$ref": "#/components/responses/E422"
                    },
                    "429": {
                        "$ref": "#/components/responses/E429"
                    },
                    "500": {
                        "$ref": "#/components/responses/E500"
                    },
                    "503": {
                        "$ref": "#/components/responses/E503"
                    }
                },
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "reason": {
                                        "type": "string",
                                        "maxLength": 500
                                    }
                                },
                                "required": [
                                    "reason"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-access-requests/{apiAccessRequest}/reveal": {
            "get": {
                "operationId": "getApiAccessRequestsRevealReveal",
                "summary": "Reveal (api access requests reveal)",
                "tags": [
                    "Api"
                ],
                "parameters": [
                    {
                        "$ref": "#/components/parameters/RequestId"
                    },
                    {
                        "name": "apiAccessRequest",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "fields",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Only these fields of each record, comma-separated (e.g. `id,name`; nested: `owner.name`). `id` always comes back."
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "token": {
                                            "type": "string",
                                            "description": "The API token, shown this once. Store it in your secrets manager and send it as Authorization: Bearer <token>."
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/E400"
                    },
                    "401": {
                        "$ref": "#/components/responses/E401"
                    },
                    "403": {
                        "$ref": "#/components/responses/E403"
                    },
                    "404": {
                        "$ref": "#/components/responses/E404"
                    },
                    "429": {
                        "$ref": "#/components/responses/E429"
                    },
                    "500": {
                        "$ref": "#/components/responses/E500"
                    },
                    "503": {
                        "$ref": "#/components/responses/E503"
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "bearer": {
                "type": "http",
                "scheme": "bearer",
                "description": "A token from API Access in the product. Never put it in a URL."
            }
        },
        "parameters": {
            "RequestId": {
                "name": "X-Request-Id",
                "in": "header",
                "required": false,
                "schema": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9-]{1,64}$"
                },
                "description": "Your id for this call; echoed back. Generated when absent."
            },
            "IdempotencyKey": {
                "name": "Idempotency-Key",
                "in": "header",
                "required": false,
                "schema": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9-]{8,100}$"
                },
                "description": "Makes a POST safe to retry: the first answer is kept for 24 hours."
            },
            "IfMatch": {
                "name": "If-Match",
                "in": "header",
                "required": true,
                "schema": {
                    "type": "string"
                },
                "description": "Required: the ETag you read. Without it the change is refused with 428 version_required; if the record changed since, with 412 version_conflict. `*` changes whatever version is there (use deliberately)."
            }
        },
        "schemas": {
            "Error": {
                "type": "object",
                "required": [
                    "error"
                ],
                "properties": {
                    "error": {
                        "type": "object",
                        "required": [
                            "code",
                            "message",
                            "details",
                            "request_id"
                        ],
                        "properties": {
                            "code": {
                                "type": "string",
                                "enum": [
                                    "unauthenticated",
                                    "invalid_token",
                                    "bad_signature",
                                    "token_in_url",
                                    "session_expired",
                                    "ip_not_allowed",
                                    "invalid_scope",
                                    "forbidden",
                                    "forbidden_organization",
                                    "not_supported",
                                    "feature_not_included",
                                    "subscription_read_only",
                                    "subscription_suspended",
                                    "limit_reached",
                                    "rate_limited",
                                    "quota_exceeded",
                                    "daily_limit_exceeded",
                                    "bad_request",
                                    "invalid_request",
                                    "request_failed",
                                    "validation_failed",
                                    "missing_organization_id",
                                    "not_eligible",
                                    "approval_refused",
                                    "incomplete",
                                    "activation_failed",
                                    "idempotency_key_reused",
                                    "idempotency_in_progress",
                                    "invalid_filter",
                                    "invalid_sort",
                                    "invalid_include",
                                    "invalid_fields",
                                    "not_found",
                                    "method_not_allowed",
                                    "conflict",
                                    "duplicate",
                                    "exists",
                                    "version_conflict",
                                    "version_required",
                                    "payload_too_large",
                                    "unsupported_media_type",
                                    "product_maintenance",
                                    "product_disabled",
                                    "platform_tenant_not_configured",
                                    "unavailable",
                                    "server_error"
                                ]
                            },
                            "message": {
                                "type": "string"
                            },
                            "details": {
                                "type": "object"
                            },
                            "request_id": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "ListMeta": {
                "type": "object",
                "properties": {
                    "page": {
                        "type": "integer"
                    },
                    "per_page": {
                        "type": "integer"
                    },
                    "total": {
                        "type": "integer"
                    },
                    "last_page": {
                        "type": "integer"
                    }
                }
            }
        },
        "responses": {
            "E400": {
                "description": "Bad request (invalid_filter, invalid_sort, invalid_fields, bad_request).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E401": {
                "description": "No or bad token (unauthenticated, invalid_token).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E402": {
                "description": "Plan limit or feature (limit_reached, feature_not_included).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E403": {
                "description": "Not allowed (invalid_scope, forbidden, forbidden_organization, ip_not_allowed).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E404": {
                "description": "Not found.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E409": {
                "description": "Conflict (duplicate, idempotency_key_reused, idempotency_in_progress).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E412": {
                "description": "The record changed since you read it (version_conflict).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E422": {
                "description": "Validation failed; details.fields lists each field.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E428": {
                "description": "If-Match is required: read the record and send its ETag (version_required).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E429": {
                "description": "Too many calls (rate_limited, daily quota). See Retry-After.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E500": {
                "description": "Server error. Quote request_id to support.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "E503": {
                "description": "Unavailable (maintenance).",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}
