Changelog
Recent updates, new features, and improvements to the RevKeen platform.
Stay up to date with everything we ship. Major releases are announced on our blog — this page covers the full history.
September 2026
metadata.created_via is reserved on payment links
created_viain payment-linkmetadatais now set only by RevKeen. It records where a link was created.- If you send it on
POST /v2/payment-linksor when updating a link, it is dropped without an error. The rest of yourmetadatais stored as before. See Checkout Links.
No available payment method now returns 503 instead of 500
POST /v2/checkout-sessionsandPOST /v2/cart-sessions/{id}/convertnow return503withcode: "NO_PAYMENT_METHODS_AVAILABLE"when you have no online payment method enabled and live for the checkout, or none that can collect its currency. They previously returned an undocumented500.- No session is created and the cart stays
open. Enable a payment method in Settings → Payments, then retry. Other errors, and successful responses, are unchanged.
Retired: order create, order pay and tax-rate endpoints
POST /v2/orders,POST /v2/orders/{id}/payand the five/v2/tax-ratesendpoints are removed. They were not part of the published API reference, returned an error on every request since they were introduced, and never created, paid for or stored anything.- Orders are created when a checkout is paid. Listing, retrieving, updating, cancelling and fulfilling orders is unchanged.
- The
orders_createMCP tool is removed with them. It was never exposed to connected apps.
A new subscription takes its price's currency (behaviour change)
POST /v2/subscriptionswith nocurrencynow creates the subscription in its price's currency. It previously storedUSDwhatever the price was priced in. If the price has no currency, your default currency (Settings → Regional) is used.- A
currencythat differs from the price's currency is now rejected with400, because the subscription renews at the price's amount and RevKeen does not convert between currencies. Leavecurrencyout, or send the price's own. - The published OpenAPI no longer shows
USDas a default for this field.
Omitted currency uses your default currency (behaviour change)
- A
/v2request that leaves outcurrencynow uses your default currency, the one you choose in Settings → Regional. It previously usedUSD. - This covers creating checkout sessions, payment intents and products, ad-hoc
price_dataon payment links, and the external product sync endpoints. The published OpenAPI no longer showsUSDas a default for these fields. - Sending
currencyexplicitly is unchanged, and is still the clearest way to be certain which currency a record gets. On payment links, the link's currency comes from its products; the top-levelcurrencyfield is not used.
September 2026 documentation update
Reviewed on 5 September: the guides now distinguish hosted checkout V13 from hosted invoice V6, document approved-origin checkout embedding, correct Cart SDK calls and usage deduplication behavior, and explain customer-scoped portal sessions. Start with checkout integration, usage integration, and portal integration.
Client releases have their own availability. Consult the release matrix before adopting candidate CLI or regenerated SDK methods. This documentation update does not declare an unpublished package or a beta integration generally available.
August 2026
Canonical API error contract (breaking for error-code branching)
403responses now carrytype: authorization_error. They were previously typedauthentication_error, so401and403can finally be told apart from the body alone.- Error codes are lower-snake-case throughout.
IP_NOT_ALLOWEDis nowip_not_allowed; the full401and403vocabularies are listed on Errors. - Every
401now returns aWWW-Authenticate: Bearer realm="revkeen-api"challenge header. - Every
429now returns a deterministicRetry-Afterin whole seconds, andX-RateLimit-Resetis a UNIX timestamp in seconds (it previously emitted milliseconds, contradicting the documented contract). 403scope denials no longer echo the granted scopes of the presented key.- The
unkey_key_idfield is removed from Cart API key status responses.idis the stable public identifier for a Cart key.
Checkout V13 multi-rail hosted checkout
- Hosted checkout collects card, Direct Debit, and wallets (Apple Pay / Google Pay) when those rails are enabled for the merchant.
- Invoice payers land on the hosted invoice page at
/i/{token}instead of hopping to a generic checkout link. - The public embed bundle at
https://releases.revkeen.com/embed/v1/checkout.jsmounts Direct Debit capture and a cart drawer on merchant sites. Hosted checkout can also be mounted in an approved-origin iframe; see the embed guide for callback limitations.
Direct Debit day-2
- Mandate request, Active-status gate, advance notice, collections, and indemnity handling are documented in the Direct Debit section, including emails and the customer, invoice, and checkout starting points.
- Customer portal can list mandates, cancel, and run change-of-bank with OTP.
Apps Marketplace
- Integrations install from Apps → Marketplace, not Settings.
- Slack, Linear, HubSpot, PracticeHub, Quaderno, Terminal, Messaging, Cart, and Customer Intelligence are in the catalog. Xero and QuickBooks Online remain in development and are not installable.
Official SDK release channels
- Current availability and source locations are on Official SDKs.
- TypeScript:
npm install @revkeen/sdk(npm · GitHub). - Go: canonical module
github.com/revkeen/sdk-go; reviewed public tag pending (GitHub). - PHP: generated source is on GitHub; supported package channel coming soon.
- There is no Python SDK.
July 2026
Direct Debit mandate journey
- Hosted Bacs mandate requests with London & Zurich bureau submission.
- Statuses: Awaiting setup, Submitted, Active, Failed, Suspended, Cancelled.
- Do not collect until the mandate is Active.
Usage meters in the dashboard
- Merchants manage meters under Products → Meters.
- Customer-facing balances use
GET /v2/usage/balance. A dedicated usage-analytics dashboard is not live.
June 2026
Stripe-class API keys — full key lifecycle
- Scope enforcement — keys are scoped and scopes are enforced on every request; a read-only key can never move money.
- IP allowlists — restrict a key to specific IPs/CIDR ranges; off-allowlist requests return
403 IP_NOT_ALLOWED. - Zero-downtime rolling — rotate a key with an overlap window (default 24h, up to 168h) so you can cut dependents over with no downtime.
- Last-used + inventory — see when each key was last used and which keys have gone stale (90+ days).
- Audit trail — every key event (created / rolled / revoked) is recorded with actor and timestamp.
- Immediate, durable revocation — revoked keys stop authenticating right away and stay blocked through restarts.
- See Authentication → Key lifecycle & security.
Linear and HubSpot via Nango
- Merchants connect Linear (workflow issue create) and HubSpot (read-only CRM context) through Nango OAuth from the Apps Marketplace.
March 2026
AI Copilot — Proactive Intelligence & Processing-Cost Tools
- MCP customer-v1 tools available as a governed, read-only billing surface
- Proactive alerts for processing-cost changes, churn risk, and dunning opportunities
- Wording updated 27 Sep 2026 (rule 21). Processing-cost figures cover recorded Direct Debit collection costs only; card processing fees are not recorded.
- Natural language queries across invoices, subscriptions, and revenue data
- Full-page chat interface in dashboard with visual output
Marketing Site Rework
- 5 new product pages: Payments, Billing, Intelligence, Platform, Future
- Interactive savings calculator on homepage and pricing page
- PostHog page view and CTA tracking across all pages
Search & Indexing
- Full-text search indexing for customers, invoices, and products
- Background indexing via cron-worker with BullMQ queue
February 2026
clientId → merchantId Rename
- Standardised internal naming:
clientId→merchantIdacross 8 database tables - Checkout context updated:
CheckoutContext.client→.merchant - Migration
20260208200000applied to production
Customer Health Scores
- AI-powered health scoring (0–100) for every customer
- Factors: payment history, engagement, revenue trend, dispute rate
- Health score column added to customer list and detail views
January 2026
Usage-Based Billing
- Meter creation and usage event ingestion API
- Support for sum, count, max, and unique aggregation types
- Usage-based line items on invoices with configurable billing periods
Terminal Payments — PAX A920
- Full POS connector architecture: Cloud ↔ Tauri Connector ↔ PAX Terminal
- Device registration, pairing, and heartbeat monitoring
- In-person sale, refund, and void operations via dashboard and API
- Real-time payment status via SSE
December 2025
Platform Launch
- Engine-API on AWS ECS Fargate (Frankfurt)
- PostgreSQL 18 on RDS with row-level security
- Dashboard and Checkout on Vercel (global edge)
- Cron-worker and background services on Hetzner
Core Billing Engine
- Products with one-time, recurring, and usage-based pricing
- Subscription lifecycle: trials, grace periods, proration, cancellation
- Invoice pipeline: draft → open → finalized → paid
- AI-powered dunning with configurable retry schedules
Payment Processing
- NMI gateway integration with gateway-agnostic adapter layer
- Card-on-file and merchant-initiated transaction compliance
- Unified transaction model: sale, refund, void, capture, dispute
- Pay by Bank / open banking collection is not a live merchant checkout rail. Do not treat the December 2025 launch note as a current product claim.
Developer Tools
- REST API under
/v2/* - Generated TypeScript, Go, and PHP SDK source; see current SDK availability
- Webhook event types with signature verification
- Interactive API playground powered by fumadocs-openapi
- MCP server for AI agent billing automation
Integrations
- PracticeHub (patients, packages, appointments sync)
- Slack notifications
- Quaderno tax automation
- Xero and QuickBooks Online accounting sync was announced at launch and remains in development. It is not installable from the Apps Marketplace.