# Resources API – Tiempo

> Anything bookable: a worker, a room, a court. A resource is bookable only inside its schedules: one with none is closed until you give it hours.

Source: https://tiempo.one/docs/resources

Anything bookable: a worker, a room, a court. A resource is bookable only inside its schedules: one with none is closed until you give it hours. Capacity above 1 is a pool of identical units.

## Create a resource

`POST /v1/resources`

Adds something bookable to a business. It’s closed until you give it a schedule (POST /v1/schedules).

Send the business’s id in `Tiempo-Account`.

### Body parameters

-   `name` (string, required)
    
    Shown in your dashboard; not to customers.
    
-   `type` (string, required)
    
    Your label for grouping, for example worker, room or court.
    
-   `capacity` (integer)
    
    How many bookings it can hold at once. Defaults to 1.
    
-   `timezone` (string)
    
    IANA name, for example Europe/London.
    
-   `default_location` (string)
    
    Where the resource works when a schedule interval doesn’t say.
    
-   `buffer_before_minutes` (integer)
    
    Minutes the resource is also held before the time (travel, setup), 0–1440. On a booking segment it overrides the resource’s default; the appointment’s start and end don’t change.
    
-   `buffer_after_minutes` (integer)
    
    Minutes the resource is also held after the time (cleanup, turnaround), 0–1440. On a booking segment it overrides the resource’s default. Buffers must fit in working hours and can’t overlap blocks or other bookings.
    
-   `metadata` (map)
    
    Up to 50 keys of your own (strings, keys up to 40 characters, values up to 500). Returned on every read and webhook. On update, an empty string removes a key.
    

POST /v1/resources

```bash
curl -X POST "https://api.tiempo.one/v1/resources" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ann",
    "type": "worker",
    "metadata": {
      "your_staff_id": "stf_42"
    }
  }'
```

200Response

```json
{
  "id": "res_01m42ytc9b53589z4rp11zedjy",
  "object": "resource",
  "livemode": false,
  "name": "Ann",
  "type": "worker",
  "capacity": 1,
  "timezone": "Europe/London",
  "default_location": null,
  "status": "active",
  "buffer_before_minutes": 0,
  "buffer_after_minutes": 10,
  "metadata": {
    "your_staff_id": "stf_42"
  },
  "created_at": "2026-10-04T07:59:52Z",
  "updated_at": "2026-10-04T07:59:52Z"
}
```

## List resources

`GET /v1/resources`

Send the business’s id in `Tiempo-Account`.

### Query parameters

-   `type` (string)
    
    Only this type. For events, an exact type or a prefix like booking.*.
    
-   `status` (string)
    
    Only objects with this status.
    
-   `default_location` (string)
    
    Only resources based at this location.
    
-   `limit` (integer)
    
    1 to 100. Defaults to 20.
    
-   `starting_after` (string)
    
    An object id from the previous page; returns the page after it.
    
-   `ending_before` (string)
    
    An object id; returns the page before it.
    
-   `metadata[key]` (string)
    
    Only objects whose metadata has this key and value. Repeat for several.
    

GET /v1/resources

```bash
curl "https://api.tiempo.one/v1/resources?type=worker&status=active" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw"
```

200Response

```json
{
  "object": "list",
  "data": [
    {
      "id": "res_01m42ytc9b53589z4rp11zedjy",
      "object": "resource",
      "livemode": false,
      "name": "Ann",
      "type": "worker",
      "capacity": 1,
      "timezone": "Europe/London",
      "default_location": null,
      "status": "active",
      "buffer_before_minutes": 0,
      "buffer_after_minutes": 10,
      "metadata": {
        "your_staff_id": "stf_42"
      },
      "created_at": "2026-10-04T07:59:52Z",
      "updated_at": "2026-10-04T07:59:52Z"
    }
  ],
  "has_more": false
}
```

## Retrieve a resource

`GET /v1/resources/{id}`

Send the business’s id in `Tiempo-Account`.

### Path parameters

-   `id` (string, required)
    
    The object’s id.
    

GET /v1/resources/{id}

```bash
curl "https://api.tiempo.one/v1/resources/res_01m42ytc9b53589z4rp11zedjy" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw"
```

200Response

```json
{
  "id": "res_01m42ytc9b53589z4rp11zedjy",
  "object": "resource",
  "livemode": false,
  "name": "Ann",
  "type": "worker",
  "capacity": 1,
  "timezone": "Europe/London",
  "default_location": null,
  "status": "active",
  "buffer_before_minutes": 0,
  "buffer_after_minutes": 10,
  "metadata": {
    "your_staff_id": "stf_42"
  },
  "created_at": "2026-10-04T07:59:52Z",
  "updated_at": "2026-10-04T07:59:52Z"
}
```

## Update a resource

`POST /v1/resources/{id}`

Changing capacity or timezone re-checks the resource’s future bookings and flags any that no longer fit.

Send the business’s id in `Tiempo-Account`.

### Path parameters

-   `id` (string, required)
    
    The object’s id.
    

