---
title: "Files"
description: "Upload and manage images, videos, downloads, catalog imports, and support attachments."
canonical: "https://studio.inttegro.com/api/files"
format: inttegro-machine-docs/v1
language: "PHP"
sdk_version: "v12.0.0"
reader_profile: optional
reader_manifest: "https://studio.inttegro.com/machine/php/readers/index.json"
reader_identification: "Optional: declare your client only if known and your current-session capabilities; use reader_manifest for supplemental recommendations."
preamble_estimated_tokens: 693
model_token_report: "https://studio.inttegro.com/machine/token-report.json"
preamble_questions: 5
preamble_source: "machine-only-decisions"
recommended_mcp_tools: ["get_file","list_files","upload_file"]
estimated_tokens: 6190
token_estimate_method: "utf8_bytes_divided_by_4"
---

## Machine preamble

**Summary:** Upload and manage images, videos, downloads, catalog imports, and support attachments. This PHP representation uses the selected SDK's native names wherever Studio has a verified mapping.

### Five questions

#### Q1. Is Files the right source for this task?

Use this reference for upload and manage images, videos, downloads, catalog imports, and support attachments. Keep the four decision rules below with its exact operations and fields; do not infer a broader workflow from endpoint order.

#### Q2. What does “Use direct upload only from a trusted backend” require?

