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

# Upgrade to Shakesco

> Credit a customer's legacy loyalty balance into Shakesco managed tokens

<span style={{display:"none"}}>For the complete documentation index, see [llms.txt](/llms.txt).</span>

One-time migration endpoint. Use this to seed a customer's Shakesco managed balance with the points they accumulated in your previous loyalty system. Each customer can only be upgraded once: subsequent calls return `409 Event already claimed`.

See the full [Migration Guide](/loyalty-program/migrate) for a step-by-step walkthrough including the cutover process.

<Info>
  Treat this as a transaction. If you don't get a response, verify with [`/balance`](/api-reference/tokens/read/balance) before retrying.
</Info>

### Request Body

<ParamField body="customer_ref" type="string" required>
  Your unique identifier for this customer
</ParamField>

<ParamField body="amount" type="number" required>
  The customer's legacy points balance to credit. Decimals allowed.
</ParamField>

### Response

<ResponseField name="tx_hash" type="string">
  Reference identifier for the migration
</ResponseField>

```javascript theme={null}
await fetch("https://tokens.shakesco.com/upgrade-to-shakesco", {
  method: "POST",
  headers: { Authorization: `Bearer ${API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ customer_ref: "customer-123", amount: 250 }),
});
```

<ResponseExample>
  ```json 200 OK theme={null}
  { "tx_hash": "0xdef456..." }
  ```

  ```json 409 Already Migrated theme={null}
  { "error": "Event already claimed" }
  ```
</ResponseExample>