### Body parameters

-   `name` (string)
    
    Shown in your dashboard; not to customers.
    
-   `capacity` (integer)
    
    How many bookings it can hold at once. Defaults to 1.
    
-   `timezone` (string)
    
    IANA name, for example Europe/London.
    
-   `default_location` (string)
    
    Where the resource works when a schedule interval doesn’t say.
    
-   `buffer_before_minutes` (integer)
    
    Minutes the resource is also held before the time (travel, setup), 0–1440. On a booking segment it overrides the resource’s default; the appointment’s start and end don’t change.
    
-   `buffer_after_minutes` (integer)
    
    Minutes the resource is also held after the time (cleanup, turnaround), 0–1440. On a booking segment it overrides the resource’s default. Buffers must fit in working hours and can’t overlap blocks or other bookings.
    
-   `metadata` (map)
    
    Up to 50 keys of your own (strings, keys up to 40 characters, values up to 500). Returned on every read and webhook. On update, an empty string removes a key.
    

POST /v1/resources/{id}

```bash
curl -X POST "https://api.tiempo.one/v1/resources/res_01m42ytc9b53589z4rp11zedjy" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw" \
  -H "Content-Type: application/json" \
  -d '{
    "capacity": 2
  }'
```

200Response

```json
{
  "id": "res_01m42ytc9b53589z4rp11zedjy",
  "object": "resource",
  "livemode": false,
  "name": "Ann",
  "type": "worker",
  "capacity": 1,
  "timezone": "Europe/London",
  "default_location": null,
  "status": "active",
  "buffer_before_minutes": 0,
  "buffer_after_minutes": 10,
  "metadata": {
    "your_staff_id": "stf_42"
  },
  "created_at": "2026-10-04T07:59:52Z",
  "updated_at": "2026-10-04T07:59:52Z"
}
```

## Unarchive a resource

`POST /v1/resources/{id}/unarchive`

Lets an archived resource take bookings again, and clears the resource_archived flag from its future bookings.

Send the business’s id in `Tiempo-Account`.

### Path parameters

-   `id` (string, required)
    
    The object’s id.
    

POST /v1/resources/{id}/unarchive

```bash
curl -X POST "https://api.tiempo.one/v1/resources/res_01m42ytc9b53589z4rp11zedjy/unarchive" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw"
```

200Response

```json
{
  "id": "res_01m42ytc9b53589z4rp11zedjy",
  "object": "resource",
  "livemode": false,
  "name": "Ann",
  "type": "worker",
  "capacity": 1,
  "timezone": "Europe/London",
  "default_location": null,
  "status": "active",
  "buffer_before_minutes": 0,
  "buffer_after_minutes": 10,
  "metadata": {
    "your_staff_id": "stf_42"
  },
  "created_at": "2026-10-04T07:59:52Z",
  "updated_at": "2026-10-04T07:59:52Z"
}
```

## Delete a resource

`DELETE /v1/resources/{id}`

Only for a resource that was never booked, say one created by mistake; its schedules, overrides and blocks go with it. One with any bookings, past or future, or in an active series is refused (409 resource_in_use): archive it instead.

Send the business’s id in `Tiempo-Account`.

### Path parameters

-   `id` (string, required)
    
    The object’s id.
    

DELETE /v1/resources/{id}

```bash
curl -X DELETE "https://api.tiempo.one/v1/resources/res_01m42ytc9b53589z4rp11zedjy" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw"
```

200Response

```json
{
  "id": "…",
  "object": "…",
  "deleted": true
}
```

## Archive a resource

`POST /v1/resources/{id}/archive`

Stops new bookings on the resource. Existing future bookings stay, flagged as conflicted with reason resource_archived so you can move them.

Send the business’s id in `Tiempo-Account`.

### Path parameters

-   `id` (string, required)
    
    The object’s id.
    

POST /v1/resources/{id}/archive

```bash
curl -X POST "https://api.tiempo.one/v1/resources/res_01m42ytc9b53589z4rp11zedjy/archive" \
  -H "Authorization: Bearer tpt_4qZ8m1VwXc0L…" \
  -H "Tiempo-Account: acct_01m42yt93ayvyrwr3yczhv6yhw"
```

200Response

```json
{
  "id": "res_01m42ytc9b53589z4rp11zedjy",
  "object": "resource",
  "livemode": false,
  "name": "Ann",
  "type": "worker",
  "capacity": 1,
  "timezone": "Europe/London",
  "default_location": null,
  "status": "active",
  "buffer_before_minutes": 0,
  "buffer_after_minutes": 10,
  "metadata": {
    "your_staff_id": "stf_42"
  },
  "created_at": "2026-10-04T07:59:52Z",
  "updated_at": "2026-10-04T07:59:52Z"
}
```

The machine-readable description is at [/openapi.json](https://tiempo.one/openapi.json). Try calls in [Swagger UI](https://tiempo.one/swagger-ui.html).[Tiempo home](https://tiempo.one/)[Dashboard](https://tiempo.one/app)
