docs/openapi.json is served live at /api/docs on the production box and documented none of the routes added since 2026-09-11. It is generated from docs/api-inventory.json, which is not tracked on this branch, so the generator had no input - and tests/test_api_inventory_parity.py skipped itself for the same reason. No route here had ever been checked against the published contract. The inventory is now generated from this branch's own url_map rather than carried over from elsewhere, with each route's auth derived from the decorators and gates on its view rather than guessed. A route whose gate cannot be classified is marked for review, not quietly called public. gen_openapi.py can refresh it from the live app, so this does not rot again, and human-authored prose survives a refresh. The parity test now RUNS instead of skipping. The thing that mattered more than the missing pages: nine operations were published with "security: []" - the machine-readable claim that no credentials are needed - while their handlers require one. Two of them serve the bootstrap installer and the agent package. A generated client, a firewall plan or anything else reading the spec would have been told those are anonymous. Required auth is now expressed as required, and a token-or-network gate is expressed as optional auth with the network half named in the description, which is what it actually is. A test re-derives auth from the live app and fails when the committed inventory disagrees, because the parity check only ever compared route lists: a wrong auth string passed everything. test_openapi_spec.py asserted that optional auth was the majority of the surface, a premise the guest-role and permission model has made false. It now holds the property that matters - an optional-auth route is expressed as optional - rather than a count that was true once. gen_openapi.py also loads .env before building the app, like every other script that builds one, or a plain python run falls back to the hardcoded localhost URL.
28102 lines
791 KiB
JSON
28102 lines
791 KiB
JSON
{
|
|
"openapi": "3.1.0",
|
|
"info": {
|
|
"title": "ShopDB Flask API",
|
|
"version": "0.12.0",
|
|
"description": "Asset-management API (core + plugins). Responses use a `success_response` envelope: `{status, data, meta}`. Auth: Bearer JWT (login or a managed PAT) for `jwt`/`admin`/`permission:*`; `X-API-Key` for collector/managed-token endpoints; public endpoints need neither. A permission-gated route is published as bearer-required, which is what a default install does - a site that grants the permission to the `guest` role makes that same route answer a caller with no token."
|
|
},
|
|
"servers": [
|
|
{
|
|
"url": "/",
|
|
"description": "relative to the deployed mount"
|
|
}
|
|
],
|
|
"components": {
|
|
"schemas": {
|
|
"SuccessEnvelope": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"success"
|
|
]
|
|
},
|
|
"data": {
|
|
"description": "The payload. Shape is per endpoint."
|
|
},
|
|
"meta": {
|
|
"type": "object",
|
|
"properties": {
|
|
"timestamp": {
|
|
"type": "string",
|
|
"format": "date-time"
|
|
},
|
|
"requestid": {
|
|
"type": "string"
|
|
},
|
|
"pagination": {
|
|
"type": "object",
|
|
"properties": {
|
|
"page": {
|
|
"type": "integer"
|
|
},
|
|
"perpage": {
|
|
"type": "integer"
|
|
},
|
|
"total": {
|
|
"type": "integer"
|
|
},
|
|
"pages": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"status"
|
|
]
|
|
},
|
|
"ErrorEnvelope": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"error"
|
|
]
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {
|
|
"type": "object",
|
|
"properties": {
|
|
"code": {
|
|
"type": "string"
|
|
},
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"details": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"code",
|
|
"message"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"error"
|
|
]
|
|
},
|
|
"meta": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"status",
|
|
"data"
|
|
]
|
|
}
|
|
},
|
|
"securitySchemes": {
|
|
"bearerAuth": {
|
|
"type": "http",
|
|
"scheme": "bearer",
|
|
"bearerFormat": "JWT",
|
|
"description": "Login token or a managed Personal Access Token (scoped)."
|
|
},
|
|
"apiKeyAuth": {
|
|
"type": "apiKey",
|
|
"in": "header",
|
|
"name": "X-API-Key",
|
|
"description": "A managed service or device token in a header. X-API-Key for collector and managed tokens (collector.ingest, geenforce.fetch); X-Endpoint-Bootstrap-Token for agent bootstrap; X-Kiosk-Token for a kiosk screen. The operation description names the header and, where the gate is token-OR-network, the allowlist that is the other half."
|
|
},
|
|
"setupCodeAuth": {
|
|
"type": "apiKey",
|
|
"in": "query",
|
|
"name": "code",
|
|
"description": "A single-use provisioning code, redeemed in the query string because the caller is a browser being pointed at a URL. Spent on any attempt, right or wrong, and short-lived."
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
{
|
|
"name": "core-apitokens"
|
|
},
|
|
{
|
|
"name": "core-applications"
|
|
},
|
|
{
|
|
"name": "core-assets"
|
|
},
|
|
{
|
|
"name": "core-auditlogs"
|
|
},
|
|
{
|
|
"name": "core-auth"
|
|
},
|
|
{
|
|
"name": "core-businessunits"
|
|
},
|
|
{
|
|
"name": "core-collector"
|
|
},
|
|
{
|
|
"name": "core-customfields"
|
|
},
|
|
{
|
|
"name": "core-dashboard"
|
|
},
|
|
{
|
|
"name": "core-dashboarddefaults"
|
|
},
|
|
{
|
|
"name": "core-docs"
|
|
},
|
|
{
|
|
"name": "core-locations"
|
|
},
|
|
{
|
|
"name": "core-maplevels"
|
|
},
|
|
{
|
|
"name": "core-mappositions"
|
|
},
|
|
{
|
|
"name": "core-models"
|
|
},
|
|
{
|
|
"name": "core-modeltypes"
|
|
},
|
|
{
|
|
"name": "core-operatingsystems"
|
|
},
|
|
{
|
|
"name": "core-plugins"
|
|
},
|
|
{
|
|
"name": "core-pluginui"
|
|
},
|
|
{
|
|
"name": "core-reports"
|
|
},
|
|
{
|
|
"name": "core-scripts"
|
|
},
|
|
{
|
|
"name": "core-search"
|
|
},
|
|
{
|
|
"name": "core-settings"
|
|
},
|
|
{
|
|
"name": "core-setup"
|
|
},
|
|
{
|
|
"name": "core-shopdbbackups"
|
|
},
|
|
{
|
|
"name": "core-supportteams"
|
|
},
|
|
{
|
|
"name": "core-users"
|
|
},
|
|
{
|
|
"name": "core-vendors"
|
|
},
|
|
{
|
|
"name": "plugin-backups"
|
|
},
|
|
{
|
|
"name": "plugin-computers"
|
|
},
|
|
{
|
|
"name": "plugin-employees"
|
|
},
|
|
{
|
|
"name": "plugin-endpoints"
|
|
},
|
|
{
|
|
"name": "plugin-geenforce"
|
|
},
|
|
{
|
|
"name": "plugin-guides"
|
|
},
|
|
{
|
|
"name": "plugin-knowledgebase"
|
|
},
|
|
{
|
|
"name": "plugin-machines"
|
|
},
|
|
{
|
|
"name": "plugin-measuringtools"
|
|
},
|
|
{
|
|
"name": "plugin-network"
|
|
},
|
|
{
|
|
"name": "plugin-notifications"
|
|
},
|
|
{
|
|
"name": "plugin-printedparts"
|
|
},
|
|
{
|
|
"name": "plugin-printers"
|
|
},
|
|
{
|
|
"name": "plugin-slides"
|
|
},
|
|
{
|
|
"name": "plugin-tools"
|
|
},
|
|
{
|
|
"name": "plugin-usb"
|
|
},
|
|
{
|
|
"name": "plugin-warranty"
|
|
}
|
|
],
|
|
"paths": {
|
|
"/api/apitokens": {
|
|
"get": {
|
|
"tags": [
|
|
"core-apitokens"
|
|
],
|
|
"summary": "List the caller's own tokens. Admins may pass ?all=true for everyone's.",
|
|
"description": "List the caller's own tokens. Admins may pass ?all=true for everyone's.\n\n**Auth:** jwt\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/apitokens -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-apitokens"
|
|
],
|
|
"summary": "Create a token for the caller. Returns the full secret ONCE.",
|
|
"description": "Create a token for the caller. Returns the full secret ONCE.\n\n**Auth:** permission:apitokens.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/apitokens -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/apitokens/{tokenid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-apitokens"
|
|
],
|
|
"summary": "Revoke (deactivate) a token. Own token, or any if admin.",
|
|
"description": "Revoke (deactivate) a token. Own token, or any if admin.\n\n**Auth:** permission:apitokens.create\n\n**Params:** path: tokenid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/apitokens/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tokenid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-apitokens"
|
|
],
|
|
"summary": "Rename, rescope, or deactivate a token. Own token, or any if admin.",
|
|
"description": "Rename, rescope, or deactivate a token. Own token, or any if admin.\n\n**Auth:** permission:apitokens.create\n\n**Params:** path: tokenid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/apitokens/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tokenid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: tokenid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications": {
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "List all applications.",
|
|
"description": "List all applications.\n\n**Auth:** permission:applications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Create a new application.",
|
|
"description": "Create a new application.\n\n**Auth:** permission:applications.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/applications -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/{app_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Permanently delete an application, its versions, and its uploads.",
|
|
"description": "Permanently delete an application, its versions, and its uploads.\n\n**Auth:** permission:applications.delete\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/applications/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Get a single application with details.",
|
|
"description": "Get a single application with details.\n\n**Auth:** permission:applications.view\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Update an application.",
|
|
"description": "Update an application.\n\n**Auth:** permission:applications.edit\n\n**Params:** path: app_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/applications/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: app_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/{app_id}/image": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Remove an application's image and clear the field.",
|
|
"description": "Remove an application's image and clear the field.\n\n**Auth:** permission:applications.edit\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/applications/1/image -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Upload (or replace) an application's image.",
|
|
"description": "Upload (or replace) an application's image.\n\n**Auth:** permission:applications.edit\n\n**Params:** path: app_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/applications/1/image -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: app_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/{app_id}/installed": {
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "List all computers that have this application installed.",
|
|
"description": "List all computers that have this application installed.\n\n**Auth:** permission:applications.view\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications/1/installed -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/applications/{app_id}/package": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Remove an uploaded installer and clear the path it set.",
|
|
"description": "Remove an uploaded installer and clear the path it set.\n\n**Auth:** permission:applications.edit\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/applications/1/package -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Upload (or replace) the installer for an application.",
|
|
"description": "Upload (or replace) the installer for an application.\n\n**Auth:** permission:applications.edit\n\n**Params:** path: app_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/applications/1/package -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: app_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/{app_id}/revert": {
|
|
"post": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Strip an application back to a catalogue record.",
|
|
"description": "Strip an application back to a catalogue record.\n\n**Auth:** permission:applications.edit\n\n**Params:** path: app_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/applications/1/revert -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: app_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/{app_id}/versions": {
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "List all versions for an application.",
|
|
"description": "List all versions for an application.\n\n**Auth:** permission:applications.view\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications/1/versions -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Create a new version for an application.",
|
|
"description": "Create a new version for an application.\n\n**Auth:** permission:applications.create\n\n**Params:** path: app_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/applications/1/versions -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: app_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/image/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Serve an uploaded application image.",
|
|
"description": "Serve an uploaded application image.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications/image/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/applications/machines/{machine_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "List all applications installed on a computer.",
|
|
"description": "List all applications installed on a computer.\n\n**Auth:** permission:applications.view\n\n**Params:** path: machine_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications/machines/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Install an application on a computer.",
|
|
"description": "Install an application on a computer.\n\n**Auth:** permission:applications.create\n\n**Params:** path: machine_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/applications/machines/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: machine_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/machines/{machine_id}/{app_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Uninstall an application from a computer.",
|
|
"description": "Uninstall an application from a computer.\n\n**Auth:** permission:applications.delete\n\n**Params:** path: machine_id (int), app_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/applications/machines/1/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Update installed application (e.g., change version).",
|
|
"description": "Update installed application (e.g., change version).\n\n**Auth:** permission:applications.edit\n\n**Params:** path: machine_id (int), app_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/applications/machines/1/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: machine_id (int), app_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/applications/package/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-applications"
|
|
],
|
|
"summary": "Download an uploaded installer.",
|
|
"description": "Download an uploaded installer.\n\n**Auth:** permission:applications.download\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/applications/package/example.png -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/assets": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "List all assets with filtering and pagination.",
|
|
"description": "List all assets with filtering and pagination.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Create a new asset.",
|
|
"description": "Create a new asset.\n\n**Auth:** permission:assets.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/assets -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/{asset_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Delete (soft delete) an asset.",
|
|
"description": "Delete (soft delete) an asset.\n\n**Auth:** permission:assets.delete\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/assets/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Get a single asset with full details.",
|
|
"description": "Get a single asset with full details.\n\n**Auth:** permission:assets.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Update an asset.",
|
|
"description": "Update an asset.\n\n**Auth:** permission:assets.edit\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/assets/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/{asset_id}/communications": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Get all communications for an asset.",
|
|
"description": "Get all communications for an asset.\n\n**Auth:** permission:assets.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/1/communications -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/assets/{asset_id}/relationships": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Get all relationships for an asset.",
|
|
"description": "Get all relationships for an asset.\n\n**Auth:** permission:assets.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/1/relationships -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/assets/lookup/{assetnumber}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Look up an asset by its asset number.",
|
|
"description": "Look up an asset by its asset number.\n\n**Auth:** permission:assets.view\n\n**Params:** path: assetnumber (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/lookup/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetnumber",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/assets/map": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Get all assets with map positions for unified floor map display.",
|
|
"description": "Get all assets with map positions for unified floor map display.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/map -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/relationships": {
|
|
"post": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Create a relationship between two assets.",
|
|
"description": "Create a relationship between two assets.\n\n**Auth:** permission:assets.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/assets/relationships -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/relationships/{rel_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Delete an asset relationship.",
|
|
"description": "Delete an asset relationship.\n\n**Auth:** permission:assets.delete\n\n**Params:** path: rel_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/assets/relationships/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "rel_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/assets/relationshiptypes": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "List all asset relationship types.",
|
|
"description": "List all asset relationship types.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/relationshiptypes -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Create a new asset relationship type.",
|
|
"description": "Create a new asset relationship type.\n\n**Auth:** permission:assets.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/assets/relationshiptypes -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/relationshiptypes/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Delete a relationship type. Refused if any relationship still uses it.",
|
|
"description": "Delete a relationship type. Refused if any relationship still uses it.\n\n**Auth:** permission:assets.delete\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/assets/relationshiptypes/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Update a relationship type.",
|
|
"description": "Update a relationship type.\n\n**Auth:** permission:assets.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/assets/relationshiptypes/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/statuses": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "List all asset statuses.",
|
|
"description": "List all asset statuses.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/statuses -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Create a new asset status.",
|
|
"description": "Create a new asset status.\n\n**Auth:** permission:assets.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/assets/statuses -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/statuses/{status_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Delete an asset status. Refused if any asset still uses it.",
|
|
"description": "Delete an asset status. Refused if any asset still uses it.\n\n**Auth:** permission:assets.delete\n\n**Params:** path: status_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/assets/statuses/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "status_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Get a single asset status.",
|
|
"description": "Get a single asset status.\n\n**Auth:** permission:assets.view\n\n**Params:** path: status_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/statuses/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "status_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Update an asset status.",
|
|
"description": "Update an asset status.\n\n**Auth:** permission:assets.edit\n\n**Params:** path: status_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/assets/statuses/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "status_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: status_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/types": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "List all asset types.",
|
|
"description": "List all asset types.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Create a new asset type.",
|
|
"description": "Create a new asset type.\n\n**Auth:** permission:assets.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/assets/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/assets/types/{type_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Get a single asset type.",
|
|
"description": "Get a single asset type.\n\n**Auth:** permission:assets.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/assets/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-assets"
|
|
],
|
|
"summary": "Update an asset type's display fields (color/icon/description). The name, plugin, and table are structural and not...",
|
|
"description": "Update an asset type's display fields (color/icon/description). The name, plugin, and table are structural and not editable here.\n\n**Auth:** permission:assets.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/assets/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auditlogs": {
|
|
"get": {
|
|
"tags": [
|
|
"core-auditlogs"
|
|
],
|
|
"summary": "List audit logs with filtering and pagination.",
|
|
"description": "List audit logs with filtering and pagination.\n\n**Auth:** permission:audit.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/auditlogs -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auditlogs/entity/{entitytype}/{entityid}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-auditlogs"
|
|
],
|
|
"summary": "Get audit history for a specific entity.",
|
|
"description": "Get audit history for a specific entity.\n\n**Auth:** permission:audit.view\n\n**Params:** path: entitytype (string), entityid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/auditlogs/entity/x/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "entitytype",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "entityid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/auditlogs/purge": {
|
|
"post": {
|
|
"tags": [
|
|
"core-auditlogs"
|
|
],
|
|
"summary": "Delete entries older than the retention window.",
|
|
"description": "Delete entries older than the retention window.\n\n**Auth:** permission:audit.purge\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/auditlogs/purge -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auditlogs/retention": {
|
|
"get": {
|
|
"tags": [
|
|
"core-auditlogs"
|
|
],
|
|
"summary": "Size of the log and what the configured retention would remove.",
|
|
"description": "Size of the log and what the configured retention would remove.\n\n**Auth:** permission:audit.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/auditlogs/retention -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auditlogs/stats": {
|
|
"get": {
|
|
"tags": [
|
|
"core-auditlogs"
|
|
],
|
|
"summary": "Get audit log statistics.",
|
|
"description": "Get audit log statistics.\n\n**Auth:** permission:audit.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/auditlogs/stats -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/change-password": {
|
|
"post": {
|
|
"tags": [
|
|
"core-auth"
|
|
],
|
|
"summary": "Change the authenticated user's own password.",
|
|
"description": "Change the authenticated user's own password.\n\n**Auth:** jwt\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/auth/change-password -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/login": {
|
|
"post": {
|
|
"tags": [
|
|
"core-auth"
|
|
],
|
|
"summary": "Authenticate user and return JWT tokens.",
|
|
"description": "Authenticate user and return JWT tokens.\n\n**Auth:** none (the login surface itself; rate limited, 5-strike lockout)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/auth/login -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/logout": {
|
|
"post": {
|
|
"tags": [
|
|
"core-auth"
|
|
],
|
|
"summary": "Logout user (for frontend token cleanup).",
|
|
"description": "Logout user (for frontend token cleanup).\n\n**Auth:** jwt\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/auth/logout -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/me": {
|
|
"get": {
|
|
"tags": [
|
|
"core-auth"
|
|
],
|
|
"summary": "Get current authenticated user info.",
|
|
"description": "Get current authenticated user info.\n\n**Auth:** jwt\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/auth/me -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/refresh": {
|
|
"post": {
|
|
"tags": [
|
|
"core-auth"
|
|
],
|
|
"summary": "Refresh access token using refresh token.",
|
|
"description": "Refresh access token using refresh token.\n\n**Auth:** jwt (refresh token)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/auth/refresh -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/businessunits": {
|
|
"get": {
|
|
"tags": [
|
|
"core-businessunits"
|
|
],
|
|
"summary": "List all business units.",
|
|
"description": "List all business units.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/businessunits -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-businessunits"
|
|
],
|
|
"summary": "Create a new business unit.",
|
|
"description": "Create a new business unit.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/businessunits -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/businessunits/{bu_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-businessunits"
|
|
],
|
|
"summary": "Delete (deactivate) a business unit.",
|
|
"description": "Delete (deactivate) a business unit.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: bu_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/businessunits/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "bu_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-businessunits"
|
|
],
|
|
"summary": "Get a single business unit.",
|
|
"description": "Get a single business unit.\n\n**Auth:** permission:assets.view\n\n**Params:** path: bu_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/businessunits/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "bu_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-businessunits"
|
|
],
|
|
"summary": "Update a business unit.",
|
|
"description": "Update a business unit.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: bu_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/businessunits/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "bu_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: bu_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/{pluginname}": {
|
|
"post": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "Generic collector ingest for any plugin (ADR-006).",
|
|
"description": "Generic collector ingest for any plugin (ADR-006).\n\n**Auth:** api-key (per-plugin collector token)\n\n**Params:** path: pluginname (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/collector/x -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "pluginname",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: pluginname (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/_schemas": {
|
|
"get": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "List collector schemas for all enabled plugins (JWT-protected).",
|
|
"description": "List collector schemas for all enabled plugins (JWT-protected).\n\n**Auth:** jwt\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/collector/_schemas -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/apps": {
|
|
"post": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "Update installed applications for a PC (matched by hostname).",
|
|
"description": "Update installed applications for a PC (matched by hostname).\n\n**Auth:** api-key (collector token, legacy shared key)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/collector/apps -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/bulk": {
|
|
"post": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "Bulk update multiple PCs at once.",
|
|
"description": "Bulk update multiple PCs at once.\n\n**Auth:** api-key (collector token, legacy shared key)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/collector/bulk -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/heartbeat": {
|
|
"post": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "Record PC online status / heartbeat (single or batch).",
|
|
"description": "Record PC online status / heartbeat (single or batch).\n\n**Auth:** api-key (collector token, legacy shared key)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/collector/heartbeat -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/pc": {
|
|
"post": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "Update one PC from the collection script (matched by hostname).",
|
|
"description": "Update one PC from the collection script (matched by hostname).\n\n**Auth:** api-key (collector token, legacy shared key)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/collector/pc -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/collector/status": {
|
|
"get": {
|
|
"tags": [
|
|
"core-collector"
|
|
],
|
|
"summary": "Check collector API status.",
|
|
"description": "Check collector API status.\n\n**Auth:** api-key (per-plugin collector token)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/collector/status -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/customfields": {
|
|
"get": {
|
|
"tags": [
|
|
"core-customfields"
|
|
],
|
|
"summary": "List custom-field definitions. Filter by ?assettypeid=. ?active=false includes inactive ones.",
|
|
"description": "List custom-field definitions. Filter by ?assettypeid=. ?active=false includes inactive ones.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/customfields -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-customfields"
|
|
],
|
|
"summary": "UNDOCUMENTED: customfields.create_field has no docstring.",
|
|
"description": "UNDOCUMENTED: customfields.create_field has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/customfields -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/customfields/{fieldid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-customfields"
|
|
],
|
|
"summary": "UNDOCUMENTED: customfields.delete_field has no docstring.",
|
|
"description": "UNDOCUMENTED: customfields.delete_field has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: fieldid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/customfields/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "fieldid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-customfields"
|
|
],
|
|
"summary": "UNDOCUMENTED: customfields.update_field has no docstring.",
|
|
"description": "UNDOCUMENTED: customfields.update_field has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: fieldid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/customfields/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "fieldid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: fieldid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/customfields/asset/{assetid}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-customfields"
|
|
],
|
|
"summary": "Active custom fields for an asset's type, merged with its values.",
|
|
"description": "Active custom fields for an asset's type, merged with its values.\n\n**Auth:** permission:assets.view\n\n**Params:** path: assetid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/customfields/asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-customfields"
|
|
],
|
|
"summary": "Upsert values for an asset. Body: {values: {fieldid: value, ...}}.",
|
|
"description": "Upsert values for an asset. Body: {values: {fieldid: value, ...}}.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: assetid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/customfields/asset/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: assetid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "Get dashboard summary data (asset-based).",
|
|
"description": "Get dashboard summary data (asset-based).\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard/capabilities": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "What THIS caller can reach, for chrome that would otherwise only 401.",
|
|
"description": "What THIS caller can reach, for chrome that would otherwise only 401.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/capabilities -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard/health": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "Health check endpoint (no auth required).",
|
|
"description": "Health check endpoint (no auth required).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/health\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard/navigation": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "Get navigation items from all loaded plugins.",
|
|
"description": "Get navigation items from all loaded plugins.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/navigation -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard/stats": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "Get detailed statistics by asset type.",
|
|
"description": "Get detailed statistics by asset type.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/stats -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "Get dashboard summary data (asset-based).",
|
|
"description": "Get dashboard summary data (asset-based).\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboard/widgets": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboard"
|
|
],
|
|
"summary": "Aggregate dashboard widget definitions from all enabled plugins.",
|
|
"description": "Aggregate dashboard widget definitions from all enabled plugins.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboard/widgets -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboarddefaults": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboarddefaults"
|
|
],
|
|
"summary": "List all visitor-IP -> business-unit mappings.",
|
|
"description": "List all visitor-IP -> business-unit mappings.\n\n**Auth:** permission:settings.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboarddefaults -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-dashboarddefaults"
|
|
],
|
|
"summary": "Create a visitor-IP -> business-unit mapping.",
|
|
"description": "Create a visitor-IP -> business-unit mapping.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/dashboarddefaults -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboarddefaults/{default_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-dashboarddefaults"
|
|
],
|
|
"summary": "Delete (deactivate) a mapping.",
|
|
"description": "Delete (deactivate) a mapping.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: default_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/dashboarddefaults/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "default_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-dashboarddefaults"
|
|
],
|
|
"summary": "Update a mapping.",
|
|
"description": "Update a mapping.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: default_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/dashboarddefaults/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "default_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: default_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboarddefaults/display-role": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboarddefaults"
|
|
],
|
|
"summary": "Resolve what a single 'display' PC should show, from its own IP.",
|
|
"description": "Resolve what a single 'display' PC should show, from its own IP.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboarddefaults/display-role\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/dashboarddefaults/visitor-location": {
|
|
"get": {
|
|
"tags": [
|
|
"core-dashboarddefaults"
|
|
],
|
|
"summary": "Resolve the business unit for the calling display by its IP.",
|
|
"description": "Resolve the business unit for the calling display by its IP.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/dashboarddefaults/visitor-location\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/docs": {
|
|
"get": {
|
|
"tags": [
|
|
"core-docs"
|
|
],
|
|
"summary": "Redoc page. url_for keeps the asset URLs correct under any mount.",
|
|
"description": "Redoc page. url_for keeps the asset URLs correct under any mount.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/docs/\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/docs/llms.txt": {
|
|
"get": {
|
|
"tags": [
|
|
"core-docs"
|
|
],
|
|
"summary": "Concise LLM-oriented API guide.",
|
|
"description": "Concise LLM-oriented API guide.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/docs/llms.txt\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/docs/openapi.json": {
|
|
"get": {
|
|
"tags": [
|
|
"core-docs"
|
|
],
|
|
"summary": "The generated OpenAPI 3.1 spec (machine + LLM readable).",
|
|
"description": "The generated OpenAPI 3.1 spec (machine + LLM readable).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/docs/openapi.json\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/docs/redoc.standalone.js": {
|
|
"get": {
|
|
"tags": [
|
|
"core-docs"
|
|
],
|
|
"summary": "Vendored Redoc bundle (offline).",
|
|
"description": "Vendored Redoc bundle (offline).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/docs/redoc.standalone.js\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/locations": {
|
|
"get": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "List all locations.",
|
|
"description": "List all locations.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/locations -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "Create a new location.",
|
|
"description": "Create a new location.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/locations -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/locations/{location_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "Delete (deactivate) a location.",
|
|
"description": "Delete (deactivate) a location.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: location_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/locations/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "location_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "Get a single location.",
|
|
"description": "Get a single location.\n\n**Auth:** permission:assets.view\n\n**Params:** path: location_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/locations/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "location_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "Update a location.",
|
|
"description": "Update a location.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: location_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/locations/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "location_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: location_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/locations/types": {
|
|
"get": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "List location types. ?active=false includes inactive ones.",
|
|
"description": "List location types. ?active=false includes inactive ones.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/locations/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "UNDOCUMENTED: locations.create_location_type has no docstring.",
|
|
"description": "UNDOCUMENTED: locations.create_location_type has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/locations/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/locations/types/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "UNDOCUMENTED: locations.delete_location_type has no docstring.",
|
|
"description": "UNDOCUMENTED: locations.delete_location_type has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/locations/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-locations"
|
|
],
|
|
"summary": "UNDOCUMENTED: locations.update_location_type has no docstring.",
|
|
"description": "UNDOCUMENTED: locations.update_location_type has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/locations/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/maplevels": {
|
|
"get": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "Every active level, grouped by building, in display order.",
|
|
"description": "Every active level, grouped by building, in display order.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/maplevels -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "UNDOCUMENTED: maplevels.create_level has no docstring.",
|
|
"description": "UNDOCUMENTED: maplevels.create_level has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/maplevels -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/maplevels/{levelid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "Deactivate a level, refusing while assets are still placed on it.",
|
|
"description": "Deactivate a level, refusing while assets are still placed on it.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: levelid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "levelid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "UNDOCUMENTED: maplevels.get_level has no docstring.",
|
|
"description": "UNDOCUMENTED: maplevels.get_level has no docstring.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** path: levelid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "levelid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "UNDOCUMENTED: maplevels.update_level has no docstring.",
|
|
"description": "UNDOCUMENTED: maplevels.update_level has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: levelid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "levelid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: levelid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "UNDOCUMENTED: maplevels.update_level has no docstring.",
|
|
"description": "UNDOCUMENTED: maplevels.update_level has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: levelid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "levelid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: levelid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/maplevels/{levelid}/blueprint": {
|
|
"post": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "Upload this level's blueprint for one theme.",
|
|
"description": "Upload this level's blueprint for one theme.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: levelid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/maplevels/1/blueprint -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "levelid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: levelid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/maplevels/{levelid}/blueprint/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "Serve a level's blueprint image. Public, for the same reason as above.",
|
|
"description": "Serve a level's blueprint image. Public, for the same reason as above.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** path: levelid (int), filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/maplevels/1/blueprint/example.png -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "levelid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/maplevels/buildings": {
|
|
"post": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "UNDOCUMENTED: maplevels.create_building has no docstring.",
|
|
"description": "UNDOCUMENTED: maplevels.create_building has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/maplevels/buildings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/maplevels/buildings/{buildingid}": {
|
|
"patch": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "Rename or reorder a building. Levels move with it; nothing repositions.",
|
|
"description": "Rename or reorder a building. Levels move with it; nothing repositions.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: buildingid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/maplevels/buildings/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "buildingid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: buildingid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-maplevels"
|
|
],
|
|
"summary": "Rename or reorder a building. Levels move with it; nothing repositions.",
|
|
"description": "Rename or reorder a building. Levels move with it; nothing repositions.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: buildingid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/maplevels/buildings/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "buildingid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: buildingid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/mappositions/positions": {
|
|
"post": {
|
|
"tags": [
|
|
"core-mappositions"
|
|
],
|
|
"summary": "Set positions for many assets at once.",
|
|
"description": "Set positions for many assets at once.\n\n**Auth:** permission:assets.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/mappositions/positions -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/mappositions/snapshots": {
|
|
"get": {
|
|
"tags": [
|
|
"core-mappositions"
|
|
],
|
|
"summary": "Snapshots, newest first. Metadata only - the positions are large.",
|
|
"description": "Snapshots, newest first. Metadata only - the positions are large.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/mappositions/snapshots -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/mappositions/snapshots/{snapshotid}/restore": {
|
|
"post": {
|
|
"tags": [
|
|
"core-mappositions"
|
|
],
|
|
"summary": "Put the positions in this snapshot back.",
|
|
"description": "Put the positions in this snapshot back.\n\n**Auth:** permission:assets.edit\n\n**Params:** path: snapshotid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/mappositions/snapshots/1/restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "snapshotid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: snapshotid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/mappositions/transform": {
|
|
"post": {
|
|
"tags": [
|
|
"core-mappositions"
|
|
],
|
|
"summary": "Move every placed marker on a level by a transform read off landmarks.",
|
|
"description": "Move every placed marker on a level by a transform read off landmarks.\n\n**Auth:** permission:assets.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/mappositions/transform -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/mappositions/verify": {
|
|
"post": {
|
|
"tags": [
|
|
"core-mappositions"
|
|
],
|
|
"summary": "Mark markers as reviewed against the current drawing without moving them.",
|
|
"description": "Mark markers as reviewed against the current drawing without moving them.\n\n**Auth:** permission:assets.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/mappositions/verify -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/models": {
|
|
"get": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "List all vendor catalog models.",
|
|
"description": "List all vendor catalog models.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/models -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Create a new model.",
|
|
"description": "Create a new model.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/models -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/models/{model_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Delete (deactivate) a model.",
|
|
"description": "Delete (deactivate) a model.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: model_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/models/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "model_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Get a single model.",
|
|
"description": "Get a single model.\n\n**Auth:** permission:assets.view\n\n**Params:** path: model_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/models/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "model_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Update a model.",
|
|
"description": "Update a model.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: model_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/models/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "model_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: model_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/models/{model_id}/image": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Clear a model image and delete the uploaded file if we own it.",
|
|
"description": "Clear a model image and delete the uploaded file if we own it.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: model_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/models/1/image -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "model_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Upload (or replace) the photo for a model.",
|
|
"description": "Upload (or replace) the photo for a model.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: model_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/models/1/image -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "model_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: model_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/models/image/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-models"
|
|
],
|
|
"summary": "Serve an uploaded model image (public - asset detail pages read it).",
|
|
"description": "Serve an uploaded model image (public - asset detail pages read it).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/models/image/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/modeltypes": {
|
|
"get": {
|
|
"tags": [
|
|
"core-modeltypes"
|
|
],
|
|
"summary": "List all model types with optional filtering.",
|
|
"description": "List all model types with optional filtering.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/modeltypes -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-modeltypes"
|
|
],
|
|
"summary": "Create a new model type.",
|
|
"description": "Create a new model type.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/modeltypes -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/modeltypes/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-modeltypes"
|
|
],
|
|
"summary": "Delete (deactivate) a model type.",
|
|
"description": "Delete (deactivate) a model type.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/modeltypes/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-modeltypes"
|
|
],
|
|
"summary": "Get a single model type.",
|
|
"description": "Get a single model type.\n\n**Auth:** permission:assets.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/modeltypes/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-modeltypes"
|
|
],
|
|
"summary": "Update a model type.",
|
|
"description": "Update a model type.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/modeltypes/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/operatingsystems": {
|
|
"get": {
|
|
"tags": [
|
|
"core-operatingsystems"
|
|
],
|
|
"summary": "List all operating systems.",
|
|
"description": "List all operating systems.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/operatingsystems -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-operatingsystems"
|
|
],
|
|
"summary": "Create a new operating system.",
|
|
"description": "Create a new operating system.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/operatingsystems -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/operatingsystems/{os_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-operatingsystems"
|
|
],
|
|
"summary": "Delete (deactivate) an operating system.",
|
|
"description": "Delete (deactivate) an operating system.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: os_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/operatingsystems/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "os_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-operatingsystems"
|
|
],
|
|
"summary": "Get a single operating system.",
|
|
"description": "Get a single operating system.\n\n**Auth:** permission:assets.view\n\n**Params:** path: os_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/operatingsystems/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "os_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-operatingsystems"
|
|
],
|
|
"summary": "Update an operating system.",
|
|
"description": "Update an operating system.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: os_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/operatingsystems/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "os_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: os_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/plugins": {
|
|
"get": {
|
|
"tags": [
|
|
"core-plugins"
|
|
],
|
|
"summary": "List all discovered plugins (enabled or not) with their metadata and the framework contract version.",
|
|
"description": "List all discovered plugins (enabled or not) with their metadata and the framework contract version.\n\n**Auth:** permission:settings.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/plugins -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/plugins/{name}": {
|
|
"put": {
|
|
"tags": [
|
|
"core-plugins"
|
|
],
|
|
"summary": "Enable or disable a plugin. Takes effect on the next app restart for route/navigation changes.",
|
|
"description": "Enable or disable a plugin. Takes effect on the next app restart for route/navigation changes.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: name (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/plugins/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "name",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: name (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/plugins/enabled": {
|
|
"get": {
|
|
"tags": [
|
|
"core-plugins"
|
|
],
|
|
"summary": "Return just the names of enabled plugins as a flat array.",
|
|
"description": "Return just the names of enabled plugins as a flat array.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/plugins/enabled -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/plugins/settings-routes": {
|
|
"get": {
|
|
"tags": [
|
|
"core-plugins"
|
|
],
|
|
"summary": "Return settings routes contributed by all enabled plugins.",
|
|
"description": "Return settings routes contributed by all enabled plugins.\n\n**Auth:** permission:settings.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/plugins/settings-routes -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/pluginui/asset-panels": {
|
|
"get": {
|
|
"tags": [
|
|
"core-pluginui"
|
|
],
|
|
"summary": "Return the asset-detail panels matching one asset's type (get_asset_panels).",
|
|
"description": "Return the asset-detail panels matching one asset's type (get_asset_panels).\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/pluginui/asset-panels -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/pluginui/asset-presentation": {
|
|
"get": {
|
|
"tags": [
|
|
"core-pluginui"
|
|
],
|
|
"summary": "Merge enabled plugins' asset-type presentation entries (hook).",
|
|
"description": "Merge enabled plugins' asset-type presentation entries (hook).\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/pluginui/asset-presentation -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/pluginui/asset-type-descriptors": {
|
|
"get": {
|
|
"tags": [
|
|
"core-pluginui"
|
|
],
|
|
"summary": "Merge enabled plugins' asset-type subtype descriptors.",
|
|
"description": "Merge enabled plugins' asset-type subtype descriptors.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/pluginui/asset-type-descriptors -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/pluginui/core-type-descriptors": {
|
|
"get": {
|
|
"tags": [
|
|
"core-pluginui"
|
|
],
|
|
"summary": "Return type descriptors for core-owned non-asset types.",
|
|
"description": "Return type descriptors for core-owned non-asset types.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/pluginui/core-type-descriptors -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/pluginui/map-overlays": {
|
|
"get": {
|
|
"tags": [
|
|
"core-pluginui"
|
|
],
|
|
"summary": "Merge enabled plugins' map overlay declarations (get_map_overlays hook).",
|
|
"description": "Merge enabled plugins' map overlay declarations (get_map_overlays hook).\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/pluginui/map-overlays -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/pluginui/settings-cards": {
|
|
"get": {
|
|
"tags": [
|
|
"core-pluginui"
|
|
],
|
|
"summary": "Merge enabled plugins' settings-catalog cards (get_settings_cards hook).",
|
|
"description": "Merge enabled plugins' settings-catalog cards (get_settings_cards hook).\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/pluginui/settings-cards -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "List all available reports.",
|
|
"description": "List all available reports.\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/asset-inventory": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Report: Complete asset inventory summary.",
|
|
"description": "Report: Complete asset inventory summary.\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports/asset-inventory -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/assets-by-status": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Report: Asset count grouped by status.",
|
|
"description": "Report: Asset count grouped by status.\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports/assets-by-status -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/email": {
|
|
"post": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Email a report's data as an HTML table (on-demand delivery).",
|
|
"description": "Email a report's data as an HTML table (on-demand delivery).\n\n**Auth:** permission:reports.export\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/reports/email -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/kb-popularity": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Report: Most clicked knowledge base articles.",
|
|
"description": "Report: Most clicked knowledge base articles.\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports/kb-popularity -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/machines-by-type": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Report: Machine count grouped by machine type.",
|
|
"description": "Report: Machine count grouped by machine type.\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports/machines-by-type -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/pc-relationships": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Report: PCs with relationships to shop floor machines.",
|
|
"description": "Report: PCs with relationships to shop floor machines.\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports/pc-relationships -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/reports/software-compliance": {
|
|
"get": {
|
|
"tags": [
|
|
"core-reports"
|
|
],
|
|
"summary": "Report: Required applications vs installed (per PC).",
|
|
"description": "Report: Required applications vs installed (per PC).\n\n**Auth:** permission:reports.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/reports/software-compliance -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/scripts": {
|
|
"get": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "List scripts (active by default).",
|
|
"description": "List scripts (active by default).\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/scripts -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "Create a script catalog entry (body uploaded separately).",
|
|
"description": "Create a script catalog entry (body uploaded separately).\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/scripts -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/scripts/{script_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "UNDOCUMENTED: scripts.delete_script has no docstring.",
|
|
"description": "UNDOCUMENTED: scripts.delete_script has no docstring.\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** path: script_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/scripts/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "script_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "UNDOCUMENTED: scripts.get_script has no docstring.",
|
|
"description": "UNDOCUMENTED: scripts.get_script has no docstring.\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** path: script_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/scripts/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "script_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "UNDOCUMENTED: scripts.update_script has no docstring.",
|
|
"description": "UNDOCUMENTED: scripts.update_script has no docstring.\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** path: script_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/scripts/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "script_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: script_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/scripts/{script_id}/body": {
|
|
"post": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "Upload (or replace) the .ps1 body for a script.",
|
|
"description": "Upload (or replace) the .ps1 body for a script.\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** path: script_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/scripts/1/body -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "script_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: script_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/scripts/body/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-scripts"
|
|
],
|
|
"summary": "Operator-facing script body download (JWT/RBAC).",
|
|
"description": "Operator-facing script body download (JWT/RBAC).\n\n**Auth:** permission:endpoints.runscript\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/scripts/body/example.png -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/search": {
|
|
"get": {
|
|
"tags": [
|
|
"core-search"
|
|
],
|
|
"summary": "Global search across multiple entity types.",
|
|
"description": "Global search across multiple entity types.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/search -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/search/suggest": {
|
|
"get": {
|
|
"tags": [
|
|
"core-search"
|
|
],
|
|
"summary": "A better spelling for a query that found nothing, or null.",
|
|
"description": "A better spelling for a query that found nothing, or null.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/search/suggest -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "List all settings, optionally filtered by category.",
|
|
"description": "List all settings, optionally filtered by category.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Create a new setting (admin only).",
|
|
"description": "Create a new setting (admin only).\n\n**Auth:** permission:settings.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/{key}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Get a single setting by key.",
|
|
"description": "Get a single setting by key.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** path: key (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "key",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Update a setting value.",
|
|
"description": "Update a setting value.\n\n**Auth:** permission:settings.edit\n\n**Params:** path: key (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/settings/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "key",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: key (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/import": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Validate uploaded CSVs and, when commit=true, load them.",
|
|
"description": "Validate uploaded CSVs and, when commit=true, load them.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/asset-import/import -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/script": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Download Collect-ShopDB.ps1 with this site's CSV path embedded.",
|
|
"description": "Download Collect-ShopDB.ps1 with this site's CSV path embedded.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/asset-import/script -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/templates": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "List the importable CSV tables in the order they must be uploaded.",
|
|
"description": "List the importable CSV tables in the order they must be uploaded.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/asset-import/templates -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/templates/{tablename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Download a generated CSV template for a single importable table.",
|
|
"description": "Download a generated CSV template for a single importable table.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: tablename (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/asset-import/templates/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tablename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/settings/asset-import/winc/batches": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "List applied/undone WINC import batches, newest first (for the undo UI).",
|
|
"description": "List applied/undone WINC import batches, newest first (for the undo UI).\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/asset-import/winc/batches -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/winc/commit": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Apply a WINC plan reversibly. Requires acknowledgment for needs-create.",
|
|
"description": "Apply a WINC plan reversibly. Requires acknowledgment for needs-create.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/asset-import/winc/commit -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/winc/preview": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Read-only WINC analysis: report what a commit would do. Writes nothing.",
|
|
"description": "Read-only WINC analysis: report what a commit would do. Writes nothing.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/asset-import/winc/preview -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/asset-import/winc/undo": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Reverse an applied WINC import batch by id. Conservative and reversible.",
|
|
"description": "Reverse an applied WINC import batch by id. Conservative and reversible.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/asset-import/winc/undo -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/branding-logo": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Upload a branding logo image and point the matching setting at it.",
|
|
"description": "Upload a branding logo image and point the matching setting at it.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/branding-logo -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/branding/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Serve an uploaded branding logo (public - kiosks/print pages read it).",
|
|
"description": "Serve an uploaded branding logo (public - kiosks/print pages read it).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/branding/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/settings/map-blueprint": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Upload a floor-map blueprint image and point the setting at it.",
|
|
"description": "Upload a floor-map blueprint image and point the setting at it.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/map-blueprint -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/map-blueprint/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Serve an uploaded blueprint image (public - kiosks read it).",
|
|
"description": "Serve an uploaded blueprint image (public - kiosks read it).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/settings/map-blueprint/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/settings/seed": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Seed default settings if they don't exist.",
|
|
"description": "Seed default settings if they don't exist.\n\n**Auth:** permission:settings.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/seed -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/settings/test-email": {
|
|
"post": {
|
|
"tags": [
|
|
"core-settings"
|
|
],
|
|
"summary": "Send a test email to verify SMTP configuration.",
|
|
"description": "Send a test email to verify SMTP configuration.\n\n**Auth:** permission:settings.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/settings/test-email -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/setup/complete": {
|
|
"post": {
|
|
"tags": [
|
|
"core-setup"
|
|
],
|
|
"summary": "Flag the first-run setup as finished.",
|
|
"description": "Flag the first-run setup as finished.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/setup/complete -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/setup/create-admin": {
|
|
"post": {
|
|
"tags": [
|
|
"core-setup"
|
|
],
|
|
"summary": "Create the first admin. Only works while there are zero users, setup has not been marked complete, and the caller...",
|
|
"description": "Create the first admin. Only works while there are zero users, setup has not been marked complete, and the caller proves operator control (setup token or a loopback request).\n\n**Auth:** none (first run only: refused once an admin exists)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/setup/create-admin -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/setup/needs-admin": {
|
|
"get": {
|
|
"tags": [
|
|
"core-setup"
|
|
],
|
|
"summary": "True when no users exist yet - the app's very first run. Public so the login screen can offer to create the first admin.",
|
|
"description": "True when no users exist yet - the app's very first run. Public so the login screen can offer to create the first admin.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/setup/needs-admin\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/setup/seed-reference": {
|
|
"post": {
|
|
"tags": [
|
|
"core-setup"
|
|
],
|
|
"summary": "Seed core reference data + permissions + default settings. Idempotent - reuses the same routines as the `flask seed...",
|
|
"description": "Seed core reference data + permissions + default settings. Idempotent - reuses the same routines as the `flask seed ...` CLI commands.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/setup/seed-reference -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/setup/seed-starter": {
|
|
"post": {
|
|
"tags": [
|
|
"core-setup"
|
|
],
|
|
"summary": "Add common vendors that are not already present. Idempotent.",
|
|
"description": "Add common vendors that are not already present. Idempotent.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/setup/seed-starter -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/shopdbbackups": {
|
|
"get": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "List every retained backup set, newest first, with a compatibility flag.",
|
|
"description": "List every retained backup set, newest first, with a compatibility flag.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/shopdbbackups -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Kick off an on-demand backup run.",
|
|
"description": "Kick off an on-demand backup run.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/shopdbbackups -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/shopdbbackups/{snapshotid}": {
|
|
"get": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Return one set's full manifest plus a resolved compatibility verdict.",
|
|
"description": "Return one set's full manifest plus a resolved compatibility verdict.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: snapshotid (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/shopdbbackups/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "snapshotid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/shopdbbackups/{snapshotid}/restore": {
|
|
"post": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Queue a restore of a set, gated on schema compatibility.",
|
|
"description": "Queue a restore of a set, gated on schema compatibility.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: snapshotid (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/shopdbbackups/x/restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "snapshotid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: snapshotid (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/shopdbbackups/finalize-restore": {
|
|
"post": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Run the post-restore schema upgrade in the app context.",
|
|
"description": "Run the post-restore schema upgrade in the app context.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/shopdbbackups/finalize-restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/shopdbbackups/history": {
|
|
"get": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Return the recorded history of backup and restore runs, newest first.",
|
|
"description": "Return the recorded history of backup and restore runs, newest first.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/shopdbbackups/history -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/shopdbbackups/settings": {
|
|
"get": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Return destination + retention config for the settings pane.",
|
|
"description": "Return destination + retention config for the settings pane.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/shopdbbackups/settings -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Persist the backup destination kind and its credential/config fields.",
|
|
"description": "Persist the backup destination kind and its credential/config fields.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/shopdbbackups/settings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/shopdbbackups/status": {
|
|
"get": {
|
|
"tags": [
|
|
"core-shopdbbackups"
|
|
],
|
|
"summary": "Return the live status of the most recent backup and restore runs.",
|
|
"description": "Return the live status of the most recent backup and restore runs.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/shopdbbackups/status -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/supportteams": {
|
|
"get": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "List support teams (with contacts). ?active and ?teamname filters.",
|
|
"description": "List support teams (with contacts). ?active and ?teamname filters.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/supportteams -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Create a new support team.",
|
|
"description": "Create a new support team.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/supportteams -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/supportteams/{team_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Delete a support team; 409 while any application references it.",
|
|
"description": "Delete a support team; 409 while any application references it.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: team_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/supportteams/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "team_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Get a single support team with its contacts.",
|
|
"description": "Get a single support team with its contacts.\n\n**Auth:** permission:assets.view\n\n**Params:** path: team_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/supportteams/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "team_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Update a support team.",
|
|
"description": "Update a support team.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: team_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/supportteams/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "team_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: team_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/supportteams/{team_id}/contacts": {
|
|
"post": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Add a contact to a support team.",
|
|
"description": "Add a contact to a support team.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: team_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/supportteams/1/contacts -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "team_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: team_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/supportteams/{team_id}/contacts/{contact_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Delete a support-team contact.",
|
|
"description": "Delete a support-team contact.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: team_id (int), contact_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/supportteams/1/contacts/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "team_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "contact_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-supportteams"
|
|
],
|
|
"summary": "Update a support-team contact.",
|
|
"description": "Update a support-team contact.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: team_id (int), contact_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/supportteams/1/contacts/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "team_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "contact_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: team_id (int), contact_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users": {
|
|
"get": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "List all users.",
|
|
"description": "List all users.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/users -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Create a new user.",
|
|
"description": "Create a new user.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/users -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/{userid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Delete a user.",
|
|
"description": "Delete a user.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: userid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/users/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "userid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Get a single user.",
|
|
"description": "Get a single user.\n\n**Auth:** jwt\n\n**Params:** path: userid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/users/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "userid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Update a user.",
|
|
"description": "Update a user.\n\n**Auth:** jwt\n\n**Params:** path: userid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/users/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "userid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: userid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/permissions": {
|
|
"get": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "List assignable permissions grouped by category.",
|
|
"description": "List assignable permissions grouped by category.\n\n**Auth:** jwt\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/users/permissions -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/roles": {
|
|
"get": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "List all roles with their permissions.",
|
|
"description": "List all roles with their permissions.\n\n**Auth:** jwt\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/users/roles -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Create a new role.",
|
|
"description": "Create a new role.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/users/roles -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/users/roles/{roleid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Delete a role.",
|
|
"description": "Delete a role.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: roleid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/users/roles/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "roleid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-users"
|
|
],
|
|
"summary": "Update a role.",
|
|
"description": "Update a role.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: roleid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/users/roles/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "roleid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: roleid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/vendors": {
|
|
"get": {
|
|
"tags": [
|
|
"core-vendors"
|
|
],
|
|
"summary": "List all vendors.",
|
|
"description": "List all vendors.\n\n**Auth:** permission:assets.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/vendors -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"core-vendors"
|
|
],
|
|
"summary": "Create a new vendor.",
|
|
"description": "Create a new vendor.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/vendors -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/vendors/{vendor_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"core-vendors"
|
|
],
|
|
"summary": "Delete (deactivate) a vendor.",
|
|
"description": "Delete (deactivate) a vendor.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: vendor_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/vendors/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "vendor_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"core-vendors"
|
|
],
|
|
"summary": "Get a single vendor.",
|
|
"description": "Get a single vendor.\n\n**Auth:** permission:assets.view\n\n**Params:** path: vendor_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/vendors/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "vendor_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"core-vendors"
|
|
],
|
|
"summary": "Update a vendor.",
|
|
"description": "Update a vendor.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: vendor_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/vendors/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "vendor_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: vendor_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/backups/asset/{assetid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "Revision history for one asset, newest first.",
|
|
"description": "Revision history for one asset, newest first.\n\n**Auth:** permission:backups.view\n\n**Params:** path: assetid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/backups/asset/{assetid}/info": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "A kind's 'at a glance' card, built from its LATEST revision.",
|
|
"description": "A kind's 'at a glance' card, built from its LATEST revision.\n\n**Auth:** permission:backups.view\n\n**Params:** path: assetid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/asset/1/info -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/backups/dashboard/stale": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "Chains whose backup has stopped running.",
|
|
"description": "Chains whose backup has stopped running.\n\n**Auth:** permission:backups.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/dashboard/stale -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/backups/kinds": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "Registered backup kinds, for UI that needs to enumerate them.",
|
|
"description": "Registered backup kinds, for UI that needs to enumerate them.\n\n**Auth:** permission:backups.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/kinds -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/backups/revisions/{backuprevisionid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "One revision, including its parsed payload where there is one.",
|
|
"description": "One revision, including its parsed payload where there is one.\n\n**Auth:** permission:backups.view\n\n**Params:** path: backuprevisionid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/revisions/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "backuprevisionid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/backups/revisions/{backuprevisionid}/diff": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "Diff two revisions of the same asset+kind.",
|
|
"description": "Diff two revisions of the same asset+kind.\n\n**Auth:** permission:backups.view\n\n**Params:** path: backuprevisionid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/revisions/1/diff -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "backuprevisionid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/backups/revisions/{backuprevisionid}/download": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-backups"
|
|
],
|
|
"summary": "Render a revision back to its native file format.",
|
|
"description": "Render a revision back to its native file format.\n\n**Auth:** permission:backups.download\n\n**Params:** path: backuprevisionid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/backups/revisions/1/download -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "backuprevisionid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/computers": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "List all computers with filtering and pagination.",
|
|
"description": "List all computers with filtering and pagination.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Create new computer (creates both Asset and Computer records).",
|
|
"description": "Create new computer (creates both Asset and Computer records).\n\n**Auth:** permission:computers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/{computer_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Delete (soft delete) computer.",
|
|
"description": "Delete (soft delete) computer.\n\n**Auth:** permission:computers.delete\n\n**Params:** path: computer_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/computers/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Get a single computer with full details.",
|
|
"description": "Get a single computer with full details.\n\n**Auth:** permission:computers.view\n\n**Params:** path: computer_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Update computer (both Asset and Computer records).",
|
|
"description": "Update computer (both Asset and Computer records).\n\n**Auth:** permission:computers.edit\n\n**Params:** path: computer_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/computers/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: computer_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/{computer_id}/apps": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Get all installed applications for a computer.",
|
|
"description": "Get all installed applications for a computer.\n\n**Auth:** permission:computers.view\n\n**Params:** path: computer_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/1/apps -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Add an installed application to a computer.",
|
|
"description": "Add an installed application to a computer.\n\n**Auth:** permission:computers.create\n\n**Params:** path: computer_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers/1/apps -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: computer_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/{computer_id}/apps/{app_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Remove an installed application from a computer.",
|
|
"description": "Remove an installed application from a computer.\n\n**Auth:** permission:computers.delete\n\n**Params:** path: computer_id (int), app_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/computers/1/apps/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/computers/{computer_id}/report": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Report computer status (for agent-based reporting).",
|
|
"description": "Report computer status (for agent-based reporting).\n\n**Auth:** permission:computers.create\n\n**Params:** path: computer_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers/1/report -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "computer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: computer_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/asset/{asset_id}/policypanel": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Keyvalue panel: which policy governs this endpoint, and what it allows.",
|
|
"description": "Keyvalue panel: which policy governs this endpoint, and what it allows.\n\n**Auth:** permission:computers.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/asset/1/policypanel -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/computers/by-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Get computer data by asset ID.",
|
|
"description": "Get computer data by asset ID.\n\n**Auth:** permission:computers.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/by-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/computers/by-hostname/{hostname}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Get computer by hostname.",
|
|
"description": "Get computer by hostname.\n\n**Auth:** permission:computers.view\n\n**Params:** path: hostname (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/by-hostname/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "hostname",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/computers/client-script": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "The collector reporter, stamped with THIS site's values.",
|
|
"description": "The collector reporter, stamped with THIS site's values.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/client-script -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/dashboard/quiet": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "PCs that WERE reporting, have stopped, and are still meant to be in use.",
|
|
"description": "PCs that WERE reporting, have stopped, and are still meant to be in use.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/dashboard/quiet -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/dashboard/sharedmachines": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Machine numbers claimed by more than one PC, with nothing filed under them.",
|
|
"description": "Machine numbers claimed by more than one PC, with nothing filed under them.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/dashboard/sharedmachines -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Get computer dashboard summary data.",
|
|
"description": "Get computer dashboard summary data.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/display-kiosks": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Reporting display kiosks, for the Dashboard Defaults picker.",
|
|
"description": "Reporting display kiosks, for the Dashboard Defaults picker.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/display-kiosks -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/policies/actions": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "The allowlisted action names + labels a policy may reference.",
|
|
"description": "The allowlisted action names + labels a policy may reference.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/policies/actions -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/policies/business": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.list_business_policies has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.list_business_policies has no docstring.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/policies/business -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.create_business_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.create_business_policy has no docstring.\n\n**Auth:** permission:computers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers/policies/business -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/policies/business/{policy_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.delete_business_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.delete_business_policy has no docstring.\n\n**Auth:** permission:computers.delete\n\n**Params:** path: policy_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/computers/policies/business/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.get_business_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.get_business_policy has no docstring.\n\n**Auth:** permission:computers.view\n\n**Params:** path: policy_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/policies/business/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.update_business_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.update_business_policy has no docstring.\n\n**Auth:** permission:computers.edit\n\n**Params:** path: policy_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/computers/policies/business/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: policy_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/policies/configuration": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.list_configuration_policies has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.list_configuration_policies has no docstring.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/policies/configuration -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.create_configuration_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.create_configuration_policy has no docstring.\n\n**Auth:** permission:computers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers/policies/configuration -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/policies/configuration/{policy_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.delete_configuration_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.delete_configuration_policy has no docstring.\n\n**Auth:** permission:computers.delete\n\n**Params:** path: policy_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/computers/policies/configuration/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.get_configuration_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.get_configuration_policy has no docstring.\n\n**Auth:** permission:computers.view\n\n**Params:** path: policy_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/policies/configuration/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.update_configuration_policy has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.update_configuration_policy has no docstring.\n\n**Auth:** permission:computers.edit\n\n**Params:** path: policy_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/computers/policies/configuration/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "policy_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: policy_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/policies/effective/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Preview the resolved effective policy for one endpoint (debug/UI).",
|
|
"description": "Preview the resolved effective policy for one endpoint (debug/UI).\n\n**Auth:** permission:computers.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/policies/effective/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/computers/protocols": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "List access protocols. ?active=false includes disabled ones.",
|
|
"description": "List access protocols. ?active=false includes disabled ones.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/protocols -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.create_protocol has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.create_protocol has no docstring.\n\n**Auth:** permission:computers.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers/protocols -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/protocols/{protocol_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.delete_protocol has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.delete_protocol has no docstring.\n\n**Auth:** permission:computers.edit\n\n**Params:** path: protocol_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/computers/protocols/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "protocol_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"patch": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.update_protocol has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.update_protocol has no docstring.\n\n**Auth:** permission:computers.edit\n\n**Params:** path: protocol_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/computers/protocols/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "protocol_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: protocol_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "UNDOCUMENTED: computers.update_protocol has no docstring.",
|
|
"description": "UNDOCUMENTED: computers.update_protocol has no docstring.\n\n**Auth:** permission:computers.edit\n\n**Params:** path: protocol_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/computers/protocols/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "protocol_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: protocol_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/types": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "List all computer types.",
|
|
"description": "List all computer types.\n\n**Auth:** permission:computers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Create a new computer type.",
|
|
"description": "Create a new computer type.\n\n**Auth:** permission:computers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/computers/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/computers/types/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Delete a computer type. Refused if any PC still uses it.",
|
|
"description": "Delete a computer type. Refused if any PC still uses it.\n\n**Auth:** permission:computers.delete\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/computers/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Get a single computer type.",
|
|
"description": "Get a single computer type.\n\n**Auth:** permission:computers.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/computers/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-computers"
|
|
],
|
|
"summary": "Update a computer type.",
|
|
"description": "Update a computer type.\n\n**Auth:** permission:computers.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/computers/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/employees/{sso}/photo": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Clear an employee photo and delete the uploaded file. External mode 409s.",
|
|
"description": "Clear an employee photo and delete the uploaded file. External mode 409s.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: sso (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/employees/1/photo -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Upload (or replace) the photo for a self-hosted directory employee.",
|
|
"description": "Upload (or replace) the photo for a self-hosted directory employee.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: sso (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/employees/1/photo -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: sso (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/employees/directory": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Full self-hosted directory (for the management page).",
|
|
"description": "Full self-hosted directory (for the management page).\n\n**Auth:** permission:employees.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/employees/directory -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "UNDOCUMENTED: employees.create_directory_employee has no docstring.",
|
|
"description": "UNDOCUMENTED: employees.create_directory_employee has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/employees/directory -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/employees/directory/{sso}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "UNDOCUMENTED: employees.delete_directory_employee has no docstring.",
|
|
"description": "UNDOCUMENTED: employees.delete_directory_employee has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: sso (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/employees/directory/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "UNDOCUMENTED: employees.update_directory_employee has no docstring.",
|
|
"description": "UNDOCUMENTED: employees.update_directory_employee has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: sso (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/employees/directory/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: sso (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/employees/directory/import": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Bulk upsert from CSV. Accepts headers SSO,First_Name,Last_Name,Team,Role, Picture (case-insensitive; sso/firstname...",
|
|
"description": "Bulk upsert from CSV. Accepts headers SSO,First_Name,Last_Name,Team,Role, Picture (case-insensitive; sso/firstname/... also accepted).\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/employees/directory/import -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/employees/lookup": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Look up multiple employees by SSO list.",
|
|
"description": "Look up multiple employees by SSO list.\n\n**Auth:** permission:employees.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/employees/lookup -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/employees/lookup/{sso}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Look up a single employee by SSO.",
|
|
"description": "Look up a single employee by SSO.\n\n**Auth:** permission:employees.view\n\n**Params:** path: sso (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/employees/lookup/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/employees/photo/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Serve an uploaded employee photo (public - kiosk cards read it).",
|
|
"description": "Serve an uploaded employee photo (public - kiosk cards read it).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/employees/photo/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/employees/resolve/{sso}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Resolve one SSO to a name and photo, and say HOW.",
|
|
"description": "Resolve one SSO to a name and photo, and say HOW.\n\n**Auth:** permission:employees.view\n\n**Params:** path: sso (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/employees/resolve/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/employees/search": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-employees"
|
|
],
|
|
"summary": "Search employees by name.",
|
|
"description": "Search employees by name.\n\n**Auth:** permission:employees.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/employees/search -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List reported endpoint states.",
|
|
"description": "List reported endpoint states.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/ -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Get the current state for one endpoint by asset id.",
|
|
"description": "Get the current state for one endpoint by asset id.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/agentupgrade": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Push the published agent build to one endpoint.",
|
|
"description": "Push the published agent build to one endpoint.\n\n**Auth:** permission:endpoints.agentupdate\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/1/agentupgrade -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/commands": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Recent commands for one endpoint, newest first (operator view).",
|
|
"description": "Recent commands for one endpoint, newest first (operator view).\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/commands -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Queue an allowlisted command for one endpoint.",
|
|
"description": "Queue an allowlisted command for one endpoint.\n\n**Auth:** permission:endpoints.command\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/1/commands -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/events": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List curated Windows events for one endpoint, newest first.",
|
|
"description": "List curated Windows events for one endpoint, newest first.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/events -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/holdableactions": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Desired-mode actions on this endpoint, with current hold state.",
|
|
"description": "Desired-mode actions on this endpoint, with current hold state.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/holdableactions -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/lock": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Lift the quarantine on this endpoint.",
|
|
"description": "Lift the quarantine on this endpoint.\n\n**Auth:** permission:endpoints.command\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/endpoints/1/lock -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "The endpoint lock standing on this endpoint, or null.",
|
|
"description": "The endpoint lock standing on this endpoint, or null.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/lock -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Quarantine this endpoint against non-admin commands.",
|
|
"description": "Quarantine this endpoint against non-admin commands.\n\n**Auth:** permission:endpoints.command\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/1/lock -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/logcollections": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Collected-log history for one endpoint, newest first.",
|
|
"description": "Collected-log history for one endpoint, newest first.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/logcollections -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/policyholds": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Active break-glass holds for one endpoint.",
|
|
"description": "Active break-glass holds for one endpoint.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/policyholds -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Deliberately suspend desired-state reconciliation for one or more actions.",
|
|
"description": "Deliberately suspend desired-state reconciliation for one or more actions.\n\n**Auth:** permission:endpoints.command\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/1/policyholds -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/policyholds/{action}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "End a hold early, resuming reconciliation of one action.",
|
|
"description": "End a hold early, resuming reconciliation of one action.\n\n**Auth:** permission:endpoints.command\n\n**Params:** path: asset_id (int), action (string)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/endpoints/1/policyholds/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "action",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/{asset_id}/scriptruns": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "The last few run_script commands for one endpoint, newest first.",
|
|
"description": "The last few run_script commands for one endpoint, newest first.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/1/scriptruns -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/adoptiontool/package": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Bundle the adoption tool as a downloadable ZIP.",
|
|
"description": "Bundle the adoption tool as a downloadable ZIP.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/adoptiontool/package -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/agentkey": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Revoke the endpoint agent key: stop all managed-token endpoint traffic.",
|
|
"description": "Revoke the endpoint agent key: stop all managed-token endpoint traffic.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/endpoints/agentkey -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Report the endpoint agent key state (no secret).",
|
|
"description": "Report the endpoint agent key state (no secret).\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/agentkey -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/agentkey/regenerate": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Mint a fresh endpoint agent key, revoking any previous one.",
|
|
"description": "Mint a fresh endpoint agent key, revoking any previous one.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/agentkey/regenerate -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/alerts": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Fleet alerts for one endpoint by hostname (collector-token auth).",
|
|
"description": "Fleet alerts for one endpoint by hostname (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/alerts -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/alerts/{notification_id}/acknowledge": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent acknowledges a fleet alert (collector-token auth).",
|
|
"description": "Agent acknowledges a fleet alert (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** path: notification_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/alerts/1/acknowledge -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "notification_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: notification_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/apppackage/{appversionid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent-facing installer download (collector-token auth).",
|
|
"description": "Agent-facing installer download (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** path: appversionid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/apppackage/1 -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "appversionid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/apppackage/app/{app_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent-facing installer download by APP (collector-token auth).",
|
|
"description": "Agent-facing installer download by APP (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** path: app_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/apppackage/app/1 -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/apppackage/app/{app_id}/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent-facing installer download by APP (collector-token auth).",
|
|
"description": "Agent-facing installer download by APP (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** path: app_id (int), filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/apppackage/app/1/example.png -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "app_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/activity": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List panel: one chronological feed of what happened to this endpoint.",
|
|
"description": "List panel: one chronological feed of what happened to this endpoint.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/activity -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/applications": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Table panel: the installed-software (SBOM) snapshot for this endpoint.",
|
|
"description": "Table panel: the installed-software (SBOM) snapshot for this endpoint.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/applications -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/diskhealth": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Physical drive health rows.",
|
|
"description": "Physical drive health rows.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/diskhealth -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/hardware": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Keyvalue panel: processor, memory and system chassis inventory.",
|
|
"description": "Keyvalue panel: processor, memory and system chassis inventory.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/hardware -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/interfaces": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Table panel: every hardware NIC the agent last reported.",
|
|
"description": "Table panel: every hardware NIC the agent last reported.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/interfaces -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/iphistory": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Table panel: every address this asset has held, newest change first.",
|
|
"description": "Table panel: every address this asset has held, newest change first.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/iphistory -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/listeners": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Table panel: TCP sockets in LISTEN, with the owning process.",
|
|
"description": "Table panel: TCP sockets in LISTEN, with the owning process.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/listeners -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/mappeddrives": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List panel: mapped network drives with a health badge each.",
|
|
"description": "List panel: mapped network drives with a health badge each.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/mappeddrives -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/osinfo": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Keyvalue panel: operating system, firmware and domain membership.",
|
|
"description": "Keyvalue panel: operating system, firmware and domain membership.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/osinfo -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/recentevents": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List panel: the endpoint's most recent curated events, newest first.",
|
|
"description": "List panel: the endpoint's most recent curated events, newest first.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/recentevents -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/services": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List panel: monitored services/processes with a run-state badge per row.",
|
|
"description": "List panel: monitored services/processes with a run-state badge per row.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/services -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/status": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Keyvalue panel: the endpoint's current status snapshot.",
|
|
"description": "Keyvalue panel: the endpoint's current status snapshot.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/status -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/storage": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Tabs panel: volume capacity and physical drive health as two sections.",
|
|
"description": "Tabs panel: volume capacity and physical drive health as two sections.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/storage -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/telemetrymeta": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Lightweight freshness probe for the panels.",
|
|
"description": "Lightweight freshness probe for the panels.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/telemetrymeta -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/asset/{asset_id}/usercontext": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Keyvalue panel: session-scoped data from the interactive user probe.",
|
|
"description": "Keyvalue panel: session-scoped data from the interactive user probe.\n\n**Auth:** permission:endpoints.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/asset/1/usercontext -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/collect": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent telemetry ingest. Same handler as POST /api/collector/endpoints.",
|
|
"description": "Agent telemetry ingest. Same handler as POST /api/collector/endpoints.\n\n**Auth:** api-key (endpoints collector token)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/collect -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/commands/{command_id}/result": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent reports a claimed command's outcome (collector-token auth).",
|
|
"description": "Agent reports a claimed command's outcome (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** path: command_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/commands/1/result -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "command_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: command_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/commands/next": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent long-poll: claim the next pending command for a hostname.",
|
|
"description": "Agent long-poll: claim the next pending command for a hostname.\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/commands/next -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/dashboard/enrollmentpending": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "One queue row while enroll requests wait for an admin, else nothing.",
|
|
"description": "One queue row while enroll requests wait for an admin, else nothing.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/dashboard/enrollmentpending -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/dashboard/quiet": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Endpoints that reported before, then went quiet past the window.",
|
|
"description": "Endpoints that reported before, then went quiet past the window.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/dashboard/quiet -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/dashboard/reenrollblocked": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "PCs kept from re-enrolling for more than 7 days.",
|
|
"description": "PCs kept from re-enrolling for more than 7 days.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/dashboard/reenrollblocked -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/dashboard/stability": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Endpoints with recent crash/shutdown/corruption events.",
|
|
"description": "Endpoints with recent crash/shutdown/corruption events.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/dashboard/stability -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "High-level fleet counts for the endpoints dashboard.",
|
|
"description": "High-level fleet counts for the endpoints dashboard.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enroll": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "A PC asks for its own credential.",
|
|
"description": "A PC asks for its own credential.\n\n**Auth:** none (per-IP rate limited and capped; a valid fleet key only decides auto-enroll)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/enroll -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Credential state of every computer, plus pending and recent requests.",
|
|
"description": "Credential state of every computer, plus pending and recent requests.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/enrollment -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/assets/{assetid}/allow-reenroll": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Lift a re-enrollment block. The PC enrolls on its next attempt.",
|
|
"description": "Lift a re-enrollment block. The PC enrolls on its next attempt.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: assetid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/enrollment/assets/1/allow-reenroll -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: assetid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/assets/{assetid}/revoke": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Un-enroll a PC. Its agent gets CREDENTIAL_INVALID and enrolls again.",
|
|
"description": "Un-enroll a PC. Its agent gets CREDENTIAL_INVALID and enrolls again.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: assetid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/enrollment/assets/1/revoke -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: assetid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/migration": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Per-computer readiness to move onto per-PC credentials, plus waves.",
|
|
"description": "Per-computer readiness to move onto per-PC credentials, plus waves.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/enrollment/migration -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/migration/wave": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Push the agent upgrade to a batch of READY PCs.",
|
|
"description": "Push the agent upgrade to a batch of READY PCs.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/enrollment/migration/wave -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/requests/{requestid}/approve": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Bind a pending request to the asset the admin picked.",
|
|
"description": "Bind a pending request to the asset the admin picked.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: requestid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/enrollment/requests/1/approve -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "requestid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: requestid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/requests/{requestid}/reject": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "UNDOCUMENTED: endpoints.reject_enroll_request has no docstring.",
|
|
"description": "UNDOCUMENTED: endpoints.reject_enroll_request has no docstring.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: requestid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/enrollment/requests/1/reject -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "requestid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: requestid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/enrollment/settings": {
|
|
"put": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Change the enrollment settings.",
|
|
"description": "Change the enrollment settings.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/endpoints/enrollment/settings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/logcollections/{collection_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "One collected log including its content, for the scrollable pane.",
|
|
"description": "One collected log including its content, for the scrollable pane.\n\n**Auth:** permission:endpoints.updateapp\n\n**Params:** path: collection_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/logcollections/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "collection_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/logcollections/{collection_id}/download": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Serve a collected log as a file attachment.",
|
|
"description": "Serve a collected log as a file attachment.\n\n**Auth:** permission:endpoints.updateapp\n\n**Params:** path: collection_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/logcollections/1/download -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "collection_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/monitors": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List monitor definitions (shipped and local).",
|
|
"description": "List monitor definitions (shipped and local).\n\n**Auth:** permission:endpoints.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/monitors -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Create a user-defined (local) monitor definition.",
|
|
"description": "Create a user-defined (local) monitor definition.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/monitors -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/monitors/{monitor_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Delete a local monitor definition. Shipped rows are protected.",
|
|
"description": "Delete a local monitor definition. Shipped rows are protected.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: monitor_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/endpoints/monitors/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "monitor_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Update a local monitor definition. Shipped rows are read-only.",
|
|
"description": "Update a local monitor definition. Shipped rows are read-only.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: monitor_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/endpoints/monitors/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "monitor_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: monitor_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/monitors/resolve": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Resolve the monitor set for a PC type (agent runtime fetch).",
|
|
"description": "Resolve the monitor set for a PC type (agent runtime fetch).\n\n**Auth:** permission:endpoints.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/monitors/resolve -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/monitors/resolved": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent watch list: the monitors this endpoint should report on.",
|
|
"description": "Agent watch list: the monitors this endpoint should report on.\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/monitors/resolved -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/operatorreports": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent uploads one operator issue report (collector-token auth).",
|
|
"description": "Agent uploads one operator issue report (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/operatorreports -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/operatorreports/{operatorreportid}/image": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Serve one operator report's screenshot.",
|
|
"description": "Serve one operator report's screenshot.\n\n**Auth:** permission:endpoints.operatorreports\n\n**Params:** path: operatorreportid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/operatorreports/1/image -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "operatorreportid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/panel/{asset_id}/operatorreports": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Operator Reports panel: this PC's recent operator issue reports.",
|
|
"description": "Operator Reports panel: this PC's recent operator issue reports.\n\n**Auth:** permission:endpoints.operatorreports\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/panel/1/operatorreports -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/scriptbody/{script_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Agent-facing script body download (collector-token auth).",
|
|
"description": "Agent-facing script body download (collector-token auth).\n\n**Auth:** api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)\n\n**Params:** path: script_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/scriptbody/1 -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "script_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/endpoints/settings/server-cert": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Get details about the current server certificate.",
|
|
"description": "Get details about the current server certificate.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/settings/server-cert -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/settings/server-cert/download": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "The PUBLIC server certificate as a DER .cer file, never the key.",
|
|
"description": "The PUBLIC server certificate as a DER .cer file, never the key.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/settings/server-cert/download -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/settings/server-cert/generate": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Generate a new self-signed server certificate.",
|
|
"description": "Generate a new self-signed server certificate.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/settings/server-cert/generate -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/settings/server-cert/live": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "The certificate PCs actually receive from this site's public address.",
|
|
"description": "The certificate PCs actually receive from this site's public address.\n\n**Auth:** permission:endpoints.fleet\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/settings/server-cert/live -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/settings/server-cert/upload": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Upload a new server certificate and private key.",
|
|
"description": "Upload a new server certificate and private key.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/settings/server-cert/upload -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Report whether the site agent build has a prebuilt binary staged.",
|
|
"description": "Report whether the site agent build has a prebuilt binary staged.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/siteagent -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/binaries/{binkey}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "List staged versions for a binary (agent or tray), newest first.",
|
|
"description": "List staged versions for a binary (agent or tray), newest first.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** path: binkey (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/siteagent/binaries/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "binkey",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Stage an uploaded binary as a new version.",
|
|
"description": "Stage an uploaded binary as a new version.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** path: binkey (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/siteagent/binaries/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "binkey",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: binkey (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/binaries/{binkey}/adopt": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Adopt the unmanaged legacy flat file into the version store.",
|
|
"description": "Adopt the unmanaged legacy flat file into the version store.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** path: binkey (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/siteagent/binaries/x/adopt -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "binkey",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: binkey (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/binaries/{binkey}/current": {
|
|
"put": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Point 'current' at an already-staged version (roll back or forward).",
|
|
"description": "Point 'current' at an already-staged version (roll back or forward).\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** path: binkey (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/endpoints/siteagent/binaries/x/current -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "binkey",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: binkey (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/binaries/{binkey}/detect": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Read the PE file version of an uploaded EXE without staging it.",
|
|
"description": "Read the PE file version of an uploaded EXE without staging it.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** path: binkey (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/siteagent/binaries/x/detect -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "binkey",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: binkey (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/bootstrap.ps1": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "The PowerShell the one-line command downloads, runs and deletes.",
|
|
"description": "The PowerShell the one-line command downloads, runs and deletes.\n\n**Auth:** api-key (single-use bootstrap token in the X-Endpoint-Bootstrap-Token header, or ?t= while that is enabled; per-IP rate limited, 404 when not usable)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/siteagent/bootstrap.ps1\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/bootstrap/package": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "The keyless agent package the bootstrap script installs.",
|
|
"description": "The keyless agent package the bootstrap script installs.\n\n**Auth:** api-key (single-use bootstrap token in the X-Endpoint-Bootstrap-Token header, or ?t= while that is enabled; per-IP rate limited, 404 when not usable)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/siteagent/bootstrap/package\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/bootstrap/tokens": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Every bootstrap token, newest first. Never a secret.",
|
|
"description": "Every bootstrap token, newest first. Never a secret.\n\n**Auth:** jwt + role:admin\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/endpoints/siteagent/bootstrap/tokens -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Mint one short-lived bootstrap token. The secret is returned ONCE.",
|
|
"description": "Mint one short-lived bootstrap token. The secret is returned ONCE.\n\n**Auth:** jwt + role:admin\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/siteagent/bootstrap/tokens -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/bootstrap/tokens/{tokenid}/revoke": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Kill a bootstrap token now. Already-revoked is a no-op, not an error.",
|
|
"description": "Kill a bootstrap token now. Already-revoked is a no-op, not an error.\n\n**Auth:** jwt + role:admin\n\n**Params:** path: tokenid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/siteagent/bootstrap/tokens/1/revoke -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tokenid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: tokenid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/endpoints/siteagent/package": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-endpoints"
|
|
],
|
|
"summary": "Bundle the site agent as a downloadable ZIP.",
|
|
"description": "Bundle the site agent as a downloadable ZIP.\n\n**Auth:** permission:endpoints.agentpackage\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/endpoints/siteagent/package -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/applications": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "The core Applications catalog (id + name) for the curated entry->app link picker in the entry editor.",
|
|
"description": "The core Applications catalog (id + name) for the curated entry->app link picker in the entry editor.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/applications -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/config": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Plugin config: the on-share export root + the client IP allowlist.",
|
|
"description": "Plugin config: the on-share export root + the client IP allowlist.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/config -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.put_config has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.put_config has no docstring.\n\n**Auth:** permission:geenforce.publish\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/geenforce/config -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/dashboard/failures": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Entries that FAILED on their PC's most recent enforcement cycle.",
|
|
"description": "Entries that FAILED on their PC's most recent enforcement cycle.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/dashboard/failures -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/entries/{entryid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.delete_entry has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.delete_entry has no docstring.\n\n**Auth:** permission:geenforce.manage\n\n**Params:** path: entryid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/geenforce/entries/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "entryid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.update_entry has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.update_entry has no docstring.\n\n**Auth:** permission:geenforce.manage\n\n**Params:** path: entryid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/geenforce/entries/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "entryid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: entryid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/entries/{entryid}/payload": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Return the stored inline payload bytes for an entry (404 if none).",
|
|
"description": "Return the stored inline payload bytes for an entry (404 if none).\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: entryid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/entries/1/payload -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "entryid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Store an inline payload (<= 1 MB) for an entry and point the entry at it.",
|
|
"description": "Store an inline payload (<= 1 MB) for an entry and point the entry at it.\n\n**Auth:** permission:geenforce.publish\n\n**Params:** path: entryid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/entries/1/payload -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "entryid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: entryid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/manifest": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Serve the current published manifest for a scope (fat-client: full scope).",
|
|
"description": "Serve the current published manifest for a scope (fat-client: full scope).\n\n**Auth:** api-key (geenforce fetch token, or the IP allowlist)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/manifest -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/payload/{sha256}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Serve a payload blob by content hash over HTTPS.",
|
|
"description": "Serve a payload blob by content hash over HTTPS.\n\n**Auth:** api-key (geenforce fetch token, or the IP allowlist)\n\n**Params:** path: sha256 (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/payload/x -H \"X-API-Key: $KEY\"\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sha256",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/report": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Record one PC's enforcement cycle: applied version (did it receive the update?) + per-entry self-heal outcomes...",
|
|
"description": "Record one PC's enforcement cycle: applied version (did it receive the update?) + per-entry self-heal outcomes (installed/skipped/failed).\n\n**Auth:** api-key (geenforce report token)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/report -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/reports": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Latest enforcement report per PC (fleet compliance view).",
|
|
"description": "Latest enforcement report per PC (fleet compliance view).\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/reports -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/reports/{reportid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "One report with per-entry outcomes (self-heal / failure detail).",
|
|
"description": "One report with per-entry outcomes (self-heal / failure detail).\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: reportid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/reports/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "reportid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/scopes": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "List imaging PC-type scopes with entry + published-version counts.",
|
|
"description": "List imaging PC-type scopes with entry + published-version counts.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.create_scope has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.create_scope has no docstring.\n\n**Auth:** permission:geenforce.manage\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/scopes -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.delete_scope has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.delete_scope has no docstring.\n\n**Auth:** permission:geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/geenforce/scopes/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.get_scope has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.get_scope has no docstring.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.update_scope has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.update_scope has no docstring.\n\n**Auth:** permission:geenforce.manage\n\n**Params:** path: scopeid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/geenforce/scopes/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: scopeid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/compliance": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Fleet-install coverage per app-linked entry (from collected PC data).",
|
|
"description": "Fleet-install coverage per app-linked entry (from collected PC data).\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1/compliance -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/entries": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.create_entry has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.create_entry has no docstring.\n\n**Auth:** permission:geenforce.manage\n\n**Params:** path: scopeid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/scopes/1/entries -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: scopeid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/entries/reorder": {
|
|
"put": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Set entry order from a list of entryids (the ordering contract).",
|
|
"description": "Set entry order from a list of entryids (the ordering contract).\n\n**Auth:** permission:geenforce.manage\n\n**Params:** path: scopeid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/geenforce/scopes/1/entries/reorder -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: scopeid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/export-share": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Write the scope's current published JSON to the configured share root (backing up the old file to _meta/history first).",
|
|
"description": "Write the scope's current published JSON to the configured share root (backing up the old file to _meta/history first).\n\n**Auth:** permission:geenforce.publish\n\n**Params:** path: scopeid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/scopes/1/export-share -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: scopeid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/preview": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Render the DRAFT manifest JSON a publish would freeze (review before ship).",
|
|
"description": "Render the DRAFT manifest JSON a publish would freeze (review before ship).\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1/preview -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/publish": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.publish_scope_route has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.publish_scope_route has no docstring.\n\n**Auth:** permission:geenforce.publish\n\n**Params:** path: scopeid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/scopes/1/publish -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: scopeid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/publish-preflight": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Would publishing this scope outrun the fleet's enforcer lib?",
|
|
"description": "Would publishing this scope outrun the fleet's enforcer lib?\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1/publish-preflight -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/rollback": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.rollback_scope_route has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.rollback_scope_route has no docstring.\n\n**Auth:** permission:geenforce.publish\n\n**Params:** path: scopeid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/geenforce/scopes/1/rollback -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: scopeid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/simulate": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "Which draft entries apply to a given machine profile, and why the rest are filtered out (reuses the engine-mirror...",
|
|
"description": "Which draft entries apply to a given machine profile, and why the rest are filtered out (reuses the engine-mirror filters).\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1/simulate -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/versions": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.list_versions has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.list_versions has no docstring.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1/versions -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/geenforce/scopes/{scopeid}/versions/{versionnumber}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-geenforce"
|
|
],
|
|
"summary": "UNDOCUMENTED: geenforce.get_version has no docstring.",
|
|
"description": "UNDOCUMENTED: geenforce.get_version has no docstring.\n\n**Auth:** permission:geenforce.view or geenforce.manage\n\n**Params:** path: scopeid (int), versionnumber (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/geenforce/scopes/1/versions/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "scopeid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "versionnumber",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/guides": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "Published guides, plus the caller's own drafts if they can author.",
|
|
"description": "Published guides, plus the caller's own drafts if they can author.\n\n**Auth:** permission:guides.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.create_guide has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.create_guide has no docstring.\n\n**Auth:** permission:guides.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/guides -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/guides/{guideid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.delete_guide has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.delete_guide has no docstring.\n\n**Auth:** permission:guides.delete\n\n**Params:** path: guideid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/guides/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.update_guide has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.update_guide has no docstring.\n\n**Auth:** permission:guides.view\n\n**Params:** path: guideid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/guides/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: guideid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/guides/{guideid}/publish": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.publish_guide has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.publish_guide has no docstring.\n\n**Auth:** permission:guides.publish\n\n**Params:** path: guideid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/guides/1/publish -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: guideid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/guides/{guideid}/restore/{revisionid}": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.restore_revision has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.restore_revision has no docstring.\n\n**Auth:** permission:guides.view\n\n**Params:** path: guideid (int), revisionid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/guides/1/restore/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
},
|
|
{
|
|
"name": "revisionid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: guideid (int), revisionid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/guides/{guideid}/revisions": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.list_revisions has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.list_revisions has no docstring.\n\n**Auth:** permission:guides.view\n\n**Params:** path: guideid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides/1/revisions -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/guides/{guideid}/unpublish": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "UNDOCUMENTED: guides.unpublish_guide has no docstring.",
|
|
"description": "UNDOCUMENTED: guides.unpublish_guide has no docstring.\n\n**Auth:** permission:guides.publish\n\n**Params:** path: guideid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/guides/1/unpublish -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: guideid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/guides/{guideid}/working": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "The working copy, for the editor.",
|
|
"description": "The working copy, for the editor.\n\n**Auth:** permission:guides.view\n\n**Params:** path: guideid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides/1/working -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "guideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/guides/{slug}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "What a reader gets: the published revision.",
|
|
"description": "What a reader gets: the published revision.\n\n**Auth:** permission:guides.view\n\n**Params:** path: slug (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "slug",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/guides/images": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "Take a pasted or dropped image.",
|
|
"description": "Take a pasted or dropped image.\n\n**Auth:** permission:guides.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/guides/images -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/guides/images/{imageid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "The image itself, under the same rule as the guide that holds it.",
|
|
"description": "The image itself, under the same rule as the guide that holds it.\n\n**Auth:** permission:guides.view\n\n**Params:** path: imageid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides/images/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "imageid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/guides/revisions/{revisionid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "One revision by id.",
|
|
"description": "One revision by id.\n\n**Auth:** permission:guides.view\n\n**Params:** path: revisionid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides/revisions/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "revisionid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/guides/tags": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-guides"
|
|
],
|
|
"summary": "Every tag in use, with a count, for the filter chips.",
|
|
"description": "Every tag in use, with a count, for the filter chips.\n\n**Auth:** permission:guides.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/guides/tags -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/knowledgebase": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "List all knowledge base articles.",
|
|
"description": "List all knowledge base articles.\n\n**Auth:** permission:kb.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/knowledgebase -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "Create a new knowledge base article.",
|
|
"description": "Create a new knowledge base article.\n\n**Auth:** permission:kb.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/knowledgebase -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/knowledgebase/{link_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "Delete (deactivate) a knowledge base article.",
|
|
"description": "Delete (deactivate) a knowledge base article.\n\n**Auth:** permission:kb.delete\n\n**Params:** path: link_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/knowledgebase/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "link_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "Get a single knowledge base article.",
|
|
"description": "Get a single knowledge base article.\n\n**Auth:** permission:kb.view\n\n**Params:** path: link_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/knowledgebase/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "link_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "Update a knowledge base article.",
|
|
"description": "Update a knowledge base article.\n\n**Auth:** permission:kb.edit\n\n**Params:** path: link_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/knowledgebase/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "link_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: link_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/knowledgebase/{link_id}/click": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "Increment the click counter for an article the caller is allowed to read.",
|
|
"description": "Increment the click counter for an article the caller is allowed to read.\n\n**Auth:** permission:kb.view\n\n**Params:** path: link_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/knowledgebase/1/click -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "link_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: link_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/knowledgebase/stats": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-knowledgebase"
|
|
],
|
|
"summary": "Get knowledge base statistics.",
|
|
"description": "Get knowledge base statistics.\n\n**Auth:** permission:kb.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/knowledgebase/stats -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/machines": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "List all machines with filtering and pagination.",
|
|
"description": "List all machines with filtering and pagination.\n\n**Auth:** permission:machines.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Create new machine (creates both Asset and Machine records).",
|
|
"description": "Create new machine (creates both Asset and Machine records).\n\n**Auth:** permission:machines.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/machines -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/machines/{machine_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Delete (soft delete) machine.",
|
|
"description": "Delete (soft delete) machine.\n\n**Auth:** permission:machines.delete\n\n**Params:** path: machine_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/machines/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Get a single machine item with full details.",
|
|
"description": "Get a single machine item with full details.\n\n**Auth:** permission:machines.view\n\n**Params:** path: machine_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Update machine (both Asset and Machine records).",
|
|
"description": "Update machine (both Asset and Machine records).\n\n**Auth:** permission:machines.edit\n\n**Params:** path: machine_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/machines/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "machine_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: machine_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/machines/by-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Get machine data by asset ID.",
|
|
"description": "Get machine data by asset ID.\n\n**Auth:** permission:machines.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines/by-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/machines/dashboard/outofservice": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Machines whose status says they are not running.",
|
|
"description": "Machines whose status says they are not running.\n\n**Auth:** permission:machines.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines/dashboard/outofservice -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/machines/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Get machine dashboard summary data.",
|
|
"description": "Get machine dashboard summary data.\n\n**Auth:** permission:machines.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/machines/types": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "List all machine types.",
|
|
"description": "List all machine types.\n\n**Auth:** permission:machines.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Create a new machine type.",
|
|
"description": "Create a new machine type.\n\n**Auth:** permission:machines.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/machines/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/machines/types/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Delete a machine type. Refused if any asset still uses it.",
|
|
"description": "Delete a machine type. Refused if any asset still uses it.\n\n**Auth:** permission:machines.delete\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/machines/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Get a single machine type.",
|
|
"description": "Get a single machine type.\n\n**Auth:** permission:machines.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/machines/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-machines"
|
|
],
|
|
"summary": "Update a machine type.",
|
|
"description": "Update a machine type.\n\n**Auth:** permission:machines.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/machines/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/measuringtools": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "List measuring tools with filters + pagination.",
|
|
"description": "List measuring tools with filters + pagination.\n\n**Auth:** permission:measuringtools.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Create a measuring tool: one Asset core row + one extension row.",
|
|
"description": "Create a measuring tool: one Asset core row + one extension row.\n\n**Auth:** permission:measuringtools.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/measuringtools -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/measuringtools/{tool_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Soft delete a measuring tool (deactivates its asset).",
|
|
"description": "Soft delete a measuring tool (deactivates its asset).\n\n**Auth:** permission:measuringtools.delete\n\n**Params:** path: tool_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/measuringtools/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tool_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Get one measuring tool (asset core merged with the extension).",
|
|
"description": "Get one measuring tool (asset core merged with the extension).\n\n**Auth:** permission:measuringtools.view\n\n**Params:** path: tool_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tool_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Update a measuring tool (asset core fields + extension in one payload).",
|
|
"description": "Update a measuring tool (asset core fields + extension in one payload).\n\n**Auth:** permission:measuringtools.edit\n\n**Params:** path: tool_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/measuringtools/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "tool_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: tool_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/measuringtools/by-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Get a measuring tool by its core asset id.",
|
|
"description": "Get a measuring tool by its core asset id.\n\n**Auth:** permission:measuringtools.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools/by-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/measuringtools/map-overlay": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Calibration-status overlay for active measuring tools.",
|
|
"description": "Calibration-status overlay for active measuring tools.\n\n**Auth:** permission:measuringtools.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools/map-overlay -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/measuringtools/report/calibration": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Counts + lists bucketed by derived calibration status.",
|
|
"description": "Counts + lists bucketed by derived calibration status.\n\n**Auth:** permission:measuringtools.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools/report/calibration -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/measuringtools/types": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "List measuring-tool types.",
|
|
"description": "List measuring-tool types.\n\n**Auth:** permission:measuringtools.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Create a measuring-tool type (reactivates a soft-deleted same-named one).",
|
|
"description": "Create a measuring-tool type (reactivates a soft-deleted same-named one).\n\n**Auth:** permission:measuringtools.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/measuringtools/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/measuringtools/types/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Delete a measuring-tool type. Refused if any tool still uses it.",
|
|
"description": "Delete a measuring-tool type. Refused if any tool still uses it.\n\n**Auth:** permission:measuringtools.delete\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/measuringtools/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Get one measuring-tool type.",
|
|
"description": "Get one measuring-tool type.\n\n**Auth:** permission:measuringtools.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/measuringtools/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-measuringtools"
|
|
],
|
|
"summary": "Update a measuring-tool type.",
|
|
"description": "Update a measuring-tool type.\n\n**Auth:** permission:measuringtools.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/measuringtools/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "List all network devices with filtering and pagination.",
|
|
"description": "List all network devices with filtering and pagination.\n\n**Auth:** permission:network.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/network -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Create new network device (creates both Asset and NetworkDevice records).",
|
|
"description": "Create new network device (creates both Asset and NetworkDevice records).\n\n**Auth:** permission:network.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/network -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/{device_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Delete (soft delete) network device.",
|
|
"description": "Delete (soft delete) network device.\n\n**Auth:** permission:network.delete\n\n**Params:** path: device_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/network/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get a single network device with full details.",
|
|
"description": "Get a single network device with full details.\n\n**Auth:** permission:network.view\n\n**Params:** path: device_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Update network device (both Asset and NetworkDevice records).",
|
|
"description": "Update network device (both Asset and NetworkDevice records).\n\n**Auth:** permission:network.edit\n\n**Params:** path: device_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/network/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: device_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/by-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get network device data by asset ID.",
|
|
"description": "Get network device data by asset ID.\n\n**Auth:** permission:network.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/by-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/network/by-hostname/{hostname}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get network device by hostname.",
|
|
"description": "Get network device by hostname.\n\n**Auth:** permission:network.view\n\n**Params:** path: hostname (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/by-hostname/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "hostname",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/network/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get network device dashboard summary data.",
|
|
"description": "Get network device dashboard summary data.\n\n**Auth:** permission:network.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/subnets": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "List all subnets with filtering and pagination.",
|
|
"description": "List all subnets with filtering and pagination.\n\n**Auth:** permission:network.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/subnets -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Create a new subnet.",
|
|
"description": "Create a new subnet.\n\n**Auth:** permission:network.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/network/subnets -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/subnets/{subnet_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Delete (soft delete) a subnet.",
|
|
"description": "Delete (soft delete) a subnet.\n\n**Auth:** permission:network.delete\n\n**Params:** path: subnet_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/network/subnets/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "subnet_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get a single subnet plus the network devices whose primary IP falls in its CIDR range.",
|
|
"description": "Get a single subnet plus the network devices whose primary IP falls in its CIDR range.\n\n**Auth:** permission:network.view\n\n**Params:** path: subnet_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/subnets/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "subnet_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Update a subnet.",
|
|
"description": "Update a subnet.\n\n**Auth:** permission:network.edit\n\n**Params:** path: subnet_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/network/subnets/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "subnet_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: subnet_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/types": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "List all network device types.",
|
|
"description": "List all network device types.\n\n**Auth:** permission:network.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Create a new network device type.",
|
|
"description": "Create a new network device type.\n\n**Auth:** permission:network.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/network/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/types/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Delete a network device type. Refused if any device still uses it.",
|
|
"description": "Delete a network device type. Refused if any device still uses it.\n\n**Auth:** permission:network.delete\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/network/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get a single network device type.",
|
|
"description": "Get a single network device type.\n\n**Auth:** permission:network.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Update a network device type.",
|
|
"description": "Update a network device type.\n\n**Auth:** permission:network.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/network/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/vlans": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "List all VLANs with filtering and pagination.",
|
|
"description": "List all VLANs with filtering and pagination.\n\n**Auth:** permission:network.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/vlans -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Create a new VLAN.",
|
|
"description": "Create a new VLAN.\n\n**Auth:** permission:network.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/network/vlans -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/network/vlans/{vlan_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Delete (soft delete) a VLAN.",
|
|
"description": "Delete (soft delete) a VLAN.\n\n**Auth:** permission:network.delete\n\n**Params:** path: vlan_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/network/vlans/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "vlan_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Get a single VLAN with its subnets.",
|
|
"description": "Get a single VLAN with its subnets.\n\n**Auth:** permission:network.view\n\n**Params:** path: vlan_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/network/vlans/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "vlan_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-network"
|
|
],
|
|
"summary": "Update a VLAN.",
|
|
"description": "Update a VLAN.\n\n**Auth:** permission:network.edit\n\n**Params:** path: vlan_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/network/vlans/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "vlan_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: vlan_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "List all notifications with filtering and pagination.",
|
|
"description": "List all notifications with filtering and pagination.\n\n**Auth:** permission:notifications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Create a new notification.",
|
|
"description": "Create a new notification.\n\n**Auth:** permission:notifications.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/notifications -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/{notification_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Delete (soft delete) a notification.",
|
|
"description": "Delete (soft delete) a notification.\n\n**Auth:** permission:notifications.delete\n\n**Params:** path: notification_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/notifications/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "notification_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Get a single notification.",
|
|
"description": "Get a single notification.\n\n**Auth:** permission:notifications.view\n\n**Params:** path: notification_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "notification_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Update a notification.",
|
|
"description": "Update a notification.\n\n**Auth:** permission:notifications.edit\n\n**Params:** path: notification_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/notifications/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "notification_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: notification_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/active": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Get currently active notifications for display.",
|
|
"description": "Get currently active notifications for display.\n\n**Auth:** permission:notifications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/active -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/calendar": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Get notifications in FullCalendar event format.",
|
|
"description": "Get notifications in FullCalendar event format.\n\n**Auth:** permission:notifications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/calendar -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/dashboard/active": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Notifications currently showing on the floor.",
|
|
"description": "Notifications currently showing on the floor.\n\n**Auth:** permission:notifications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/dashboard/active -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Get notifications dashboard summary.",
|
|
"description": "Get notifications dashboard summary.\n\n**Auth:** permission:notifications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/employee/{sso}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Get recognitions for a specific employee by SSO.",
|
|
"description": "Get recognitions for a specific employee by SSO.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: sso (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/employee/x\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "sso",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/notifications/shopfloor": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Get notifications for shopfloor TV dashboard.",
|
|
"description": "Get notifications for shopfloor TV dashboard.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/shopfloor\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/types": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "List all notification types.",
|
|
"description": "List all notification types.\n\n**Auth:** permission:notifications.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/notifications/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Create a new notification type.",
|
|
"description": "Create a new notification type.\n\n**Auth:** permission:notifications.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/notifications/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/notifications/types/{type_id}": {
|
|
"patch": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Update a notification type, including its auto-expiry rule.",
|
|
"description": "Update a notification type, including its auto-expiry rule.\n\n**Auth:** permission:notifications.create\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/notifications/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-notifications"
|
|
],
|
|
"summary": "Update a notification type, including its auto-expiry rule.",
|
|
"description": "Update a notification type, including its auto-expiry rule.\n\n**Auth:** permission:notifications.create\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/notifications/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/files/{file_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Remove a bad revision (wrong file uploaded). History otherwise stays.",
|
|
"description": "Remove a bad revision (wrong file uploaded). History otherwise stays.\n\n**Auth:** permission:printedparts.delete\n\n**Params:** path: file_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printedparts/files/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "file_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printedparts/files/{file_id}/download": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Download a revision under its original filename.",
|
|
"description": "Download a revision under its original filename.\n\n**Auth:** permission:printedparts.view\n\n**Params:** path: file_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/files/1/download -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "file_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printedparts/image/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Serve an uploaded item image (public - kiosk and list read it).",
|
|
"description": "Serve an uploaded item image (public - kiosk and list read it).\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/image/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printedparts/items": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "List printed items, paginated; search + low-stock filter.",
|
|
"description": "List printed items, paginated; search + low-stock filter.\n\n**Auth:** permission:printedparts.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/items -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Create a printed item.",
|
|
"description": "Create a printed item.\n\n**Auth:** permission:printedparts.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/items -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/items/{item_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Soft-retire an item; its ledger history stays.",
|
|
"description": "Soft-retire an item; its ledger history stays.\n\n**Auth:** permission:printedparts.delete\n\n**Params:** path: item_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printedparts/items/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Get one printed item with its recent transactions.",
|
|
"description": "Get one printed item with its recent transactions.\n\n**Auth:** permission:printedparts.view\n\n**Params:** path: item_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/items/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Update catalog fields. Quantity moves ONLY through the ledger.",
|
|
"description": "Update catalog fields. Quantity moves ONLY through the ledger.\n\n**Auth:** permission:printedparts.edit\n\n**Params:** path: item_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/printedparts/items/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: item_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/items/{item_id}/adjust": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Correct the count (damage, recount). Body: {quantitychange, reason, badge}.",
|
|
"description": "Correct the count (damage, recount). Body: {quantitychange, reason, badge}.\n\n**Auth:** permission:printedparts.restock\n\n**Params:** path: item_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/items/1/adjust -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: item_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/items/{item_id}/files": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Revision history, newest first.",
|
|
"description": "Revision history, newest first.\n\n**Auth:** permission:printedparts.view\n\n**Params:** path: item_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/items/1/files -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Upload the next revision of the item's print file.",
|
|
"description": "Upload the next revision of the item's print file.\n\n**Auth:** permission:printedparts.edit\n\n**Params:** path: item_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/items/1/files -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: item_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/items/{item_id}/image": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Clear an item image; delete the file only if this plugin owns it.",
|
|
"description": "Clear an item image; delete the file only if this plugin owns it.\n\n**Auth:** permission:printedparts.delete\n\n**Params:** path: item_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printedparts/items/1/image -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Upload (or replace) the photo for an item (multipart file=<image>).",
|
|
"description": "Upload (or replace) the photo for an item (multipart file=<image>).\n\n**Auth:** permission:printedparts.edit\n\n**Params:** path: item_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/items/1/image -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: item_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/items/{item_id}/restock": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Add freshly printed stock. Body: {quantity, badge}.",
|
|
"description": "Add freshly printed stock. Body: {quantity, badge}.\n\n**Auth:** permission:printedparts.restock\n\n**Params:** path: item_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/items/1/restock -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: item_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/items/{item_id}/restore": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Bring a retired item back; code, photo, and history are intact.",
|
|
"description": "Bring a retired item back; code, photo, and history are intact.\n\n**Auth:** permission:printedparts.delete\n\n**Params:** path: item_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/items/1/restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "item_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: item_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/kiosk/item/{itemcode}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Item summary for a scanned bin barcode. Kiosk-token gated.",
|
|
"description": "Item summary for a scanned bin barcode. Kiosk-token gated.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** path: itemcode (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/kiosk/item/x\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "itemcode",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printedparts/kiosk/provisioning-link": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "The URL that provisions a screen, token included, for an administrator.",
|
|
"description": "The URL that provisions a screen, token included, for an administrator.\n\n**Auth:** permission:settings.edit\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/kiosk/provisioning-link -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/kiosk/take": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Take parts from a bin. Body: {itemcode, badge, quantity}.",
|
|
"description": "Take parts from a bin. Body: {itemcode, badge, quantity}.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printedparts/kiosk/take -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/reports/by-person": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Takes grouped by employee, optionally bounded by ?days=<n> (default 30).",
|
|
"description": "Takes grouped by employee, optionally bounded by ?days=<n> (default 30).\n\n**Auth:** permission:printedparts.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/reports/by-person -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/reports/consumption": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Takes per item, optionally bounded by ?days=<n> (default 30).",
|
|
"description": "Takes per item, optionally bounded by ?days=<n> (default 30).\n\n**Auth:** permission:printedparts.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/reports/consumption -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printedparts/reports/stock": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printedparts"
|
|
],
|
|
"summary": "Stock levels with low-stock flags and the cache-vs-ledger reconcile.",
|
|
"description": "Stock levels with low-stock flags and the cache-vs-ledger reconcile.\n\n**Auth:** permission:printedparts.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printedparts/reports/stock -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "List all printers with filtering and pagination.",
|
|
"description": "List all printers with filtering and pagination.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Create new printer (creates both Asset and Printer records).",
|
|
"description": "Create new printer (creates both Asset and Printer records).\n\n**Auth:** permission:printers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printers -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/{printer_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Delete (soft delete) printer.",
|
|
"description": "Delete (soft delete) printer.\n\n**Auth:** permission:printers.delete\n\n**Params:** path: printer_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printers/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "printer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Get a single printer with full details.",
|
|
"description": "Get a single printer with full details.\n\n**Auth:** permission:printers.view\n\n**Params:** path: printer_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "printer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Update printer (both Asset and Printer records).",
|
|
"description": "Update printer (both Asset and Printer records).\n\n**Auth:** permission:printers.edit\n\n**Params:** path: printer_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/printers/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "printer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: printer_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/{printer_id}/supplies": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Get supply levels from Zabbix (real-time lookup).",
|
|
"description": "Get supply levels from Zabbix (real-time lookup).\n\n**Auth:** permission:printers.view\n\n**Params:** path: printer_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/1/supplies -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "printer_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printers/assignments/for-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "What THIS asset is assigned, without inheritance.",
|
|
"description": "What THIS asset is assigned, without inheritance.\n\n**Auth:** permission:printers.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/assignments/for-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Reconcile one asset's whole printer assignment in a single call.",
|
|
"description": "Reconcile one asset's whole printer assignment in a single call.\n\n**Auth:** permission:printers.edit\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/printers/assignments/for-asset/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/assignments/seed-from-observed/{asset_id}": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Write what a PC observed as the assignment of the asset in the path.",
|
|
"description": "Write what a PC observed as the assignment of the asset in the path.\n\n**Auth:** permission:printers.edit\n\n**Params:** path: asset_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printers/assignments/seed-from-observed/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: asset_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/by-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Get printer data by asset ID.",
|
|
"description": "Get printer data by asset ID.\n\n**Auth:** permission:printers.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/by-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printers/dashboard/summary": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Get printer dashboard summary data.",
|
|
"description": "Get printer dashboard summary data.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/dashboard/summary -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/dashboard/supplies": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Printers needing a cartridge, flattened to one row per printer.",
|
|
"description": "Printers needing a cartridge, flattened to one row per printer.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/dashboard/supplies -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/drivers": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "List printer drivers. ?active=false includes inactive ones.",
|
|
"description": "List printer drivers. ?active=false includes inactive ones.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/drivers -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "UNDOCUMENTED: printers_asset.create_driver has no docstring.",
|
|
"description": "UNDOCUMENTED: printers_asset.create_driver has no docstring.\n\n**Auth:** permission:printers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printers/drivers -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/drivers/{driver_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "UNDOCUMENTED: printers_asset.delete_driver has no docstring.",
|
|
"description": "UNDOCUMENTED: printers_asset.delete_driver has no docstring.\n\n**Auth:** permission:printers.delete\n\n**Params:** path: driver_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printers/drivers/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "driver_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "UNDOCUMENTED: printers_asset.update_driver has no docstring.",
|
|
"description": "UNDOCUMENTED: printers_asset.update_driver has no docstring.\n\n**Auth:** permission:printers.edit\n\n**Params:** path: driver_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/printers/drivers/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "driver_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: driver_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/for-host/{hostname}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Printers assigned to a PC, by hostname, with what it takes to install one.",
|
|
"description": "Printers assigned to a PC, by hostname, with what it takes to install one.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** path: hostname (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/for-host/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "hostname",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printers/install-batch": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Generate a Windows .bat that installs the selected printers.",
|
|
"description": "Generate a Windows .bat that installs the selected printers.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/install-batch -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/install-list": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Flat, unpaginated list of network printers for the printer installer.",
|
|
"description": "Flat, unpaginated list of network printers for the printer installer.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/install-list -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/lookup": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Find a printer by IP or FQDN. Parity with the classic printerlookup.asp.",
|
|
"description": "Find a printer by IP or FQDN. Parity with the classic printerlookup.asp.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/lookup -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/lowsupplies": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Get printers with low or critical supply levels.",
|
|
"description": "Get printers with low or critical supply levels.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/lowsupplies -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/models": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "List models with a supply count, for the supply-management picker.",
|
|
"description": "List models with a supply count, for the supply-management picker.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/models -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/models/{modelnumberid}/supplies": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "List all supplies mapped to a model.",
|
|
"description": "List all supplies mapped to a model.\n\n**Auth:** permission:printers.view\n\n**Params:** path: modelnumberid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/models/1/supplies -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "modelnumberid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Add a supply to a model.",
|
|
"description": "Add a supply to a model.\n\n**Auth:** permission:printers.create\n\n**Params:** path: modelnumberid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printers/models/1/supplies -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "modelnumberid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: modelnumberid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/observed/{hostname}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "What a host last reported, each queue judged against what it is assigned.",
|
|
"description": "What a host last reported, each queue judged against what it is assigned.\n\n**Auth:** permission:printers.view\n\n**Params:** path: hostname (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/observed/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "hostname",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printers/observed/for-asset/{asset_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "The same comparison, reached from an asset page: one block per host.",
|
|
"description": "The same comparison, reached from an asset page: one block per host.\n\n**Auth:** permission:printers.view\n\n**Params:** path: asset_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/observed/for-asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "asset_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/printers/pc-default": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Default printer for a PC, by machine (asset) number.",
|
|
"description": "Default printer for a PC, by machine (asset) number.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/pc-default -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/supplies/{modelsupplyid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Delete a model supply.",
|
|
"description": "Delete a model supply.\n\n**Auth:** permission:printers.delete\n\n**Params:** path: modelsupplyid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printers/supplies/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "modelsupplyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Update a model supply.",
|
|
"description": "Update a model supply.\n\n**Auth:** permission:printers.edit\n\n**Params:** path: modelsupplyid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/printers/supplies/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "modelsupplyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: modelsupplyid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/supplies/forecast": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Days-to-empty and replacement counts per printer.",
|
|
"description": "Days-to-empty and replacement counts per printer.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/supplies/forecast -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/supplies/meta": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Allowed values for supply type, color, and capacity tier (for the UI).",
|
|
"description": "Allowed values for supply type, color, and capacity tier (for the UI).\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/supplies/meta -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/supplies/refresh": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Clear cached Zabbix supply data so the next read pulls fresh values.",
|
|
"description": "Clear cached Zabbix supply data so the next read pulls fresh values.\n\n**Auth:** permission:printers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printers/supplies/refresh -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/types": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "List all printer types.",
|
|
"description": "List all printer types.\n\n**Auth:** permission:printers.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/types -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Create a new printer type.",
|
|
"description": "Create a new printer type.\n\n**Auth:** permission:printers.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/printers/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/printers/types/{type_id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Delete a printer type. Refused if any printer still uses it.",
|
|
"description": "Delete a printer type. Refused if any printer still uses it.\n\n**Auth:** permission:printers.delete\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/printers/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Get a single printer type.",
|
|
"description": "Get a single printer type.\n\n**Auth:** permission:printers.view\n\n**Params:** path: type_id (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/printers/types/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-printers"
|
|
],
|
|
"summary": "Update a printer type.",
|
|
"description": "Update a printer type.\n\n**Auth:** permission:printers.edit\n\n**Params:** path: type_id (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/printers/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "type_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: type_id (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/slides/{surface}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "UNDOCUMENTED: slides.list_slides has no docstring.",
|
|
"description": "UNDOCUMENTED: slides.list_slides has no docstring.\n\n**Auth:** permission:slides.view or slides.manage\n\n**Params:** path: surface (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/slides/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "surface",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/slides/{surface}/{slideid}": {
|
|
"patch": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "UNDOCUMENTED: slides.update_slide has no docstring.",
|
|
"description": "UNDOCUMENTED: slides.update_slide has no docstring.\n\n**Auth:** permission:slides.manage\n\n**Params:** path: surface (string), slideid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PATCH http://localhost:5001/api/slides/x/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "surface",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "slideid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: surface (string), slideid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/slides/{surface}/delete": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "UNDOCUMENTED: slides.delete_slides has no docstring.",
|
|
"description": "UNDOCUMENTED: slides.delete_slides has no docstring.\n\n**Auth:** permission:slides.manage\n\n**Params:** path: surface (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/slides/x/delete -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "surface",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: surface (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/slides/{surface}/order": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "UNDOCUMENTED: slides.reorder_slides has no docstring.",
|
|
"description": "UNDOCUMENTED: slides.reorder_slides has no docstring.\n\n**Auth:** permission:slides.manage\n\n**Params:** path: surface (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/slides/x/order -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "surface",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: surface (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/slides/{surface}/upload": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "UNDOCUMENTED: slides.upload_slides has no docstring.",
|
|
"description": "UNDOCUMENTED: slides.upload_slides has no docstring.\n\n**Auth:** permission:slides.manage\n\n**Params:** path: surface (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/slides/x/upload -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "surface",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: surface (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/slides/feed": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "Flat playlist for a surface. NOT wrapped in the success_response envelope so the screensaver's existing parser needs no...",
|
|
"description": "Flat playlist for a surface. NOT wrapped in the success_response envelope so the screensaver's existing parser needs no change.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/slides/feed\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/slides/img/{surface}/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-slides"
|
|
],
|
|
"summary": "Serve a slide image with a path-traversal guard.",
|
|
"description": "Serve a slide image with a path-traversal guard.\n\n**Auth:** none (reviewed: named in the public-read or mutation sweep)\n\n**Params:** path: surface (string), filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/slides/img/x/example.png\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "surface",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/tools/secrets": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-tools"
|
|
],
|
|
"summary": "Store an already-encrypted secret and return its token.",
|
|
"description": "Store an already-encrypted secret and return its token.\n\n**Auth:** jwt-optional (works signed out; the handler decides what shows)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/tools/secrets -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/tools/secrets/{token}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-tools"
|
|
],
|
|
"summary": "Whether a link is still live, WITHOUT spending it.",
|
|
"description": "Whether a link is still live, WITHOUT spending it.\n\n**Auth:** none (the unguessable token in the path is the authorisation)\n\n**Params:** path: token (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/tools/secrets/x\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "token",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-tools"
|
|
],
|
|
"summary": "Hand over the ciphertext once, then spend the view.",
|
|
"description": "Hand over the ciphertext once, then spend the view.\n\n**Auth:** none (the unguessable token in the path is the authorisation; redeeming spends the secret)\n\n**Params:** path: token (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/tools/secrets/x -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "token",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: token (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "List USB devices with checkout status.",
|
|
"description": "List USB devices with checkout status.\n\n**Auth:** permission:usb.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Add a device (starts checked-in).",
|
|
"description": "Add a device (starts checked-in).\n\n**Auth:** permission:usb.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/{device_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Get a single device plus its last 20 check-in/out log rows.",
|
|
"description": "Get a single device plus its last 20 check-in/out log rows.\n\n**Auth:** permission:usb.view\n\n**Params:** path: device_id (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/x -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Edit device_desc / device_owner / locker_location / status.",
|
|
"description": "Edit device_desc / device_owner / locker_location / status.\n\n**Auth:** permission:usb.edit\n\n**Params:** path: device_id (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/usb/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: device_id (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/{device_id}/checkin": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Check a device back in from a badge.",
|
|
"description": "Check a device back in from a badge.\n\n**Auth:** permission:usb.create\n\n**Params:** path: device_id (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/x/checkin -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: device_id (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/{device_id}/checkout": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Check a device out to a badge.",
|
|
"description": "Check a device out to a badge.\n\n**Auth:** permission:usb.create\n\n**Params:** path: device_id (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/x/checkout -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: device_id (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/{device_id}/history": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Paginated check-in/out log for one device.",
|
|
"description": "Paginated check-in/out log for one device.\n\n**Auth:** permission:usb.view\n\n**Params:** path: device_id (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/x/history -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/usb/{device_id}/retire": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Retire a device (status -> retired).",
|
|
"description": "Retire a device (status -> retired).\n\n**Auth:** permission:usb.edit\n\n**Params:** path: device_id (string); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/x/retire -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: device_id (string); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/checkouts": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "List check-out log rows.",
|
|
"description": "List check-out log rows.\n\n**Auth:** permission:usb.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/checkouts -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/checkouts/active": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "List the latest check-out log row for every currently checked-out device.",
|
|
"description": "List the latest check-out log row for every currently checked-out device.\n\n**Auth:** permission:usb.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/checkouts/active -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/kiosk/checkin": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Check a device in at the kiosk. Body: {device_id, badge, forsomeoneelse}.",
|
|
"description": "Check a device in at the kiosk. Body: {device_id, badge, forsomeoneelse}.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/kiosk/checkin -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/kiosk/checkout": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Check a device out at the kiosk. Body: {device_id, badge}.",
|
|
"description": "Check a device out at the kiosk. Body: {device_id, badge}.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/kiosk/checkout -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/kiosk/device/{device_id}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "What the kiosk shows after a device is scanned.",
|
|
"description": "What the kiosk shows after a device is scanned.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** path: device_id (string)\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/kiosk/device/x\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "device_id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/usb/kiosk/others": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Drives checked out to OTHER people, with holder names. Body: {badge}.",
|
|
"description": "Drives checked out to OTHER people, with holder names. Body: {badge}.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/kiosk/others -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/kiosk/provisioning-link": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "The URL that provisions a screen, token included, for an administrator.",
|
|
"description": "The URL that provisions a screen, token included, for an administrator.\n\n**Auth:** permission:settings.edit\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/kiosk/provisioning-link -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/kiosk/session": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "What one badge may do right now. Body: {badge}.",
|
|
"description": "What one badge may do right now. Body: {badge}.\n\n**Auth:** api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/usb/kiosk/session -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"apiKeyAuth": []
|
|
},
|
|
{}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/kiosk/setup": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Trade a setup code for this browser's kiosk cookie, then open the kiosk.",
|
|
"description": "Trade a setup code for this browser's kiosk cookie, then open the kiosk.\n\n**Auth:** setup-code (single-use kiosk setup code in ?code=, issued by the permission-gated provisioning link; spent on any attempt, 410 once used or expired)\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/kiosk/setup\n```",
|
|
"security": [
|
|
{
|
|
"setupCodeAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/usb/reports/audit": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-usb"
|
|
],
|
|
"summary": "Every check-out and check-in in the window, newest first.",
|
|
"description": "Every check-out and check-in in the window, newest first.\n\n**Auth:** permission:usb.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/usb/reports/audit -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "List warranties. Filters: ?status=, ?assetid=, ?active=false.",
|
|
"description": "List warranties. Filters: ?status=, ?assetid=, ?active=false.\n\n**Auth:** permission:warranty.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/warranty -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "UNDOCUMENTED: warranty.create_warranty has no docstring.",
|
|
"description": "UNDOCUMENTED: warranty.create_warranty has no docstring.\n\n**Auth:** permission:warranty.create\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/warranty -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty/{warrantyid}": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "UNDOCUMENTED: warranty.delete_warranty has no docstring.",
|
|
"description": "UNDOCUMENTED: warranty.delete_warranty has no docstring.\n\n**Auth:** permission:warranty.delete\n\n**Params:** path: warrantyid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/warranty/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "warrantyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"get": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "UNDOCUMENTED: warranty.get_warranty has no docstring.",
|
|
"description": "UNDOCUMENTED: warranty.get_warranty has no docstring.\n\n**Auth:** permission:warranty.view\n\n**Params:** path: warrantyid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/warranty/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "warrantyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "UNDOCUMENTED: warranty.update_warranty has no docstring.",
|
|
"description": "UNDOCUMENTED: warranty.update_warranty has no docstring.\n\n**Auth:** permission:warranty.edit\n\n**Params:** path: warrantyid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X PUT http://localhost:5001/api/warranty/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "warrantyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: warrantyid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty/{warrantyid}/proof": {
|
|
"delete": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Remove a warranty's proof document.",
|
|
"description": "Remove a warranty's proof document.\n\n**Auth:** permission:warranty.edit\n\n**Params:** path: warrantyid (int)\n\n**Example:**\n```\ncurl -X DELETE http://localhost:5001/api/warranty/1/proof -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "warrantyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"post": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Upload (or replace) the proof-of-cover document for a warranty.",
|
|
"description": "Upload (or replace) the proof-of-cover document for a warranty.\n\n**Auth:** permission:warranty.edit\n\n**Params:** path: warrantyid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/warranty/1/proof -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "warrantyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: warrantyid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty/{warrantyid}/refresh": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "UNDOCUMENTED: warranty.refresh_warranty has no docstring.",
|
|
"description": "UNDOCUMENTED: warranty.refresh_warranty has no docstring.\n\n**Auth:** permission:warranty.edit\n\n**Params:** path: warrantyid (int); body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/warranty/1/refresh -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "warrantyid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "path: warrantyid (int); body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty/asset/{assetid}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Warranties covering one asset (for the asset-detail panel).",
|
|
"description": "Warranties covering one asset (for the asset-detail panel).\n\n**Auth:** permission:warranty.view\n\n**Params:** path: assetid (int)\n\n**Example:**\n```\ncurl http://localhost:5001/api/warranty/asset/1 -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "assetid",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "integer"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/warranty/dashboard/expiring": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Warranties running out, and ones that already have.",
|
|
"description": "Warranties running out, and ones that already have.\n\n**Auth:** permission:warranty.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/warranty/dashboard/expiring -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty/proof/{filename}": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Download a proof document.",
|
|
"description": "Download a proof document.\n\n**Auth:** permission:warranty.view\n\n**Params:** path: filename (path)\n\n**Example:**\n```\ncurl http://localhost:5001/api/warranty/proof/example.png -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
},
|
|
"404": {
|
|
"description": "No such record."
|
|
}
|
|
},
|
|
"parameters": [
|
|
{
|
|
"name": "filename",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"description": "may contain slashes"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"/api/warranty/report": {
|
|
"get": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Counts + lists bucketed by derived status.",
|
|
"description": "Counts + lists bucketed by derived status.\n\n**Auth:** permission:warranty.view\n\n**Params:** not documented\n\n**Example:**\n```\ncurl http://localhost:5001/api/warranty/report -H \"Authorization: Bearer $TOK\"\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/warranty/sync/dell": {
|
|
"post": {
|
|
"tags": [
|
|
"plugin-warranty"
|
|
],
|
|
"summary": "Look up every asset serial (= Dell service tag) that has no warranty yet and create warranties for the ones Dell...",
|
|
"description": "Look up every asset serial (= Dell service tag) that has no warranty yet and create warranties for the ones Dell recognizes.\n\n**Auth:** permission:warranty.edit\n\n**Params:** body: JSON (fields not yet documented)\n\n**Example:**\n```\ncurl -X POST http://localhost:5001/api/warranty/sync/dell -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'\n```",
|
|
"security": [
|
|
{
|
|
"bearerAuth": []
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Success. Body is the success_response envelope: {status, data, meta}.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/SuccessEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"default": {
|
|
"description": "Error. Body is the error envelope; the code and message are nested under data.error.",
|
|
"content": {
|
|
"application/json": {
|
|
"$ref": "#/components/schemas/ErrorEnvelope"
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Missing or invalid credentials."
|
|
},
|
|
"403": {
|
|
"description": "Authenticated, but not permitted."
|
|
}
|
|
},
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"description": "body: JSON (fields not yet documented)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |