From 6c2b2b7d961afdc7cd0a45fa40b4f54bb2d0aa39 Mon Sep 17 00:00:00 2001 From: Jeppe Bundgaard Date: Fri, 27 Feb 2026 01:58:03 +0100 Subject: [PATCH] Enhance OpenAPI documentation for configuration endpoints with detailed success messages and add Bird configuration endpoints --- openapi.yaml | 754 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 719 insertions(+), 35 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index bb23b252..c3bc0cb1 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -6494,13 +6494,23 @@ paths: summary: Get e-conomic config operationId: getEconomicConfig responses: - '200': {description: Success} + '200': + description: e-conomic configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/EconomicConfigListResponse' post: tags: [Config] summary: Update e-conomic config operationId: updateEconomicConfig responses: - '200': {description: Success} + '200': + description: e-conomic configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /reCAPTCHA/config: get: @@ -6508,13 +6518,23 @@ paths: summary: Get reCAPTCHA config operationId: getRecaptchaConfig responses: - '200': {description: Success} + '200': + description: reCAPTCHA configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/RecaptchaConfigListResponse' post: tags: [Config] summary: Update reCAPTCHA config operationId: updateRecaptchaConfig responses: - '200': {description: Success} + '200': + description: reCAPTCHA configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /email/config: get: @@ -6522,13 +6542,23 @@ paths: summary: Get email config operationId: getEmailConfig responses: - '200': {description: Success} + '200': + description: Email configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/EmailConfigListResponse' post: tags: [Config] summary: Update email config operationId: updateEmailConfig responses: - '200': {description: Success} + '200': + description: Email configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /email/config/test: post: @@ -6536,7 +6566,12 @@ paths: summary: Test email config operationId: testEmailConfig responses: - '200': {description: Success} + '200': + description: Email configuration test completed + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigTestResponse' /backups/config: get: @@ -6544,13 +6579,47 @@ paths: summary: Get backups config operationId: getBackupsConfig responses: - '200': {description: Success} + '200': + description: Backups configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/BackupsConfigListResponse' post: tags: [Config] summary: Update backups config operationId: updateBackupsConfig responses: - '200': {description: Success} + '200': + description: Backups configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' + + /bird/config: + get: + tags: [Config] + summary: Get Bird config + operationId: getBirdConfig + responses: + '200': + description: Bird configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/BirdConfigListResponse' + post: + tags: [Config] + summary: Update Bird config + operationId: updateBirdConfig + responses: + '200': + description: Bird configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /motorapi/config: get: @@ -6558,13 +6627,23 @@ paths: summary: Get MotorAPI config operationId: getMotorApiConfig responses: - '200': {description: Success} + '200': + description: MotorAPI configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/MotorApiConfigListResponse' post: tags: [Config] summary: Update MotorAPI config operationId: updateMotorApiConfig responses: - '200': {description: Success} + '200': + description: MotorAPI configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /stripe/config: get: @@ -6572,13 +6651,23 @@ paths: summary: Get Stripe config operationId: getStripeConfig responses: - '200': {description: Success} + '200': + description: Stripe configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/StripeConfigListResponse' post: tags: [Config] summary: Update Stripe config operationId: updateStripeConfig responses: - '200': {description: Success} + '200': + description: Stripe configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /fxratesapi/config: get: @@ -6586,13 +6675,23 @@ paths: summary: Get FXRatesAPI config operationId: getFxRatesApiConfig responses: - '200': {description: Success} + '200': + description: FXRatesAPI configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/FxRatesApiConfigListResponse' post: tags: [Config] summary: Update FXRatesAPI config operationId: updateFxRatesApiConfig responses: - '200': {description: Success} + '200': + description: FXRatesAPI configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /gatewayapi/config: get: @@ -6600,13 +6699,23 @@ paths: summary: Get GatewayAPI config operationId: getGatewayApiConfig responses: - '200': {description: Success} + '200': + description: GatewayAPI configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/GatewayApiConfigListResponse' post: tags: [Config] summary: Update GatewayAPI config operationId: updateGatewayApiConfig responses: - '200': {description: Success} + '200': + description: GatewayAPI configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /xlvask/config: get: @@ -6614,13 +6723,23 @@ paths: summary: Get XLVask config operationId: getXlvaskConfig responses: - '200': {description: Success} + '200': + description: XLVask configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/XlvaskConfigListResponse' post: tags: [Config] summary: Update XLVask config operationId: updateXlvaskConfig responses: - '200': {description: Success} + '200': + description: XLVask configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /entra/config: get: @@ -6628,13 +6747,23 @@ paths: summary: Get Entra config operationId: getEntraConfig responses: - '200': {description: Success} + '200': + description: Entra configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/EntraConfigListResponse' post: tags: [Config] summary: Update Entra config operationId: updateEntraConfig responses: - '200': {description: Success} + '200': + description: Entra configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /limble/config: get: @@ -6642,13 +6771,23 @@ paths: summary: Get Limble config operationId: getLimbleConfig responses: - '200': {description: Success} + '200': + description: Limble configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/LimbleConfigListResponse' post: tags: [Config] summary: Update Limble config operationId: updateLimbleConfig responses: - '200': {description: Success} + '200': + description: Limble configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /ocrspace/config: get: @@ -6656,13 +6795,23 @@ paths: summary: Get OcrSpace config operationId: getOcrSpaceConfig responses: - '200': {description: Success} + '200': + description: OcrSpace configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OcrSpaceConfigListResponse' post: tags: [Config] summary: Update OcrSpace config operationId: updateOcrSpaceConfig responses: - '200': {description: Success} + '200': + description: OcrSpace configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /openai/config: get: @@ -6670,13 +6819,23 @@ paths: summary: Get OpenAI config operationId: getOpenAiConfig responses: - '200': {description: Success} + '200': + description: OpenAI configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OpenAiConfigListResponse' post: tags: [Config] summary: Update OpenAI config operationId: updateOpenAiConfig responses: - '200': {description: Success} + '200': + description: OpenAI configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /licenseplaterecognizer/config: get: @@ -6684,13 +6843,23 @@ paths: summary: Get LicensePlateRecognizer config operationId: getLicensePlateRecognizerConfig responses: - '200': {description: Success} + '200': + description: LicensePlateRecognizer configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/LicensePlateRecognizerConfigListResponse' post: tags: [Config] summary: Update LicensePlateRecognizer config operationId: updateLicensePlateRecognizerConfig responses: - '200': {description: Success} + '200': + description: LicensePlateRecognizer configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /virkdata/config: get: @@ -6698,13 +6867,23 @@ paths: summary: Get Virkdata config operationId: getVirkdataConfig responses: - '200': {description: Success} + '200': + description: Virkdata configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/VirkdataConfigListResponse' post: tags: [Config] summary: Update Virkdata config operationId: updateVirkdataConfig responses: - '200': {description: Success} + '200': + description: Virkdata configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /shelly/config: get: @@ -6712,13 +6891,23 @@ paths: summary: Get Shelly config operationId: getShellyConfig responses: - '200': {description: Success} + '200': + description: Shelly configuration retrieved successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ShellyConfigListResponse' post: tags: [Config] summary: Update Shelly config operationId: updateShellyConfig responses: - '200': {description: Success} + '200': + description: Shelly configuration updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /selfserve/config: get: @@ -6731,7 +6920,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SelfServeConfig' + $ref: '#/components/schemas/SelfServeConfigListResponse' post: tags: [Config] summary: Update Self-Serve config @@ -6748,7 +6937,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SelfServeConfig' + $ref: '#/components/schemas/ModuleConfigUpdateResponse' /branding: get: @@ -7346,6 +7535,501 @@ components: type: integer description: HTTP status code + ModuleConfigValue: + oneOf: + - type: string + - type: integer + - type: number + - type: boolean + - type: array + items: {} + - type: object + additionalProperties: true + nullable: true + + ModuleConfigEnvelopeBase: + type: object + properties: + success: + type: boolean + meta: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + includes: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + required: + - success + - meta + - includes + + EconomicConfigEntry: + type: object + properties: + module: { type: string, enum: [economic] } + variable: { type: string, enum: [adminFeeMonthly, adminFeeOrder, feeProductId, invoiceLayoutNumber, paymentTermsNumber] } + type: { type: string, enum: [string, int] } + value: + oneOf: + - type: string + - type: integer + required: [module, variable, type, value] + + RecaptchaConfigEntry: + type: object + properties: + module: { type: string, enum: [reCAPTCHA] } + variable: { type: string, enum: [enabled, secret_key_v2, site_key_v2] } + type: { type: string, enum: [bool, string] } + value: + oneOf: + - type: boolean + - type: string + required: [module, variable, type, value] + + EmailConfigEntry: + type: object + properties: + module: { type: string, enum: [Email] } + variable: + type: string + enum: [enabled, mailersend_api_key, mailersend_enabled, smtp_encryption, smtp_from, smtp_from_name, smtp_host, smtp_password, smtp_port, smtp_reply_to, smtp_reply_to_name, smtp_username] + type: { type: string, enum: [bool, string, int] } + value: + oneOf: + - type: boolean + - type: string + - type: integer + required: [module, variable, type, value] + + BackupsConfigEntry: + type: object + properties: + module: { type: string, enum: [Backups] } + variable: { type: string, enum: [enabled] } + type: { type: string, enum: [bool] } + value: { type: boolean } + required: [module, variable, type, value] + + BirdConfigEntry: + type: object + properties: + module: { type: string, enum: [bird] } + variable: { type: string, enum: [api_key, enabled, server_url] } + type: { type: string, enum: [string, bool] } + value: + oneOf: + - type: string + - type: boolean + required: [module, variable, type, value] + + MotorApiConfigEntry: + type: object + properties: + module: { type: string, enum: [motorapi] } + variable: { type: string, enum: [daily_limit, enabled, secret_key] } + type: { type: string, enum: [int, bool, string] } + value: + oneOf: + - type: integer + - type: boolean + - type: string + required: [module, variable, type, value] + + StripeConfigEntry: + type: object + properties: + module: { type: string, enum: [Stripe] } + variable: { type: string, enum: [economic_customer_number, enabled, publishable_key, secret_key] } + type: { type: string, enum: [int, bool, string] } + value: + oneOf: + - type: integer + - type: boolean + - type: string + required: [module, variable, type, value] + + FxRatesApiConfigEntry: + type: object + properties: + module: { type: string, enum: [fxratesapi] } + variable: { type: string, enum: [daily_limit, enabled, secret_key] } + type: { type: string, enum: [int, bool, string] } + value: + oneOf: + - type: integer + - type: boolean + - type: string + required: [module, variable, type, value] + + GatewayApiConfigEntry: + type: object + properties: + module: { type: string, enum: [GatewayAPI] } + variable: { type: string, enum: [api_key, api_secret, api_token, enabled, sender] } + type: { type: string, enum: [string, bool] } + value: + oneOf: + - type: string + - type: boolean + required: [module, variable, type, value] + + XlvaskConfigEntry: + type: object + properties: + module: { type: string, enum: [xlvask] } + variable: { type: string, enum: [enabled, password, synchronization_enabled, username] } + type: { type: string, enum: [bool, string] } + value: + oneOf: + - type: boolean + - type: string + required: [module, variable, type, value] + + EntraConfigEntry: + type: object + properties: + module: { type: string, enum: [Entra] } + variable: { type: string, enum: [enabled, entra_client_id, entra_client_secret, entra_tenant_id] } + type: { type: string, enum: [bool, string] } + value: + oneOf: + - type: boolean + - type: string + required: [module, variable, type, value] + + LimbleConfigEntry: + type: object + properties: + module: { type: string, enum: [limble] } + variable: { type: string, enum: [client_id, client_secret, enabled, webhooks_enabled] } + type: { type: string, enum: [string, bool] } + value: + oneOf: + - type: string + - type: boolean + required: [module, variable, type, value] + + OcrSpaceConfigEntry: + type: object + properties: + module: { type: string, enum: [ocrSpace] } + variable: { type: string, enum: [api_key, enabled] } + type: { type: string, enum: [string, bool] } + value: + oneOf: + - type: string + - type: boolean + required: [module, variable, type, value] + + OpenAiConfigEntry: + type: object + properties: + module: { type: string, enum: [openAI] } + variable: { type: string, enum: [api_key, enabled] } + type: { type: string, enum: [string, bool] } + value: + oneOf: + - type: string + - type: boolean + required: [module, variable, type, value] + + LicensePlateRecognizerConfigEntry: + type: object + properties: + module: { type: string, enum: [licenseplaterecognizer] } + variable: { type: string, enum: [api_key, enabled] } + type: { type: string, enum: [string, bool] } + value: + oneOf: + - type: string + - type: boolean + required: [module, variable, type, value] + + VirkdataConfigEntry: + type: object + properties: + module: { type: string, enum: [virkdata] } + variable: { type: string, enum: [enabled, monthly_limit, secret_key] } + type: { type: string, enum: [bool, int, string] } + value: + oneOf: + - type: boolean + - type: integer + - type: string + required: [module, variable, type, value] + + ShellyConfigEntry: + type: object + properties: + module: { type: string, enum: [shelly] } + variable: { type: string, enum: [enabled, secret_key, server_url] } + type: { type: string, enum: [bool, string] } + value: + oneOf: + - type: boolean + - type: string + required: [module, variable, type, value] + + SelfServeConfigEntry: + type: object + properties: + module: { type: string, enum: [selfserve] } + variable: { type: string, enum: [enabled, minute_product] } + type: { type: string, enum: [bool, int] } + value: + oneOf: + - type: boolean + - type: integer + required: [module, variable, type, value] + + EconomicConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/EconomicConfigEntry' } } + required: [data] + + RecaptchaConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/RecaptchaConfigEntry' } } + required: [data] + + EmailConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/EmailConfigEntry' } } + required: [data] + + BackupsConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/BackupsConfigEntry' } } + required: [data] + + BirdConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/BirdConfigEntry' } } + required: [data] + + MotorApiConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/MotorApiConfigEntry' } } + required: [data] + + StripeConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/StripeConfigEntry' } } + required: [data] + + FxRatesApiConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/FxRatesApiConfigEntry' } } + required: [data] + + GatewayApiConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/GatewayApiConfigEntry' } } + required: [data] + + XlvaskConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/XlvaskConfigEntry' } } + required: [data] + + EntraConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/EntraConfigEntry' } } + required: [data] + + LimbleConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/LimbleConfigEntry' } } + required: [data] + + OcrSpaceConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/OcrSpaceConfigEntry' } } + required: [data] + + OpenAiConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/OpenAiConfigEntry' } } + required: [data] + + LicensePlateRecognizerConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/LicensePlateRecognizerConfigEntry' } } + required: [data] + + VirkdataConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/VirkdataConfigEntry' } } + required: [data] + + ShellyConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/ShellyConfigEntry' } } + required: [data] + + SelfServeConfigListResponse: + allOf: + - $ref: '#/components/schemas/ModuleConfigEnvelopeBase' + - type: object + properties: + data: { type: array, items: { $ref: '#/components/schemas/SelfServeConfigEntry' } } + required: [data] + + ModuleConfigEntry: + type: object + properties: + module: + type: string + description: Module name + variable: + type: string + description: Configuration variable key + type: + type: string + description: Stored value type in module_config + value: + $ref: '#/components/schemas/ModuleConfigValue' + required: + - module + - variable + - type + - value + + ModuleConfigListResponse: + type: object + properties: + success: + type: boolean + data: + type: array + items: + $ref: '#/components/schemas/ModuleConfigEntry' + meta: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + includes: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + required: + - success + - data + - meta + - includes + + ModuleConfigUpdateResponse: + type: object + properties: + success: + type: boolean + data: + type: boolean + meta: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + includes: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + required: + - success + - data + - meta + - includes + + ModuleConfigTestResponse: + type: object + properties: + success: + type: boolean + data: + type: string + meta: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + includes: + oneOf: + - type: array + items: {} + - type: object + additionalProperties: true + required: + - success + - data + - meta + - includes + User: type: object properties: