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

# Setup Skinloop

> Accept CS2 and Rust skins as payment on Komerza through your own Skinloop account

Accept **CS2 and Rust skins** as payment through your own **Skinloop** account. Customers pay with items from their Steam inventory, Skinloop verifies the trade, and Komerza marks the order paid and delivers it once Skinloop confirms the payment. Funds settle to your **Skinloop balance** - Komerza adds nothing on top.

Komerza connects using a Skinloop **API key**, and Skinloop reports payments back to Komerza through a signed **webhook**. You create both in Skinloop and paste them into Komerza.

## Prerequisites

* A [Skinloop merchant account](https://skinloop.io/) with onboarding completed - add your business details and policy links under **Settings**. Your Skinloop processing account is locked until you submit them.

<Steps>
  <Step title="Create a Skinloop API key">
    1. Log into Skinloop and go to **API Keys & Webhooks**.
    2. Under **API Keys**, click **Create API Key**.

    <img className="block rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/1.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=0c8474cf31178eac32492c9be0835003" alt="Skinloop API Keys & Webhooks page" width="1512" height="795" data-path="images/skinloop/1.png" />

    3. Name it something you'll recognise, like `Komerza`.
    4. Under **Access scopes**, tick **`checkout:create`** and **`checkout:read`**. Untick `payments:read` and `payouts:read` - Komerza doesn't need them.
    5. Under **Allowed games**, leave **CS2** and **Rust** ticked, or untick the one you don't want to accept.
    6. Click **Create API Key** and copy the key.

    <img className="block rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/2.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=5d453a6cf26882c16b4e5f00e423323e" alt="Create API Key in Skinloop with the checkout:create and checkout:read scopes" width="772" height="1568" data-path="images/skinloop/2.png" />

    <Warning>
      Skinloop shows the key **only once**. Copy it before closing the dialog - if you lose it, create a new key and update it in Komerza.
    </Warning>
  </Step>

  <Step title="Approve checkout.komerza.com as a redirect origin">
    Skinloop only sends customers back to domains you've approved. Komerza's checkout runs on `checkout.komerza.com`, so it has to be on the list.

    1. On the same page, scroll to **Checkout Redirect Origins**.
    2. Enter `https://checkout.komerza.com` and click **Add origin**.

    <img className="block rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/3.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=9bb825d5154a06c6b822cc272852e9d2" alt="Add https://checkout.komerza.com as a Checkout Redirect Origin in Skinloop" width="1340" height="814" data-path="images/skinloop/3.png" />

    You can leave **Checkout Redirect Defaults** empty - Komerza sets the return URLs on every checkout.
  </Step>

  <Step title="Open the Skinloop dialog in Komerza">
    1. In your dashboard, open **Settings** under **Online Store**, then go to **Payment Methods**.
    2. Under **Available Payment Methods**, find **Skinloop** and click **Connect**.

    <img className="block dark:hidden rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/5-light.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=b245203bac8477725d40a7254926e884" alt="Skinloop under Available Payment Methods in Komerza" width="1568" height="585" data-path="images/skinloop/5-light.png" />

    <img className="hidden dark:block rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/5-dark.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=965850c76937e858a05daffd89a093a8" alt="Skinloop under Available Payment Methods in Komerza" width="1568" height="585" data-path="images/skinloop/5-dark.png" />

    3. Paste your **API key** from step 1. Komerza checks it by creating a \$1.00 test checkout that is never paid and expires in five minutes.
    4. Copy the **Webhook URL** - it's unique to your store. You'll add it to Skinloop in the next step, so keep the dialog open.

    <img className="block dark:hidden rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/6-light.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=aac9628747f7b8b05498bbfdfd73064b" alt="Configure Skinloop dialog in Komerza" width="1024" height="2016" data-path="images/skinloop/6-light.png" />

    <img className="hidden dark:block rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/6-dark.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=9b7b995260ddc6b14d54f273fc67035c" alt="Configure Skinloop dialog in Komerza" width="1024" height="2016" data-path="images/skinloop/6-dark.png" />
  </Step>

  <Step title="Add the webhook in Skinloop">
    1. Back in Skinloop, under **Webhooks**, click **Add Webhook**.
    2. Name it, for example `Komerza`.
    3. Paste the **Webhook URL** from Komerza into **Endpoint URL**.
    4. Click **Add Webhook Endpoint** and copy the **signing secret** (it starts with `whsec_`).

    Every Skinloop webhook receives the payment **pending**, **completed** and **reverted** events - there's nothing to select.

    <img className="block rounded-lg border border-gray-200 dark:border-gray-800" src="https://mintcdn.com/komerza/CqnFfrkJ1ekYt4DU/images/skinloop/4.png?fit=max&auto=format&n=CqnFfrkJ1ekYt4DU&q=85&s=c7260f3ac29d219fe5b009c769318536" alt="Add Webhook Endpoint in Skinloop" width="772" height="1568" data-path="images/skinloop/4.png" />

    <Warning>
      The signing secret is shown **only once**. If you lose it, delete the webhook in Skinloop, add it again and update the secret in Komerza.
    </Warning>
  </Step>

  <Step title="Finish connecting in Komerza">
    Paste the **signing secret** into **Webhook signing secret** in the Komerza dialog and click **Save changes**. Komerza uses it to verify that every payment notification really came from Skinloop. If you ever rotate the secret in Skinloop, paste the new one here.
  </Step>

  <Step title="Set unpaid orders to 8 days or longer (CS2)">
    CS2 trades are subject to a **Steam trade hold** that can last up to eight days, and Skinloop only completes a CS2 payment once the hold clears. The order waits as **Verifying** until then, so set **Settings → Payment Options → Unpaid Orders** to **8 days or longer** if you accept CS2 skins.

    Rust trades have no standard hold, so this is only required for CS2. Komerza allows up to 14 days.
  </Step>

  <Step title="Test the connection">
    Place a small test order on your store, pick **Skinloop** at checkout and complete the trade. Confirm the order is marked paid and delivered before you go live. Test with Rust skins if you can - there's no trade hold, so you'll see the result straight away.
  </Step>
</Steps>

## How it works

1. A customer picks **Skinloop** at checkout. Komerza creates a Skinloop checkout with your API key and sends the customer to Skinloop's hosted page.
2. They enter their Steam trade URL and choose skins from their inventory to cover the order.
3. Skinloop sends a signed webhook to Komerza for each stage - **pending**, **completed** or **reverted** - and Komerza checks the signature with your secret.
4. While the trade is pending, the order waits as **Verifying**. Rust payments complete in minutes; CS2 payments complete once the Steam trade hold clears, which can take up to eight days.
5. On **completed**, Komerza marks the order paid and triggers delivery. Funds settle to your **Skinloop balance** - payouts are handled from **Payouts** in your Skinloop dashboard.

## Troubleshooting

| Problem | Fix |
| - | - |
| Checkout won't open | Confirm the API key has **both** `checkout:create` and `checkout:read`, the game the customer is paying with is ticked under **Allowed games**, and `https://checkout.komerza.com` is approved under **Checkout Redirect Origins**. |
| Payments not marked as paid | Check the webhook in Skinloop points at the **Webhook URL** from Komerza, and that the **signing secret** in Komerza matches. If you re-created the webhook, paste the new secret. |
| CS2 orders are cancelled before payment | Your unpaid-order window is too short. Set **Settings → Payment Options → Unpaid Orders** to **8 days or longer**. |
| Skinloop processing is locked | Finish onboarding in Skinloop under **Settings** (business details and policy links). |


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