---
title: Introduction
description: How the Wiblo API is shaped and how to make your first request.
canonical_url: https://wiblo.app/docs/developers/api/introduction
last_updated: 2026-07-28T17:12:38+02:00
md_url: https://wiblo.app/docs/developers/api/introduction.md
---

# Introduction

The Wiblo API is a conventional REST API served from `https://api.wiblo.app`. Every endpoint lives under `/v1`, requests and responses are JSON, and the whole surface is validated against the same schema contracts the product itself runs on — the API cannot drift from what the app does.

The full surface is described by the public [OpenAPI spec](https://api.wiblo.app/openapi.yaml). The TypeScript SDK and this reference are both generated from that one document, so the three always agree.

## Your first request

The health endpoint needs no authentication:

```bash
curl https://api.wiblo.app/v1/health
```

Everything else takes a bearer token — see [Authentication](/docs/developers/api/authentication):

```bash
curl https://api.wiblo.app/v1/me \
  -H "Authorization: Bearer $WIBLO_TOKEN"
```

## How the surface is shaped

- **Workspace scoping.** Most resources belong to a workspace. Management endpoints carry the workspace id in the URL (`/v1/workspaces/{workspaceId}/...`); the booking-engine endpoints (`/v1/services`, `/v1/bookings`, `/v1/availability`, ...) take it as an `X-Wiblo-Workspace` header instead, so booking URLs stay short.
- **Request IDs.** Every response carries an `X-Request-Id` header (a ULID like `req_01J...`). Error bodies repeat it as `error.request_id` — include it when reporting a problem.
- **Rate limits.** Rate-limited routes return `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` on every response, and a `429` with `Retry-After` when you exceed them.
- **Errors.** Every non-2xx response uses one envelope with a stable machine-readable `error.code` — the full catalogue is on [Errors](/docs/developers/api/errors).

## The TypeScript SDK

Every operation in this reference has a matching typed function in the SDK, named after its `operationId`:

```ts

const sdk = createSdk({ baseUrl: "https://api.wiblo.app" })
const { data, error } = await getMe({ client: sdk })
```

The SDK ships inside the Wiblo platform today (agents working in Wiblo sandboxes have it available); public package distribution is planned.
