[Intum Pomoc](https://intum.pl/pomoc.md) / [API](https://intum.pl/pomoc/konto/api.md)

# [Crony konta](https://intum.pl/pomoc/konto/api/crony.md)

Tworzenie, aktualizacja, usuwanie, listowanie i ręczne uruchamianie cronów konta (cyklicznych zadań) przez API.

**Autoryzacja:** `Authorization: Bearer TOKEN` - token musi mieć uprawnienie **crons** (domyślnie admin/owner)
**Content-Type:** `application/json; charset=utf-8`

## API Endpoints

| Metoda | Ścieżka | Opis |
|--------|---------|------|
| GET | `/account/crons.json` | Lista cronów konta |
| GET | `/account/crons/:id.json` | Pojedynczy cron |
| POST | `/account/crons.json` | Utworzenie crona |
| PATCH | `/account/crons/:id.json` | Aktualizacja crona |
| DELETE | `/account/crons/:id.json` | Usunięcie crona |
| POST | `/account/crons/:id/run.json` | Ręczne uruchomienie (kolejkuje wykonanie w tle) |

## Pola crona

| Pole | Typ | Wymagane | Opis |
|------|-----|----------|------|
| `kind` | string | tak | Rodzaj akcji: `voip_reports` (przeliczenie raportów VoIP), `helpdesk_reports` (dzienne przeliczenie raportów Helpdesk + snapshoty), `flow` (uruchomienie przepływu Connect::Flow), `app` (uruchomienie akcji cron_action zainstalowanej aplikacji Connect::App) |
| `schedule` | string | tak | Harmonogram w formacie cron, np. `"0 3 * * *"` (codziennie o 3:00). Opcjonalnie ze strefą czasową: `"0 3 * * * Europe/Warsaw"` |
| `target_code` | string | dla `kind: flow` / `app` | Cel akcji: dla `flow` kod przepływu (Connect::Flow), dla `app` kind aplikacji (np. `"service/getresponse_ma_app"`) |
| `name` | string | nie | Własna nazwa crona (bez niej wyświetlana jest nazwa akcji) |
| `active` | boolean | nie | Czy cron jest aktywny (domyślnie `true`); nieaktywny cron nie jest uruchamiany |

Pola tylko do odczytu w odpowiedzi:

- `next_run_at` - termin następnego uruchomienia (wyliczany automatycznie z harmonogramu)
- `last_run_at` - data ostatniego wykonania
- `last_status` - wynik ostatniego wykonania: `"ok"` albo `"error: ..."`

Zasady:

- Akcje systemowe (`voip_reports`, `helpdesk_reports`) mogą istnieć na koncie tylko raz - drugi POST z tym samym `kind` zwróci błąd walidacji
- Cronów `kind: flow` / `kind: app` może być wiele, każdy z innym `target_code`
- Crony raportowe zakładają się automatycznie przy utworzeniu raportu Insight, a crony aplikacji przy zapisie aktywnej appki z `cron_action` - zwykle nie trzeba ich tworzyć ręcznie

## Format requestu

### POST - Utworzenie crona uruchamiającego Flow

```
POST /account/crons.json
Authorization: Bearer TOKEN
Content-Type: application/json; charset=utf-8
```

```json
{
  "cron": {
    "kind": "flow",
    "target_code": "moj_flow",
    "schedule": "0 * * * *",
    "active": true
  }
}
```

Odpowiedź `201 Created` zawiera utworzony rekord razem z wyliczonym `next_run_at`.

### PATCH - Zmiana harmonogramu

Wysyłasz tylko pola, które chcesz zmienić - `next_run_at` przeliczy się automatycznie.

```json
{
  "cron": {
    "schedule": "0 5 * * *"
  }
}
```

### POST - Ręczne uruchomienie

```
POST /account/crons/123/run.json
Authorization: Bearer TOKEN
```

Odpowiedź `200 OK`. Wykonanie jest kolejkowane w tle - wynik pojawi się po chwili w `last_run_at` / `last_status` (sprawdź GET-em).

### Błąd walidacji (422 Unprocessable Content)

```json
{
  "schedule": ["jest nieprawidłowe"]
}
```

Klucze to nazwy pól, wartości to tablice komunikatów błędów.

## Powiązane

- [common_api](https://app.intum.pl/noe/prompt/common_api.md) - wspólne zasady API (format, autoryzacja, odpowiedzi)
- [connector_flow_api](https://app.intum.pl/noe/prompt/connector_flow_api.md) - API przepływów (Connect::Flow), których kody podajesz w `target_code`