# Overview

> Drive your whole SteamLabs account from code, with the same permissions you have in the dashboard.


Everything you can do in the dashboard, you can do over the API. Add accounts, queue tasks, sell items, manage proxies, run boost plans, read your stats. Same data, same limits, no browser.

The API lives at `/api/v1` and speaks JSON in both directions.

This site covers the API surface only. For what the product itself does (accounts, proxies, tasks, marketplaces), see the [SteamLabs Docs](/docs/en/getting-started/introduction); the switcher at the top of the page moves between the two.

```endpoint
method: GET
path: /api/v1/me
description: Who you are, what your key can do, and what your plan allows.
auth: bearer
```

Requires `account.read`.

## Your first request

Create a key on the **API keys** page under **Your account**, then send it as a bearer token.

```bash tab=curl
curl https://dashboard.steamlabs.dev/api/v1/me \
  -H "Authorization: Bearer $STEAMLABS_API_KEY"
```

```php tab=PHP
$me = Http::withToken($apiKey)
    ->get('https://dashboard.steamlabs.dev/api/v1/me')
    ->json();
```

```javascript tab=Node
const response = await fetch('https://dashboard.steamlabs.dev/api/v1/me', {
    headers: { Authorization: `Bearer ${apiKey}` },
});

const me = await response.json();
```

```python tab=Python
import requests

me = requests.get(
    "https://dashboard.steamlabs.dev/api/v1/me",
    headers={"Authorization": f"Bearer {api_key}"},
).json()
```

The response tells you everything you need to know before writing any real code:

```json
{
    "id": "019fb42e-9a61-70d2-818a-f6a56593f3a5",
    "name": "Merlijn",
    "email": "you@example.com",
    "timezone": "Europe/Amsterdam",
    "preferred_currency": "EUR",
    "balance_cents": 24150,
    "api_key": {
        "id": "019fb430-1c22-73a4-9f0e-2b7c5d1e8a44",
        "name": "Nightly sync",
        "scopes": ["accounts.read", "tasks.write"],
        "rate_limit_per_minute": 120,
        "last_used_at": "2026-07-30T14:02:11+00:00",
        "expires_at": null
    },
    "plan": {
        "has_active_plan": true,
        "max_steam_accounts": 2000,
        "steam_accounts_used": 418,
        "steam_accounts_remaining": 1582,
        "max_proxies": 500,
        "proxies_used": 62,
        "proxies_remaining": 438,
        "allowed_task_types": null,
        "allowed_marketplaces": ["steam", "csfloat", "marketcsgo"],
        "allows_automations": true,
        "allows_hour_boosting": true,
        "allows_trade_sending": true,
        "allows_confirmations": true,
        "allows_incoming_trades": true,
        "max_boost_concurrent": 250,
        "ai_profiles_remaining_this_month": 187,
        "farmlabs_benefits_active": false
    },
    "maintenance": {
        "active": false,
        "reason": null,
        "since": null
    }
}
```

> [!TIP]
> Read `plan` at startup and respect it locally. A client that knows it has 1,582 account slots left never has to discover that number by collecting errors.

In `plan`, `null` means unlimited and `[]` means none. They are not the same thing, so check for `null` explicitly rather than treating an empty result as "no limit".

`farmlabs_benefits_active` says whether FarmLabs member benefits are folded into the figures above. Some plans carry better limits or prices for users whose linked FarmLabs account has an active FarmLabs subscription; when this is `true`, every number in `plan` already includes them, so there is nothing extra to apply.

`maintenance` reports platform maintenance up front. While `active` is `true`, endpoints that create new work refuse with `503 maintenance_mode` (see [Errors](/docs/api/en/concepts/errors)), so check here before firing a batch. `reason` carries the note the team wrote when enabling it.

## What the API covers

| Area | What you get |
| --- | --- |
| Steam accounts | Add, edit, tag, delete, refresh details, check bans, sign in, assign proxies |
| Tasks | Queue any task type your plan allows, then track, retry, or cancel it |
| Inventory | List items across every account, then sell, send, store, or use them |
| Market | Listings, buy orders, sales history, and CSFloat / market.csgo deliveries |
| Trading | Trade offers and routing templates |
| Trade-ups | Contracts and settings |
| Proxies | Proxies, groups, testing, and assignment |
| Profiles | Profiles and groups, including AI generation |
| Hour boosting | Plans, assignments, and live state |
| Integrations | Connected marketplaces and Steam Web API keys |
| Billing | Read your balance, deposits, ledger, and invoices |
| Activity & stats | Your timeline and dashboard totals |

## What the API does not cover

Four things are deliberately dashboard-only:

- **Subscriptions.** Buying, switching, renewing, and cancelling a plan all happen in the browser.
- **Automations.** The workflow builder, its triggers, and its runs.
- **Chat.** The community chat.
- **Feedback reports.** The tester bug tracker.

Billing is readable but never writable. No endpoint can spend your balance, start a top-up, or create a payment. A leaked key cannot cost you money directly.

## Conventions

- Every ID is a UUID.
- Every timestamp is ISO 8601 with a UTC offset: `2026-07-30T14:02:11+00:00`.
- Every money value is an integer in minor units, named `*_cents`.
- Collections are always paginated. See [Pagination and filtering](/docs/api/en/concepts/pagination-and-filtering).
- Writes that cost money or inventory take an `Idempotency-Key`. See [Bulk operations](/docs/api/en/concepts/bulk-operations).

## Where to go next

- [Authentication](/docs/api/en/concepts/authentication) · create a key, pick its permissions, keep it safe
- [Rate limits](/docs/api/en/concepts/rate-limits) · your budget and how to stay inside it
- [Errors](/docs/api/en/concepts/errors) · the error shape and every code the API returns
- [Pagination and filtering](/docs/api/en/concepts/pagination-and-filtering) · working through large collections
- [Bulk operations](/docs/api/en/concepts/bulk-operations) · acting on thousands of accounts in one call
