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

# Summer.client.store

> Browse the current Game store and request trusted checkout.

**Class:** `SummerClientStore` · **Inherits:** RefCounted · **Access:** `Summer.client.store`

Browse the current Game store and request trusted checkout.

Lists immutable platform items and Sparks display prices through the trusted Player Host. Browsing requires the advertised `player.store.read@1` capability and does not require joining a multiplayer session. Checkout additionally requires `player.store.checkout@1`. The application-owned Host displays the authoritative cart and handles approval. The Game cannot approve a purchase. A retained facade cannot follow a new authenticated binding after shutdown/reinitialization: acquire it again from the current client. Released facades expose no current checkout facts and refuse new operations.

**Host capabilities named here:** `player.store.read@1`, `player.store.checkout@1`

## Properties

| Property | Type | Access | Description |
| - | - | - | - |
| <a id="availability" />`availability` | [`SummerAvailability`](/api-reference/gdscript/types/availability) | read-only, `get_availability()` | Compatibility view of `check_browse_readiness`. The existing `SummerAvailability.hosted_sessions_available` flag reports whether browsing is available, independently of matchmaking; both local flags are false. Prefer `check_browse_readiness` and `check_checkout_readiness` for operation-specific results and diagnostics. The operation result remains authoritative. |

## Methods

### check\_browse\_readiness

```gdscript theme={null}
func check_browse_readiness() -> SummerResult const
```

Returns the Engine's advisory check of the authenticated binding and `player.store.read@1` prerequisites also used by [`list_items()`](/api-reference/gdscript/client/store#list_items). The [`SummerResult`](/api-reference/gdscript/types/result) includes a code and diagnostic message. `invalid_lifecycle` requires initialization or rebinding after an identity change; `unavailable` describes a missing execution/Host capability or unavailable Host. Does not submit, activate a provider, reserve capacity or guarantee later success. Arguments, in-flight page limits and transport results remain the operation's responsibility. C# exposes `CheckBrowseReadiness()`.

**Returns:** [`SummerResult`](/api-reference/gdscript/types/result)

### check\_checkout\_readiness

```gdscript theme={null}
func check_checkout_readiness() -> SummerResult const
```

Returns the Engine's advisory check of the same authenticated binding, `player.store.checkout@1` grants and durable outcome event support used by [`request_checkout()`](/api-reference/gdscript/client/store#request_checkout). Readiness is independent of browsing and existing pending purchases. A known terminal outcome event-stream failure makes new checkout creation unavailable until the authenticated binding is restored. `invalid_lifecycle` requires initialization or rebinding after an identity change; `unavailable` describes missing prerequisites. The result includes a diagnostic message. No request, approval, acknowledgment or provider activation occurs. A successful check does not validate a cart, reserve capacity, approve a purchase or guarantee success. Recovery of existing outcomes continues independently of permission to create a new purchase. Every deliberate checkout call still creates a new identity: never retry an unknown purchase through another call. C# exposes `CheckCheckoutReadiness()`.

**Returns:** [`SummerResult`](/api-reference/gdscript/types/result)

### has\_pending\_checkouts

```gdscript theme={null}
func has_pending_checkouts() -> bool const
```

