> ## Documentation Index
> Fetch the complete documentation index at: https://developers.criteo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Catalog Endpoints

> Generate and download a copy of retailer's inventory

export const EndpointBadge = ({method = "GET", children}) => {
  const METHOD_STYLES = {
    GET: {
      bg: "mint-bg-[#2AB673]"
    },
    POST: {
      bg: "mint-bg-[#3064E3]"
    },
    PUT: {
      bg: "mint-bg-[#C28C30]"
    },
    PATCH: {
      bg: "mint-bg-[#DA622B]"
    },
    DELETE: {
      bg: "mint-bg-[#CB3A32]"
    },
    API: {
      bg: "mint-bg-black"
    }
  };
  const key = method.toUpperCase();
  const styles = METHOD_STYLES[key] ?? METHOD_STYLES.API;
  return <div className="relative mt-7">
      <span className={`absolute -top-2 -left-2 z-10 ${styles.bg} text-white px-2.5 py-0.5 rounded-full text-xs font-bold tracking-wide`}>
        {key}
      </span>
      {children}
    </div>;
};

## Endpoints

<table>
  <thead>
    <tr>
      <th>
        <p>
          Method
        </p>
      </th>

      <th>
        <p>
          Endpoint
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /accounts/\{accountId}/brand-catalog-export
          </code>
        </p>
      </td>

      <td>
        <p>
          Create a request to export existing catalogs from a Brand account
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            POST
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /accounts/\{accountId}/seller-catalog-export
          </code>
        </p>
      </td>

      <td>
        <p>
          Create a request to export existing catalogs from a Seller account
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            GET
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /catalogs/\{catalogId}/status
          </code>
        </p>
      </td>

      <td>
        <p>
          Retrieve the status of a specific catalog request.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <b>
            GET
          </b>
        </p>
      </td>

      <td>
        <p>
          <code>
            /catalogs/\{catalogId}/output
          </code>
        </p>
      </td>

      <td>
        <p>
          Download the output of a specific catalog once it's ready.
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

## Attributes

### Catalog Export Request Attributes

#### Brand Accounts

