---
title: "Connect Apple Calendar or ABRA Flexi with credentials in the request body; google-calendar and fakturoid are OAuth-only (integration_unsupported)"
method: POST
path: "/v1/integrations"
---

# Connect Apple Calendar or ABRA Flexi with credentials in the request body; google-calendar and fakturoid are OAuth-only (integration_unsupported)

`POST /v1/integrations`

## Request

- Base URL: `https://volai.cz`
- URL: `https://volai.cz/v1/integrations`
- Auth: HTTP bearer

Connects Apple Calendar or ABRA FlexiBee with credentials in the body. Google Calendar and Fakturoid only have a browser OAuth flow (the `connectUrl` link from `GET /v1/integrations`) - sending their `provider` here returns `integration_unsupported`. Takes `Idempotency-Key`; even without it, a repeat call with the same credentials is effectively idempotent - the existing record is found by the provider and the account the credentials belong to (for Apple the login name, for ABRA the server address and company); `label` is just a display name and gets overwritten on a repeat call.

## Headers

- `Idempotency-Key` string

## Request body

- union
  - object
    - `provider` 'apple-calendar', required: Credential-based provider: apple-calendar or abra-flexi. Google Calendar and Fakturoid require the browser OAuth URL from GET /v1/integrations.
    - `label` string: Optional display name for the connection. Reconnecting the same account updates this label.
    - `username` string, required: Provider login name: Apple account email or ABRA Flexi username.
    - `appPassword` string, required: Apple app-specific password. Supply securely in the request body; never include it in logs or URLs.
    - `calendarUrl` string, uri: Optional calendar URL from iCloud discovery to select when multiple calendars are available.
  - object
    - `provider` 'abra-flexi', required: Credential-based provider: apple-calendar or abra-flexi. Google Calendar and Fakturoid require the browser OAuth URL from GET /v1/integrations.
    - `label` string: Optional display name for the connection. Reconnecting the same account updates this label.
    - `baseUrl` string, uri, required: HTTPS address of the ABRA Flexi server. The hostname must be enabled by volai support.
    - `company` string, required: ABRA Flexi company identifier on that server, not the display label.
    - `username` string, required: Provider login name: Apple account email or ABRA Flexi username.
    - `password` string, required: ABRA Flexi password. Supply securely in the request body; never include it in logs or URLs.

## Response `200`

Connected integration without credentials or internal owner IDs

- object
  - `integration` object, required
    - `id` string, required
    - `provider` 'google-calendar' | 'apple-calendar' | 'fakturoid' | 'abra-flexi', required
    - `kind` 'calendar' | 'invoices', required
    - `label` string, required
    - `accountLabel` string
    - `createdAt` number, required
    - `updatedAt` number, required
    - `lastVerifiedAt` number
    - `lastError` string

## Other responses

- `400`: Error codes: validation (request), integration_unsupported (request), integration_invalid_provider (service), integration_invalid_calendar (request).
- `401`: Error codes: unauthorized (request).
- `403`: Error codes: account_suspended (account).
- `404`: Error codes: integration_not_found (account).
- `409`: Error codes: idempotency_in_progress (busy), integration_unauthorized (account), integration_read_only (account), integration_busy (busy).
- `429`: Error codes: rate_limited (busy).
- `500`: Error codes: internal_error (service), integration_storage_error (service).
- `502`: Error codes: integration_provider_error (service), integration_invalid_provider_response (service).

---

[API](https://skmtc.dev/volai/apis/volai-rest-api.md) · [All operations](https://skmtc.dev/volai/apis/volai-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/volai/apis/volai-rest-api/revisions/12029b05e2fa?raw)