Whether [`get_pending_checkout_request_ids()`](/api-reference/gdscript/client/store#get_pending_checkout_request_ids) is nonempty. Includes requests without a quote, canceled or dropped observation handles, and recovered pending or manual-review outcomes. Terminal outcomes and definite no-effect refusals are not pending. This queries existing retained facts without submitting, polling, retrying, or acknowledging anything. False describes this binding's local knowledge, not a guarantee that durable recovery is complete.
For a checkout panel, connect [`checkout_status_changed`](/api-reference/gdscript/client/store#checkout_status_changed) synchronously, then render [`get_checkout_statuses()`](/api-reference/gdscript/client/store#get_checkout_statuses) and query this method. Re-query after requesting checkout, on operation completion, and in each status callback instead of retaining another pending-ID or version map for rendering. Rendering should tolerate duplicate facts; side effects still require identity-based deduplication. Operation completion should display a creation failure only when no authoritative status exists and [`SummerCheckoutOperation.is_outcome_unknown()`](/api-reference/gdscript/types/checkout-operation#is_outcome_unknown) is false. Preserve canonical terminal status messages rather than overwriting them with a generic operation failure. Closing a panel disconnects observation and never cancels a purchase.

**Returns:** bool

### list\_items

```gdscript theme={null}
func list_items(limit: int = 50, cursor: String = "") -> SummerStoreItemsOperation
```

Requests one page containing at most `limit` items (1 to 100). Pass the previous operation's [`SummerStoreItemsOperation.next_cursor`](/api-reference/gdscript/types/store-items-operation#next_cursor) to request another page. An empty cursor starts browsing. Completion is deferred; inspect the operation result before reading items. A second request while one is in flight fails with `operation_in_progress`. Cancellation discards the page and drains the old request before another may start. Game code supplies no Game ID, buyer identity, credentials, or prices.

| Parameter | Type | Default |
| - | - | - |
| `limit` | int | `50` |
| `cursor` | String | `""` |

**Returns:** [`SummerStoreItemsOperation`](/api-reference/gdscript/types/store-items-operation)

Returns at once. Wait for the result with `var result: SummerResult = await op.get_result_or_completed_signal()`; see [SummerOperation](/api-reference/gdscript/types/operation).

### request\_checkout

```gdscript theme={null}
func request_checkout(lines: SummerCheckoutLine[]) -> SummerCheckoutOperation
```

Requests one cart containing 1 to 16 unique offers and at most 64 total units. Prices and authenticated identity come from the trusted Host. Human approval happens in application-owned UI. Creation acceptance is not purchase completion. The returned operation completes on purchased or a definite terminal failure; manual review remains unresolved. Dropping or canceling the operation does not cancel a purchase or discard the durable outcome. No status polling or Game approval API is exposed.

| Parameter | Type | Default |
| - | - | - |
| `lines` | [`SummerCheckoutLine`](/api-reference/gdscript/types/checkout-line)\[] | required |

**Returns:** [`SummerCheckoutOperation`](/api-reference/gdscript/types/checkout-operation)

Returns at once. Wait for the result with `var result: SummerResult = await op.get_result_or_completed_signal()`; see [SummerOperation](/api-reference/gdscript/types/operation).

### get\_checkout\_statuses

```gdscript theme={null}
func get_checkout_statuses() -> SummerCheckoutStatus[] const
```

Returns retained checkout states for this authenticated player and Game. Connect [`checkout_status_changed`](/api-reference/gdscript/client/store#checkout_status_changed) before inspecting retained state. Enumeration does not acknowledge delivery. Unobserved terminal outcomes remain durable in the Host/backend and locally retained; new requests are refused when the bounded retention capacity is full.

**Returns:** [`SummerCheckoutStatus`](/api-reference/gdscript/types/checkout-status)\[]

### get\_pending\_checkout\_request\_ids

```gdscript theme={null}
func get_pending_checkout_request_ids() -> PackedStringArray const
```

Returns sorted retained unresolved request identities for this authenticated binding, including requests without a quote response and canceled or dropped handles. Terminal outcomes and definite no-effect refusals disappear from this list. Enumeration does not acknowledge or retry anything. Account changes and shutdown clear the local binding; the trusted Host recovers durable outcomes after rebinding. This list is local knowledge, not a claim that a request was accepted or that recovery is complete.

**Returns:** PackedStringArray

## Signals

### checkout\_status\_changed

```gdscript theme={null}
signal checkout_status_changed(status: SummerCheckoutStatus)
```

Delivers retained authoritative checkout state through a standard synchronous connection. Terminal delivery is acknowledged internally only after a synchronous callback returns and the authenticated binding still matches. A crash before acknowledgment may replay delivery: deduplicate by request ID and version. This guarantees callback dispatch, not successful Game business processing. Deferred-only connections do not acknowledge delivery. No listeners means the outcome is retained until a synchronous listener connects. Receipt handling never grants inventory; canonical inventory remains authoritative.

***

What is live on the platform today: [platform capability status](/knowledge-base/source-status). Check availability at runtime before you offer a feature.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.