{ "openapi": "3.0.1", "info": { "title": "Dataforth Product API", "description": "API for accessing Dataforth product catalog data", "version": "v1" }, "paths": { "/api/v1/Admin/refresh-cache": { "post": { "tags": [ "Admin" ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefreshCacheResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "500": { "description": "Server Error" } } } }, "/api/v1/Admin/cache-status": { "get": { "tags": [ "Admin" ], "parameters": [ { "name": "appName", "in": "query", "schema": { "type": "string", "default": "dataforth.web" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CacheStatusResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/Categories": { "get": { "tags": [ "Categories" ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CategoryListItemDto" } } } } } } } }, "/api/v1/Categories/{id}": { "get": { "tags": [ "Categories" ], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CategoryDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/Categories/by-catalog-node/{catalogNodeId}": { "get": { "tags": [ "Categories" ], "parameters": [ { "name": "catalogNodeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CategoryDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/OrderableProducts/{orderableProductId}/Attributes": { "post": { "tags": [ "OrderableProducts" ], "parameters": [ { "name": "orderableProductId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateProductAttributeRequest" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CreateProductAttributeRequest" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/CreateProductAttributeRequest" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProductAttributeResponseDto" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "500": { "description": "Server Error" } } } }, "/api/v1/OrderableProducts/{orderableProductId}/Attributes/{attributeId}": { "put": { "tags": [ "OrderableProducts" ], "parameters": [ { "name": "orderableProductId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "attributeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateProductAttributeRequest" } }, "text/json": { "schema": { "$ref": "#/components/schemas/UpdateProductAttributeRequest" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/UpdateProductAttributeRequest" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProductAttributeResponseDto" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "500": { "description": "Server Error" } } }, "delete": { "tags": [ "OrderableProducts" ], "parameters": [ { "name": "orderableProductId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "attributeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "500": { "description": "Server Error" } } } }, "/api/v1/Products": { "get": { "tags": [ "Products" ], "parameters": [ { "name": "productSeriesId", "in": "query", "schema": { "type": "integer", "format": "int32" } }, { "name": "categoryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ProductListItemDto" } } } } } } } }, "/api/v1/Products/{id}": { "get": { "tags": [ "Products" ], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProductDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/Products/by-part-number/{partNumber}": { "get": { "tags": [ "Products" ], "parameters": [ { "name": "partNumber", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProductDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/product-series": { "get": { "tags": [ "ProductSeries" ], "parameters": [ { "name": "categoryId", "in": "query", "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesListItemDto" } } } } } } } }, "/api/v1/product-series/{id}": { "get": { "tags": [ "ProductSeries" ], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/product-series/by-designation/{designation}": { "get": { "tags": [ "ProductSeries" ], "parameters": [ { "name": "designation", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/product-series/by-catalog-node/{catalogNodeId}": { "get": { "tags": [ "ProductSeries" ], "parameters": [ { "name": "catalogNodeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SeriesDetailDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/ProductType": { "get": { "tags": [ "ProductType" ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ProductTypeListItemDto" } } } } } } } }, "/api/v1/ProductType/{productTypeId}/products": { "get": { "tags": [ "ProductType" ], "parameters": [ { "name": "productTypeId", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/OrderableProductDto" } } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } } } } }, "/api/v1/TestReportDataFiles": { "post": { "tags": [ "TestReportDataFiles" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTestReportRequest" } }, "text/json": { "schema": { "$ref": "#/components/schemas/CreateTestReportRequest" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/CreateTestReportRequest" } } } }, "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTestReportResponse" } } } }, "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTestReportResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } } }, "get": { "tags": [ "TestReportDataFiles" ], "parameters": [ { "name": "page", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 1 } }, { "name": "pageSize", "in": "query", "schema": { "type": "integer", "format": "int32", "default": 50 } }, { "name": "serialNumberPrefix", "in": "query", "schema": { "type": "string" } }, { "name": "afterSerialNumber", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TestReportDataFileListItemDtoPagedResultDto" } } } } } } }, "/api/v1/TestReportDataFiles/bulk": { "post": { "tags": [ "TestReportDataFiles" ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkCreateTestReportRequest" } }, "text/json": { "schema": { "$ref": "#/components/schemas/BulkCreateTestReportRequest" } }, "application/*+json": { "schema": { "$ref": "#/components/schemas/BulkCreateTestReportRequest" } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkCreateTestReportResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } } } }, "/api/v1/TestReportDataFiles/{serialNumber}": { "get": { "tags": [ "TestReportDataFiles" ], "parameters": [ { "name": "serialNumber", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TestReportDataFileDto" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } } }, "delete": { "tags": [ "TestReportDataFiles" ], "parameters": [ { "name": "serialNumber", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "No Content" }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } } } }, "/api/v1/TestReportDataFiles/stats": { "get": { "tags": [ "TestReportDataFiles" ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TestReportDataFileStatsDto" } } } } } } } }, "components": { "schemas": { "BulkCreateTestReportRequest": { "required": [ "Items" ], "type": "object", "properties": { "Items": { "type": "array", "items": { "$ref": "#/components/schemas/CreateTestReportRequest" } } }, "additionalProperties": false }, "BulkCreateTestReportResponse": { "type": "object", "properties": { "TotalReceived": { "type": "integer", "format": "int32" }, "Created": { "type": "integer", "format": "int32" }, "Updated": { "type": "integer", "format": "int32" }, "Unchanged": { "type": "integer", "format": "int32" }, "Errors": { "type": "array", "items": { "type": "string" }, "nullable": true } }, "additionalProperties": false }, "CacheStatusResponseDto": { "type": "object", "properties": { "AppName": { "type": "string", "nullable": true }, "PendingRefresh": { "type": "boolean" }, "CheckedAt": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "CategoryDetailDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "ProductSeries": { "type": "array", "items": { "$ref": "#/components/schemas/ProductSeriesListItemDto" }, "nullable": true } }, "additionalProperties": false }, "CategoryListItemDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "ProductSeriesCount": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "CreateProductAttributeRequest": { "required": [ "AttributeType", "Name" ], "type": "object", "properties": { "Name": { "maxLength": 50, "minLength": 0, "type": "string" }, "Unit": { "maxLength": 20, "minLength": 0, "type": "string", "nullable": true }, "AttributeType": { "minLength": 1, "type": "string" }, "StringValue": { "type": "string", "nullable": true }, "NumberValue": { "type": "number", "format": "double", "nullable": true }, "BooleanValue": { "type": "boolean", "nullable": true }, "DateValue": { "type": "string", "format": "date-time", "nullable": true }, "SortOrder": { "type": "integer", "format": "int32" }, "SortTier": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "CreateTestReportRequest": { "required": [ "Content", "SerialNumber" ], "type": "object", "properties": { "SerialNumber": { "maxLength": 50, "minLength": 0, "type": "string" }, "Content": { "minLength": 1, "type": "string" } }, "additionalProperties": false }, "CreateTestReportResponse": { "type": "object", "properties": { "SerialNumber": { "type": "string", "nullable": true }, "ContentHash": { "type": "string", "nullable": true }, "Created": { "type": "boolean" } }, "additionalProperties": false }, "ErrorResponseDto": { "type": "object", "properties": { "Message": { "type": "string", "nullable": true } }, "additionalProperties": false }, "OrderableProductDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "PartNumber": { "type": "string", "nullable": true }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "OrderableProductGroupId": { "type": "integer", "format": "int32", "nullable": true }, "WeightInGrams": { "type": "integer", "format": "int32", "nullable": true }, "ProductTypeId": { "type": "integer", "format": "int32", "nullable": true }, "LifecycleStatus": { "type": "string", "nullable": true }, "PcnUrl": { "type": "string", "nullable": true }, "OrderingAvailability": { "type": "string", "nullable": true }, "Attributes": { "type": "array", "items": { "$ref": "#/components/schemas/ProductAttributeDto" }, "nullable": true } }, "additionalProperties": false }, "ProblemDetails": { "type": "object", "properties": { "type": { "type": "string", "nullable": true }, "title": { "type": "string", "nullable": true }, "status": { "type": "integer", "format": "int32", "nullable": true }, "detail": { "type": "string", "nullable": true }, "instance": { "type": "string", "nullable": true } }, "additionalProperties": {} }, "ProductAttributeDto": { "type": "object", "properties": { "ProductAttributeId": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Unit": { "type": "string", "nullable": true }, "AttributeType": { "type": "string", "nullable": true }, "StringValue": { "type": "string", "nullable": true }, "NumberValue": { "type": "number", "format": "double", "nullable": true }, "BooleanValue": { "type": "boolean", "nullable": true }, "DateValue": { "type": "string", "format": "date-time", "nullable": true }, "SortOrder": { "type": "integer", "format": "int32" }, "SortTier": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "ProductAttributeResponseDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Unit": { "type": "string", "nullable": true }, "AttributeType": { "type": "string", "nullable": true }, "StringValue": { "type": "string", "nullable": true }, "NumberValue": { "type": "number", "format": "double", "nullable": true }, "BooleanValue": { "type": "boolean", "nullable": true }, "DateValue": { "type": "string", "format": "date-time", "nullable": true }, "SortOrder": { "type": "integer", "format": "int32" }, "SortTier": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "ProductDetailDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "PartNumber": { "type": "string", "nullable": true }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "ProductSeriesId": { "type": "integer", "format": "int32" }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "ProductSeriesCatalogNodeId": { "type": "integer", "format": "int32" }, "PartNumberRoots": { "type": "array", "items": { "type": "string" }, "nullable": true }, "OrderableProducts": { "type": "array", "items": { "$ref": "#/components/schemas/OrderableProductDto" }, "nullable": true } }, "additionalProperties": false }, "ProductListItemDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "PartNumber": { "type": "string", "nullable": true }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "ProductSeriesId": { "type": "integer", "format": "int32" }, "CatalogNodeId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "ProductSeriesListItemDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "ProductCount": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "ProductTypeListItemDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true } }, "additionalProperties": false }, "RefreshCacheResponseDto": { "type": "object", "properties": { "Success": { "type": "boolean" }, "Message": { "type": "string", "nullable": true }, "RefreshedApps": { "type": "array", "items": { "type": "string" }, "nullable": true }, "LifecycleRecordsUpdated": { "type": "integer", "format": "int32" }, "RefreshRequestedAt": { "type": "string", "format": "date-time" } }, "additionalProperties": false }, "SeriesDetailDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "ProductCategoryId": { "type": "integer", "format": "int32" }, "ProductCategoryCatalogNodeId": { "type": "integer", "format": "int32" }, "Products": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesProductDto" }, "nullable": true } }, "additionalProperties": false }, "SeriesListItemDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" }, "ProductCategoryId": { "type": "integer", "format": "int32" }, "ProductCategoryCatalogNodeId": { "type": "integer", "format": "int32" }, "ProductCount": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "SeriesProductDto": { "type": "object", "properties": { "Id": { "type": "integer", "format": "int32" }, "PartNumber": { "type": "string", "nullable": true }, "Name": { "type": "string", "nullable": true }, "Slug": { "type": "string", "nullable": true }, "CatalogNodeId": { "type": "integer", "format": "int32" } }, "additionalProperties": false }, "TestReportDataFileDto": { "type": "object", "properties": { "SerialNumber": { "type": "string", "nullable": true }, "Content": { "type": "string", "nullable": true }, "CreatedAtUtc": { "type": "string", "format": "date-time" }, "UpdatedAtUtc": { "type": "string", "format": "date-time", "nullable": true } }, "additionalProperties": false }, "TestReportDataFileListItemDto": { "type": "object", "properties": { "SerialNumber": { "type": "string", "nullable": true }, "CreatedAtUtc": { "type": "string", "format": "date-time" }, "UpdatedAtUtc": { "type": "string", "format": "date-time", "nullable": true } }, "additionalProperties": false }, "TestReportDataFileListItemDtoPagedResultDto": { "type": "object", "properties": { "Items": { "type": "array", "items": { "$ref": "#/components/schemas/TestReportDataFileListItemDto" }, "nullable": true }, "TotalCount": { "type": "integer", "format": "int32" }, "Page": { "type": "integer", "format": "int32" }, "PageSize": { "type": "integer", "format": "int32" }, "NextCursor": { "type": "string", "nullable": true } }, "additionalProperties": false }, "TestReportDataFileStatsDto": { "type": "object", "properties": { "TotalCount": { "type": "integer", "format": "int32" }, "LatestCreatedAtUtc": { "type": "string", "format": "date-time", "nullable": true }, "LatestUpdatedAtUtc": { "type": "string", "format": "date-time", "nullable": true } }, "additionalProperties": false }, "UpdateProductAttributeRequest": { "required": [ "AttributeType", "Name" ], "type": "object", "properties": { "Name": { "maxLength": 50, "minLength": 0, "type": "string" }, "Unit": { "maxLength": 20, "minLength": 0, "type": "string", "nullable": true }, "AttributeType": { "minLength": 1, "type": "string" }, "StringValue": { "type": "string", "nullable": true }, "NumberValue": { "type": "number", "format": "double", "nullable": true }, "BooleanValue": { "type": "boolean", "nullable": true }, "DateValue": { "type": "string", "format": "date-time", "nullable": true }, "SortOrder": { "type": "integer", "format": "int32" }, "SortTier": { "type": "integer", "format": "int32" } }, "additionalProperties": false } }, "securitySchemes": { "oauth2": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://login.dataforth.com/connect/authorize", "tokenUrl": "https://login.dataforth.com/connect/token", "scopes": { "openid": "OpenID", "profile": "Profile", "dataforth.web": "Dataforth API" } } } } } }, "security": [ { "oauth2": [ "openid", "profile", "dataforth.web" ] } ] }