---
title: "Chamadas"
description: "Assinaturas posicionais, query, body, settings e erros."
---
O Cinderace usa **parâmetros posicionais** para ficar próximo da URL da API e evitar objetos de opções gigantes.

## GET

A ordem é: parâmetros de rota, query e settings.

```ts
// GET /v1/address/cep/:cep
const cep = await sdk.address.getCep("86036260");

// GET /v1/user/password/recovery-methods?cpf=...
const methods = await sdk.auth.getRecoveryMethods({
    cpf: "00000000000"
});

// GET /v1/raffles/:id?affiliate_id=...
const raffle = await sdk.raffles.getRaffle("uuid-do-sorteio", {
    affiliate_id: "afiliado-1"
});
```

## POST, PUT, PATCH e DELETE

A ordem é: parâmetros de rota, body e settings. Parâmetros gerenciados pela SDK, como o UUID do carrinho, saem da assinatura.

```ts
// POST /v1/cart/:uuid/items (UUID automático)
await sdk.cart.addItems({
    item: {
        type: "RAFFLE_NUMBERS",
        raffleUUID: "uuid-do-sorteio",
        amount: 10
    }
});

// PUT /v1/user/profile
await sdk.user.updateProfile({
    name: "Maria Silva",
    email: "maria@exemplo.com"
});
```

Para métodos que não são `GET`, a query fica em `settings.query`:

```ts
await sdk.raffles.getRaffle("uuid", {
    affiliate_id: "afiliado-1"
});

await sdk.orders.createOrder("payment-id", body, {
    query: {
        utm_source: "site"
    }
});
```

## Path params

Parâmetros de rota aparecem na assinatura na ordem da URL:

```ts
// GET /v1/orders/:payment/bonds
const bonds = await sdk.orders.getBonds("payment-id");

// GET /v1/user/raffles/:uuid/bonds
const myBonds = await sdk.raffles.getBonds("raffle-uuid");
```

## Settings

```ts
await sdk.user.getProfile({
    headers: {
        "x-trace-id": "abc-123"
    },
    signal: controller.signal
});
```

| Campo | Para que serve |
|---|---|
| `query` | Query string em métodos não-GET. |
| `headers` | Headers extras só daquela chamada. |
| `signal` | AbortSignal para cancelar a requisição. |

## Erros

Toda resposta fora de `2xx` vira `LMSdkError`:

```ts
import { LMSdkError } from "@luckymaker/sdk-core";

try {
    await sdk.raffles.getRaffle("uuid-inexistente");
} catch (error) {
    if (error instanceof LMSdkError) {
        console.log(error.status); // 404
        console.log(error.code);   // código do backend
        console.log(error.body);   // envelope completo
    }
}
```

:::tip[Type safety]
O retorno de cada método é o tipo da resposta do schema TypeBox. Se o backend não declara `response`, o tipo é `unknown` — mas o método continua existindo e funcionando.
:::