# ZeyOS REST API — LLM full working set

## Specs
- REST OpenAPI: /__doc/openapi/api.json
- OAuth 2.0 OpenAPI: /__doc/openapi/oauth2.json
- Simple Auth OpenAPI: /__doc/openapi/auth.json

## Tag index (JSON)
- /ai/openapi/tags.json

## Operations index (JSON)
- /ai/openapi/operations.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Tag docs (Markdown)
- accounts (6 endpoints): /ai/openapi/tag.accounts.md
- actionsteps (6 endpoints): /ai/openapi/tag.actionsteps.md
- addresses (6 endpoints): /ai/openapi/tag.addresses.md
- applicationassets (3 endpoints): /ai/openapi/tag.applicationassets.md
- applications (3 endpoints): /ai/openapi/tag.applications.md
- appointments (6 endpoints): /ai/openapi/tag.appointments.md
- associations (6 endpoints): /ai/openapi/tag.associations.md
- binfiles (1 endpoints): /ai/openapi/tag.binfiles.md
- campaigns (6 endpoints): /ai/openapi/tag.campaigns.md
- categories (6 endpoints): /ai/openapi/tag.categories.md
- channels (6 endpoints): /ai/openapi/tag.channels.md
- comments (6 endpoints): /ai/openapi/tag.comments.md
- components (6 endpoints): /ai/openapi/tag.components.md
- contacts (6 endpoints): /ai/openapi/tag.contacts.md
- contacts2contacts (6 endpoints): /ai/openapi/tag.contacts2contacts.md
- contracts (6 endpoints): /ai/openapi/tag.contracts.md
- couponcodes (6 endpoints): /ai/openapi/tag.couponcodes.md
- coupons (6 endpoints): /ai/openapi/tag.coupons.md
- customfields (3 endpoints): /ai/openapi/tag.customfields.md
- davservers (6 endpoints): /ai/openapi/tag.davservers.md
- devices (6 endpoints): /ai/openapi/tag.devices.md
- documents (6 endpoints): /ai/openapi/tag.documents.md
- dunning (6 endpoints): /ai/openapi/tag.dunning.md
- dunning2transactions (6 endpoints): /ai/openapi/tag.dunning2transactions.md
- entities2channels (6 endpoints): /ai/openapi/tag.entities2channels.md
- events (6 endpoints): /ai/openapi/tag.events.md
- feedservers (6 endpoints): /ai/openapi/tag.feedservers.md
- files (6 endpoints): /ai/openapi/tag.files.md
- follows (6 endpoints): /ai/openapi/tag.follows.md
- forks (3 endpoints): /ai/openapi/tag.forks.md
- general (2 endpoints): /ai/openapi/tag.general.md
- groups (3 endpoints): /ai/openapi/tag.groups.md
- groups2users (3 endpoints): /ai/openapi/tag.groups2users.md
- invitations (6 endpoints): /ai/openapi/tag.invitations.md
- items (6 endpoints): /ai/openapi/tag.items.md
- ledgers (6 endpoints): /ai/openapi/tag.ledgers.md
- likes (6 endpoints): /ai/openapi/tag.likes.md
- links (6 endpoints): /ai/openapi/tag.links.md
- mailinglists (6 endpoints): /ai/openapi/tag.mailinglists.md
- mailingrecipients (6 endpoints): /ai/openapi/tag.mailingrecipients.md
- mailservers (6 endpoints): /ai/openapi/tag.mailservers.md
- messagereads (6 endpoints): /ai/openapi/tag.messagereads.md
- messages (6 endpoints): /ai/openapi/tag.messages.md
- notes (6 endpoints): /ai/openapi/tag.notes.md
- objects (6 endpoints): /ai/openapi/tag.objects.md
- opportunities (6 endpoints): /ai/openapi/tag.opportunities.md
- participants (6 endpoints): /ai/openapi/tag.participants.md
- payments (6 endpoints): /ai/openapi/tag.payments.md
- permissions (3 endpoints): /ai/openapi/tag.permissions.md
- pricelists (6 endpoints): /ai/openapi/tag.pricelists.md
- pricelists2accounts (6 endpoints): /ai/openapi/tag.pricelists2accounts.md
- prices (6 endpoints): /ai/openapi/tag.prices.md
- projects (6 endpoints): /ai/openapi/tag.projects.md
- records (6 endpoints): /ai/openapi/tag.records.md
- relateditems (6 endpoints): /ai/openapi/tag.relateditems.md
- resources (3 endpoints): /ai/openapi/tag.resources.md
- services (3 endpoints): /ai/openapi/tag.services.md
- stocktransactions (6 endpoints): /ai/openapi/tag.stocktransactions.md
- storages (6 endpoints): /ai/openapi/tag.storages.md
- suppliers (6 endpoints): /ai/openapi/tag.suppliers.md
- tasks (6 endpoints): /ai/openapi/tag.tasks.md
- tickets (6 endpoints): /ai/openapi/tag.tickets.md
- transactions (6 endpoints): /ai/openapi/tag.transactions.md
- users (3 endpoints): /ai/openapi/tag.users.md
- weblets (3 endpoints): /ai/openapi/tag.weblets.md

---

# ZeyOS Standard REST API (v1)

## Tag: accounts
Accounts

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /accounts | List accounts |
| PUT | /accounts | Create new account |
| DELETE | /accounts/{ID} | Delete account |
| GET | /accounts/{ID} | Get account |
| HEAD | /accounts/{ID} | Check if account exists |
| PATCH | /accounts/{ID} | Update existing account |

### POST /accounts
- Summary: List accounts
- OperationId: listAccounts
- Description: List selected data from all accounts that match the specified filter and search criteria in a specific sort order. Requires `accounts` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 400: #/components/responses/400
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /accounts
- Summary: Create new account
- OperationId: createAccount
- Description: Create a new account and return its persistent data. Requires writable `accounts` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/accounts

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/accounts
- 400: #/components/responses/400
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 500: #/components/responses/500

### DELETE /accounts/{ID}
- Summary: Delete account
- OperationId: deleteAccount
- Description: Permanently delete an existing account by **`ID`**. Requires writable `accounts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /accounts/{ID}
- Summary: Get account
- OperationId: getAccount
- Description: Return the data of an existing account by **`ID`**. Requires `accounts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/accounts
- 304 — Not Modified
- 400: #/components/responses/400
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /accounts/{ID}
- Summary: Check if account exists
- OperationId: existsAccount
- Description: Check if an account with **`ID`** exists, but do not return its data. Requires `accounts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 400: #/components/responses/400
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /accounts/{ID}
- Summary: Update existing account
- OperationId: updateAccount
- Description: Update an existing account by **`ID`** and return its persistent data. Requires writable `accounts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/accounts

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/accounts
- 400: #/components/responses/400
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: actionsteps
Action Steps

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /actionsteps | List actionsteps |
| PUT | /actionsteps | Create new action step |
| DELETE | /actionsteps/{ID} | Delete action step |
| GET | /actionsteps/{ID} | Get action step |
| HEAD | /actionsteps/{ID} | Check if action step exists |
| PATCH | /actionsteps/{ID} | Update existing action step |

### POST /actionsteps
- Summary: List actionsteps
- OperationId: listActionSteps
- Description: List selected data from all action steps that match the specified filter and search criteria in a specific sort order. Requires `actionsteps` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /actionsteps
- Summary: Create new action step
- OperationId: createActionStep
- Description: Create a new action step and return its persistent data. Requires writable `actionsteps` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/actionsteps

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/actionsteps
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /actionsteps/{ID}
- Summary: Delete action step
- OperationId: deleteActionStep
- Description: Permanently delete an existing action step by **`ID`**. Requires writable `actionsteps` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /actionsteps/{ID}
- Summary: Get action step
- OperationId: getActionStep
- Description: Return the data of an existing action step by **`ID`**. Requires `actionsteps` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/actionsteps
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /actionsteps/{ID}
- Summary: Check if action step exists
- OperationId: existsActionStep
- Description: Check if an action step with **`ID`** exists, but do not return its data. Requires `actionsteps` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /actionsteps/{ID}
- Summary: Update existing action step
- OperationId: updateActionStep
- Description: Update an existing action step by **`ID`** and return its persistent data. Requires writable `actionsteps` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/actionsteps

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/actionsteps
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: addresses
Addresses

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /addresses | List addresses |
| PUT | /addresses | Create new address |
| DELETE | /addresses/{ID} | Delete address |
| GET | /addresses/{ID} | Get address |
| HEAD | /addresses/{ID} | Check if address exists |
| PATCH | /addresses/{ID} | Update existing address |

