---
updatedAt: 2026-07-01T08:06:48.000Z
agentTools:
  projectIndex: https://docs.pixop.com/llms.txt
---

# Create or update the Pixop Mimir integration

Creates or updates the integration between a Pixop team and a Mimir tenant.

The integration includes:
- The mapping between the Pixop team and Mimir tenant.
- The Pixop webhook used to receive job status changes.
- Optionally, Mimir configuration specified by `mimirSetup`.

The integration remains active for the period specified by `daysToLive` (default: 90 days). Its TTL is reset whenever this endpoint is called or a new Pixop job is initiated. When the TTL expires, the integration is deleted with the same effect as calling [`DELETE /v1/admin/pixop-mimir-integration`](https://docs.pixop.com/reference/deletepixopmimirintegration).

The `x-mimir-api-key` and `x-pixop-api-key` must remain valid while the integration is active. Calling this endpoint updates the stored API keys, so it can also be used for API key rotation. We recommend using API keys without a fixed expiry and rotating them periodically.

If `mimirSetup` is provided, the requested Mimir setup is applied. This includes Pixop custom actions and the associated Mimir UI configuration. Any manual steps required to complete the setup are returned in the response. If `mimirSetup` is omitted, the integration mapping and Pixop webhook are created or updated without changing the Mimir setup.

**Notes:**
- If `mimirSetup` references Pixop processing configurations that do not exist, a `400 Bad Request` is returned with the invalid configuration IDs.
- If the Mimir setup fails, the request fails and no changes are made to the integration mapping or webhook.
- If the tenant is already associated with a different Pixop team, a `409 Conflict` is returned.

Please also check [**Mimir admin setup guide**](https://docs.pixop.com/reference/mimir-admin-setup-guide) and [**User workflows**](https://docs.pixop.com/reference/mimir-user-workflows) for more information on how to set up and use the integration.

_**Note**: The Pixop–Mimir integration uses Mimir APIs on your behalf using API keys you provide. Ensure your organization’s use complies with your agreement with Fonn/Mimir._

_This integration is connected to [Fonn](https://fonngroup.com), enabling seamless interaction between Pixop and the Fonn-powered Mimir platform._


# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "info": {
    "title": "Pixop Mimir integration API",
    "description": "The **Pixop Mimir Integration API** provides endpoints for configuring and managing integrations between Pixop teams and Mimir tenants.\n\n_This integration is connected to [Fonn](https://fonngroup.com), enabling seamless interaction between Pixop and the Fonn-powered Mimir platform._\n\nAn integration allows Mimir users to enhance their videos in Pixop directly from Mimir, and have the results automatically synchronized back to Mimir.\n\n**Quick Start Guide**\n- Explore the [Pixop Mimir integration API](https://docs.pixop.com/reference/createorupdatepixopmimirintegration) to familiarize yourself with the API's capabilities.\n\n**Key Features**\n- Configure and manage Pixop Mimir integrations.\n- Monitor ongoing jobs and retrieve integration related details.\n\n**Authentication & Required Headers**\nAll requests must include:\n- `Accept: application/json`\n- `Content-Type: application/json`\n- `x-pixop-api-key`: Pixop API key\n- `x-mimir-api-key`: Mimir API key\n- `x-mimir-tenant`: Mimir tenant identifier\n\n**Rate Limiting**\nEndpoints are subject to per-tenant rate limits, communicated via response headers:\n- `X-RateLimit-Limit`: Maximum requests per minute\n- `X-RateLimit-Remaining`: Requests left in the current window\n- `X-RateLimit-Reset`: Seconds until the window resets\n",
    "termsOfService": "https://docs.pixop.com/reference/terms-of-service",
    "contact": {
      "email": "api@pixop.com"
    },
    "version": "2.1.0"
  },
  "x-proxy-enabled": false,
  "externalDocs": {
    "description": "Learn more about Pixop and the Pixop Mimir integration",
    "url": "https://docs.pixop.com"
  },
  "servers": [
    {
      "url": "https://integrations.pixop.com/mimir",
      "description": "Production environment"
    },
    {
      "url": "https://staging-integrations.pixop.com/mimir",
      "description": "Staging environment"
    }
  ],
  "tags": [
    {
      "name": "admin",
      "description": "Operations for administering the Pixop Mimir integration."
    }
  ],
  "security": [
    {
      "PixopApiKey": [],
      "MimirApiKey": []
    }
  ],
  "paths": {
    "/v1/admin/pixop-mimir-integration": {
      "parameters": [
        {
          "$ref": "#/components/parameters/MimirTenantHeader"
        }
      ],
      "put": {
        "tags": [
          "admin"
        ],
        "summary": "Create or update the Pixop Mimir integration",
        "description": "Creates or updates the integration between a Pixop team and a Mimir tenant.\n\nThe integration includes:\n- The mapping between the Pixop team and Mimir tenant.\n- The Pixop webhook used to receive job status changes.\n- Optionally, Mimir configuration specified by `mimirSetup`.\n\nThe integration remains active for the period specified by `daysToLive` (default: 90 days). Its TTL is reset whenever this endpoint is called or a new Pixop job is initiated. When the TTL expires, the integration is deleted with the same effect as calling [`DELETE /v1/admin/pixop-mimir-integration`](https://docs.pixop.com/reference/deletepixopmimirintegration).\n\nThe `x-mimir-api-key` and `x-pixop-api-key` must remain valid while the integration is active. Calling this endpoint updates the stored API keys, so it can also be used for API key rotation. We recommend using API keys without a fixed expiry and rotating them periodically.\n\nIf `mimirSetup` is provided, the requested Mimir setup is applied. This includes Pixop custom actions and the associated Mimir UI configuration. Any manual steps required to complete the setup are returned in the response. If `mimirSetup` is omitted, the integration mapping and Pixop webhook are created or updated without changing the Mimir setup.\n\n**Notes:**\n- If `mimirSetup` references Pixop processing configurations that do not exist, a `400 Bad Request` is returned with the invalid configuration IDs.\n- If the Mimir setup fails, the request fails and no changes are made to the integration mapping or webhook.\n- If the tenant is already associated with a different Pixop team, a `409 Conflict` is returned.\n\nPlease also check [**Mimir admin setup guide**](https://docs.pixop.com/reference/mimir-admin-setup-guide) and [**User workflows**](https://docs.pixop.com/reference/mimir-user-workflows) for more information on how to set up and use the integration.\n\n_**Note**: The Pixop–Mimir integration uses Mimir APIs on your behalf using API keys you provide. Ensure your organization’s use complies with your agreement with Fonn/Mimir._\n\n_This integration is connected to [Fonn](https://fonngroup.com), enabling seamless interaction between Pixop and the Fonn-powered Mimir platform._\n",
        "operationId": "createOrUpdatePixopMimirIntegration",
        "parameters": [
          {
            "name": "daysToLive",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/PixopMimirIntegrationDaysToLive"
            },
            "description": "Life span (in days) of the Pixop Mimir integration."
          },
          {
            "name": "masterVideoIdleHoursToLive",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/MasterVideoTimeToLiveHours"
            },
            "description": "Tenant-level **idle lease window** (in whole hours) for Pixop *master videos* under this tenant.\n\nThis setting applies to **all current and future master videos** for the tenant and governs when an unused master (and its derived outputs/clips) will be cleaned up in Pixop.\n\n**Reset semantics (the idle window is NOT reset on general access/download):**\n- When a **processing appraisal** is requested for a specific master video.\n- When a lease is about to expire **but** Pixop processing for that master is still in progress at that moment (the lease is automatically re-added).\n- When a lease is about to expire **but** a derived output has not yet been fully copied to Mimir at that moment (the lease is automatically re-added).\n- When the **tenant’s lease policy is updated** (i.e., this field changes): all existing leases are recomputed relative to their `lastUsed` timestamps.\n\n**On update:** remaining TTL for existing masters is recalculated as\n`remaining = newWindow - (now - lastUsed)`. \nIf `remaining <= 0` and no jobs are in progress, the master is scheduled for deletion; otherwise the new TTL is applied from **now**.\n"
          },
          {
            "name": "pixopTeamId",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The team ID in Pixop to be used for the integration. If not provided, the current default team ID associated with the provided `x-pixop-api-key` will be used."
          },
          {
            "name": "maxAllowedProcessingsPerPixopSourceVideo",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/MaxAllowedProcessingsPerPixopSourceVideo"
            }
          },
          {
            "name": "assignItemCommentOnIngestionFinished",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/AssignItemCommentOnIngestionFinished"
            },
            "description": "Whether to add a comment to the Mimir item when Pixop ingestion is finished and assign it to the user who initiated the ingestion."
          },
          {
            "name": "assignItemCommentOnProcessingFinished",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/AssignItemCommentOnProcessingFinished"
            },
            "description": "Whether to add a comment to the Mimir item when Pixop processing is finished and assign it to the user who initiated the processing."
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PixopMimirIntegrationPutRequest"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/PixopMimirIntegrationPutResponse"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "SecretString": {
        "type": "string",
        "description": "A secret string where only the last three characters are visible, while the rest are masked for security purposes. \nTypically used for securely displaying sensitive values such as API keys.\n",
        "readOnly": true,
        "minLength": 20,
        "maxLength": 20,
        "example": "*****************123"
      },
      "PixopMimirIntegrationPut": {
        "type": "object",
        "description": "Request body for creating or updating the Pixop Mimir integration.",
        "required": [
          "mimirNotificationsUserId"
        ],
        "properties": {
          "mimirNotificationsUserId": {
            "description": "User ID in Mimir for notifications",
            "type": "string"
          },
          "mimirSetup": {
            "description": "If provided Mimir will be set up according to this",
            "$ref": "#/components/schemas/MimirSetup"
          }
        }
      },
      "PixopMimirIntegrationPutResult": {
        "type": "object",
        "description": "The Integration was successfully created or updated.",
        "required": [
          "integration"
        ],
        "properties": {
          "integration": {
            "description": "The created or updated integration",
            "$ref": "#/components/schemas/PixopMimirIntegration"
          },
          "mimirSetupResult": {
            "description": "Contains information about the Mimir setup process and any manual steps required, if mimir setup was requested.",
            "$ref": "#/components/schemas/MimirSetupResult"
          }
        }
      },
      "PixopMimirIntegration": {
        "type": "object",
        "description": "Details of the Pixop Mimir tenant integration.",
        "required": [
          "mimirTenant",
          "mimirUserId,",
          "createdAt",
          "updatedAt",
          "pixopApiKeyHidden",
          "mimirApiKeyHidden",
          "pixopMasterVideoTimeToLiveHours",
          "mimirNotificationsUserId",
          "mimirNotificationsUserEmail",
          "mimirCustomActionSecretHidden",
          "customActionsIncludeMimirUserToken",
          "customNotificationsEnabled",
          "pixopTeamId",
          "daysToLive",
          "maxAllowedProcessingsPerPixopSourceVideo",
          "expiresAt",
          "assignItemCommentOnIngestionFinished",
          "assignItemCommentOnProcessingFinished"
        ],
        "properties": {
          "mimirTenant": {
            "description": "The mimir tenant for the integration.",
            "type": "string",
            "readOnly": true
          },
          "mimirUserId": {
            "description": "The mimir user ID of the mimir API key used for the integration.",
            "type": "string",
            "readOnly": true
          },
          "createdAt": {
            "description": "Timestamp when the integration was created, in ISO-8601.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "updatedAt": {
            "description": "Timestamp when the integration was last updated, in ISO-8601.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "pixopApiKeyHidden": {
            "description": "Pixop API key, with only the last three characters visible, while the rest are masked for security purposes",
            "$ref": "#/components/schemas/SecretString",
            "readOnly": true
          },
          "mimirApiKeyHidden": {
            "description": "Mimir API key, with only the last three characters visible, while the rest are masked for security purposes",
            "$ref": "#/components/schemas/SecretString"
          },
          "pixopMasterVideoTimeToLiveHours": {
            "description": "Tenant-level idle lease window (in whole hours) for Pixop master videos under this tenant",
            "$ref": "#/components/schemas/MasterVideoTimeToLiveHours",
            "readOnly": true
          },
          "mimirNotificationsUserId": {
            "description": "User ID in Mimir for notifications",
            "type": "string",
            "readOnly": true
          },
          "mimirNotificationsUserEmail": {
            "description": "Email of the user in Mimir for notifications",
            "type": "string",
            "readOnly": true
          },
          "mimirCustomActionSecretHidden": {
            "description": "Secret for custom actions in Mimir, with only the last three characters visible, while the rest are masked for security purposes",
            "$ref": "#/components/schemas/SecretString",
            "readOnly": true
          },
          "customActionsIncludeMimirUserToken": {
            "$ref": "#/components/schemas/CustomActionsIncludeMimirUserToken",
            "readOnly": true
          },
          "customNotificationsEnabled": {
            "$ref": "#/components/schemas/CustomNotificationsEnabled",
            "readOnly": true
          },
          "pixopTeamId": {
            "description": "The team ID in Pixop associated with the integration",
            "type": "string",
            "readOnly": true
          },
          "daysToLive": {
            "description": "Time to live for the integration in days. After this period the integration will expire if not updated beforehand",
            "$ref": "#/components/schemas/PixopMimirIntegrationDaysToLive",
            "readOnly": true
          },
          "maxAllowedProcessingsPerPixopSourceVideo": {
            "$ref": "#/components/schemas/MaxAllowedProcessingsPerPixopSourceVideo",
            "readOnly": true
          },
          "expiresAt": {
            "description": "Timestamp when the integration will expire if not updated beforehand, in ISO-8601.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "assignItemCommentOnIngestionFinished": {
            "$ref": "#/components/schemas/AssignItemCommentOnIngestionFinished",
            "readOnly": true
          },
          "assignItemCommentOnProcessingFinished": {
            "$ref": "#/components/schemas/AssignItemCommentOnProcessingFinished",
            "readOnly": true
          }
        }
      },
      "PixopMimirIntegrationDaysToLive": {
        "type": "integer",
        "description": "Number of days the integration should remain active before automatic expiration.\n*Note*: The TTL is automatically reset whenever new Pixop jobs are initiated.\n",
        "minimum": 1,
        "maximum": 90,
        "default": 90
      },
      "MasterVideoTimeToLiveHours": {
        "type": "integer",
        "description": "Tenant-level idle lease window (in whole hours) for unused master videos before expiration.",
        "minimum": 1,
        "maximum": 168,
        "default": 48
      },
      "MaxAllowedProcessingsPerPixopSourceVideo": {
        "type": "integer",
        "description": "The maximum number of Pixop processing jobs allowed per pixopSourceVideo,\nbased on the total number of videos that have been successfully processed or are currently in progress in Pixop. \nIf videos are deleted in Pixop, they are not counted towards this limit. This helps control costs and manage resource usage.\n",
        "minimum": 1,
        "maximum": 5,
        "default": 1
      },
      "AssignItemCommentOnIngestionFinished": {
        "type": "boolean",
        "description": "Whether to add a comment to the Mimir item when Pixop ingestion is finished and assign it to the user who initiated the ingestion.",
        "default": true
      },
      "AssignItemCommentOnProcessingFinished": {
        "type": "boolean",
        "description": "Whether to add a comment to the Mimir item when Pixop processing is finished and assign it to the user who initiated the processing.",
        "default": true
      },
      "CustomActionsIncludeMimirUserToken": {
        "type": "boolean",
        "default": true,
        "description": "Controls whether Pixop-configured Mimir custom actions are set up to\ninclude the triggering user's Mimir access token in the request payload\nsent to the Pixop–Mimir integration endpoint.\n\nWhen `true` (default), custom actions in Mimir are configured to forward\nthe user's token. Pixop uses this token only to call the Mimir REST API\non behalf of that user to verify that the token is valid for the expected \ntenant.\nThe token is not stored and is not logged in full (only redacted values\nand user IDs are written to logs).\n\nForwarding the user token assumes that your Mimir tenant is configured\nto issue and accept access tokens for its REST API. This requires configuring \na JWKS URL in Mimir (see the \n[Mimir putSecurity endpoint](https://mimir.mjoll.no/doc/api.html#tag/Security/operation/putSecurity)\nor [Mimir admin setup guide](https://docs.pixop.com/reference/mimir-admin-setup-guide) for instructions).\n\nWhen `false`, custom actions are configured without including the user's\ntoken. In this mode, request authentication relies solely on the shared\ncustom action secret and tenant configuration. This may be required by\nsecurity policies that do not allow user tokens to be sent to external\nservices, but it disables per-user verification and removes some\nadditional safety checks against Mimir.  \n"
      },
      "CustomNotificationsEnabled": {
        "type": "boolean",
        "default": true,
        "description": "Controls whether Pixop sends custom notifications to Mimir users. This requires the API user to have tenant administrator permission in Mimir.\n\nCustom notifications are used to:\n  - Notify the configured `mimirNotificationsUserId` in Mimir when a job fails.\n  - Notify the user who triggered a custom action taking longer than 10 seconds to complete, informing them when complete.\n\nIf disabled or if the API user lacks tenant administrator permission in Mimir:\n  - Only an email is sent to the email of the configured `mimirNotificationsUserId` for job failures.\n  - No notification is sent to the user who triggered the custom action.\n"
      },
      "MimirSetup": {
        "type": "object",
        "description": "Optional Mimir-side setup to apply as part of creating or updating the integration (e.g., custom actions and UI options).",
        "required": [
          "adminApiKey",
          "pixopProcessingConfigs",
          "approveProcessing",
          "fullIngestion",
          "createNewCustomActionSecret",
          "customActionsIncludeMimirUserToken",
          "customNotificationsEnabled",
          "enhanceTooltip",
          "enhanceLabel",
          "chooseEnhancementConfigurationLabel",
          "ingestTooltip",
          "ingestLabel",
          "acceptOrRejectProcessingPriceTooltip",
          "acceptOrRejectProcessingPriceLabel",
          "deleteVideoTooltip",
          "deleteVideoLabel",
          "chooseHowToHandleDerivedVideosLabel",
          "acceptAndStartProcessingOptionLabel",
          "rejectAndDeleteVersionOptionLabel",
          "alsoDeleteDerivedVideosOptionLabel",
          "failTheRequestIfDerivedVideosExistOptionLabel"
        ],
        "properties": {
          "adminApiKey": {
            "description": "Mimir admin API key with Tenant administrator permission to allow creation of custom actions, metadata, \noption lists and permission groups, which is required during setup.\nThis key only needs to be valid during setup and is not stored.\n",
            "type": "string"
          },
          "pixopProcessingConfigs": {
            "description": "List of Pixop processing configurations to be set up in Mimir as custom actions.\nEach configuration must have a valid configId that exists in Pixop. Available configurations can be retrieved from the [Pixop REST API](https://docs.pixop.com/reference/getvideoprocessingconfigurations).\nNew configurations can be created via the [Pixop REST API](https://docs.pixop.com/reference/createvideoprocessingconfiguration) or in the [Pixop studio](https://app.pixop.com) web app.\n",
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "items": {
              "$ref": "#/components/schemas/PixopProcessingConfig"
            }
          },
          "approveProcessing": {
            "description": "Whether processing jobs in Pixop needs to be approved.",
            "type": "boolean",
            "default": true
          },
          "fullIngestion": {
            "description": "Indicates whether thumbnails, full frames, and a web video should be extracted during Pixop video ingestion.\nIf enabled, processed videos will include a comparison link, facilitating direct evaluation between the source and enhanced versions.\n",
            "type": "boolean",
            "default": true
          },
          "createNewCustomActionSecret": {
            "description": "Whether to create a new secret for Mimir custom actions. If false, the existing secret (if any) will be reused. If no existing secret is found, a new one will be created.\n",
            "type": "boolean",
            "default": false
          },
          "customActionsIncludeMimirUserToken": {
            "$ref": "#/components/schemas/CustomActionsIncludeMimirUserToken"
          },
          "customNotificationsEnabled": {
            "$ref": "#/components/schemas/CustomNotificationsEnabled"
          },
          "enhanceTooltip": {
            "description": "The tooltip to be shown in Mimir UI for the \"Enhance in Pixop\" custom action.\n",
            "type": "string",
            "default": "Enhance in Pixop. Choose the Pixop enhancement configuration in the next step"
          },
          "enhanceLabel": {
            "description": "The label to be shown in Mimir UI for the \"Enhance in Pixop\" custom action.\n",
            "type": "string",
            "default": "Enhance in Pixop..."
          },
          "chooseEnhancementConfigurationLabel": {
            "description": "The label to be shown in Mimir UI for the \"Choose the Pixop enhancement configuration\" step.\n",
            "type": "string",
            "default": "Choose the Pixop enhancement configuration"
          },
          "ingestTooltip": {
            "description": "The tooltip to be shown in Mimir UI for the \"Ingest in Pixop\" custom action.\n",
            "type": "string",
            "default": "Ingest in Pixop to allow Pixop video enhancement"
          },
          "ingestLabel": {
            "description": "The label to be shown in Mimir UI for the \"Ingest in Pixop\" custom action.\n",
            "type": "string",
            "default": "Ingest in Pixop"
          },
          "acceptOrRejectProcessingPriceTooltip": {
            "description": "The tooltip to be shown in Mimir UI for the \"Accept or reject the Pixop video enhancement price\" custom action.\n",
            "type": "string",
            "default": "Accept or reject the Pixop video enhancement price in the next step"
          },
          "acceptOrRejectProcessingPriceLabel": {
            "description": "The label to be shown in Mimir UI for the \"Accept or reject the Pixop video enhancement price\" custom action.\n",
            "type": "string",
            "default": "Accept or reject the Pixop video enhancement price..."
          },
          "deleteVideoTooltip": {
            "description": "The tooltip to be shown in Mimir UI for the \"Delete video in Pixop\" custom action.\n",
            "type": "string",
            "default": "Delete the video in Pixop. Choose how to handle derived videos in the next step"
          },
          "deleteVideoLabel": {
            "description": "The label to be shown in Mimir UI for the \"Delete video in Pixop\" custom action.\n",
            "type": "string",
            "default": "Delete the video in Pixop..."
          },
          "chooseHowToHandleDerivedVideosLabel": {
            "description": "The label to be shown in Mimir UI for the \"Choose how to handle derived videos\" step.\n",
            "type": "string",
            "default": "Choose how to handle derived videos"
          },
          "acceptAndStartProcessingOptionLabel": {
            "description": "The label to be shown in Mimir UI for the \"Accept and start processing\" option.\n",
            "type": "string",
            "default": "Accept and start processing"
          },
          "rejectAndDeleteVersionOptionLabel": {
            "description": "The label to be shown in Mimir UI for the \"Reject and delete version\" option.\n",
            "type": "string",
            "default": "Reject and delete version"
          },
          "alsoDeleteDerivedVideosOptionLabel": {
            "description": "The label to be shown in Mimir UI for the \"Also delete derived videos\" option.\n",
            "type": "string",
            "default": "Also delete derived videos"
          },
          "failTheRequestIfDerivedVideosExistOptionLabel": {
            "description": "The label to be shown in Mimir UI for the \"Fail the request if derived videos exist\" option.\n",
            "type": "string",
            "default": "Fail the request if derived videos exist"
          }
        }
      },
      "MimirSetupResult": {
        "type": "object",
        "description": "Outcome of applying the requested Mimir setup, including any manual steps required.",
        "required": [
          "infoMessages",
          "manualSteps"
        ],
        "properties": {
          "infoMessages": {
            "description": "Contains info messages about the setup process",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InfoMessage"
            }
          },
          "manualSteps": {
            "description": "If there are any manual steps to be done, they will be listed here",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "InfoMessage": {
        "type": "object",
        "description": "A human‑readable informational message returned by the API.",
        "required": [
          "message"
        ],
        "properties": {
          "message": {
            "type": "string",
            "description": "An informational message about the setup process"
          },
          "data": {
            "type": "object",
            "description": "Additional data about the message"
          }
        }
      },
      "PixopProcessingConfig": {
        "type": "object",
        "description": "Reference to a Pixop processing configuration to be used by Mimir custom actions.",
        "required": [
          "name",
          "configId"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the processing configuration. It will be used with the provided templates to create the label and \ntooltip in Mimir UI for the custom action. Also it is used when updating the title of a processed item in Mimir.\nIt is recommended to use a descriptive name that indicates the purpose of the configuration.\n"
          },
          "configId": {
            "type": "string",
            "description": "ID of the processing configuration in Pixop"
          }
        }
      },
      "Error": {
        "description": "Represents an error response returned by the API. Provides details such as the error code, status, and any associated validation errors.\n",
        "type": "object",
        "required": [
          "timestamp",
          "requestId",
          "requestPath",
          "errorCode",
          "message",
          "statusCode"
        ],
        "additionalProperties": true,
        "properties": {
          "timestamp": {
            "description": "The date and time indicating when the error occurred.",
            "readOnly": true,
            "type": "string",
            "format": "date-time"
          },
          "requestId": {
            "description": "The unique identifier for the request that caused the error.",
            "readOnly": true,
            "type": "string"
          },
          "requestPath": {
            "description": "The API path that was accessed when the error occurred.",
            "readOnly": true,
            "type": "string"
          },
          "errorCode": {
            "description": "A code representing the specific error.",
            "readOnly": true,
            "type": "string"
          },
          "message": {
            "description": "A human-readable message explaining the error.",
            "readOnly": true,
            "type": "string",
            "example": "Invalid input"
          },
          "statusCode": {
            "description": "The HTTP status code associated with the error.",
            "readOnly": true,
            "type": "integer",
            "example": 400
          },
          "validationErrors": {
            "description": "A list of validation errors, if any.",
            "readOnly": true,
            "type": "array",
            "x-nullable": true,
            "default": null,
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            }
          }
        }
      },
      "ErrorField": {
        "description": "The field in the request that caused the error.",
        "readOnly": true,
        "type": "string",
        "example": "name"
      },
      "ValidationError": {
        "description": "Represents a validation error for a specific field in the request. Provides details about the field, the invalid value, and the error message.",
        "type": "object",
        "properties": {
          "field": {
            "$ref": "#/components/schemas/ErrorField"
          },
          "value": {
            "description": "The invalid value provided for the field.",
            "readOnly": true,
            "type": "string",
            "example": 48
          },
          "message": {
            "description": "A human-readable message explaining the validation error.",
            "readOnly": true,
            "type": "string",
            "example": "size must be between 1 and 47"
          }
        }
      }
    },
    "parameters": {
      "MimirTenantHeader": {
        "name": "x-mimir-tenant",
        "in": "header",
        "required": true,
        "description": "The mimir tenant for which the integration applies.",
        "schema": {
          "type": "string"
        }
      }
    },
    "requestBodies": {
      "PixopMimirIntegrationPutRequest": {
        "description": "Request body for creating or updating the Pixop Mimir integration.",
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PixopMimirIntegrationPut"
            }
          }
        }
      }
    },
    "responses": {
      "PixopMimirIntegrationPutResponse": {
        "description": "Information about the successfully created or updated integration and any Mimir setup outcome.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PixopMimirIntegrationPutResult"
            }
          }
        },
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "BadRequest": {
        "description": "Invalid request. Inspect the details of the error for more information.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "Unauthorized": {
        "description": "Authentication failed. Missing or invalid `x-mimir-api-key`, `x-mimir-tenant` or `x-pixop-api-key` header values.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "WWW-Authenticate": {
            "description": "The authentication method that should be used to gain access to the resource.",
            "schema": {
              "type": "string"
            }
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "Forbidden": {
        "description": "Access denied. You do not have the necessary permissions to access this resource.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "Conflict": {
        "description": "Conflict detected. The request could not be processed due to conflicting data.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "TooManyRequests": {
        "description": "Too Many Requests. The rate limit for this resource has been exceeded.",
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          },
          "X-RateLimit-Retry-After": {
            "$ref": "#/components/headers/X-RateLimit-Retry-After"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "InternalServerError": {
        "description": "An unexpected error occurred on the server.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        },
        "headers": {
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          }
        }
      }
    },
    "headers": {
      "X-RateLimit-Limit": {
        "description": "The maximum number of requests allowed per minute.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Remaining": {
        "description": "The number of requests remaining in the current rate limit window.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Reset": {
        "description": "The number of seconds until the current rate limit window resets.",
        "schema": {
          "type": "integer"
        }
      },
      "X-RateLimit-Retry-After": {
        "description": "The number of seconds to wait before retrying a request that failed due to rate limits.",
        "schema": {
          "type": "integer"
        }
      }
    },
    "securitySchemes": {
      "PixopApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-pixop-api-key",
        "description": "Pixop API key. Send as `x-pixop-api-key: <key>`.\n"
      },
      "MimirApiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-mimir-api-key",
        "description": "Mimir API key. Send as `x-mimir-api-key: <key>`.\n"
      }
    }
  }
}
```