---
title: "A transaction was imported"
method: POST
path: "transaction.imported"
---

# A transaction was imported

`POST transaction.imported` (webhook)

A new transaction was stored: by bank sync or by a CSV/manual statement import. Sent only for transactions GET /v1/transactions/{id} serves: never a hidden transaction, a duplicate or one on a deleted account. Booked and pending transactions both arrive; `status` says which.

## Headers

- `Dynt-Signature` string, required
- `Dynt-Event-Id` string, required
- `Dynt-Event-Type` 'transaction.imported', required

## Payload

- object
  - `id` string, required: Event id, evt_…; the same on every retry. Deduplicate on it.
  - `type` 'transaction.imported', required
  - `created_at` string, required: When the change happened (RFC 3339, UTC).
  - `api_version` 'v1', required
  - `data` object, required
    - `object` object, required: A bank transaction, booked or pending (see status). Hidden transactions, duplicates and transactions of deleted accounts are never returned.
      - `id` string, required
      - `account_id` string, required
      - `status` 'booked' | 'pending', required: pending: any status the bank has not booked yet.
      - `date` string, required: The booking date.
      - `date_time` string, date-time, required: The booking instant; the `from`/`to` filters and the list order use it.
      - `amount` string, required: Signed amount in `currency`: positive is money in, negative is money out.
      - `direction` 'credit' | 'debit', required: credit: amount >= 0; debit: amount < 0.
      - `currency` string, required
      - `eur_amount` string, nullable, required: Decimal amount as a string with the currency's own decimals (ISO 4217: 2 for EUR, 0 for JPY, 3 for BHD, 4 for CLF), e.g. "1234.50"; eur_amount always has 2.
      - `fx_rate` string, nullable, required: The stored exchange rate used for eur_amount, as a decimal string; null when none is stored.
      - `description` string, nullable, required: The bank's own text for the transaction, or the entered description.
      - `merchant` object, nullable, required
        - `id` string, required
        - `name` string, required
      - `category` object, nullable, required
        - `id` string, required
        - `name` string, required
        - `group` 'revenue' | 'cost' | 'internal', required
      - `sub_category` object, nullable, required
        - `id` string, required
        - `name` string, required
      - `movement_type` 'payment' | 'refund' | 'chargeback' | 'transfer' | 'fx' | 'fee' | 'topup' | 'interest' | 'owner_contribution' | 'owner_withdrawal' | 'other', nullable, required: What kind of bank movement this is, when known.
      - `accounting_status` string, required: The row's bookkeeping review state in Dynt.
      - `proof_status` string, required: Whether the transaction has its receipts in Dynt.
      - `source` 'gocardless' | 'manual', required
      - `proofs` object[], required
        - `id` string, required
        - `filename` string, required
        - `content_type` string, required
        - `size_bytes` integer, nullable, required: File size in bytes; null when unknown.
        - `created_at` string, date-time, required: When the file was attached.
      - `updated_at` string, date-time, required: RFC 3339 date-time in UTC.

## Acknowledgement `2XX`

Received. Any other answer, or none within 10 seconds, is retried.

---

[API](https://skmtc.dev/dynt/apis/dynt-api.md) · [All operations](https://skmtc.dev/dynt/apis/dynt-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dynt/apis/dynt-api/revisions/35825587b87b?raw)
