Valverna

Transactions

List transactions

Read transaction records from any connected payment platform. Every transaction follows the same unified schema — camelCase fields, monetary amounts as integer minor units.

Endpoint

GET /v1/transactions

List transactions for a business, ordered by timestamp descending (newest first). Works with both credential types: an app vlv_ token is already scoped to one business; a personal vlvk_ key can be pinned to one business or use businessId to select one.

Query parameters

limit optional
1–50, default 25.
startAfter optional
Keyset cursor: the id of the last transaction from the previous page. Omit for the first page.
businessId optional
Owner-wide personal keys — which of your businesses to list. Omit for business-pinned keys and app access tokens; if provided, it must match the credential's business or the request fails 403 forbidden.

Response 200

{
  "data": [
    {
      "id": "txn_a1b2c3d4",
      "schemaVersion": "2.1",
      "profileId": "se-receipt-1",
      "documentTier": "receipt",
      "type": "sale",
      "settled": true,
      "receiptNumber": "R-2026-004521",
      "timestamp": "2026-05-12T14:32:15+02:00",
      "createdAt": "2026-05-12T12:32:18Z",
      "currency": "SEK",
      "vendor": { "id": "vendor_abc123", "name": "Kaffekoppen Södermalm",  },
      "items": [
        { "name": "Cappuccino", "quantity": 2, "unitPrice": 4900, "amount": 9800, "taxRate": 6, "taxCategory": "S", "taxAmount": 555 }
      ],
      "tax": {
        "scheme": "SE_MOMS",
        "pricesIncludeTax": true,
        "summary": [
          { "rate": 6, "category": "S", "label": "Moms 6%", "taxableAmount": 9245, "taxAmount": 555 }
        ]
      },
      "totals": { "subtotal": 9800, "discount": 0, "tax": 555, "total": 9800 },
      "payment": { "method": "card", "last4": "4242" },
      "extensions": { "se": {  } },
      "source": { "platform": "izettle", "externalId": "iz_pay_9f8e7d6c", "syncedAt": "2026-05-12T12:32:18Z" }
    }
  ],
  "hasMore": true,
  "nextCursor": "txn_a1b2c3d4"
}

Pagination

Pagination is keyset-based. Each response includes a nextCursor — simply the id of the last transaction in the page — which you pass as startAfter on the next request. When hasMore is false (and nextCursor is null), you've reached the end. There is no offset and no total count.

Next page

GET /v1/transactions?limit=25&startAfter=txn_a1b2c3d4

Cursors are plain transaction ids — stable and safe to persist, so a sync job can resume days later from where it stopped.