### POST /addresses
- Summary: List addresses
- OperationId: listAddresses
- Description: List selected data from all addresses that match the specified filter and search criteria in a specific sort order. Requires `accounts` permission. Has dependency on `account`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /addresses
- Summary: Create new address
- OperationId: createAddress
- Description: Create a new address and return its persistent data. Requires writable `accounts` permission. Has dependency on `account`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/addresses

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/addresses
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /addresses/{ID}
- Summary: Delete address
- OperationId: deleteAddress
- Description: Permanently delete an existing address by **`ID`**. Requires writable `accounts` permission. Has dependency on `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /addresses/{ID}
- Summary: Get address
- OperationId: getAddress
- Description: Return the data of an existing address by **`ID`**. Requires `accounts` permission. Has dependency on `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/addresses
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /addresses/{ID}
- Summary: Check if address exists
- OperationId: existsAddress
- Description: Check if an address with **`ID`** exists, but do not return its data. Requires `accounts` permission. Has dependency on `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /addresses/{ID}
- Summary: Update existing address
- OperationId: updateAddress
- Description: Update an existing address by **`ID`** and return its persistent data. Requires writable `accounts` permission. Has dependency on `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/addresses

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/addresses
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: applicationassets
Application Assets *(developer read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /applicationassets | List application assets |
| GET | /applicationassets/{ID} | Get application asset |
| HEAD | /applicationassets/{ID} | Check if application asset exists |

### POST /applicationassets
- Summary: List application assets
- OperationId: listApplicationAssets
- Description: List selected data from all application assets that match the specified filter and search criteria in a specific sort order. Requires `dev` permission. Has dependency on `application`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /applicationassets/{ID}
- Summary: Get application asset
- OperationId: getApplicationAsset
- Description: Return the data of an existing application asset by **`ID`**. Requires `dev` permission. Has dependency on `application`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/applicationassets
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /applicationassets/{ID}
- Summary: Check if application asset exists
- OperationId: existsApplicationAsset
- Description: Check if an application asset with **`ID`** exists, but do not return its data. Requires `dev` permission. Has dependency on `application`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: applications
Applications *(developer read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /applications | List applications |
| GET | /applications/{ID} | Get application |
| HEAD | /applications/{ID} | Check if application exists |

### POST /applications
- Summary: List applications
- OperationId: listApplications
- Description: List selected data from all applications that match the specified filter and search criteria in a specific sort order. Requires `dev` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /applications/{ID}
- Summary: Get application
- OperationId: getApplication
- Description: Return the data of an existing application by **`ID`**. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/applications
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /applications/{ID}
- Summary: Check if application exists
- OperationId: existsApplication
- Description: Check if an application with **`ID`** exists, but do not return its data. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: appointments
Appointments

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /appointments | List appointments |
| PUT | /appointments | Create new appointment |
| DELETE | /appointments/{ID} | Delete appointment |
| GET | /appointments/{ID} | Get appointment |
| HEAD | /appointments/{ID} | Check if appointment exists |
| PATCH | /appointments/{ID} | Update existing appointment |

### POST /appointments
- Summary: List appointments
- OperationId: listAppointments
- Description: List selected data from all appointments that match the specified filter and search criteria in a specific sort order. Requires `calendar` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /appointments
- Summary: Create new appointment
- OperationId: createAppointment
- Description: Create a new appointment and return its persistent data. Requires writable `calendar` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/appointments

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/appointments
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /appointments/{ID}
- Summary: Delete appointment
- OperationId: deleteAppointment
- Description: Permanently delete an existing appointment by **`ID`**. Requires writable `calendar` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /appointments/{ID}
- Summary: Get appointment
- OperationId: getAppointment
- Description: Return the data of an existing appointment by **`ID`**. Requires `calendar` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/appointments
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /appointments/{ID}
- Summary: Check if appointment exists
- OperationId: existsAppointment
- Description: Check if an appointment with **`ID`** exists, but do not return its data. Requires `calendar` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /appointments/{ID}
- Summary: Update existing appointment
- OperationId: updateAppointment
- Description: Update an existing appointment by **`ID`** and return its persistent data. Requires writable `calendar` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/appointments

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/appointments
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: associations
Associations

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /associations | List associations |
| PUT | /associations | Create new association |
| DELETE | /associations/{ID} | Delete association |
| GET | /associations/{ID} | Get association |
| HEAD | /associations/{ID} | Check if association exists |
| PATCH | /associations/{ID} | Update existing association |

### POST /associations
- Summary: List associations
- OperationId: listAssociations
- Description: List selected data from all associations that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /associations
- Summary: Create new association
- OperationId: createAssociation
- Description: Create a new association and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/associations

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/associations
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /associations/{ID}
- Summary: Delete association
- OperationId: deleteAssociation
- Description: Permanently delete an existing association by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /associations/{ID}
- Summary: Get association
- OperationId: getAssociation
- Description: Return the data of an existing association by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/associations
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /associations/{ID}
- Summary: Check if association exists
- OperationId: existsAssociation
- Description: Check if an association with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /associations/{ID}
- Summary: Update existing association
- OperationId: updateAssociation
- Description: Update an existing association by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/associations

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/associations
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: binfiles
Bin Files *(read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /binfiles | List bin files |

### POST /binfiles
- Summary: List bin files
- OperationId: listBinFiles
- Description: List selected data from all bin files that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: campaigns
Campaigns

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /campaigns | List campaigns |
| PUT | /campaigns | Create new campaign |
| DELETE | /campaigns/{ID} | Delete campaign |
| GET | /campaigns/{ID} | Get campaign |
| HEAD | /campaigns/{ID} | Check if campaign exists |
| PATCH | /campaigns/{ID} | Update existing campaign |

### POST /campaigns
- Summary: List campaigns
- OperationId: listCampaigns
- Description: List selected data from all campaigns that match the specified filter and search criteria in a specific sort order. Requires `campaigns` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /campaigns
- Summary: Create new campaign
- OperationId: createCampaign
- Description: Create a new campaign and return its persistent data. Requires writable `campaigns` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/campaigns

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/campaigns
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /campaigns/{ID}
- Summary: Delete campaign
- OperationId: deleteCampaign
- Description: Permanently delete an existing campaign by **`ID`**. Requires writable `campaigns` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /campaigns/{ID}
- Summary: Get campaign
- OperationId: getCampaign
- Description: Return the data of an existing campaign by **`ID`**. Requires `campaigns` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/campaigns
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /campaigns/{ID}
- Summary: Check if campaign exists
- OperationId: existsCampaign
- Description: Check if a campaign with **`ID`** exists, but do not return its data. Requires `campaigns` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /campaigns/{ID}
- Summary: Update existing campaign
- OperationId: updateCampaign
- Description: Update an existing campaign by **`ID`** and return its persistent data. Requires writable `campaigns` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/campaigns

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/campaigns
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: categories
Categories

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /categories | List categories |
| PUT | /categories | Create new category |
| DELETE | /categories/{ID} | Delete category |
| GET | /categories/{ID} | Get category |
| HEAD | /categories/{ID} | Check if category exists |
| PATCH | /categories/{ID} | Update existing category |

### POST /categories
- Summary: List categories
- OperationId: listCategorys
- Description: List selected data from all categories that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /categories
- Summary: Create new category
- OperationId: createCategory
- Description: Create a new category and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/categories

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/categories
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /categories/{ID}
- Summary: Delete category
- OperationId: deleteCategory
- Description: Permanently delete an existing category by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /categories/{ID}
- Summary: Get category
- OperationId: getCategory
- Description: Return the data of an existing category by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/categories
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /categories/{ID}
- Summary: Check if category exists
- OperationId: existsCategory
- Description: Check if a category with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /categories/{ID}
- Summary: Update existing category
- OperationId: updateCategory
- Description: Update an existing category by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/categories

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/categories
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: channels
Channels

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /channels | List channels |
| PUT | /channels | Create new channel |
| DELETE | /channels/{ID} | Delete channel |
| GET | /channels/{ID} | Get channel |
| HEAD | /channels/{ID} | Check if channel exists |
| PATCH | /channels/{ID} | Update existing channel |

### POST /channels
- Summary: List channels
- OperationId: listChannels
- Description: List selected data from all channels that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /channels
- Summary: Create new channel
- OperationId: createChannel
- Description: Create a new channel and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/channels

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/channels
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /channels/{ID}
- Summary: Delete channel
- OperationId: deleteChannel
- Description: Permanently delete an existing channel by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /channels/{ID}
- Summary: Get channel
- OperationId: getChannel
- Description: Return the data of an existing channel by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/channels
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /channels/{ID}
- Summary: Check if channel exists
- OperationId: existsChannel
- Description: Check if a channel with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /channels/{ID}
- Summary: Update existing channel
- OperationId: updateChannel
- Description: Update an existing channel by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/channels

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/channels
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: comments
Comments

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /comments | List comments |
| PUT | /comments | Create new comment |
| DELETE | /comments/{ID} | Delete comment |
| GET | /comments/{ID} | Get comment |
| HEAD | /comments/{ID} | Check if comment exists |
| PATCH | /comments/{ID} | Update existing comment |

### POST /comments
- Summary: List comments
- OperationId: listComments
- Description: List selected data from all comments that match the specified filter and search criteria in a specific sort order. Requires no specific permission. Has dependency on `record`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /comments
- Summary: Create new comment
- OperationId: createComment
- Description: Create a new comment and return its persistent data. Requires the authenticated user to be the `creator`. Has dependency on `record`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/comments

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/comments
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /comments/{ID}
- Summary: Delete comment
- OperationId: deleteComment
- Description: Permanently delete an existing comment by **`ID`**. Requires the authenticated user to be the `creator`. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /comments/{ID}
- Summary: Get comment
- OperationId: getComment
- Description: Return the data of an existing comment by **`ID`**. Requires no specific permission. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/comments
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /comments/{ID}
- Summary: Check if comment exists
- OperationId: existsComment
- Description: Check if a comment with **`ID`** exists, but do not return its data. Requires no specific permission. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /comments/{ID}
- Summary: Update existing comment
- OperationId: updateComment
- Description: Update an existing comment by **`ID`** and return its persistent data. Requires the authenticated user to be the `creator`. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/comments

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/comments
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: components
Components

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /components | List components |
| PUT | /components | Create new component |
| DELETE | /components/{ID} | Delete component |
| GET | /components/{ID} | Get component |
| HEAD | /components/{ID} | Check if component exists |
| PATCH | /components/{ID} | Update existing component |

### POST /components
- Summary: List components
- OperationId: listComponents
- Description: List selected data from all components that match the specified filter and search criteria in a specific sort order. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /components
- Summary: Create new component
- OperationId: createComponent
- Description: Create a new component and return its persistent data. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/components

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/components
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /components/{ID}
- Summary: Delete component
- OperationId: deleteComponent
- Description: Permanently delete an existing component by **`ID`**. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /components/{ID}
- Summary: Get component
- OperationId: getComponent
- Description: Return the data of an existing component by **`ID`**. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/components
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /components/{ID}
- Summary: Check if component exists
- OperationId: existsComponent
- Description: Check if a component with **`ID`** exists, but do not return its data. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /components/{ID}
- Summary: Update existing component
- OperationId: updateComponent
- Description: Update an existing component by **`ID`** and return its persistent data. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/components

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/components
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: contacts
Contacts

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /contacts | List contacts |
| PUT | /contacts | Create new contact |
| DELETE | /contacts/{ID} | Delete contact |
| GET | /contacts/{ID} | Get contact |
| HEAD | /contacts/{ID} | Check if contact exists |
| PATCH | /contacts/{ID} | Update existing contact |

### POST /contacts
- Summary: List contacts
- OperationId: listContacts
- Description: List selected data from all contacts that match the specified filter and search criteria in a specific sort order. Requires `contacts` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /contacts
- Summary: Create new contact
- OperationId: createContact
- Description: Create a new contact and return its persistent data. Requires writable `contacts` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/contacts

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/contacts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /contacts/{ID}
- Summary: Delete contact
- OperationId: deleteContact
- Description: Permanently delete an existing contact by **`ID`**. Requires writable `contacts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /contacts/{ID}
- Summary: Get contact
- OperationId: getContact
- Description: Return the data of an existing contact by **`ID`**. Requires `contacts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/contacts
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /contacts/{ID}
- Summary: Check if contact exists
- OperationId: existsContact
- Description: Check if a contact with **`ID`** exists, but do not return its data. Requires `contacts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /contacts/{ID}
- Summary: Update existing contact
- OperationId: updateContact
- Description: Update an existing contact by **`ID`** and return its persistent data. Requires writable `contacts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/contacts

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/contacts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: contacts2contacts
Contacts-to-contacts

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /contacts2contacts | List contacts-to-contacts |
| PUT | /contacts2contacts | Create new contact-to-contact |
| DELETE | /contacts2contacts/{ID} | Delete contact-to-contact |
| GET | /contacts2contacts/{ID} | Get contact-to-contact |
| HEAD | /contacts2contacts/{ID} | Check if contact-to-contact exists |
| PATCH | /contacts2contacts/{ID} | Update existing contact-to-contact |

### POST /contacts2contacts
- Summary: List contacts-to-contacts
- OperationId: listContactsToContacts
- Description: List selected data from all contacts-to-contacts that match the specified filter and search criteria in a specific sort order. Requires `contacts` permission. Has dependencies on `contact1` and `contact2`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /contacts2contacts
- Summary: Create new contact-to-contact
- OperationId: createContactToContact
- Description: Create a new contact-to-contact and return its persistent data. Requires writable `contacts` permission. Has dependencies on `contact1` and `contact2`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/contacts2contacts

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/contacts2contacts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /contacts2contacts/{ID}
- Summary: Delete contact-to-contact
- OperationId: deleteContactToContact
- Description: Permanently delete an existing contact-to-contact by **`ID`**. Requires writable `contacts` permission. Has dependencies on `contact1` and `contact2`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /contacts2contacts/{ID}
- Summary: Get contact-to-contact
- OperationId: getContactToContact
- Description: Return the data of an existing contact-to-contact by **`ID`**. Requires `contacts` permission. Has dependencies on `contact1` and `contact2`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/contacts2contacts
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /contacts2contacts/{ID}
- Summary: Check if contact-to-contact exists
- OperationId: existsContactToContact
- Description: Check if a contact-to-contact with **`ID`** exists, but do not return its data. Requires `contacts` permission. Has dependencies on `contact1` and `contact2`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /contacts2contacts/{ID}
- Summary: Update existing contact-to-contact
- OperationId: updateContactToContact
- Description: Update an existing contact-to-contact by **`ID`** and return its persistent data. Requires writable `contacts` permission. Has dependencies on `contact1` and `contact2`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/contacts2contacts

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/contacts2contacts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: contracts
Contracts

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /contracts | List contracts |
| PUT | /contracts | Create new contract |
| DELETE | /contracts/{ID} | Delete contract |
| GET | /contracts/{ID} | Get contract |
| HEAD | /contracts/{ID} | Check if contract exists |
| PATCH | /contracts/{ID} | Update existing contract |

### POST /contracts
- Summary: List contracts
- OperationId: listContracts
- Description: List selected data from all contracts that match the specified filter and search criteria in a specific sort order. Requires `contracts` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /contracts
- Summary: Create new contract
- OperationId: createContract
- Description: Create a new contract and return its persistent data. Requires writable `contracts` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/contracts

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/contracts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /contracts/{ID}
- Summary: Delete contract
- OperationId: deleteContract
- Description: Permanently delete an existing contract by **`ID`**. Requires writable `contracts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /contracts/{ID}
- Summary: Get contract
- OperationId: getContract
- Description: Return the data of an existing contract by **`ID`**. Requires `contracts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/contracts
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /contracts/{ID}
- Summary: Check if contract exists
- OperationId: existsContract
- Description: Check if a contract with **`ID`** exists, but do not return its data. Requires `contracts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /contracts/{ID}
- Summary: Update existing contract
- OperationId: updateContract
- Description: Update an existing contract by **`ID`** and return its persistent data. Requires writable `contracts` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/contracts

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/contracts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: couponcodes
Coupon Codes

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /couponcodes | List coupon codes |
| PUT | /couponcodes | Create new coupon code |
| DELETE | /couponcodes/{ID} | Delete coupon code |
| GET | /couponcodes/{ID} | Get coupon code |
| HEAD | /couponcodes/{ID} | Check if coupon code exists |
| PATCH | /couponcodes/{ID} | Update existing coupon code |

### POST /couponcodes
- Summary: List coupon codes
- OperationId: listCouponCodes
- Description: List selected data from all coupon codes that match the specified filter and search criteria in a specific sort order. Requires `pricelists` permission. Has dependency on `coupon`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /couponcodes
- Summary: Create new coupon code
- OperationId: createCouponCode
- Description: Create a new coupon code and return its persistent data. Requires writable `pricelists` permission. Has dependency on `coupon`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/couponcodes

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/couponcodes
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /couponcodes/{ID}
- Summary: Delete coupon code
- OperationId: deleteCouponCode
- Description: Permanently delete an existing coupon code by **`ID`**. Requires writable `pricelists` permission. Has dependency on `coupon`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /couponcodes/{ID}
- Summary: Get coupon code
- OperationId: getCouponCode
- Description: Return the data of an existing coupon code by **`ID`**. Requires `pricelists` permission. Has dependency on `coupon`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/couponcodes
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /couponcodes/{ID}
- Summary: Check if coupon code exists
- OperationId: existsCouponCode
- Description: Check if a coupon code with **`ID`** exists, but do not return its data. Requires `pricelists` permission. Has dependency on `coupon`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /couponcodes/{ID}
- Summary: Update existing coupon code
- OperationId: updateCouponCode
- Description: Update an existing coupon code by **`ID`** and return its persistent data. Requires writable `pricelists` permission. Has dependency on `coupon`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/couponcodes

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/couponcodes
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: coupons
Coupons

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /coupons | List coupons |
| PUT | /coupons | Create new coupon |
| DELETE | /coupons/{ID} | Delete coupon |
| GET | /coupons/{ID} | Get coupon |
| HEAD | /coupons/{ID} | Check if coupon exists |
| PATCH | /coupons/{ID} | Update existing coupon |

### POST /coupons
- Summary: List coupons
- OperationId: listCoupons
- Description: List selected data from all coupons that match the specified filter and search criteria in a specific sort order. Requires `pricelists` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /coupons
- Summary: Create new coupon
- OperationId: createCoupon
- Description: Create a new coupon and return its persistent data. Requires writable `pricelists` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/coupons

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/coupons
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /coupons/{ID}
- Summary: Delete coupon
- OperationId: deleteCoupon
- Description: Permanently delete an existing coupon by **`ID`**. Requires writable `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /coupons/{ID}
- Summary: Get coupon
- OperationId: getCoupon
- Description: Return the data of an existing coupon by **`ID`**. Requires `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/coupons
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /coupons/{ID}
- Summary: Check if coupon exists
- OperationId: existsCoupon
- Description: Check if a coupon with **`ID`** exists, but do not return its data. Requires `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /coupons/{ID}
- Summary: Update existing coupon
- OperationId: updateCoupon
- Description: Update an existing coupon by **`ID`** and return its persistent data. Requires writable `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/coupons

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/coupons
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: customfields
Custom Fields *(read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /customfields | List custom fields |
| GET | /customfields/{ID} | Get custom field |
| HEAD | /customfields/{ID} | Check if custom field exists |

### POST /customfields
- Summary: List custom fields
- OperationId: listCustomFields
- Description: List selected data from all custom fields that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /customfields/{ID}
- Summary: Get custom field
- OperationId: getCustomField
- Description: Return the data of an existing custom field by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/customfields
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /customfields/{ID}
- Summary: Check if custom field exists
- OperationId: existsCustomField
- Description: Check if a custom field with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: davservers
DAV Servers

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /davservers | List DAV servers |
| PUT | /davservers | Create new DAV server |
| DELETE | /davservers/{ID} | Delete DAV server |
| GET | /davservers/{ID} | Get DAV server |
| HEAD | /davservers/{ID} | Check if DAV server exists |
| PATCH | /davservers/{ID} | Update existing DAV server |

### POST /davservers
- Summary: List DAV servers
- OperationId: listDAVServers
- Description: List selected data from all DAV servers that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /davservers
- Summary: Create new DAV server
- OperationId: createDAVServer
- Description: Create a new DAV server and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/davservers

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/davservers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /davservers/{ID}
- Summary: Delete DAV server
- OperationId: deleteDAVServer
- Description: Permanently delete an existing DAV server by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /davservers/{ID}
- Summary: Get DAV server
- OperationId: getDAVServer
- Description: Return the data of an existing DAV server by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/davservers
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /davservers/{ID}
- Summary: Check if DAV server exists
- OperationId: existsDAVServer
- Description: Check if a DAV server with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /davservers/{ID}
- Summary: Update existing DAV server
- OperationId: updateDAVServer
- Description: Update an existing DAV server by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/davservers

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/davservers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: devices
Devices

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /devices | List devices |
| PUT | /devices | Create new device |
| DELETE | /devices/{ID} | Delete device |
| GET | /devices/{ID} | Get device |
| HEAD | /devices/{ID} | Check if device exists |
| PATCH | /devices/{ID} | Update existing device |

### POST /devices
- Summary: List devices
- OperationId: listDevices
- Description: List selected data from all devices that match the specified filter and search criteria in a specific sort order. Requires `inventory` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /devices
- Summary: Create new device
- OperationId: createDevice
- Description: Create a new device and return its persistent data. Requires `inventory` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/devices

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/devices
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /devices/{ID}
- Summary: Delete device
- OperationId: deleteDevice
- Description: Permanently delete an existing device by **`ID`**. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /devices/{ID}
- Summary: Get device
- OperationId: getDevice
- Description: Return the data of an existing device by **`ID`**. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/devices
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /devices/{ID}
- Summary: Check if device exists
- OperationId: existsDevice
- Description: Check if a device with **`ID`** exists, but do not return its data. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /devices/{ID}
- Summary: Update existing device
- OperationId: updateDevice
- Description: Update an existing device by **`ID`** and return its persistent data. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/devices

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/devices
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: documents
Documents

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /documents | List documents |
| PUT | /documents | Create new document |
| DELETE | /documents/{ID} | Delete document |
| GET | /documents/{ID} | Get document |
| HEAD | /documents/{ID} | Check if document exists |
| PATCH | /documents/{ID} | Update existing document |

### POST /documents
- Summary: List documents
- OperationId: listDocuments
- Description: List selected data from all documents that match the specified filter and search criteria in a specific sort order. Requires `documents` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /documents
- Summary: Create new document
- OperationId: createDocument
- Description: Create a new document and return its persistent data. Requires `documents` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/documents

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/documents
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /documents/{ID}
- Summary: Delete document
- OperationId: deleteDocument
- Description: Permanently delete an existing document by **`ID`**. Requires `documents` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /documents/{ID}
- Summary: Get document
- OperationId: getDocument
- Description: Return the data of an existing document by **`ID`**. Requires `documents` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/documents
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /documents/{ID}
- Summary: Check if document exists
- OperationId: existsDocument
- Description: Check if a document with **`ID`** exists, but do not return its data. Requires `documents` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /documents/{ID}
- Summary: Update existing document
- OperationId: updateDocument
- Description: Update an existing document by **`ID`** and return its persistent data. Requires `documents` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/documents

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/documents
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: dunning
Dunning Notices

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /dunning | List dunning notices |
| PUT | /dunning | Create new dunning notice |
| DELETE | /dunning/{ID} | Delete dunning notice |
| GET | /dunning/{ID} | Get dunning notice |
| HEAD | /dunning/{ID} | Check if dunning notice exists |
| PATCH | /dunning/{ID} | Update existing dunning notice |

### POST /dunning
- Summary: List dunning notices
- OperationId: listDunningNotices
- Description: List selected data from all dunning notices that match the specified filter and search criteria in a specific sort order. Requires `collection` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /dunning
- Summary: Create new dunning notice
- OperationId: createDunningNotice
- Description: Create a new dunning notice and return its persistent data. Requires writable `collection` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/dunning

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/dunning
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /dunning/{ID}
- Summary: Delete dunning notice
- OperationId: deleteDunningNotice
- Description: Permanently delete an existing dunning notice by **`ID`**. Requires writable `collection` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /dunning/{ID}
- Summary: Get dunning notice
- OperationId: getDunningNotice
- Description: Return the data of an existing dunning notice by **`ID`**. Requires `collection` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/dunning
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /dunning/{ID}
- Summary: Check if dunning notice exists
- OperationId: existsDunningNotice
- Description: Check if a dunning notice with **`ID`** exists, but do not return its data. Requires `collection` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /dunning/{ID}
- Summary: Update existing dunning notice
- OperationId: updateDunningNotice
- Description: Update an existing dunning notice by **`ID`** and return its persistent data. Requires writable `collection` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/dunning

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/dunning
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: dunning2transactions
Dunning-to-transactions

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /dunning2transactions | List dunning-to-transactions |
| PUT | /dunning2transactions | Create new dunning-to-transaction |
| DELETE | /dunning2transactions/{ID} | Delete dunning-to-transaction |
| GET | /dunning2transactions/{ID} | Get dunning-to-transaction |
| HEAD | /dunning2transactions/{ID} | Check if dunning-to-transaction exists |
| PATCH | /dunning2transactions/{ID} | Update existing dunning-to-transaction |

### POST /dunning2transactions
- Summary: List dunning-to-transactions
- OperationId: listDunningToTransactions
- Description: List selected data from all dunning-to-transactions that match the specified filter and search criteria in a specific sort order. Requires `collection` permission. Has dependencies on `dunning` and `transaction`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /dunning2transactions
- Summary: Create new dunning-to-transaction
- OperationId: createDunningToTransaction
- Description: Create a new dunning-to-transaction and return its persistent data. Requires writable `collection` permission. Has dependencies on `dunning` and `transaction`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/dunning2transactions

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/dunning2transactions
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /dunning2transactions/{ID}
- Summary: Delete dunning-to-transaction
- OperationId: deleteDunningToTransaction
- Description: Permanently delete an existing dunning-to-transaction by **`ID`**. Requires writable `collection` permission. Has dependencies on `dunning` and `transaction`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /dunning2transactions/{ID}
- Summary: Get dunning-to-transaction
- OperationId: getDunningToTransaction
- Description: Return the data of an existing dunning-to-transaction by **`ID`**. Requires `collection` permission. Has dependencies on `dunning` and `transaction`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/dunning2transactions
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /dunning2transactions/{ID}
- Summary: Check if dunning-to-transaction exists
- OperationId: existsDunningToTransaction
- Description: Check if a dunning-to-transaction with **`ID`** exists, but do not return its data. Requires `collection` permission. Has dependencies on `dunning` and `transaction`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /dunning2transactions/{ID}
- Summary: Update existing dunning-to-transaction
- OperationId: updateDunningToTransaction
- Description: Update an existing dunning-to-transaction by **`ID`** and return its persistent data. Requires writable `collection` permission. Has dependencies on `dunning` and `transaction`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/dunning2transactions

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/dunning2transactions
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: entities2channels
Entities-to-channels

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /entities2channels | List entities-to-channels |
| PUT | /entities2channels | Create new entity-to-channel |
| DELETE | /entities2channels/{ID} | Delete entity-to-channel |
| GET | /entities2channels/{ID} | Get entity-to-channel |
| HEAD | /entities2channels/{ID} | Check if entity-to-channel exists |
| PATCH | /entities2channels/{ID} | Update existing entity-to-channel |

### POST /entities2channels
- Summary: List entities-to-channels
- OperationId: listEntitiesToChannels
- Description: List selected data from all entities-to-channels that match the specified filter and search criteria in a specific sort order. Requires no specific permission. Has dependency on `channel`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /entities2channels
- Summary: Create new entity-to-channel
- OperationId: createEntityToChannel
- Description: Create a new entity-to-channel and return its persistent data. Requires no specific permission. Has dependency on `channel`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/entities2channels

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/entities2channels
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /entities2channels/{ID}
- Summary: Delete entity-to-channel
- OperationId: deleteEntityToChannel
- Description: Permanently delete an existing entity-to-channel by **`ID`**. Requires no specific permission. Has dependency on `channel`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /entities2channels/{ID}
- Summary: Get entity-to-channel
- OperationId: getEntityToChannel
- Description: Return the data of an existing entity-to-channel by **`ID`**. Requires no specific permission. Has dependency on `channel`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/entities2channels
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /entities2channels/{ID}
- Summary: Check if entity-to-channel exists
- OperationId: existsEntityToChannel
- Description: Check if an entity-to-channel with **`ID`** exists, but do not return its data. Requires no specific permission. Has dependency on `channel`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /entities2channels/{ID}
- Summary: Update existing entity-to-channel
- OperationId: updateEntityToChannel
- Description: Update an existing entity-to-channel by **`ID`** and return its persistent data. Requires no specific permission. Has dependency on `channel`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/entities2channels

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/entities2channels
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: events
Events

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /events | List events |
| PUT | /events | Create new event |
| DELETE | /events/{ID} | Delete event |
| GET | /events/{ID} | Get event |
| HEAD | /events/{ID} | Check if event exists |
| PATCH | /events/{ID} | Update existing event |

### POST /events
- Summary: List events
- OperationId: listEvents
- Description: List selected data from all events that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /events
- Summary: Create new event
- OperationId: createEvent
- Description: Create a new event and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/events

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/events
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /events/{ID}
- Summary: Delete event
- OperationId: deleteEvent
- Description: Permanently delete an existing event by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /events/{ID}
- Summary: Get event
- OperationId: getEvent
- Description: Return the data of an existing event by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/events
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /events/{ID}
- Summary: Check if event exists
- OperationId: existsEvent
- Description: Check if an event with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /events/{ID}
- Summary: Update existing event
- OperationId: updateEvent
- Description: Update an existing event by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/events

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/events
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: feedservers
Feed Servers

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /feedservers | List feed servers |
| PUT | /feedservers | Create new feed server |
| DELETE | /feedservers/{ID} | Delete feed server |
| GET | /feedservers/{ID} | Get feed server |
| HEAD | /feedservers/{ID} | Check if feed server exists |
| PATCH | /feedservers/{ID} | Update existing feed server |

### POST /feedservers
- Summary: List feed servers
- OperationId: listFeedServers
- Description: List selected data from all feed servers that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /feedservers
- Summary: Create new feed server
- OperationId: createFeedServer
- Description: Create a new feed server and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/feedservers

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/feedservers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /feedservers/{ID}
- Summary: Delete feed server
- OperationId: deleteFeedServer
- Description: Permanently delete an existing feed server by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /feedservers/{ID}
- Summary: Get feed server
- OperationId: getFeedServer
- Description: Return the data of an existing feed server by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/feedservers
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /feedservers/{ID}
- Summary: Check if feed server exists
- OperationId: existsFeedServer
- Description: Check if a feed server with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /feedservers/{ID}
- Summary: Update existing feed server
- OperationId: updateFeedServer
- Description: Update an existing feed server by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/feedservers

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/feedservers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: files
Files

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /files | List files |
| PUT | /files | Create new file |
| DELETE | /files/{ID} | Delete file |
| GET | /files/{ID} | Get file |
| HEAD | /files/{ID} | Check if file exists |
| PATCH | /files/{ID} | Update existing file |

### POST /files
- Summary: List files
- OperationId: listFiles
- Description: List selected data from all files that match the specified filter and search criteria in a specific sort order. Requires no specific permission. Has dependency on `record` or `comment`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /files
- Summary: Create new file
- OperationId: createFile
- Description: Create a new file and return its persistent data. Requires no specific permission. Has dependency on `record` or `comment`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/files

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/files
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /files/{ID}
- Summary: Delete file
- OperationId: deleteFile
- Description: Permanently delete an existing file by **`ID`**. Requires no specific permission. Has dependency on `record` or `comment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /files/{ID}
- Summary: Get file
- OperationId: getFile
- Description: Return the data of an existing file by **`ID`**. Requires no specific permission. Has dependency on `record` or `comment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/files
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /files/{ID}
- Summary: Check if file exists
- OperationId: existsFile
- Description: Check if a file with **`ID`** exists, but do not return its data. Requires no specific permission. Has dependency on `record` or `comment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /files/{ID}
- Summary: Update existing file
- OperationId: updateFile
- Description: Update an existing file by **`ID`** and return its persistent data. Requires no specific permission. Has dependency on `record` or `comment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/files

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/files
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: follows
Follows

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /follows | List follows |
| PUT | /follows | Create new follow |
| DELETE | /follows/{ID} | Delete follow |
| GET | /follows/{ID} | Get follow |
| HEAD | /follows/{ID} | Check if follow exists |
| PATCH | /follows/{ID} | Update existing follow |

### POST /follows
- Summary: List follows
- OperationId: listFollows
- Description: List selected data from all follows that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /follows
- Summary: Create new follow
- OperationId: createFollow
- Description: Create a new follow and return its persistent data. Requires the authenticated user to be the `creator`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/follows

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/follows
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /follows/{ID}
- Summary: Delete follow
- OperationId: deleteFollow
- Description: Permanently delete an existing follow by **`ID`**. Requires the authenticated user to be the `creator`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /follows/{ID}
- Summary: Get follow
- OperationId: getFollow
- Description: Return the data of an existing follow by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/follows
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /follows/{ID}
- Summary: Check if follow exists
- OperationId: existsFollow
- Description: Check if a follow with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /follows/{ID}
- Summary: Update existing follow
- OperationId: updateFollow
- Description: Update an existing follow by **`ID`** and return its persistent data. Requires the authenticated user to be the `creator`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/follows

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/follows
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: forks
Forks *(restricted read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /forks | List forks |
| GET | /forks/{ID} | Get fork |
| HEAD | /forks/{ID} | Check if fork exists |

### POST /forks
- Summary: List forks
- OperationId: listForks
- Description: List selected data from all forks that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /forks/{ID}
- Summary: Get fork
- OperationId: getFork
- Description: Return the data of an existing fork by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/forks
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /forks/{ID}
- Summary: Check if fork exists
- OperationId: existsFork
- Description: Check if a fork with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: general
General

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| GET | /config | Get system configuration |
| GET | /settings | Get application settings |

### GET /config
- Summary: Get system configuration
- OperationId: getConfig
- Description: Return the user-visible system configuration.

Parameters:
- (none)

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — object
- 401: #/components/responses/401
- 500: #/components/responses/500

### GET /settings
- Summary: Get application settings
- OperationId: getSettings
- Description: Return the settings of the application that was used for authentication.

Parameters:
- (none)

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — object
- 401: #/components/responses/401
- 403 — Forbidden
  - text/plain — string
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: groups
Groups *(restricted read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /groups | List groups |
| GET | /groups/{ID} | Get group |
| HEAD | /groups/{ID} | Check if group exists |

### POST /groups
- Summary: List groups
- OperationId: listGroups
- Description: List selected data from all groups that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /groups/{ID}
- Summary: Get group
- OperationId: getGroup
- Description: Return the data of an existing group by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/groups
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /groups/{ID}
- Summary: Check if group exists
- OperationId: existsGroup
- Description: Check if a group with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: groups2users
Groups-to-users *(admin read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /groups2users | List groups-to-users |
| GET | /groups2users/{ID} | Get group-to-user |
| HEAD | /groups2users/{ID} | Check if group-to-user exists |

### POST /groups2users
- Summary: List groups-to-users
- OperationId: listGroupsToUsers
- Description: List selected data from all groups-to-users that match the specified filter and search criteria in a specific sort order. Requires `admin` permission. Has dependency on `group` or `user`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /groups2users/{ID}
- Summary: Get group-to-user
- OperationId: getGroupToUser
- Description: Return the data of an existing group-to-user by **`ID`**. Requires `admin` permission. Has dependency on `group` or `user`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/groups2users
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /groups2users/{ID}
- Summary: Check if group-to-user exists
- OperationId: existsGroupToUser
- Description: Check if a group-to-user with **`ID`** exists, but do not return its data. Requires `admin` permission. Has dependency on `group` or `user`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: invitations
Invitations

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /invitations | List invitations |
| PUT | /invitations | Create new invitation |
| DELETE | /invitations/{ID} | Delete invitation |
| GET | /invitations/{ID} | Get invitation |
| HEAD | /invitations/{ID} | Check if invitation exists |
| PATCH | /invitations/{ID} | Update existing invitation |

### POST /invitations
- Summary: List invitations
- OperationId: listInvitations
- Description: List selected data from all invitations that match the specified filter and search criteria in a specific sort order. Requires `calendar` permission. Has dependency on `appointment`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /invitations
- Summary: Create new invitation
- OperationId: createInvitation
- Description: Create a new invitation and return its persistent data. Requires writable `calendar` permission. Has dependency on `appointment`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/invitations

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/invitations
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /invitations/{ID}
- Summary: Delete invitation
- OperationId: deleteInvitation
- Description: Permanently delete an existing invitation by **`ID`**. Requires writable `calendar` permission. Has dependency on `appointment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /invitations/{ID}
- Summary: Get invitation
- OperationId: getInvitation
- Description: Return the data of an existing invitation by **`ID`**. Requires `calendar` permission. Has dependency on `appointment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/invitations
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /invitations/{ID}
- Summary: Check if invitation exists
- OperationId: existsInvitation
- Description: Check if an invitation with **`ID`** exists, but do not return its data. Requires `calendar` permission. Has dependency on `appointment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /invitations/{ID}
- Summary: Update existing invitation
- OperationId: updateInvitation
- Description: Update an existing invitation by **`ID`** and return its persistent data. Requires writable `calendar` permission. Has dependency on `appointment`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/invitations

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/invitations
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: items
Items

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /items | List items |
| PUT | /items | Create new item |
| DELETE | /items/{ID} | Delete item |
| GET | /items/{ID} | Get item |
| HEAD | /items/{ID} | Check if item exists |
| PATCH | /items/{ID} | Update existing item |

### POST /items
- Summary: List items
- OperationId: listItems
- Description: List selected data from all items that match the specified filter and search criteria in a specific sort order. Requires `inventory` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /items
- Summary: Create new item
- OperationId: createItem
- Description: Create a new item and return its persistent data. Requires writable `inventory` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/items

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/items
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /items/{ID}
- Summary: Delete item
- OperationId: deleteItem
- Description: Permanently delete an existing item by **`ID`**. Requires writable `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /items/{ID}
- Summary: Get item
- OperationId: getItem
- Description: Return the data of an existing item by **`ID`**. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/items
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /items/{ID}
- Summary: Check if item exists
- OperationId: existsItem
- Description: Check if an item with **`ID`** exists, but do not return its data. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /items/{ID}
- Summary: Update existing item
- OperationId: updateItem
- Description: Update an existing item by **`ID`** and return its persistent data. Requires writable `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/items

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/items
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: ledgers
Ledgers

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /ledgers | List ledgers |
| PUT | /ledgers | Create new ledger |
| DELETE | /ledgers/{ID} | Delete ledger |
| GET | /ledgers/{ID} | Get ledger |
| HEAD | /ledgers/{ID} | Check if ledger exists |
| PATCH | /ledgers/{ID} | Update existing ledger |

### POST /ledgers
- Summary: List ledgers
- OperationId: listLedgers
- Description: List selected data from all ledgers that match the specified filter and search criteria in a specific sort order. Requires `payments` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /ledgers
- Summary: Create new ledger
- OperationId: createLedger
- Description: Create a new ledger and return its persistent data. Requires writable `payments` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/ledgers

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/ledgers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /ledgers/{ID}
- Summary: Delete ledger
- OperationId: deleteLedger
- Description: Permanently delete an existing ledger by **`ID`**. Requires writable `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /ledgers/{ID}
- Summary: Get ledger
- OperationId: getLedger
- Description: Return the data of an existing ledger by **`ID`**. Requires `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/ledgers
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /ledgers/{ID}
- Summary: Check if ledger exists
- OperationId: existsLedger
- Description: Check if a ledger with **`ID`** exists, but do not return its data. Requires `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /ledgers/{ID}
- Summary: Update existing ledger
- OperationId: updateLedger
- Description: Update an existing ledger by **`ID`** and return its persistent data. Requires writable `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/ledgers

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/ledgers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: likes
Likes

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /likes | List likes |
| PUT | /likes | Create new like |
| DELETE | /likes/{ID} | Delete like |
| GET | /likes/{ID} | Get like |
| HEAD | /likes/{ID} | Check if like exists |
| PATCH | /likes/{ID} | Update existing like |

### POST /likes
- Summary: List likes
- OperationId: listLikes
- Description: List selected data from all likes that match the specified filter and search criteria in a specific sort order. Requires no specific permission. Has dependency on `record`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /likes
- Summary: Create new like
- OperationId: createLike
- Description: Create a new like and return its persistent data. Requires the authenticated user to be the `creator`. Has dependency on `record`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/likes

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/likes
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /likes/{ID}
- Summary: Delete like
- OperationId: deleteLike
- Description: Permanently delete an existing like by **`ID`**. Requires the authenticated user to be the `creator`. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /likes/{ID}
- Summary: Get like
- OperationId: getLike
- Description: Return the data of an existing like by **`ID`**. Requires no specific permission. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/likes
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /likes/{ID}
- Summary: Check if like exists
- OperationId: existsLike
- Description: Check if a like with **`ID`** exists, but do not return its data. Requires no specific permission. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /likes/{ID}
- Summary: Update existing like
- OperationId: updateLike
- Description: Update an existing like by **`ID`** and return its persistent data. Requires the authenticated user to be the `creator`. Has dependency on `record`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/likes

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/likes
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: links
Links

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /links | List links |
| PUT | /links | Create new link |
| DELETE | /links/{ID} | Delete link |
| GET | /links/{ID} | Get link |
| HEAD | /links/{ID} | Check if link exists |
| PATCH | /links/{ID} | Update existing link |

### POST /links
- Summary: List links
- OperationId: listLinks
- Description: List selected data from all links that match the specified filter and search criteria in a specific sort order. Requires `links` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /links
- Summary: Create new link
- OperationId: createLink
- Description: Create a new link and return its persistent data. Requires writable `links` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/links

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/links
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /links/{ID}
- Summary: Delete link
- OperationId: deleteLink
- Description: Permanently delete an existing link by **`ID`**. Requires writable `links` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /links/{ID}
- Summary: Get link
- OperationId: getLink
- Description: Return the data of an existing link by **`ID`**. Requires `links` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/links
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /links/{ID}
- Summary: Check if link exists
- OperationId: existsLink
- Description: Check if a link with **`ID`** exists, but do not return its data. Requires `links` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /links/{ID}
- Summary: Update existing link
- OperationId: updateLink
- Description: Update an existing link by **`ID`** and return its persistent data. Requires writable `links` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/links

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/links
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: mailinglists
Mailing Lists

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /mailinglists | List mailing lists |
| PUT | /mailinglists | Create new mailing list |
| DELETE | /mailinglists/{ID} | Delete mailing list |
| GET | /mailinglists/{ID} | Get mailing list |
| HEAD | /mailinglists/{ID} | Check if mailing list exists |
| PATCH | /mailinglists/{ID} | Update existing mailing list |

### POST /mailinglists
- Summary: List mailing lists
- OperationId: listMailingLists
- Description: List selected data from all mailing lists that match the specified filter and search criteria in a specific sort order. Requires `mailinglists` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /mailinglists
- Summary: Create new mailing list
- OperationId: createMailingList
- Description: Create a new mailing list and return its persistent data. Requires writable `mailinglists` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/mailinglists

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/mailinglists
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /mailinglists/{ID}
- Summary: Delete mailing list
- OperationId: deleteMailingList
- Description: Permanently delete an existing mailing list by **`ID`**. Requires writable `mailinglists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /mailinglists/{ID}
- Summary: Get mailing list
- OperationId: getMailingList
- Description: Return the data of an existing mailing list by **`ID`**. Requires `mailinglists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/mailinglists
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /mailinglists/{ID}
- Summary: Check if mailing list exists
- OperationId: existsMailingList
- Description: Check if a mailing list with **`ID`** exists, but do not return its data. Requires `mailinglists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /mailinglists/{ID}
- Summary: Update existing mailing list
- OperationId: updateMailingList
- Description: Update an existing mailing list by **`ID`** and return its persistent data. Requires writable `mailinglists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/mailinglists

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/mailinglists
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: mailingrecipients
Mailing Recipients

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /mailingrecipients | List mailing recipients |
| PUT | /mailingrecipients | Create new mailing recipient |
| DELETE | /mailingrecipients/{ID} | Delete mailing recipient |
| GET | /mailingrecipients/{ID} | Get mailing recipient |
| HEAD | /mailingrecipients/{ID} | Check if mailing recipient exists |
| PATCH | /mailingrecipients/{ID} | Update existing mailing recipient |

### POST /mailingrecipients
- Summary: List mailing recipients
- OperationId: listMailingRecipients
- Description: List selected data from all mailing recipients that match the specified filter and search criteria in a specific sort order. Requires `messages` permission. Has dependency on `message`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /mailingrecipients
- Summary: Create new mailing recipient
- OperationId: createMailingRecipient
- Description: Create a new mailing recipient and return its persistent data. Requires writable `messages` permission. Has dependency on `message`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/mailingrecipients

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/mailingrecipients
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /mailingrecipients/{ID}
- Summary: Delete mailing recipient
- OperationId: deleteMailingRecipient
- Description: Permanently delete an existing mailing recipient by **`ID`**. Requires writable `messages` permission. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /mailingrecipients/{ID}
- Summary: Get mailing recipient
- OperationId: getMailingRecipient
- Description: Return the data of an existing mailing recipient by **`ID`**. Requires `messages` permission. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/mailingrecipients
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /mailingrecipients/{ID}
- Summary: Check if mailing recipient exists
- OperationId: existsMailingRecipients
- Description: Check if a mailing recipient with **`ID`** exists, but do not return its data. Requires `messages` permission. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /mailingrecipients/{ID}
- Summary: Update existing mailing recipient
- OperationId: updateMailingRecipient
- Description: Update an existing mailing recipient by **`ID`** and return its persistent data. Requires writable `messages` permission. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/mailingrecipients

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/mailingrecipients
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: mailservers
Mail Servers

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /mailservers | List mail servers |
| PUT | /mailservers | Create new mail server |
| DELETE | /mailservers/{ID} | Delete mail server |
| GET | /mailservers/{ID} | Get mail server |
| HEAD | /mailservers/{ID} | Check if mail server exists |
| PATCH | /mailservers/{ID} | Update existing mail server |

### POST /mailservers
- Summary: List mail servers
- OperationId: listMailServers
- Description: List selected data from all mail servers that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /mailservers
- Summary: Create new mail server
- OperationId: createMailServer
- Description: Create a new mail server and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/mailservers

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/mailservers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /mailservers/{ID}
- Summary: Delete mail server
- OperationId: deleteMailServer
- Description: Permanently delete an existing mail server by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /mailservers/{ID}
- Summary: Get mail server
- OperationId: getMailServer
- Description: Return the data of an existing mail server by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/mailservers
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /mailservers/{ID}
- Summary: Check if mail server exists
- OperationId: existsMailServer
- Description: Check if a mail server with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /mailservers/{ID}
- Summary: Update existing mail server
- OperationId: updateMailServer
- Description: Update an existing mail server by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/mailservers

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/mailservers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: messagereads
Message-reads

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /messagereads | List message-reads |
| PUT | /messagereads | Create new message-read |
| DELETE | /messagereads/{ID} | Delete message-read |
| GET | /messagereads/{ID} | Get message-read |
| HEAD | /messagereads/{ID} | Check if message-read exists |
| PATCH | /messagereads/{ID} | Update existing message-read |

### POST /messagereads
- Summary: List message-reads
- OperationId: listMessageReads
- Description: List selected data from all message-reads that match the specified filter and search criteria in a specific sort order. Requires `messages` permission. Has dependency on `message`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /messagereads
- Summary: Create new message-read
- OperationId: createMessageRead
- Description: Create a new message-read and return its persistent data. Requires writable `messages` permission and the authenticated user to be the `creator`. Has dependency on `message`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/messagereads

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/messagereads
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /messagereads/{ID}
- Summary: Delete message-read
- OperationId: deleteMessageRead
- Description: Permanently delete an existing message-read by **`ID`**. Requires writable `messages` permission and the authenticated user to be the `creator`. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /messagereads/{ID}
- Summary: Get message-read
- OperationId: getMessageRead
- Description: Return the data of an existing message-read by **`ID`**. Requires `messages` permission. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/messagereads
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /messagereads/{ID}
- Summary: Check if message-read exists
- OperationId: existsMessageRead
- Description: Check if a message-read with **`ID`** exists, but do not return its data. Requires `messages` permission. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /messagereads/{ID}
- Summary: Update existing message-read
- OperationId: updateMessageRead
- Description: Update an existing message-read by **`ID`** and return its persistent data. Requires writable `messages` permission and the authenticated user to be the `creator`. Has dependency on `message`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/messagereads

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/messagereads
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: messages
Messages

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /messages | List messages |
| PUT | /messages | Create new message |
| DELETE | /messages/{ID} | Delete message |
| GET | /messages/{ID} | Get message |
| HEAD | /messages/{ID} | Check if message exists |
| PATCH | /messages/{ID} | Update existing message |

### POST /messages
- Summary: List messages
- OperationId: listMessages
- Description: List selected data from all messages that match the specified filter and search criteria in a specific sort order. Requires `messages` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /messages
- Summary: Create new message
- OperationId: createMessage
- Description: Create a new message and return its persistent data. Requires writable `messages` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/messages

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/messages
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /messages/{ID}
- Summary: Delete message
- OperationId: deleteMessage
- Description: Permanently delete an existing message by **`ID`**. Requires writable `messages` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /messages/{ID}
- Summary: Get message
- OperationId: getMessage
- Description: Return the data of an existing message by **`ID`**. Requires `messages` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/messages
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /messages/{ID}
- Summary: Check if message exists
- OperationId: existsMessage
- Description: Check if a message with **`ID`** exists, but do not return its data. Requires `messages` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /messages/{ID}
- Summary: Update existing message
- OperationId: updateMessage
- Description: Update an existing message by **`ID`** and return its persistent data. Requires writable `messages` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/messages

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/messages
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: notes
Notes

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /notes | List notes |
| PUT | /notes | Create new note |
| DELETE | /notes/{ID} | Delete note |
| GET | /notes/{ID} | Get note |
| HEAD | /notes/{ID} | Check if note exists |
| PATCH | /notes/{ID} | Update existing note |

### POST /notes
- Summary: List notes
- OperationId: listNotes
- Description: List selected data from all notes that match the specified filter and search criteria in a specific sort order. Requires `notes` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /notes
- Summary: Create new note
- OperationId: createNote
- Description: Create a new note and return its persistent data. Requires writable `notes` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/notes

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/notes
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /notes/{ID}
- Summary: Delete note
- OperationId: deleteNote
- Description: Permanently delete an existing note by **`ID`**. Requires writable `notes` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /notes/{ID}
- Summary: Get note
- OperationId: getNote
- Description: Return the data of an existing note by **`ID`**. Requires `notes` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/notes
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /notes/{ID}
- Summary: Check if note exists
- OperationId: existsNote
- Description: Check if a note with **`ID`** exists, but do not return its data. Requires `notes` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /notes/{ID}
- Summary: Update existing note
- OperationId: updateNote
- Description: Update an existing note by **`ID`** and return its persistent data. Requires writable `notes` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/notes

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/notes
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: objects
Custom Objects

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /objects | List custom objects |
| PUT | /objects | Create new custom object |
| DELETE | /objects/{ID} | Delete custom object |
| GET | /objects/{ID} | Get custom object |
| HEAD | /objects/{ID} | Check if custom object exists |
| PATCH | /objects/{ID} | Update existing custom object |

### POST /objects
- Summary: List custom objects
- OperationId: listObjects
- Description: List selected data from all custom objects that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /objects
- Summary: Create new custom object
- OperationId: createObject
- Description: Create a new custom object and return its persistent data. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/objects

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/objects
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /objects/{ID}
- Summary: Delete custom object
- OperationId: deleteObject
- Description: Permanently delete an existing custom object by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /objects/{ID}
- Summary: Get custom object
- OperationId: getObject
- Description: Return the data of an existing custom object by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/objects
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /objects/{ID}
- Summary: Check if custom object exists
- OperationId: existsObject
- Description: Check if a custom object with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /objects/{ID}
- Summary: Update existing custom object
- OperationId: updateObject
- Description: Update an existing custom object by **`ID`** and return its persistent data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/objects

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/objects
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: opportunities
Opportunities

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /opportunities | List opportunities |
| PUT | /opportunities | Create new opportunity |
| DELETE | /opportunities/{ID} | Delete opportunity |
| GET | /opportunities/{ID} | Get opportunity |
| HEAD | /opportunities/{ID} | Check if opportunity exists |
| PATCH | /opportunities/{ID} | Update existing opportunity |

### POST /opportunities
- Summary: List opportunities
- OperationId: listOpportunities
- Description: List selected data from all opportunities that match the specified filter and search criteria in a specific sort order. Requires `opportunities` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /opportunities
- Summary: Create new opportunity
- OperationId: createOpportunity
- Description: Create a new opportunity and return its persistent data. Requires writable `opportunities` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/opportunities

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/opportunities
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /opportunities/{ID}
- Summary: Delete opportunity
- OperationId: deleteOpportunity
- Description: Permanently delete an existing opportunity by **`ID`**. Requires writable `opportunities` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /opportunities/{ID}
- Summary: Get opportunity
- OperationId: getOpportunity
- Description: Return the data of an existing opportunity by **`ID`**. Requires `opportunities` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/opportunities
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /opportunities/{ID}
- Summary: Check if opportunity exists
- OperationId: existsOpportunity
- Description: Check if an opportunity with **`ID`** exists, but do not return its data. Requires `opportunities` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /opportunities/{ID}
- Summary: Update existing opportunity
- OperationId: updateOpportunity
- Description: Update an existing opportunity by **`ID`** and return its persistent data. Requires writable `opportunities` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/opportunities

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/opportunities
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: participants
Participants

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /participants | List participants |
| PUT | /participants | Create new participant |
| DELETE | /participants/{ID} | Delete participant |
| GET | /participants/{ID} | Get participant |
| HEAD | /participants/{ID} | Check if participant exists |
| PATCH | /participants/{ID} | Update existing participant |

### POST /participants
- Summary: List participants
- OperationId: listParticipants
- Description: List selected data from all participants that match the specified filter and search criteria in a specific sort order. Requires `mailinglists` or `campaigns` permission. Has dependency on `mailinglist` or `campaign`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /participants
- Summary: Create new participant
- OperationId: createParticipant
- Description: Create a new participant and return its persistent data. Requires writable `mailinglists` or `campaigns` permission. Has dependency on `mailinglist` or `campaign`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/participants

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/participants
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /participants/{ID}
- Summary: Delete participant
- OperationId: deleteParticipant
- Description: Permanently delete an existing participant by **`ID`**. Requires writable `mailinglists` or `campaigns` permission. Has dependency on `mailinglist` or `campaign`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /participants/{ID}
- Summary: Get participant
- OperationId: getParticipant
- Description: Return the data of an existing participant by **`ID`**. Requires `mailinglists` or `campaigns` permission. Has dependency on `mailinglist` or `campaign`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/participants
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /participants/{ID}
- Summary: Check if participant exists
- OperationId: existsParticipant
- Description: Check if a participant with **`ID`** exists, but do not return its data. Requires `mailinglists` or `campaigns` permission. Has dependency on `mailinglist` or `campaign`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /participants/{ID}
- Summary: Update existing participant
- OperationId: updateParticipant
- Description: Update an existing participant by **`ID`** and return its persistent data. Requires writable `mailinglists` or `campaigns` permission. Has dependency on `mailinglist` or `campaign`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/participants

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/participants
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: payments
Payments

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /payments | List payments |
| PUT | /payments | Create new payment |
| DELETE | /payments/{ID} | Delete payment |
| GET | /payments/{ID} | Get payment |
| HEAD | /payments/{ID} | Check if payment exists |
| PATCH | /payments/{ID} | Update existing payment |

### POST /payments
- Summary: List payments
- OperationId: listPayments
- Description: List selected data from all payments that match the specified filter and search criteria in a specific sort order. Requires `payments` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /payments
- Summary: Create new payment
- OperationId: createPayment
- Description: Create a new payment and return its persistent data. Requires writable `payments` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/payments

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/payments
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /payments/{ID}
- Summary: Delete payment
- OperationId: deletePayment
- Description: Permanently delete an existing payment by **`ID`**. Requires writable `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /payments/{ID}
- Summary: Get payment
- OperationId: getPayment
- Description: Return the data of an existing payment by **`ID`**. Requires `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/payments
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /payments/{ID}
- Summary: Check if payment exists
- OperationId: existsPayment
- Description: Check if a payment with **`ID`** exists, but do not return its data. Requires `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /payments/{ID}
- Summary: Update existing payment
- OperationId: updatePayment
- Description: Update an existing payment by **`ID`** and return its persistent data. Requires writable `payments` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/payments

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/payments
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: permissions
Permissions *(admin read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /permissions | List permissions |
| GET | /permissions/{ID} | Get permission |
| HEAD | /permissions/{ID} | Check if permission exists |

### POST /permissions
- Summary: List permissions
- OperationId: listPermissions
- Description: List selected data from all permissions that match the specified filter and search criteria in a specific sort order. Requires `admin` permission. Has dependency on `group`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /permissions/{ID}
- Summary: Get permission
- OperationId: getPermission
- Description: Return the data of an existing permission by **`ID`**. Requires `admin` permission. Has dependency on `group`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/permissions
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /permissions/{ID}
- Summary: Check if permission exists
- OperationId: existsPermission
- Description: Check if a permission with **`ID`** exists, but do not return its data. Requires `admin` permission. Has dependency on `group`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: pricelists
Price Lists

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /pricelists | List price lists |
| PUT | /pricelists | Create new price list |
| DELETE | /pricelists/{ID} | Delete price list |
| GET | /pricelists/{ID} | Get price list |
| HEAD | /pricelists/{ID} | Check if price list exists |
| PATCH | /pricelists/{ID} | Update existing price list |

### POST /pricelists
- Summary: List price lists
- OperationId: listPriceLists
- Description: List selected data from all price lists that match the specified filter and search criteria in a specific sort order. Requires `pricelists` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /pricelists
- Summary: Create new price list
- OperationId: createPriceList
- Description: Create a new price list and return its persistent data. Requires writable `pricelists` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/pricelists

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/pricelists
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /pricelists/{ID}
- Summary: Delete price list
- OperationId: deletePriceList
- Description: Permanently delete an existing price list by **`ID`**. Requires writable `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /pricelists/{ID}
- Summary: Get price list
- OperationId: getPriceList
- Description: Return the data of an existing price list by **`ID`**. Requires `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/pricelists
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /pricelists/{ID}
- Summary: Check if price list exists
- OperationId: existsPriceList
- Description: Check if a price list with **`ID`** exists, but do not return its data. Requires `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /pricelists/{ID}
- Summary: Update existing price list
- OperationId: updatePriceList
- Description: Update an existing price list by **`ID`** and return its persistent data. Requires writable `pricelists` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/pricelists

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/pricelists
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: pricelists2accounts
Pricelists-to-accounts

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /pricelists2accounts | List pricelists-to-accounts |
| PUT | /pricelists2accounts | Create new price |
| DELETE | /pricelists2accounts/{ID} | Delete price |
| GET | /pricelists2accounts/{ID} | Get price |
| HEAD | /pricelists2accounts/{ID} | Check if price exists |
| PATCH | /pricelists2accounts/{ID} | Update existing price |

### POST /pricelists2accounts
- Summary: List pricelists-to-accounts
- OperationId: listPriceListsToAccounts
- Description: List selected data from all pricelists-to-accounts that match the specified filter and search criteria in a specific sort order. Requires `pricelists` or `accounts` permission. Has dependencies on `pricelist` and `account`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /pricelists2accounts
- Summary: Create new price
- OperationId: createPriceListToAccount
- Description: Create a new price and return its persistent data. Requires writable `pricelists` or `accounts` permission. Has dependencies on `pricelist` and `account`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/pricelists2accounts

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/pricelists2accounts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /pricelists2accounts/{ID}
- Summary: Delete price
- OperationId: deletePriceListToAccount
- Description: Permanently delete an existing price by **`ID`**. Requires writable `pricelists` or `accounts` permission. Has dependencies on `pricelist` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /pricelists2accounts/{ID}
- Summary: Get price
- OperationId: getPriceListToAccount
- Description: Return the data of an existing price by **`ID`**. Requires `pricelists` or `accounts` permission. Has dependencies on `pricelist` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/pricelists2accounts
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /pricelists2accounts/{ID}
- Summary: Check if price exists
- OperationId: existsPriceListToAccount
- Description: Check if a price with **`ID`** exists, but do not return its data. Requires `pricelists` or `accounts` permission. Has dependencies on `pricelist` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /pricelists2accounts/{ID}
- Summary: Update existing price
- OperationId: updatePriceListToAccount
- Description: Update an existing price by **`ID`** and return its persistent data. Requires writable `pricelists` or `accounts` permission. Has dependencies on `pricelist` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/pricelists2accounts

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/pricelists2accounts
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: prices
Prices

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /prices | List prices |
| PUT | /prices | Create new price |
| DELETE | /prices/{ID} | Delete price |
| GET | /prices/{ID} | Get price |
| HEAD | /prices/{ID} | Check if price exists |
| PATCH | /prices/{ID} | Update existing price |

### POST /prices
- Summary: List prices
- OperationId: listPrices
- Description: List selected data from all prices that match the specified filter and search criteria in a specific sort order. Requires `inventory` or `pricelists` permission. Has dependencies on `items` and `pricelist`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /prices
- Summary: Create new price
- OperationId: createPrice
- Description: Create a new price and return its persistent data. Requires writable `inventory` or `pricelists` permission. Has dependencies on `items` and `pricelist`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/prices

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/prices
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /prices/{ID}
- Summary: Delete price
- OperationId: deletePrice
- Description: Permanently delete an existing price by **`ID`**. Requires writable `inventory` or `pricelists` permission. Has dependencies on `items` and `pricelist`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /prices/{ID}
- Summary: Get price
- OperationId: getPrice
- Description: Return the data of an existing price by **`ID`**. Requires `inventory` or `pricelists` permission. Has dependencies on `items` and `pricelist`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/prices
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /prices/{ID}
- Summary: Check if price exists
- OperationId: existsPrice
- Description: Check if a price with **`ID`** exists, but do not return its data. Requires `inventory` or `pricelists` permission. Has dependencies on `items` and `pricelist`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /prices/{ID}
- Summary: Update existing price
- OperationId: updatePrice
- Description: Update an existing price by **`ID`** and return its persistent data. Requires writable `inventory` or `pricelists` permission. Has dependencies on `items` and `pricelist`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/prices

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/prices
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: projects
Projects

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /projects | List projects |
| PUT | /projects | Create new project |
| DELETE | /projects/{ID} | Delete project |
| GET | /projects/{ID} | Get project |
| HEAD | /projects/{ID} | Check if project exists |
| PATCH | /projects/{ID} | Update existing project |

### POST /projects
- Summary: List projects
- OperationId: listProjects
- Description: List selected data from all projects that match the specified filter and search criteria in a specific sort order. Requires `projects` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /projects
- Summary: Create new project
- OperationId: createProject
- Description: Create a new project and return its persistent data. Requires writable `projects` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/projects

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/projects
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /projects/{ID}
- Summary: Delete project
- OperationId: deleteProject
- Description: Permanently delete an existing project by **`ID`**. Requires writable `projects` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /projects/{ID}
- Summary: Get project
- OperationId: getProject
- Description: Return the data of an existing project by **`ID`**. Requires `projects` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/projects
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /projects/{ID}
- Summary: Check if project exists
- OperationId: existsProject
- Description: Check if a project with **`ID`** exists, but do not return its data. Requires `projects` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /projects/{ID}
- Summary: Update existing project
- OperationId: updateProject
- Description: Update an existing project by **`ID`** and return its persistent data. Requires writable `projects` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/projects

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/projects
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: records
Records

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /records | List records |
| PUT | /records | Create new record |
| DELETE | /records/{ID} | Delete record |
| GET | /records/{ID} | Get record |
| HEAD | /records/{ID} | Check if record exists |
| PATCH | /records/{ID} | Update existing record |

### POST /records
- Summary: List records
- OperationId: listRecords
- Description: List selected data from all records that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /records
- Summary: Create new record
- OperationId: createRecord
- Description: Create a new record and return its persistent data. Requires the authenticated user to be the `creator`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/records

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/records
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /records/{ID}
- Summary: Delete record
- OperationId: deleteRecord
- Description: Permanently delete an existing record by **`ID`**. Requires the authenticated user to be the `creator`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /records/{ID}
- Summary: Get record
- OperationId: getRecord
- Description: Return the data of an existing record by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/records
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /records/{ID}
- Summary: Check if record exists
- OperationId: existsRecord
- Description: Check if a record with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /records/{ID}
- Summary: Update existing record
- OperationId: updateRecord
- Description: Update an existing record by **`ID`** and return its persistent data. Requires the authenticated user to be the `creator`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/records

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/records
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: relateditems
Related Items

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /relateditems | List related items |
| PUT | /relateditems | Create new related item |
| DELETE | /relateditems/{ID} | Delete related item |
| GET | /relateditems/{ID} | Get related item |
| HEAD | /relateditems/{ID} | Check if related item exists |
| PATCH | /relateditems/{ID} | Update existing related item |

### POST /relateditems
- Summary: List related items
- OperationId: listRelatedItems
- Description: List selected data from all related items that match the specified filter and search criteria in a specific sort order. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /relateditems
- Summary: Create new related item
- OperationId: createRelatedItem
- Description: Create a new related item and return its persistent data. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/relateditems

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/relateditems
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /relateditems/{ID}
- Summary: Delete related item
- OperationId: deleteRelatedItem
- Description: Permanently delete an existing related item by **`ID`**. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /relateditems/{ID}
- Summary: Get related item
- OperationId: getRelatedItem
- Description: Return the data of an existing related item by **`ID`**. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/relateditems
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /relateditems/{ID}
- Summary: Check if related item exists
- OperationId: existsRelatedItem
- Description: Check if a related item with **`ID`** exists, but do not return its data. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /relateditems/{ID}
- Summary: Update existing related item
- OperationId: updateRelatedItem
- Description: Update an existing related item by **`ID`** and return its persistent data. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/relateditems

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/relateditems
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: resources
Resources *(developer read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /resources | List resources |
| GET | /resources/{ID} | Get resource |
| HEAD | /resources/{ID} | Check if resource exists |

### POST /resources
- Summary: List resources
- OperationId: listResources
- Description: List selected data from all resources that match the specified filter and search criteria in a specific sort order. Requires `dev` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /resources/{ID}
- Summary: Get resource
- OperationId: getResource
- Description: Return the data of an existing resource by **`ID`**. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/resources
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /resources/{ID}
- Summary: Check if resource exists
- OperationId: existsResource
- Description: Check if an resource with **`ID`** exists, but do not return its data. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: services
Services *(developer read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /services | List services |
| GET | /services/{ID} | Get service |
| HEAD | /services/{ID} | Check if service exists |

### POST /services
- Summary: List services
- OperationId: listServices
- Description: List selected data from all services that match the specified filter and search criteria in a specific sort order. Requires `dev` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /services/{ID}
- Summary: Get service
- OperationId: getService
- Description: Return the data of an existing service by **`ID`**. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/services
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /services/{ID}
- Summary: Check if service exists
- OperationId: existsService
- Description: Check if an service with **`ID`** exists, but do not return its data. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: stocktransactions
Stock Transactions

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /stocktransactions | List stock transactions |
| PUT | /stocktransactions | Create new stock transaction |
| DELETE | /stocktransactions/{ID} | Delete stock transaction |
| GET | /stocktransactions/{ID} | Get stock transaction |
| HEAD | /stocktransactions/{ID} | Check if stock transaction exists |
| PATCH | /stocktransactions/{ID} | Update existing stock transaction |

### POST /stocktransactions
- Summary: List stock transactions
- OperationId: listStockTransactions
- Description: List selected data from all stock transactions that match the specified filter and search criteria in a specific sort order. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /stocktransactions
- Summary: Create new stock transaction
- OperationId: createStockTransaction
- Description: Create a new stock transaction and return its persistent data. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/stocktransactions

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/stocktransactions
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /stocktransactions/{ID}
- Summary: Delete stock transaction
- OperationId: deleteStockTransaction
- Description: Permanently delete an existing stock transaction by **`ID`**. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /stocktransactions/{ID}
- Summary: Get stock transaction
- OperationId: getStockTransaction
- Description: Return the data of an existing stock transaction by **`ID`**. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/stocktransactions
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /stocktransactions/{ID}
- Summary: Check if stock transaction exists
- OperationId: existsStockTransaction
- Description: Check if a stock transaction with **`ID`** exists, but do not return its data. Requires `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /stocktransactions/{ID}
- Summary: Update existing stock transaction
- OperationId: updateStockTransaction
- Description: Update an existing stock transaction by **`ID`** and return its persistent data. Requires writable `inventory` permission. Has dependency on `item`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/stocktransactions

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/stocktransactions
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: storages
Storages

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /storages | List storages |
| PUT | /storages | Create new storage |
| DELETE | /storages/{ID} | Delete storage |
| GET | /storages/{ID} | Get storage |
| HEAD | /storages/{ID} | Check if storage exists |
| PATCH | /storages/{ID} | Update existing storage |

### POST /storages
- Summary: List storages
- OperationId: listStorages
- Description: List selected data from all storages that match the specified filter and search criteria in a specific sort order. Requires `inventory` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /storages
- Summary: Create new storage
- OperationId: createStorage
- Description: Create a new storage and return its persistent data. Requires writable `inventory` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/storages

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/storages
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /storages/{ID}
- Summary: Delete storage
- OperationId: deleteStorage
- Description: Permanently delete an existing storage by **`ID`**. Requires writable `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /storages/{ID}
- Summary: Get storage
- OperationId: getStorage
- Description: Return the data of an existing storage by **`ID`**. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/storages
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /storages/{ID}
- Summary: Check if storage exists
- OperationId: existsStorage
- Description: Check if a storage with **`ID`** exists, but do not return its data. Requires `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /storages/{ID}
- Summary: Update existing storage
- OperationId: updateStorage
- Description: Update an existing storage by **`ID`** and return its persistent data. Requires writable `inventory` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/storages

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/storages
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: suppliers
Suppliers

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /suppliers | List suppliers |
| PUT | /suppliers | Create new supplier |
| DELETE | /suppliers/{ID} | Delete supplier |
| GET | /suppliers/{ID} | Get supplier |
| HEAD | /suppliers/{ID} | Check if supplier exists |
| PATCH | /suppliers/{ID} | Update existing supplier |

### POST /suppliers
- Summary: List suppliers
- OperationId: listSuppliers
- Description: List selected data from all suppliers that match the specified filter and search criteria in a specific sort order. Requires `inventory` or `accounts` permission. Has dependencies on `items` and `account`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /suppliers
- Summary: Create new supplier
- OperationId: createSupplier
- Description: Create a new supplier and return its persistent data. Requires writable `inventory` or `accounts` permission. Has dependencies on `items` and `account`.

Parameters:
- (none)

Request body:
- #/components/requestBodies/suppliers

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/suppliers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /suppliers/{ID}
- Summary: Delete supplier
- OperationId: deleteSupplier
- Description: Permanently delete an existing supplier by **`ID`**. Requires writable `inventory` or `accounts` permission. Has dependencies on `items` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /suppliers/{ID}
- Summary: Get supplier
- OperationId: getSupplier
- Description: Return the data of an existing supplier by **`ID`**. Requires `inventory` or `accounts` permission. Has dependencies on `items` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/suppliers
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /suppliers/{ID}
- Summary: Check if supplier exists
- OperationId: existsSupplier
- Description: Check if a supplier with **`ID`** exists, but do not return its data. Requires `inventory` or `accounts` permission. Has dependencies on `items` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /suppliers/{ID}
- Summary: Update existing supplier
- OperationId: updateSupplier
- Description: Update an existing supplier by **`ID`** and return its persistent data. Requires writable `inventory` or `accounts` permission. Has dependencies on `items` and `account`.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/suppliers

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/suppliers
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: tasks
Tasks

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /tasks | List tasks |
| PUT | /tasks | Create new task |
| DELETE | /tasks/{ID} | Delete task |
| GET | /tasks/{ID} | Get task |
| HEAD | /tasks/{ID} | Check if task exists |
| PATCH | /tasks/{ID} | Update existing task |

### POST /tasks
- Summary: List tasks
- OperationId: listTasks
- Description: List selected data from all tasks that match the specified filter and search criteria in a specific sort order. Requires `tasks` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /tasks
- Summary: Create new task
- OperationId: createTask
- Description: Create a new task and return its persistent data. Requires writable `tasks` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/tasks

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/tasks
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /tasks/{ID}
- Summary: Delete task
- OperationId: deleteTask
- Description: Permanently delete an existing task by **`ID`**. Requires writable `tasks` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /tasks/{ID}
- Summary: Get task
- OperationId: getTask
- Description: Return the data of an existing task by **`ID`**. Requires `tasks` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/tasks
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /tasks/{ID}
- Summary: Check if task exists
- OperationId: existsTask
- Description: Check if a task with **`ID`** exists, but do not return its data. Requires `tasks` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /tasks/{ID}
- Summary: Update existing task
- OperationId: updateTask
- Description: Update an existing task by **`ID`** and return its persistent data. Requires writable `tasks` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/tasks

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/tasks
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: tickets
Tickets

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /tickets | List tickets |
| PUT | /tickets | Create new ticket |
| DELETE | /tickets/{ID} | Delete ticket |
| GET | /tickets/{ID} | Get ticket |
| HEAD | /tickets/{ID} | Check if ticket exists |
| PATCH | /tickets/{ID} | Update existing ticket |

### POST /tickets
- Summary: List tickets
- OperationId: listTickets
- Description: List selected data from all tickets that match the specified filter and search criteria in a specific sort order. Requires `tickets` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /tickets
- Summary: Create new ticket
- OperationId: createTicket
- Description: Create a new ticket and return its persistent data. Requires writable `tickets` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/tickets

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/tickets
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /tickets/{ID}
- Summary: Delete ticket
- OperationId: deleteTicket
- Description: Permanently delete an existing ticket by **`ID`**. Requires writable `tickets` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /tickets/{ID}
- Summary: Get ticket
- OperationId: getTicket
- Description: Return the data of an existing ticket by **`ID`**. Requires `tickets` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/tickets
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /tickets/{ID}
- Summary: Check if ticket exists
- OperationId: existsTicket
- Description: Check if a ticket with **`ID`** exists, but do not return its data. Requires `tickets` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /tickets/{ID}
- Summary: Update existing ticket
- OperationId: updateTicket
- Description: Update an existing ticket by **`ID`** and return its persistent data. Requires writable `tickets` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/tickets

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/tickets
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: transactions
Transactions

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /transactions | List transactions |
| PUT | /transactions | Create new transaction |
| DELETE | /transactions/{ID} | Delete transaction |
| GET | /transactions/{ID} | Get transaction |
| HEAD | /transactions/{ID} | Check if transaction exists |
| PATCH | /transactions/{ID} | Update existing transaction |

### POST /transactions
- Summary: List transactions
- OperationId: listTransactions
- Description: List selected data from all transactions that match the specified filter and search criteria in a specific sort order. Requires `billing`, `procurement` or `production` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### PUT /transactions
- Summary: Create new transaction
- OperationId: createTransaction
- Description: Create a new transaction and return its persistent data. Requires writable `billing`, `procurement` or `production` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/transactions

Responses:
- 201 — Successful Creation (Created)
  - application/json — #/components/schemas/transactions
- 401: #/components/responses/401
- 403: #/components/responses/403
- 409 — ID Present (Conflict)
- 410 — Gone
- 500: #/components/responses/500

### DELETE /transactions/{ID}
- Summary: Delete transaction
- OperationId: deleteTransaction
- Description: Permanently delete an existing transaction by **`ID`**. Requires writable `billing`, `procurement` or `production` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- (none)

Responses:
- 204 — Successful Deletion (No Content)
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Not Deletable (Conflict)
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

### GET /transactions/{ID}
- Summary: Get transaction
- OperationId: getTransaction
- Description: Return the data of an existing transaction by **`ID`**. Requires `billing`, `procurement` or `production` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/transactions
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /transactions/{ID}
- Summary: Check if transaction exists
- OperationId: existsTransaction
- Description: Check if a transaction with **`ID`** exists, but do not return its data. Requires `billing`, `procurement` or `production` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

### PATCH /transactions/{ID}
- Summary: Update existing transaction
- OperationId: updateTransaction
- Description: Update an existing transaction by **`ID`** and return its persistent data. Requires writable `billing`, `procurement` or `production` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Match
- #/components/parameters/If-Unmodified-Since

Request body:
- #/components/requestBodies/transactions

Responses:
- 200 — Successful Update (OK)
  - application/json — #/components/schemas/transactions
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 409 — Non-matching ID (Conflict)
- 410 — Gone
- 412 — Non-matching ETag (Precondition Failed)
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: users
Users *(restricted read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /users | List users |
| GET | /users/{ID} | Get user |
| HEAD | /users/{ID} | Check if user exists |

### POST /users
- Summary: List users
- OperationId: listUsers
- Description: List selected data from all users that match the specified filter and search criteria in a specific sort order. Requires no specific permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /users/{ID}
- Summary: Get user
- OperationId: getUser
- Description: Return the data of an existing user by **`ID`**. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/users
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /users/{ID}
- Summary: Check if user exists
- OperationId: existsUser
- Description: Check if a user with **`ID`** exists, but do not return its data. Requires no specific permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500

---

# ZeyOS Standard REST API (v1)

## Tag: weblets
Weblets *(developer read-only)*

## Spec
- /__doc/openapi/api.json

## Servers
- https://cloud.zeyos.com/{INSTANCE}/api/v1 — ZeyOS Cloud

## Authentication
- oauth (oauth2) — OAuth 2.0 Authorization ([RFC 6749](https://tools.ietf.org/html/rfc6749)); use the **[ZeyOS OAuth 2.0 API](https://developers.zeyos.com/oauth2) `POST /oauth2/v1/token`** to obtain a valid bearer token
- token (http) — HTTP Bearer Authentication ([RFC 6750](https://tools.ietf.org/html/rfc6750))
- session (apiKey) — Session Cookie Authentication ([RFC 6265](https://tools.ietf.org/html/rfc6265))

## Endpoints
| Method | Path | Summary |
| ------ | ---- | ------- |
| POST | /weblets | List weblets |
| GET | /weblets/{ID} | Get weblet |
| HEAD | /weblets/{ID} | Check if weblet exists |

### POST /weblets
- Summary: List weblets
- OperationId: listWeblets
- Description: List selected data from all weblets that match the specified filter and search criteria in a specific sort order. Requires `dev` permission.

Parameters:
- (none)

Request body:
- #/components/requestBodies/list

Responses:
- 200 — OK
  - application/json — array
- 401: #/components/responses/401
- 403: #/components/responses/403
- 500: #/components/responses/500

### GET /weblets/{ID}
- Summary: Get weblet
- OperationId: getWeblet
- Description: Return the data of an existing weblet by **`ID`**. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/expand
- #/components/parameters/extdata
- #/components/parameters/tags
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 200 — OK
  - application/json — #/components/schemas/weblets
- 304 — Not Modified
- 401: #/components/responses/401
- 403: #/components/responses/403
- 404 — Not Found
- 500: #/components/responses/500

### HEAD /weblets/{ID}
- Summary: Check if weblet exists
- OperationId: existsWeblet
- Description: Check if an weblet with **`ID`** exists, but do not return its data. Requires `dev` permission.

Parameters:
- #/components/parameters/ID
- #/components/parameters/If-Modified-Since
- #/components/parameters/If-None-Match

Request body:
- (none)

Responses:
- 204: #/components/responses/204-exists
- 304 — Not Modified
- 401: #/components/responses/401
- 404 — Not Found
- 500: #/components/responses/500