<table>
  <thead>
    <tr>
      <th>
        <p>
          Attribute
        </p>
      </th>

      <th>
        <p>
          Data Type
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <code>
            brandIdFilter
          </code>
        </p>
      </td>

      <td>
        <p>
          list\\
        </p>
      </td>

      <td>
        <p>
          <code>
            Brand(s) ids
          </code>

          used to filter down catalog results based on specified brands. Note: If nothing is entered, you will get all brands
        </p>

        <p>
          Accepted values:

          <code>
            int64
          </code>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            retailerIdFilter
          </code>
        </p>
      </td>

      <td>
        <p>
          list\\
        </p>
      </td>

      <td>
        <p>
          <code>
            Retailer(s) ids
          </code>

          used to filter down catalog results based on specified retailers. Note: If nothing is entered you will get all retailers
        </p>

        <p>
          Accepted values:

          <code>
            int64
          </code>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            modifiedAfter
          </code>
        </p>
      </td>

      <td>
        <p>
          timestamp
        </p>
      </td>

      <td>
        <p>
          Modifie stamp which will only include the SKUs modified after the specified time. The upper limit of this field is set to -18 hours from current time. After which, the user will be asked to do a full export instead.
        </p>

        <p>
          Accepted values:

          <code>
            yyyy-mm-ddThh:mm:ss±hh:mm
          </code>

          (in

          <a href="https://en.wikipedia.org/wiki/ISO_8601">
            ISO-8601
          </a>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            includeFields
          </code>
        </p>
      </td>

      <td>
        <p>
          list\\
        </p>
      </td>

      <td>
        <p>
          Additional fields that can be added to the catalog export. If they are not included, when the output endpoint is called, the fields will return with “null” values.
        </p>

        <p>
          Accepted values:

          <code>
            "RetailerName"
          </code>

          ,

          <code>
            "Description"
          </code>

          ,

          <code>
            "BrandName"
          </code>

          ,

          <code>
            "GoogleCategory"
          </code>

          ,

          <code>
            "Category"
          </code>

          ,

          <code>
            "ImageUrl"
          </code>
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

#### Seller Accounts

<table>
  <thead>
    <tr>
      <th>
        <p>
          Attribute
        </p>
      </th>

      <th>
        <p>
          Data Type
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <code>
            sellers
          </code>
        </p>
      </td>

      <td>
        <p>
          list\\
        </p>
      </td>

      <td>
        <p>
          <code>
            retailerId
          </code>

          : The id that represents the retailer providing advertising inventory for brands to promote their products.
        </p>

        <p>
          Accepted values: string
        </p>

        <p>
          <code>
            sellerId
          </code>

          : Seller id(s) in respective retailers' catalogs, used to filter down catalog items.
        </p>

        <p>
          Accepted values: string
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            modifiedAfter
          </code>
        </p>
      </td>

      <td>
        <p>
          timestamp
        </p>
      </td>

      <td>
        <p>
          Mofified timestamp which will only include the skus modified after the specified time. Upper limit of this field is set to -18 hours from current time. After which user will be asked to do a full export instead.
        </p>

        <p>
          Accepted values:

          <code>
            yyyy-mm-ddThh:mm:ss±hh:mm
          </code>

          (in

          <a href="https://en.wikipedia.org/wiki/ISO_8601">
            ISO-8601
          </a>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            includeFields
          </code>
        </p>
      </td>

      <td>
        <p>
          list\\
        </p>
      </td>

      <td>
        <p>
          Additional fields that can be added to the catalog export. If they are not included, when the output endpoint is called, the fields will return with “null” values.
        </p>

        <p>
          Accepted values:

          <code>
            "RetailerName"
          </code>

          ,

          <code>
            "Description"
          </code>

          ,

          <code>
            "BrandName"
          </code>

          ,

          <code>
            "GoogleCategory"
          </code>

          ,

          <code>
            "Category"
          </code>

          ,

          <code>
            "ImageUrl"
          </code>
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

### Catalog Status Response Attributes

<table>
  <thead>
    <tr>
      <th>
        <p>
          Attribute
        </p>
      </th>

      <th>
        <p>
          Data Type
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <code>
            id
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          ID of the catalog creation status request
        </p>

        <p>
          Values: int64
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            type
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Type definition of the response
        </p>

        <p>
          Values:

          <code>
            "RetailMediaCatalogStatus"
          </code>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            status
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Status of the response
        </p>

        <p>
          Possible Values:

          <code>
            pending
          </code>

          ,

          <code>
            success
          </code>

          ,

          <code>
            failure
          </code>

          ,

          <code>
            expired
          </code>

          ,

          <code>
            unknown
          </code>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            currency
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          ISO-4217 currency of the items in the respective catalog
        </p>

        <p>
          Values:

          <code>
            USD
          </code>

          ,

          <code>
            EUR
          </code>

          , etc.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            rowCount
          </code>
        </p>
      </td>

      <td>
        <p>
          integer
        </p>
      </td>

      <td>
        <p>
          Number of products contained in the catalog (available when creation reaches

          <code>
            success
          </code>

          status)
        </p>

        <p>
          Max Value: 100000
        </p>

        <p>
          Values: int32
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            fileSizeBytes
          </code>
        </p>
      </td>

      <td>
        <p>
          integer
        </p>
      </td>

      <td>
        <p>
          Size of catalog, in bytes (available when creation reaches

          <code>
            success
          </code>

          status)
        </p>

        <p>
          Values: int32
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            md5Checksum
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          MD5 checksum of catalog's content (available when creation reaches

          <code>
            success
          </code>

          status)
        </p>

        <p>
          Values: 32-char alphalphanumeric strings
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            createdAt
          </code>
        </p>
      </td>

      <td>
        <p>
          timestamp
        </p>
      </td>

      <td>
        <p>
          Timestamp of the creation
        </p>

        <p>
          Values: ISO-8601
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            message
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Optional informative message, for developer consconsumption
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

### Catalog Output Response Attributes

<table>
  <thead>
    <tr>
      <th>
        <p>
          Attribute
        </p>
      </th>

      <th>
        <p>
          Data Type
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          <code>
            id
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Retailer product ID, established by the retailer
        </p>

        <p>
          Values: 500 char limit
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            name
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Retailer product name
        </p>

        <p>
          Values: 1000 char limit
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            description
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Retailer product description
        </p>

        <p>
          Values: 5000 char limit
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            category
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Retailer product category
        </p>

        <p>
          Values: 1000 char limit
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            categoryId
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Category ID associated with the product, derived from the retailer catalog.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            googleCategory
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Category associated with the product, derived from the

          <a href="https://www.google.com/basepages/producttype/taxonomy-with-ids.en-US.txt">
            Google Product Taxonomy
          </a>

          list.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            brandId
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Brand ID of the product
        </p>

        <p>
          For brand accounts, it is derived from the Universal Catalog.
        </p>

        <p>
          For retailer accounts, it is derived from the Retailer Catalog.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            brandName
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Brand name of the product; names are standardized across retailers
        </p>

        <p>
          Values: 120 char limit
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            sellerId
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Seller ID(s) in the respective retailers' catalogs, used to filter down catalog items.
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            sellerName
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Name of the seller associated with the

          <code>
            sellerId
          </code>

          .
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            retailerId
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Retailer ID carrying the product
        </p>

        <p>
          Values: int64
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            retailerName
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Name of the retailer associated with

          <code>
            retailerId
          </code>

          , carrying the product.
        </p>

        <p>
          Values: 100 char limit
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            price
          </code>
        </p>
      </td>

      <td>
        <p>
          number
        </p>
      </td>

      <td>
        <p>
          Retailer product price in USD
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            isInStock
          </code>
        </p>
      </td>

      <td>
        <p>
          boolean
        </p>
      </td>

      <td>
        <p>
          Whether or not the product is in stock
        </p>

        <p>
          Values:

          <code>
            true
          </code>

          ,

          <code>
            false
          </code>
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            minBid
          </code>
        </p>
      </td>

      <td>
        <p>
          number
        </p>
      </td>

      <td>
        <p>
          Minimum Cost-Per-Click (CPC) an advertiser must bid for the product, established by the retailer; any

          <a href="/retail-media/docs/line-items">
            line item
          </a>

          with this product must have targetBid meet this value
        </p>

        <p>
          Values: greater than 0
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            gtin
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Global Trade Item Number (GTIN), if available; also known as European Article Number (EAN) or Universal Product Code (UPC)
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            mpn
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          Manufacturer Part Number (MPN), if available
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            imageUrl
          </code>
        </p>
      </td>

      <td>
        <p>
          string
        </p>
      </td>

      <td>
        <p>
          An http image URL provided by the retailer
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          <code>
            updatedAt
          </code>
        </p>
      </td>

      <td>
        <p>
          timestamp
        </p>
      </td>

      <td>
        <p>
          Timestamp in UTC of last update
        </p>

        <p>
          Values: ISO-8601
        </p>
      </td>
    </tr>
  </tbody>
</table>

***

## Export Catalog of a Specific Account

### Brand account

This endpoint allows you to generate the most up-to-date catalog for a specific brand account.

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/accounts/{accountId}/brand-catalog-export
  ```
</EndpointBadge>

<Note>
  **Best Practice Tip!**

  If you wish to filter SKUs modified within the last 18 hours, you can use `modifiedAfter` field. The request should be formatted according to ISO 8601 standards. Although the example provided uses Eastern Standard Time (EST), you can specify any time zone.

  Important: If the specified time exceeds the 18-hour limit, the request will return a 400 response, advising you to perform a full catalog export instead.
</Note>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X POST 'https://api.criteo.com/{version}/retail-media/accounts/4/brand-catalog-export' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <MY_ACCESS_TOKEN>' \
  --data-raw '{
    "data": {
      "type": "<string>",
      "attributes": {
        "brandIdFilter": [
          "123"
        ],
        "retailerIdFilter": [
          "456"
        ],
        "modifiedAfter": "2025-03-21T08:00:00-5:00",
        "includeFields": ["ImageUrl","GoogleCategory", "RetailerName", "Category", "BrandName","Description"]
      }
    }
  }'
  ```

  ```python Python theme={null}
  import requests
  import json

  url = "https://api.criteo.com/{version}/retail-media/accounts/4/brand-catalog-export"

  payload = json.dumps({
    "data": {
      "type": "<string>",
      "attributes": {
        "brandIdFilter": [
          "123"
        ],
        "retailerIdFilter": [
          "456"
        ],
        "modifiedAfter": "2025-03-21T08:00:00-5:00",
        "includeFields": ["ImageUrl","GoogleCategory", "RetailerName", "Category", "BrandName","Description"]
      }
    }
  })
  headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)
  ```

  ```java Java theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();

  MediaType mediaType = MediaType.parse("application/json");

  RequestBody body = RequestBody.create(mediaType, "{\n  \"data\": {\n   \"type\": \"<string>\",\n   \"attributes\": {\n     \"brandIdFilter\": [\n       \"123\"\n     ],\n     \"retailerIdFilter\": [\n       \"456\"\n     ],\n     \"modifiedAfter\": \"2025-03-21T08:00:00-5:00\",\n     \"includeFields\": [\"ImageUrl\",\"GoogleCategory\", \"RetailerName\", \"Category\", \"BrandName\",\"Description\"]\n   }\n }\n}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/accounts/4/brand-catalog-export")
    .method("POST", body)
    .addHeader("Content-Type", "application/json")
    .addHeader("Accept", "application/json")
    .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
    .build();

  Response response = client.newCall(request).execute();
  ```

  ```php PHP expandable theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/{version}/retail-media/accounts/4/brand-catalog-export');
  $request->setMethod(HTTP_Request2::METHOD_POST);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));

  $request->setHeader(array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  $request->setBody('{\n  "data": {\n   "type": "<string>",\n   "attributes": {\n     "brandIdFilter": [\n       "123"\n     ],\n     "retailerIdFilter": [\n       "456"\n     ],\n     "modifiedAfter": "2025-03-21T08:00:00-5:00",\n     "includeFields": ["ImageUrl","GoogleCategory", "RetailerName", "Category", "BrandName","Description"]\n   }\n }\n}');
  try {
    $response = $request->send();
    if ($response->getStatus() == 200) {
      echo $response->getBody();
    }
    
    else {
      echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
      $response->getReasonPhrase();
    }
  }

  catch(HTTP_Request2_Exception $e) {
    echo 'Error: ' . $e->getMessage();
  }
  ```
</CodeGroup>

**Sample Response**

```json theme={null}
{
    "data": {
        "type": "RetailMediaCatalogStatus",
        "id": "1122850670915847014",
        "attributes": {
            "status": "pending",
            "currency": null,
            "rowCount": null,
            "fileSizeBytes": null,
            "md5Checksum": null,
            "createdAt": "2025-01-22T23:10:12.21+00:00",
            "message": null
        }
    }
}
```

***

### Seller account

This endpoint allows you to generate the most up-to-date catalog for a specific seller account.

<EndpointBadge method="post">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/accounts/{accountId}/seller-catalog-export
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -L -X POST 'https://api.criteo.com/{version}/retail-media/accounts/4/seller-catalog-export' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <MY_ACCESS_TOKEN>' \
  --data-raw '{
    "data": {
      "type": "<string>",
      "attributes": {
        "sellers": [
          {
            "retailerId": "123",
            "sellerId": "5e0axxxxxxxxxx"
          }
        ],
        "modifiedAfter": "",
        "includeFields": [
          "ImageUrl",
          "Description"
        ]
      }
    }
  }'
  ```

  ```python Python expandable theme={null}
  import requests
  import json

  url = "https://api.criteo.com/{version}/retail-media/accounts/4/seller-catalog-export"

  payload = json.dumps({
    "data": {
      "type": "<string>",
      "attributes": {
        "sellers": [
          {
            "retailerId": "123",
            "sellerId": "5e0axxxxxxxxxx"
          }
        ],
        "modifiedAfter": "",
        "includeFields": [
          "ImageUrl",
          "Description"
        ]
      }
    }
  })
  headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)
  ```

  ```java Java theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();

  MediaType mediaType = MediaType.parse("application/json");

  RequestBody body = RequestBody.create(mediaType, "{\n \"data\": {\n   \"type\": \"<string>\",\n   \"attributes\": {\n     \"sellers\": [\n       {\n         \"retailerId\": \"123\",\n         \"sellerId\": \"5e0axxxxxxxxxx\"\n       }\n     ],\n     \"modifiedAfter\": \"\",\n     \"includeFields\": [\n     \"ImageUrl\",\n     \"Description\"\n     ]\n   }\n }}");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/accounts/4/seller-catalog-export")
    .method("POST", body)
    .addHeader("Content-Type", "application/json")
    .addHeader("Accept", "application/json")
    .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
    .build();

  Response response = client.newCall(request).execute();
  ```

  ```php PHP expandable theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/{version}/retail-media/accounts/4/seller-catalog-export');
  $request->setMethod(HTTP_Request2::METHOD_POST);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));

  $request->setHeader(array(
    'Content-Type' => 'application/json',
    'Accept' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  $request->setBody('{\n "data": {\n   "type": "<string>",\n   "attributes": {\n     "sellers": [\n       {\n         "retailerId": "123",\n         "sellerId": "5e0axxxxxxxxxx"\n       }\n     ],\n     "modifiedAfter": "",\n     "includeFields": [\n     "ImageUrl",\n     "Description"\n     ]\n   }\n }}');
  try {
    $response = $request->send();
    if ($response->getStatus() == 200) {
      echo $response->getBody();
    }
    
    else {
      echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
      $response->getReasonPhrase();
    }
  }

  catch(HTTP_Request2_Exception $e) {
    echo 'Error: ' . $e->getMessage();
  }
  ```
</CodeGroup>

**Sample Response**

```json theme={null}
{
    "data": {
        "type": "RetailMediaCatalogStatus",
        "id": "1122850670915847014",
        "attributes": {
            "status": "pending",
            "currency": null,
            "rowCount": null,
            "fileSizeBytes": null,
            "md5Checksum": null,
            "createdAt": "2025-01-22T23:10:12.21+00:00",
            "message": null
        }
    }
}
```

***

## Get Status of a Specific Catalog

This endpoint retrieves the status of a specific catalog.  Status can be `pending`, `success`, `failure`, or `expired`

<EndpointBadge method="get">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/catalogs/{catalogId}/status
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.criteo.com/{version}/retail-media/catalogs/1122850670915847014/status" \
      -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.criteo.com/{version}/retail-media/catalogs/357957813719011328/status"

  payload={}
  headers = {
    'Accept': 'application/json',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }

  response = requests.request("GET", url, headers=headers, data=payload)

  print(response.text)
  ```

  ```java Java theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();

  MediaType mediaType = MediaType.parse("text/plain");

  RequestBody body = RequestBody.create(mediaType, "");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/catalogs/357957813719011328/status")
    .method("GET", body)
    .addHeader("Accept", "application/json")
    .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
    .build();

  Response response = client.newCall(request).execute();
  ```

  ```php PHP theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/{version}/retail-media/catalogs/357957813719011328/status');
  $request->setMethod(HTTP_Request2::METHOD_GET);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));
  $request->setHeader(array(
    'Accept' => 'application/json',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  try {
    $response = $request->send();
    if ($response->getStatus() == 200) {
      echo $response->getBody();
    }
    
    else {
      echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
      $response->getReasonPhrase();
    }
  }

  catch(HTTP_Request2_Exception $e) {
    echo 'Error: ' . $e->getMessage();
  }
  ```
</CodeGroup>

**Sample Response**

```json theme={null}
{
    "data": {
        "type": "RetailMediaCatalogStatus",
        "id": "1122850670915847014",
        "attributes": {
            "status": "success",
            "currency": "USD",
            "rowCount": 1001,
            "fileSizeBytes": 353293,
            "md5Checksum": "2c15b77740028435ca476823df7fb4f8",
            "createdAt": "2020-04-06T05:11:41.351+00:00",
            "message": null
        }
    }
}
```

<br />

***

## Download Output of a Specific Catalog

This endpoint returns the products in a specific catalog as a [newline-delimited JSON byte stream](https://en.wikipedia.org/wiki/JSON_streaming)

> **NOTE:** The limit will be capped at 100000 rows. If a user reaches this limit, they will need to revise their request to fall within the limit.

<EndpointBadge method="get">
  ```http theme={null}
  https://api.criteo.com/{version}/retail-media/catalogs/{catalogId}/output
  ```
</EndpointBadge>

**Sample Request**

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.criteo.com/{version}/retail-media/catalogs/1122850670915847014/output" \
      -H "Authorization: Bearer <MY_ACCESS_TOKEN>"
  ```

  ```python Python theme={null}
  import http.client

  conn = http.client.HTTPSConnection("api.criteo.com")
  payload = ''
  headers = {
    'Accept': 'application/x-json-stream',
    'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
  }
  conn.request("GET", "/{version}/retail-media/catalogs/357957813719011328/output", payload, headers)
  res = conn.getresponse()
  data = res.read()
  print(data.decode("utf-8"))
  ```

  ```java Java theme={null}
  OkHttpClient client = new OkHttpClient().newBuilder()
    .build();

  MediaType mediaType = MediaType.parse("text/plain");

  RequestBody body = RequestBody.create(mediaType, "");

  Request request = new Request.Builder()
    .url("https://api.criteo.com/{version}/retail-media/catalogs/357957813719011328/output")
    .method("GET", body)
    .addHeader("Accept", "application/x-json-stream")
    .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
    .build();

  Response response = client.newCall(request).execute();
  ```

  ```php PHP theme={null}
  <?php
  require_once 'HTTP/Request2.php';
  $request = new HTTP_Request2();
  $request->setUrl('https://api.criteo.com/{version}/retail-media/catalogs/357957813719011328/output');
  $request->setMethod(HTTP_Request2::METHOD_GET);
  $request->setConfig(array(
    'follow_redirects' => TRUE
  ));
  $request->setHeader(array(
    'Accept' => 'application/x-json-stream',
    'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
  ));

  try {
    $response = $request->send();
    if ($response->getStatus() == 200) {
      echo $response->getBody();
    }
    
    else {
      echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
      $response->getReasonPhrase();
    }
  }

  catch(HTTP_Request2_Exception $e) {
    echo 'Error: ' . $e->getMessage();
  }
  ```
</CodeGroup>

**Sample Response**

```json Newline-Delimited JSON expandable theme={null}
{ \
    "id": "sku_1", \
    "name": "Product Name", \
    "category": "clothing, shoes & accessories|men’s clothing|bottoms|shorts", \
    "categoryId": "1234xxxx", \
    "brandId": "123456xxxxxx", \
    "brandName": "Brand Name", \
    "retailerId": "54321xxxxxx", \
    "retailerName": "Retailer Name", \
    "price": 1.00, \
    "isInStock": true, \
    "minBid": 0.30, \
    "gtin": "abc12xx", \
    "mpn": "34abxxx", \
    "imageUrl": "/image1.jpg", \
    "updatedAt": "2020-04-06T02:23:07Z", \
    "sellerId": "60axxxxxxxxxxxxxxxx", \
    "sellerName": "Seller Name", \
    "googleCategory": null, \
    "description": "Product's Description" \
}
 
// ... newline-delimited, no comma
 
{ \
    "id": "sku_2", \
    "name": "Product Name", \
    "category": "clothing, shoes & accessories|men’s clothing|bottoms|shorts", \
    "categoryId": "1234xxxx", \
    "brandId": "567890xxxxxx", \
    "brandName": "Brand Name", \
    "retailerId": "098765xxxxxx", \
    "retailerName": "Retailer Name", \
    "price": 1.00, \
    "isInStock": true, \
    "minBid": 0.30, \
    "gtin": "xyz12xx", \
    "mpn": "78asdxxx", \
    "imageUrl": "/image1.jpg", \
    "updatedAt": "2020-04-06T02:23:07Z", \
    "sellerId": null, \
    "sellerName": "Seller Name", \
    "googleCategory": null, \
    "description": "Product's Description" \
}

// ... newline-delimited, no comma
 
{ \
    "id": "sku_3", \
    "name": "Product Name", \
    "category": "clothing, shoes & accessories|men’s clothing|bottoms|shorts", \
    "categoryId": "4568xxxx", \
    "brandId": "96385xxxxxx", \
    "brandName": "Brand Name", \
    "retailerId": "412587xxxxxx", \
    "retailerName": "Retailer Name", \
    "price": 1.00, \
    "isInStock": true, \
    "minBid": 0.30, \
    "gtin": "xyz12xx", \
    "mpn": "56wsdxxx", \
    "imageUrl": "/image1.jpg", \
    "updatedAt": "2020-04-06T02:23:07Z", \
    "sellerId": null, \
    "sellerName": null, \
    "googleCategory": null, \
    "description": "Product's Description" \
}
```

***

## Responses

<table>
  <thead>
    <tr>
      <th>
        <p>
          Response
        </p>
      </th>

      <th>
        <p>
          Description
        </p>
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <p>
          🟢
        </p>

        <p>
          <code>
            200
          </code>
        </p>
      </td>

      <td>
        <p>
          Success
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴
        </p>

        <p>
          <code>
            400
          </code>
        </p>
      </td>

      <td>
        <p>
          The indicated catalog is not available for retrieval, wait for a success status
        </p>
      </td>
    </tr>

    <tr>
      <td>
        <p>
          🔴
        </p>

        <p>
          <code>
            403
          </code>
        </p>
      </td>

      <td>
        <p>
          API user does not have the authorization to make requests to the account ID. For an authorization request, follow the
        </p>

        <p>
          <a href="/retail-media/v2026-preview/docs/authorization-requests">
            authorization request
          </a>
        </p>

        <p>
          steps
        </p>
      </td>
    </tr>
  </tbody>
</table>
