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

# Customer flow

> Redirect customers and preserve a safe order state.

## Purpose

The hosted page owns Steam trade interaction. Your application owns the order
reference and final fulfillment decision.

<Steps>
  <Step title="Create on your server">Call the create endpoint and persist the
  checkout ID against your order.</Step>
  <Step title="Redirect">Send the browser to the returned `hostedUrl`; do not
  construct or alter it.</Step>
  <Step title="Receive the return">Use the success or cancellation URL only for
  customer navigation. It is not settlement proof.</Step>
  <Step title="Confirm">Read status or process a signed webhook and fulfill only
  after `completed`.</Step>
</Steps>

Refreshing a page must not create a new attempt. If an attempt reaches a safe
terminal outcome such as `canceled`, `declined`, `failed`, `reverted`, or
pre-trade `expired`, create a new attempt with a new idempotency key. Do not
replace a pending, active, hold, completed, or reconciliation-required attempt.