**Use direct upload only from a trusted backend.** When a customer, supplier,
or partner must upload without API credentials, create a time-limited [upload
request](https://studio.inttegro.com/machine/php/api/file-uploads.md) instead.

#### Q3. What does “Choose purpose before sending bytes” require?

**Choose purpose before sending bytes.** Purpose determines accepted formats,
maximum size, delivery behavior, and whether a public URL can exist. Do not
treat content type alone as authorization for how a file will be used.

#### Q4. What does “Verify availability before attaching or serving the file” require?

**Verify availability before attaching or serving the file.** A created file
can still be uploading or processing. Lookup until [`file.status`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)is available; on failure, inspect the caller-safe latest error and its
retryable signal.

#### Q5. What does “Preserve reference safety” require?

**Preserve reference safety.** Reconcile the files currently used by a
resource before deleting stale assets. Use delivery public URLs unchanged for
public media; use file contents or [file links](https://studio.inttegro.com/machine/php/api/file-links.md) when access
should remain controlled.

### Recommended MCP assistance

Use these through an authenticated Inttegro MCP connection. This document remains the contract source.

- [`get_file`](https://studio.inttegro.com/machine/php/inttegro-mcp/tools.md#get_file) — read; no mutation confirmation. Gets safe metadata for one file without returning its bytes or provider and storage internals.
- [`list_files`](https://studio.inttegro.com/machine/php/inttegro-mcp/tools.md#list_files) — read; no mutation confirmation. Lists bounded file metadata and processing state without returning bytes, checksums, storage details, or unrestricted custom data.
- [`upload_file`](https://studio.inttegro.com/machine/php/inttegro-mcp/tools.md#upload_file) — action; exact user confirmation required. Uploads canonical base64 file content up to 5 MiB and returns safe file metadata without echoing bytes or unrestricted custom data.

## Document content

# Files

Use Files to add images, videos, downloads, catalog imports, and support attachments to your Inttegro account. Each upload receives a file ID that you can attach to another Inttegro resource, retrieve later, or remove when it is no longer needed.

## Choose the file path from who uploads and who consumes it

The four decision rules are in the machine preamble above.

## The file object

A file represents an asset uploaded to Inttegro. Use its ID when attaching the asset to products and other resources.

### Properties

- [`available_at`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `timestamp`

  When the file became available for use. Returned only after the file is available.

- [`checksum_sha256`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  SHA-256 checksum of the original file bytes.

- [`content_type`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  MIME type of the uploaded file.

- [`created_at`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `timestamp`

  When the file record was created.

- [`created_by`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)

  Who or what uploaded the file.

  - [`created_by.email`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Actor email when available.

  - [`created_by.id`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Actor ID when available.

  - [`created_by.name`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Actor display name when available.

  - [`created_by.type`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Actor type, such as `'api_key'`, `'system'`, or `'upload_request'`.

- [`custom_data`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `object`

  String key-value custom data supplied during upload. Omitted when no custom data was supplied.

- [`delivery`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)

  Delivery details for files that can be displayed publicly. Omitted for other file purposes.

  - [`delivery.cache_control`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Caching policy for the public URL.

  - [`delivery.content_type`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Content type served by the public URL.

  - [`delivery.public_url`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    URL for displaying the asset. Use this value unchanged.

- [`expires_at`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `timestamp`

  Expiry timestamp when the file has a policy-driven lifetime. Omitted when the file does not expire.

- [`filename`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  Filename supplied with the upload. Omitted when no filename is available.

- [`id`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  Unique file identifier. File IDs begin with `file_`.

- [`latest_error`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)

  Most recent processing error when the file could not be made available. Present only when the file has failed.

  - [`latest_error.at`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `timestamp`

    When the error was recorded.

  - [`latest_error.code`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Stable error code for the most recent failure.

  - [`latest_error.message`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Human-readable failure message.

  - [`latest_error.retryable`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `boolean`

    Whether retrying the same operation can succeed.

- [`media`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)

  Extracted media details when Inttegro can derive them from the uploaded file.

  - [`media.aspect_ratio`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Aspect ratio when available.

  - [`media.codec`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Detected codec when available.

  - [`media.color_space`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Detected color space when available.

  - [`media.duration_ms`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

    Media duration in milliseconds when available.

  - [`media.frame_count`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

    Frame count when available.

  - [`media.has_alpha`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `boolean`

    Whether the media has an alpha channel when available.

  - [`media.height`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

    Media height in pixels when available.

  - [`media.kind`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Media category such as `'image'`, `'video'`, or `'document'`.

  - [`media.page_count`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

    Page count for document-like files when available.

  - [`media.width`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

    Media width in pixels when available.

- [`metadata`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `object`

  Read-only information added by Inttegro. Use [`file.custom_data`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) for your own values.

- [`name`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  Human-friendly title for the file. Omitted when no title was supplied.

- [`purpose`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  Purpose policy used to validate and store the file:`'product_download'` for downloadable product files and merchant-managed attachments. Accepts `.pdf`, `.zip`, `.txt`, and `.csv` files up to 100 MiB. Not linkable through [file links](https://studio.inttegro.com/machine/php/api/file-links.md).
  `'product_image'` for product images. Accepts JPEG, PNG, and GIF up to 10 MiB. Linkable through [file links](https://studio.inttegro.com/machine/php/api/file-links.md).
  `'product_video'` for product videos. Accepts MP4, WebM, and QuickTime up to 250 MiB. Linkable through [file links](https://studio.inttegro.com/machine/php/api/file-links.md).
  `'products_import'` for product-catalog imports. Accepts CSV files up to 32 MiB that follow the required import schema and contain no more than 10,000 data rows. Not linkable through [file links](https://studio.inttegro.com/machine/php/api/file-links.md).
  `'support_document'` for support evidence and attachments. Accepts PDF, JPEG, PNG, and plain text up to 25 MiB. Not linkable through [file links](https://studio.inttegro.com/machine/php/api/file-links.md).

- [`scan_status`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  File safety check status: [`\Inttegro\File\ScanStatus::Pending`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-ScanStatus.html#enumcase_Pending), [`\Inttegro\File\ScanStatus::Passed`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-ScanStatus.html#enumcase_Passed), [`\Inttegro\File\ScanStatus::Failed`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-ScanStatus.html#enumcase_Failed), or [`\Inttegro\File\ScanStatus::Skipped`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-ScanStatus.html#enumcase_Skipped).

- [`size`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

  Original file size in bytes.

- [`source`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)

  How the file was uploaded.

  - [`source.service`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Service that supplied the file, when applicable.

  - [`source.type`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Source type such as [`\Inttegro\File\SourceType::Direct`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-SourceType.html#enumcase_Direct) or [`\Inttegro\File\SourceType::UploadRequest`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-SourceType.html#enumcase_UploadRequest).

  - [`source.upload_request_id`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Upload-request ID when the file came from a delegated upload.

- [`status`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

  File lifecycle status: [`\Inttegro\File\Status::Uploading`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Uploading), [`\Inttegro\File\Status::Processing`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Processing), [`\Inttegro\File\Status::Available`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Available), [`\Inttegro\File\Status::Failed`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Failed), or [`\Inttegro\File\Status::Deleted`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Deleted).

- [`storage`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html)

  Size and encoding of the stored file.

  - [`storage.encoding`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `string`

    Stored representation, such as [`\Inttegro\File\StorageEncoding::Identity`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-StorageEncoding.html#enumcase_Identity) or [`\Inttegro\File\StorageEncoding::Brotli`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-StorageEncoding.html#enumcase_Brotli).

  - [`storage.stored_size`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `integer`

    Stored object size in bytes.

- [`updated_at`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) — `timestamp`

  When the file record was last updated.

## Upload a file

Upload an asset from your backend. Choose a `purpose` that matches how you plan to use the file; it determines the accepted format and maximum size. To collect a file from a customer or another person, create an [upload request](https://studio.inttegro.com/machine/php/api/file-uploads.md#create-an-upload-request) instead.

### Request body

- `custom_data` — `object` — wire-only

  Optional JSON object encoded as a form field. Keys and values must both be strings. The encoded object can be at most 25 KiB, and each key can be at most 256 characters.

- `file` — `file` — required — wire-only

  Multipart file part containing the bytes to store.

- `purpose` — `string` — required — wire-only

  How the file will be used: `'product_download'`, `'product_image'`, `'product_video'`, `'products_import'`, or `'support_document'`. See the file object for the formats and size limit of each purpose.

- `title` — `string` — wire-only

  Optional display name for the file.

### Response

The response returns the new `File`. Save [`file.id`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) with the product or resource that uses the asset.

A `products_import` CSV must contain between 1 and 10,000 product rows. Each row uses these columns in order: `name`, `type`, `price_currency`, `price_value`, `reference`, `description`, `about`, `category`, `tax_code`, `unit_dimension`, `price_label`, `publish`, and `attributes`. The first row may contain those column names as a header.

**Request — POST /files/create**

```php
<?php

use Inttegro\Client;

$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->files->create([
  'file' => './hero.png',
  'purpose' => 'product_image',
  'title' => 'Hero image',
  'custom_data' => [
    'product_ref' => 'SKU-12345',
  ],
], [
    'idempotency_key' => "upload-hero-image-001",
]);
```

```json
{
  "file": {
    "id": "file_4q6YcQk1RzPv2mDa8nFw0sHu",
    "purpose": "product_image",
    "status": "available",
    "scan_status": "skipped",
    "name": "Hero image",
    "filename": "hero.png",
    "content_type": "image/png",
    "size": 248391,
    "checksum_sha256": "db6f2f1d7b4b4d9d9c30a3ddcc7f9d506e8c9d67c4a61e5b9fd2dd9b0f5d0000",
    "created_by": { "type": "api_key" },
    "source": { "type": "direct" },
    "storage": { "encoding": "identity", "stored_size": 248391 },
    "delivery": {
      "public_url": "<PUBLIC_FILE_URL>",
      "cache_control": "public, max-age=31536000, immutable",
      "content_type": "image/png"
    },
    "custom_data": { "product_ref": "SKU-12345" },
    "metadata": { "source_type": "direct" },
    "created_at": "2026-06-05T12:30:00Z",
    "updated_at": "2026-06-05T12:30:00Z",
    "available_at": "2026-06-05T12:30:00Z"
  }
}
```

## Lookup a file

Retrieve a file's name, type, size, status, and other details. To retrieve the file itself, use [Download file contents](https://studio.inttegro.com/machine/php/api/files.md#download-file-contents).

### Request body

- `file_id` — `string` — required — wire-only

  File ID to retrieve.

### Response

The response returns the requested `File`.

**Request — POST /files/lookup**

```php
<?php

use Inttegro\Client;

$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->files->lookup("file_4q6YcQk1RzPv2mDa8nFw0sHu");
```

## Page files

Browse the files in your Inttegro account. Combine filters to find files by purpose, status, or upload date.

### Request body

- `created_after` — `timestamp` — wire-only

  Return files created at or after this RFC 3339 timestamp.

- `created_before` — `timestamp` — wire-only

  Return files created at or before this RFC 3339 timestamp.

- `page_number` — `integer` — wire-only

  Page number to retrieve. Defaults to `1`.

- `page_size` — `integer` — wire-only

  Requested number of files per page. Defaults to `25` and is capped at `256`.

- `purpose` — `string` — wire-only

  Filter by file purpose.

- `status` — `string` — wire-only

  Filter by lifecycle status: [`\Inttegro\File\Status::Uploading`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Uploading), [`\Inttegro\File\Status::Processing`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Processing), [`\Inttegro\File\Status::Available`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Available), [`\Inttegro\File\Status::Failed`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Failed), or [`\Inttegro\File\Status::Deleted`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Deleted).

### Response

Files are returned newest first. The response contains the current page number, the number of files returned, and a [`page.files`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-FilePage.html) array. When no more files remain, the array is empty.

**Request — POST /files/page**

```php
<?php

use Inttegro\Client;

$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->files->page([
  'purpose' => 'product_image',
  'status' => 'available',
  'page_number' => 1,
  'page_size' => 25,
]);
```

```json
{
  "page": {
    "number": 1,
    "size": 1,
    "files": [
      {
        "id": "file_4q6YcQk1RzPv2mDa8nFw0sHu",
        "purpose": "product_image",
        "status": "available",
        "content_type": "image/png",
        "size": 248391
      }
    ]
  }
}
```

## Reconcile file references

Tell Inttegro which files a resource currently uses. This prevents an attached file from being deleted while the resource still depends on it.

Send the complete set after you save the resource. Each call replaces the previous set: references you remove are released, references you add become protected, and an empty or omitted `references` array clears the set.

### Request body

- `references` — `array` — wire-only

  Complete desired set of live file references. Omit it or send an empty array to clear the set.

  - `references.field` — `string` — required — wire-only

    Stable path to the field containing the reference, such as `'media.hero_image'` or `'media.gallery[0]'`.

  - `references.file_id` — `string` — required — wire-only

    Canonical `file_...` ID whose deletion should remain blocked while this reference is live.

  - `references.purpose` — `string` — wire-only

    Optional purpose recorded with the reference, such as `'product_image'`.

  - `references.reference` — `string` — wire-only

    Optional exact value stored on the resource. This may be a file ID or file-link ID.

  - `references.reference_kind` — `string` — wire-only

    Optional kind describing `references[].reference`. Use `'file'` for a file ID or `'file_link'` for a file-link ID.

- `resource_id` — `string` — required — wire-only

  ID of the resource whose live reference set is being replaced.

- `resource_type` — `string` — required — wire-only

  Stable resource kind, such as `'product'`.

### Response

A successful response returns [`reconciled`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-FileReferenceReconciliation.html) set to `true`, confirming that Inttegro now uses the submitted set to protect files from deletion.

**Request — POST /file\_references/reconcile**

```php
<?php

use Inttegro\Client;

$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->fileReferences->reconcile([
  'resource_type' => 'product',
  'resource_id' => 'prod_123',
  'references' => [
    [
      'file_id' => 'file_4q6YcQk1RzPv2mDa8nFw0sHu',
      'field' => 'media.hero_image',
      'reference' => 'file_4q6YcQk1RzPv2mDa8nFw0sHu',
      'reference_kind' => 'file',
      'purpose' => 'product_image',
    ],
  ],
]);
```

```json
{
  "reconciled": true
}
```

## Download file contents

Retrieve a file from your backend. Use this for private downloads and for file purposes that cannot be shared through [file links](https://studio.inttegro.com/machine/php/api/file-links.md#create-a-file-link).

### Request body

- `disposition` — `string` — wire-only

  Optional response disposition: [`\Inttegro\File\Disposition::Attachment`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Disposition.html#enumcase_Attachment) or [`\Inttegro\File\Disposition::Inline`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Disposition.html#enumcase_Inline). Defaults to [`\Inttegro\File\Disposition::Attachment`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Disposition.html#enumcase_Attachment).

- `delivery` — `string` — wire-only

  Delivery mode: [`\Inttegro\File\Delivery::Stream`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Delivery.html#enumcase_Stream) or [`\Inttegro\File\Delivery::Redirect`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Delivery.html#enumcase_Redirect). Defaults to [`\Inttegro\File\Delivery::Stream`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Delivery.html#enumcase_Stream).

- `file_id` — `string` — required — wire-only

  File ID whose bytes should be delivered.

### Response

With `delivery` set to [`\Inttegro\File\Delivery::Stream`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Delivery.html#enumcase_Stream), the response contains the file bytes and the headers needed to preserve its content type and filename.

With `delivery` set to [`\Inttegro\File\Delivery::Redirect`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Delivery.html#enumcase_Redirect), the response redirects to a short-lived download URL. The SDK helpers use stream delivery, which is the simplest choice when your backend needs to save or forward the file.

**Stream request — POST /files/contents**

```php
<?php

use Inttegro\Client;

$client = new Client($_ENV['INTTEGRO_API_KEY']);
$download = $client->files->contents([
  'disposition' => 'attachment',
  'file_id' => 'file_4q6YcQk1RzPv2mDa8nFw0sHu',
]);
$download->saveTo('./downloaded-file');
```

## Delete a file

Delete a file that your business no longer needs. Its public links stop working, and Inttegro rejects the deletion while another resource still uses the file.

### Request body

- `file_id` — `string` — required — wire-only

  File ID to delete.

### Response

The response returns the deleted `File` with [`file.status`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File.html) set to [`\Inttegro\File\Status::Deleted`](https://php.inttegro.dev/v12.0.0/classes/Inttegro-File-Status.html#enumcase_Deleted).

**Request — POST /files/delete**

```php
<?php

use Inttegro\Client;

$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->files->delete("file_4q6YcQk1RzPv2mDa8nFw0sHu");
```

```json
{
  "file": {
    "id": "file_4q6YcQk1RzPv2mDa8nFw0sHu",
    "purpose": "product_image",
    "status": "deleted"
  }
}
```
