<!--
{
  "availability" : [
    "Apple Ads Platform API: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Apple-Ads-Platform-API",
  "identifier" : "/documentation/Apple-Ads-Platform-API/Upload-Asset",
  "metadataVersion" : "0.1.0",
  "role" : "Web Service Endpoint",
  "symbol" : {
    "kind" : "Web Service Endpoint",
    "modules" : [
      "Apple Ads Platform API"
    ],
    "preciseIdentifier" : "rest:apple-ads-platform-api:post:assets-upload"
  },
  "title" : "Upload Asset"
}
-->

# Upload Asset

Upload a binary image file to create a new asset.

## Discussion

This endpoint uploads a raw image file and associates it with a promoted object (Brand). The multipart request body must include the binary image file alongside `promotedObjectId` and `promotedObjectType` fields that identify the brand the asset belongs to.

**This endpoint currently supports Business Brand assets only.** `promotedObjectType` accepts only `BUSINESS_BRAND`, so uploaded assets serve ads on Apple Maps. App Store app assets aren’t supported here: App Store creatives use `CUSTOM_PRODUCT_PAGE` or `DEFAULT_PRODUCT_PAGE`, which reference an app’s existing App Store product page instead of an uploaded image.

After upload, the asset begins processing. Poll using [`Get Asset`](/documentation/Apple-Ads-Platform-API/Get-Asset-by-ID) until the `eligibility.status` indicates the asset is ready before referencing it in a creative.

The returned asset has `assetType: IMAGE` and a `providerAssetId` that the provider system assigns.

## Request Body

Multipart form data (`multipart/form-data`) containing the binary image file and promoted-object metadata.

|Field               |Type  |Required|Description                                                                                                           |
|--------------------|------|--------|----------------------------------------------------------------------------------------------------------------------|
|`file`              |binary|Yes     |The image file to upload. Accepted formats: PNG, JPG, HEIC.                                                           |
|`promotedObjectId`  |string|Yes     |The identifier of the promoted object (for example, the brand ID for a `BUSINESS_BRAND`).                             |
|`promotedObjectType`|string|Yes     |The type of the promoted object. Only `BUSINESS_BRAND` is supported; App Store apps aren’t supported by this endpoint.|

### Post-Upload Workflow

1. Poll `GET /v1/assets/{id}` ([`Get Asset`](/documentation/Apple-Ads-Platform-API/Get-Asset-by-ID)) until `eligibility.status` indicates the asset is ready to use.
2. Reference the asset UUID in a `creativeAssets` array when creating a `LOCAL_ADS_SEARCH_CREATIVE`.

## Payload Examples

**Upload Asset:**

### Request

POST a multipart form including the image file, `promotedObjectId`, and `promotedObjectType`.

```console
curl -X POST https://api.ads.apple.com/v1/assets/upload \
-H "Authorization: Bearer {access_token}" \
-H "X-AP-Context: adAccountId={adAccountId}" \
-F "file=@hero.png;type=image/png" \
-F "promotedObjectId=123456789" \
-F "promotedObjectType=BUSINESS_BRAND"
```

### Response

```json
{
 "result": {
   "id": "770e8400-e29b-41d4-a716-446655440002",
   "name": "hero.png",
   "assetType": "IMAGE",
   "providerAssetId": "abc123provider001",
   "promotedObjectId": "123456789",
   "promotedObjectType": "BUSINESS_BRAND",
   "providerAssetMetadata": {},
   "assetDetails": {
     "width": 1920,
     "height": 1080,
     "format": "PNG",
     "sizeBytes": 2097152
   },
   "parentAssetId": null,
   "variantIds": [],
   "eligibility": {
     "status": "PENDING",
     "blockedGroups": [],
     "allowedGroups": []
   },
   "creationTime": "2026-06-06T10:00:00.000",
   "modificationTime": "2026-06-06T10:00:00.000"
 }
}
```

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)