---
description: Aidbox provides access to PostgreSQL sequences through REST API.
---

# Sequence API

In some cases you want to enumerate your resources with an increasing counter or use global sequences for your app needs. Aidbox provides handy access to [PostgreSQL sequences](https://www.postgresql.org/docs/current/sql-createsequence.html) through REST API. Values generated by this API are transactional and safe to use in concurrent environment.&#x20;

## Create Sequence

You can create named sequence by posting PGSequence resource. We use explicit naming for sequences, so the **id** element is required!

{% code title="create-sequence.yaml" %}
```yaml
POST /PGSequence
Accept: text/yaml
Content-Type: text/yaml

id: pt_seq
```
{% endcode %}

You can specify other PGSequence attributes:

| attr          | type    | desc                                                              |
| ------------- | ------- | ----------------------------------------------------------------- |
| **id**        | ident   | sequence name; only lower case, digits and \_ are allowed in name |
| **start**     | integer | initial sequence value (default 1)                                |
| **cycle**     | boolean | cycle after reaching sequence max/min value                       |
| **increment** | integer | sequence step (default 1)                                         |
| **maxval**    | integer | max value to cycle                                                |
| **minval**    | integer | min value to cycle                                                |

## Get next value

Now you can move sequence forward transactionally and reserve the next value:

```yaml
POST /PGSequence/pt_seq
Accept: text/yaml

# response
id: pt_seq
value: 1
```

Each call will increment the sequence.

You can get a range of values by providing the **count** parameter in the body.

```yaml
POST /PGSequence/pt_seq
Accept: text/yaml
Content-Type: text/yaml

count: 5

# response 200
id: pt_seq
values: [2,3,4,5,6]
```

## Read current value

You can read the current state of sequence without incrementing it with `GET /PGSequence/[id]`

```yaml
GET /PGSequence/pt_seq
Accept: text/yaml

# response 200
id: pt_seq
value: 1
```

## Reset value

You can set the sequence to a specific value by `PUT /PGSequence/[id]`

```yaml
PUT /PGSequence/pt_seq
Accept: text/yaml
Content-Type: text/yaml

value: 30

# response 200
value: 30
```

This will reset the current sequence value to 30, so next get value operation will return 31:

```yaml
POST /PGSequence/pt_seq
Accept: text/yaml

## response 200
value: 31
```

You can use this endpoint if you want to update or create sequence:

```yaml
PUT /PGSequence/pt_seq
Accept: text/yaml
Content-Type: text/yaml

start: 300

# response 201 - created

--- 
PUT /PGSequence/pt_seq
Accept: text/yaml
Content-Type: text/yaml

start: 300

# response 200 - untouched
```

## Destroy Sequence

You can drop the sequence with `DELETE /PGSequence/[id]`

```yaml
DELETE /PGSequence/pt_seq
Accept: text/yaml

# response 200
id: pt_seq
value: 1
```
