---
title: Avatar Editor Service
description: The Avatar Editor Service allows access to a user's avatar and inventory and Marketplace.
---
The Avatar Editor Service lets you access and make changes to a user's avatar within an experience. The Avatar Editor Service can also access a user's inventory and the [Marketplace](https://www.roblox.com/catalog) to save outfits and purchase avatar items to the user's account.
We recommend implementing the Avatar Editor Service with an in-game avatar editor for a complete character customization experience. See the [Simple Avatar Editor Demo](https://www.roblox.com/games/9376329300/Simple-Avatar-Editor-Demo) reference place for an example of this feature.
To begin using the Avatar Editor Service, you must first [request access](#request-access) to the user's inventory. After access is successfully granted, you can perform the following actions:
- [Read user's inventory](#read-user-inventory) to get a list of items owned by the user.
- [Search the Marketplace](#search-the-marketplace), using a variety of properties to filter and sort.
- [Equip avatar items and save outfits](#save-avatars-and-outfits) to the user's avatar.
- [Prompt the user to purchase](#purchase-items) an Marketplace item.
## Request access
To begin accessing a user's inventory, you need to prompt the user to allow access through `Class.AvatarEditorService:PromptAllowInventoryReadAccess()|PromptAllowInventoryReadAccess()`. You need to perform this request once per session.
Use the following code sample to initiate the access prompt and listen for the user response:
```lua
local AvatarEditorService = game:GetService("AvatarEditorService")
AvatarEditorService:PromptAllowInventoryReadAccess()
local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()
if result == Enum.AvatarPromptResult.Success then
-- Access granted!
end
```
The user receives the following prompt:
Once the user accepts the prompt, the `Class.AvatarEditorService` can begin accessing the user's inventory.
## Read user inventory
Once access is granted by the user, you can read their inventory with the `Class.AvatarEditorService:GetInventory()|GetInventory()` function, supplying an array of `Enum.AvatarAssetType|AvatarAssetTypes` to filter by. This function returns an `Class.InventoryPages` object containing the user owned items.
Use the following code sample to print a list of specific accessories in a user's inventory:
```lua
local AvatarEditorService = game:GetService("AvatarEditorService")
AvatarEditorService:PromptAllowInventoryReadAccess()
local result = AvatarEditorService.PromptAllowInventoryReadAccessCompleted:Wait()
if result == Enum.AvatarPromptResult.Success then
-- Access granted!
local assetTypes = {
Enum.AvatarAssetType.BackAccessory,
Enum.AvatarAssetType.ShoulderAccessory,
Enum.AvatarAssetType.WaistAccessory
}
local pagesObject = AvatarEditorService:GetInventory(assetTypes)
local currentPage = pagesObject:GetCurrentPage()
for _, item in currentPage do
print(item)
end
end
```
## Search the Marketplace
`Class.AvatarEditorService` includes functions and events which let you search the Roblox catalog. To search, supply your query with a `Datatype.CatalogSearchParams` object that includes one or more of the following properties:
| Property | Description |
|---|---|
| AssetTypes | An array of `Enum.AvatarAssetType` such as Enum.AvatarAssetType.BackAccessory. |
| BundleTypes | An array of `Enum.BundleType` such as Enum.BundleType.BodyParts. |
| CategoryFilter | A `Enum.CatalogCategoryFilter` describing the various catalog categories like "Featured" or "Community Creations". By default this is set to `Enum.CatalogCategoryFilter.None` |
| MaxPrice | An integer describing the maximum price to filter. |
| MinPrice | An integer describing the minimum price to filter. By default, MinPrice is 0. |
| SearchKeyword | A string to query against item descriptions in the catalog. |
| SortType | A `Enum.CatalogSortType` that describes how the results are ordered. By default this is set to `Enum.CatalogSortType.Relevance`. |
| IncludeOffSale | A boolean describing whether the results of the search include off sale items. By default this is set to false. |
| CreatorId | An integer to specify a given creator. You can use either a UserId or a GroupId. |
| CreatorName | A string used to search by items created by a given creator. You can use either a User Name or a Group Name. |