{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/snyk/main/json-schema/snyk-dry-run-job-response-attributes-schema.json",
  "title": "DryRunJobResponseAttributes",
  "description": "Attributes for a dry run job response",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/snyk-containerregistryimportpolicy-api-openapi.yml#/components/schemas/DryRunJobResponseAttributes",
  "properties": {
    "completed_at": {
      "description": "When the job completed processing (only present when status is completed or failed)",
      "format": "date-time",
      "type": "string"
    },
    "error_message": {
      "description": "Error message if the job failed (only present when status is failed)",
      "type": "string"
    },
    "policy": {
      "$ref": "#/$defs/ContainerRegistryPolicy"
    },
    "result": {
      "$ref": "#/$defs/DryRunPolicyResult"
    },
    "started_at": {
      "description": "When the job started processing (only present when status is running, completed, or failed)",
      "format": "date-time",
      "type": "string"
    },
    "status": {
      "description": "The current status of the dry run job",
      "enum": [
        "pending",
        "running",
        "completed",
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "status",
    "policy"
  ],
  "type": "object",
  "$defs": {
    "ContainerRegistryPolicy": {
      "description": "A policy",
      "properties": {
        "delete_images": {
          "description": "Delete images no longer matching the policy. False by default.",
          "type": "boolean"
        },
        "import_policy": {
          "$ref": "#/$defs/PolicyComponent"
        },
        "name": {
          "type": "string"
        },
        "schedule_frequency_hours": {
          "description": "The frequency of the import policy in hours.",
          "minimum": 2,
          "type": "integer"
        }
      },
      "required": [
        "name",
        "import_policy"
      ],
      "type": "object"
    },
    "DryRunPolicyResult": {
      "description": "The results of a dry run policy execution",
      "properties": {
        "images_to_delete": {
          "description": "List of images grouped by repositories that would be deleted based on the policy rules (only populated when delete_images is enabled)",
          "items": {
            "$ref": "#/$defs/RepositoryGroup"
          },
          "type": "array"
        },
        "images_to_import": {
          "description": "List of images grouped by repositories that would be imported based on the policy rules",
          "items": {
            "$ref": "#/$defs/RepositoryGroup"
          },
          "type": "array"
        },
        "total_images_processed": {
          "description": "Total number of images that were evaluated during the policy test, including both matching and non-matching images",
          "type": "integer"
        }
      },
      "required": [
        "images_to_import",
        "images_to_delete",
        "total_images_processed"
      ],
      "type": "object"
    },
    "ImageTag": {
      "description": "A tag within a repository",
      "properties": {
        "observed_at": {
          "description": "When the image was first observed",
          "format": "date-time",
          "type": "string"
        },
        "tag": {
          "description": "The tag name",
          "type": "string"
        }
      },
      "required": [
        "tag"
      ],
      "type": "object"
    },
    "PolicyComponent": {
      "description": "A component policy, an overall policy is made up of one or more component policies combined in various ways.",
      "properties": {
        "name": {
          "type": "string"
        },
        "policy": {
          "type": "object"
        },
        "sub_policies": {
          "items": {
            "type": "object"
          },
          "type": "array"
        },
        "type": {
          "type": "string"
        }
      },
      "required": [
        "name",
        "type"
      ],
      "type": "object"
    },
    "RepositoryGroup": {
      "description": "A repository with its matching tags grouped together",
      "properties": {
        "repository": {
          "description": "The repository name",
          "type": "string"
        },
        "tags": {
          "items": {
            "$ref": "#/$defs/ImageTag"
          },
          "type": "array"
        }
      },
      "required": [
        "repository",
        "tags"
      ],
      "type": "object"
    }
  }
}