Rieck for developers

Build it into
your own system.

The whole journey — invoice, payment, reminders and collection — runs on API calls. Your customers see your own interface; we work underneath it.

  • Test keys and sandbox
  • Signed webhooks
  • OpenAPI and TypeScript SDK
The integration

Five calls, and the whole journey runs inside your own system.

Customers & invoices

The order closes on your side — the invoice is out a second later

In the same request you create the customer, if it does not already exist, and the invoice, which gets its sequential number, is locked as a PDF and goes out on your own letterhead. Your order number travels along as the external reference, so you can always get from our id back to yours.

  • The customer is created in the same call — no register to keep in sync
  • The idempotency key is built on your own order number
  • The response carries amounts, balance and status — what your system stores
POST/v1/invoices?issue=true&send=true
curl -X POST "https://api.rieckflow.com/v1/invoices?issue=true&send=true" \
  -H "Authorization: Bearer $RIECK_API_KEY" \
  -H "Idempotency-Key: invoice-order-2041" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": { "type": "company", "name": "Acme ApS", "cvr": "12345678" },
    "lines": [{ "description": "Konsulentbistand", "quantity": 1,
                "unitPriceOere": 125000, "vatRateBps": 2500 }],
    "dueDate": "2026-08-18",
    "externalReference": "order-2041"
  }'
Responseinvoices:write
{
  "data": {
    "id": "9b2f1c1e-…", "invoiceNumber": 1042, "status": "issued",
    "grossOere": 156250, "paidOere": 0, "balanceOere": 156250,
    "externalReference": "order-2041"
  },
  "meta": { "send": { "outcome": "queued" } }
}
The payment

The customer pays without leaving your interface

The payment link points at a window that is cookie-free — so you can put it in an iframe in the middle of your own product instead of sending people away. The payment is registered on the invoice, and you can read the balance back immediately.

  • The payment code can be read out over the phone and typed in manually
  • The balance travels with the response, so you can show it in your own UI
  • The receipt is fetched on its own route once the payment is registered
POST/v1/invoices/{id}/payment-link
curl -X POST https://api.rieckflow.com/v1/invoices/9b2f1c1e-…/payment-link \
  -H "Authorization: Bearer $RIECK_API_KEY" \
  -H "Idempotency-Key: paylink-order-2041"
Responsepayments:write
{
  "data": {
    "url": "https://pay.rieckflow.com/p/RIE-7K3M2-Q9F4P",
    "paymentCode": "RIE-7K3M2-Q9F4P",
    "reference": "order-2041",
    "balanceOere": 156250
  }
}
Reminders & collection

The unpaid claim keeps moving on its own

The reminder flow is yours — steps, wording and deadlines live as a versioned flow you control through the API. If it still goes unpaid, the invoice becomes a collection case at the law firm with one call, and the case hangs on the invoice you already know.

  • The reminder flow is versioned: approved, activated, and revertible
  • The case is tied to the invoice — you do not open one alongside it
  • If the call is rejected because the claim is not collection-ready, the reason is machine-readable
POST/v1/invoices/{id}/collect
curl -X POST https://api.rieckflow.com/v1/invoices/9b2f1c1e-…/collect \
  -H "Authorization: Bearer $RIECK_API_KEY" \
  -H "Idempotency-Key: collect-order-2041"
Responsecases:write
{
  "data": {
    "caseId": "5f0a91b7-2c44-4a1e-9d0b-8b2a6c31d551",
    "caseNumber": "10042",
    "status": "OPRETTET",
    "invoiceId": "9b2f1c1e-6b87-4d9b-91a0-47c8d72b8440"
  }
}
The test environment

Finish the integration before it touches a real customer

The key’s environment is in the prefix: rk_test_ never touches a real debtor. And because the whole process is dates — due, reminders, collection readiness — you can wind the clock forward and see day 40 in your own integration without waiting a month for it.

  • Same routes, same responses, same webhooks as in production
  • The clock is advanced per organisation, not globally
  • Test data cannot end up in a real letter
POST /v1/test/advance-clock
  • 201invoice.issued · invoice 1042
  • 200clock advanced 30 days
  • 201invoice.overdue · invoice 1042
  • 201invoice.collections · case 10042
Webhooks

Your system is told — it does not have to ask

Events are delivered to your endpoint, signed with HMAC-SHA256 in the standardwebhooks format, and retried on failure. Use webhook-id as your dedup key, then fetch the invoice as the truth before you open or close anything on your side.

  • The secret rotates without downtime: two signatures during the overlap
  • The sequence number is per source — gaps are legal, duplicates never are
  • Deliveries can be replayed after your endpoint has been down
Delivery headers
  • webhook-idmsg_2f1c1e6b874d9b91
  • webhook-timestamp1786134344
  • webhook-signaturev1,Zm9vYmFy…
Events on the invoice track
  • invoice.issued
  • invoice.sent
  • invoice.paid
  • invoice.overdue
  • invoice.credited
  • invoice.collections
  • payment.received

The documentation is the next step.

API access and SSO come with Advanced. Keys are issued by an organisation administrator in the portal.