{
  "openapi": "3.0.1",
  "info": {
    "title": "HEIC to JPG Converter: iPhone Photos in Bulk",
    "description": "Convert HEIC and HEIF photos from iPhone and iPad to JPEG, PNG, WebP or AVIF in bulk. Resize to presets, compress to a quality or file size target, and strip GPS and EXIF data. Returns file links and sizes. No upload to outside services.",
    "version": "0.1",
    "x-build-id": "eEiS3Td4AMpNFx8s8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/maliksaid~heic-to-jpg-converter/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-maliksaid-heic-to-jpg-converter",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/maliksaid~heic-to-jpg-converter/runs": {
      "post": {
        "operationId": "runs-sync-maliksaid-heic-to-jpg-converter",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/maliksaid~heic-to-jpg-converter/run-sync": {
      "post": {
        "operationId": "run-sync-maliksaid-heic-to-jpg-converter",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "imageUrls": {
            "title": "HEIC or image URLs",
            "type": "array",
            "description": "Links to HEIC or HEIF photos (iPhone and iPad photos), one per line. JPEG, PNG, WebP, AVIF, GIF and TIFF also work. The Actor reads robots.txt on each host and skips files it does not allow. Leave empty, with no key-value store, to convert a built-in sample HEIC photo.",
            "items": {
              "type": "string"
            }
          },
          "keyValueStoreId": {
            "title": "Key-value store with HEIC files",
            "type": "string",
            "description": "Optional. Pick one of your key-value stores that holds uploaded HEIC or image files. The Actor only reads this store. Converted files go to the run's own key-value store."
          },
          "keyValueStoreKeys": {
            "title": "Record keys",
            "type": "array",
            "description": "Optional. Convert only these records of the store. Leave empty to convert every image record in the store.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Dataset with photo links",
            "type": "string",
            "description": "Optional. A dataset with photo links, for example the output of a scraper. The Actor only reads it. Pick the field that holds the link below."
          },
          "datasetField": {
            "title": "Dataset field with the link",
            "type": "string",
            "description": "Name of the top-level field that holds the photo link in each dataset row. Rows without an http or https link in this field are skipped and counted in the log.",
            "default": "imageUrl"
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "jpeg",
              "png",
              "webp",
              "avif"
            ],
            "type": "string",
            "description": "Format of the converted files. JPEG opens everywhere. PNG is lossless. WebP and AVIF are smaller and suit websites.",
            "default": "jpeg"
          },
          "quality": {
            "title": "Quality",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Set the quality for JPEG, WebP and AVIF, from 1 to 100. Lower values give smaller files. 85 to 92 looks the same as the original for most photos. PNG is always lossless.",
            "default": 90
          },
          "lossless": {
            "title": "Lossless",
            "type": "boolean",
            "description": "Keep every pixel exactly for WebP and AVIF. Files get much larger. Use it for logos and screenshots.",
            "default": false
          },
          "maxOutputKilobytes": {
            "title": "Maximum file size (KB)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional size target for each file, in kilobytes. The Actor lowers the quality step by step until the file fits, down to quality 20. 0 means no target. Works for WebP, AVIF and JPEG.",
            "default": 0
          },
          "resizePreset": {
            "title": "Resize preset",
            "enum": [
              "none",
              "thumbnail",
              "web-medium",
              "web-large",
              "product-square",
              "product-large",
              "instagram-square",
              "instagram-portrait",
              "story",
              "open-graph",
              "wide-16x9",
              "custom"
            ],
            "type": "string",
            "description": "Pick a target size. 'Padded' keeps the whole image on a square of the background colour. 'Cropped' fills the frame and trims the edges. Pick 'Custom size' to set width, height and fit below.",
            "default": "none"
          },
          "width": {
            "title": "Custom width",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Set the width in pixels for 'Custom size'. Leave empty to scale by height only."
          },
          "height": {
            "title": "Custom height",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Set the height in pixels for 'Custom size'. Leave empty to scale by width only."
          },
          "fit": {
            "title": "Custom fit",
            "enum": [
              "inside",
              "cover",
              "contain",
              "fill"
            ],
            "type": "string",
            "description": "Choose how 'Custom size' fits the image into the width and height.",
            "default": "inside"
          },
          "allowEnlargement": {
            "title": "Allow enlargement",
            "type": "boolean",
            "description": "Let the Actor make small images bigger to reach the preset size. Off keeps small images at their own size.",
            "default": false
          },
          "backgroundColor": {
            "title": "Background colour",
            "pattern": "^#[0-9a-fA-F]{6}$",
            "type": "string",
            "description": "Set the colour for padding and for transparent areas in JPEG output, as #rrggbb.",
            "default": "#ffffff"
          },
          "stripMetadata": {
            "title": "Strip metadata (EXIF and GPS)",
            "type": "boolean",
            "description": "Remove EXIF, GPS location, camera details, XMP and IPTC data from every output file. On by default to protect privacy. HEIC files always lose their metadata, because the decoder returns pixels only; the row still says whether the original had GPS data.",
            "default": true
          },
          "keepColorProfile": {
            "title": "Keep colour profile",
            "type": "boolean",
            "description": "Keep the embedded ICC colour profile when metadata is stripped. Off converts colours to sRGB, which every browser shows correctly.",
            "default": false
          },
          "maxImageMegabytes": {
            "title": "Maximum input file size (MB)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Skip input files larger than this. The limit is 50 MB.",
            "default": 25
          },
          "maxMegapixels": {
            "title": "Maximum image size (megapixels)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Skip images with more pixels than this. HEIC photos are decoded up to 25 megapixels per 512 MB of run memory, which covers 12 and 24 MP phone photos. The row says why when an image is skipped.",
            "default": 40
          },
          "maxItems": {
            "title": "Maximum images",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after converting this many files. The default keeps test runs short and cheap. Set 0 for no limit. One run converts at most 5,000 files.",
            "default": 100
          },
          "createZip": {
            "title": "One ZIP with all photos",
            "type": "boolean",
            "description": "Also save one ZIP file with every converted photo, for a single download. Free. Up to 1,000 photos or 2 GB per ZIP. The link is in the OUTPUT record and the status message.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}