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

# Get user inventory

> Returns all items currently owned by a user that haven't been sold back or shipped.

Returns every item currently owned by a given `user_id`: items pulled via [`/api/v1/vm/buy/init`](/api-reference/purchase/init) that have not yet been sold back via [`/api/v1/vm/buyback`](/api-reference/sellback) or shipped via [`/api/v1/ship/request`](/api-reference/shipping/request).

## Path parameters

<ParamField path="user_id" type="string" required>
  The partner-defined user identifier passed to [`/api/v1/vm/buy/init`](/api-reference/purchase/init).
</ParamField>

## Example request

```http theme={"dark"}
GET /api/v1/inventory/user_abc123
X-API-Key: <your_api_key>
```

## Response

<ResponseExample>
  ```json 200 theme={"dark"}
  {
    "user_id": "user_abc123",
    "items": [
      {
        "id": "9XnY...mint_address",
        "claw_id": "BSG6Dy...",
        "claw_slug": "topps-chrome-2024",
        "buyback_price": 8.50,
        "mint_address": "9XnY...mint_address",
        "purchased_at": "2026-04-18T19:05:14.000Z",
        "buyback_expires_at": "2026-04-25T19:05:14.000Z",
        "content": {
          "metadata": {
            "name": "Juan Soto RC Auto /25",
            "image": "https://cdn.phygitals.com/cards/soto-rc-auto.png",
            "back_image": "https://cdn.phygitals.com/cards/soto-rc-auto-back.png",
            "attributes": [
              { "trait_type": "Year", "value": "2024" },
              { "trait_type": "Category", "value": "Baseball" }
            ]
          },
          "links": {
            "image": "https://cdn.phygitals.com/cards/soto-rc-auto.png",
            "back_image": "https://cdn.phygitals.com/cards/soto-rc-auto-back.png"
          }
        }
      }
    ]
  }
  ```
</ResponseExample>

<ResponseField name="user_id" type="string">
  Echoes back the requested user identifier.
</ResponseField>

<ResponseField name="items" type="array">
  Items currently owned by the user. Excludes sold-back and shipped items.
</ResponseField>

<ResponseField name="items[].id" type="string">
  Item identifier. Used as `item_id` in [`/api/v1/vm/buyback`](/api-reference/sellback) and as an entry in `item_ids` for [`/api/v1/ship/quote`](/api-reference/shipping/quote). Equal to `mint_address` for on-chain items.
</ResponseField>

<ResponseField name="items[].claw_id" type="string">
  The pack the item was pulled from. Used as `claw_id` in [`/api/v1/vm/buyback`](/api-reference/sellback).
</ResponseField>

<ResponseField name="items[].claw_slug" type="string">
  The pack's `slug` from [`/api/v1/vm/available`](/api-reference/packs/list).
</ResponseField>

<ResponseField name="items[].buyback_price" type="number">
  Current sellback value in USD.
</ResponseField>

<ResponseField name="items[].content.metadata.back_image" type="string | null">
  CDN URL for the card back image, or `null` when not available.
</ResponseField>

<ResponseField name="items[].content.links.back_image" type="string | null">
  CDN URL for the card back image. Mirror of `content.metadata.back_image`.
</ResponseField>

<ResponseField name="items[].mint_address" type="string | null">
  On-chain mint address for the item. `null` for items that haven't been minted on-chain (in [sandbox](/enterprise-api/sandbox), always `null` for ebay-sourced items).
</ResponseField>

<ResponseField name="items[].type" type="string">
  Item source. One of: `enft`, `ebay`, `fanatics`, `alt`, `external`.
</ResponseField>

<ResponseField name="items[].collection_address" type="string | null">
  On-chain collection address.
</ResponseField>

<ResponseField name="items[].token_standard" type="string | null">
  Token standard for on-chain items.
</ResponseField>

<ResponseField name="items[].purchased_at" type="string">
  ISO timestamp when the item was pulled.
</ResponseField>

<ResponseField name="items[].buyback_expires_at" type="string | null">
  ISO timestamp after which the item can no longer be sold back. `null` if there is no expiry. In [sandbox](/enterprise-api/sandbox), this is always set to `purchased_at + 7 days` and never `null`.
</ResponseField>

See the [item shape reference](/item-shape) for the full canonical item schema.

## Errors

| Status | Body                                          | Cause                              |
| ------ | --------------------------------------------- | ---------------------------------- |
| `404`  | `{ "error": "User not found" }`               | Unknown `user_id` for this partner |
| `500`  | `{ "error": "An unexpected error occurred" }` | Internal server error              |

<Note>
  `:user_id` is a required path parameter. Calls without it will not match this route and return the API's default 404, not a 400.
</Note>

<Note>
  Items disappear from this response once they're successfully sold back or have an active shipping request. For shipping status of items already submitted to fulfillment, query [`/api/v1/ship/order/:order_id`](/api-reference/shipping/order).
</Note>

## Physical custody and pricing

Every item returned here is 1:1 backed by a real, graded card held in an insured US vault, primarily [Alt](https://www.alt.xyz/), with PSA and Fanatics as additional custodians. A dedicated team inside Alt's operations handles all Phygitals inventory moves, grading, and shipments.

The `buyback_price` field is driven by the Alt pricing oracle, which provides the live FMV feed powering every sellback transaction. Prices update as the market moves.

The partner is not storing anything. Phygitals operates the full physical stack end-to-end. See the [platform overview](/platform-overview#vault-pricing-and-logistics) for details.
