Your 14 days started later than you think. Both of them.
For goods, the consumer’s period runs from delivery, not from the order. Your refund deadline runs from the declaration, not from the parcel coming back. Revokeflow computes both from the facts of the contract and shows which article each date comes from.
500 cases a month on the free tier. Plain REST, no SDK required.
Both bars are fourteen days long. They end 7 days apart because they start 7 days apart — which is the whole of the difference between a compliant deadline and a short one.
Why this is hard
Two clocks, running in opposite directions.
The consumer’s clock and the trader’s clock are governed by different articles and start on different events, and almost every order-management system conflates them. One counts down to when a withdrawal may still be declared; the other counts down to when the money must be back.
A system that starts the consumer’s period at the order shortens a statutory right by however long shipping took. A system that starts the refund period when the goods arrive makes every refund late by however long the consumer took to post them. Both errors are invisible until somebody complains, and by then the dates that would have settled it were never recorded.
Neither is difficult arithmetic. What is difficult is having the facts — delivery dates, declaration times, whether the consumer was actually informed — written down at the moment they were true, which is why this service is a record first and a calculator second.
How it works
Record the facts. Get the dates.
Open the case at conclusion
One POST when the contract is made, carrying the dates: concluded, delivered, and whether the consumer was informed of the right in time. Those three decide everything that follows, and they cannot be recovered later.
Give the consumer the button
Each case gets a withdrawal page addressed by a secret token. No account, no login, no confirmation dialog — (EU) 2023/2673 requires a function the consumer can actually operate, and friction in front of it is the practice it exists to end.
We hold you to the deadlines
The refund clock starts when the consumer declares, not when the parcel arrives. The dashboard sorts by what is overdue, and every document you issue records its own SHA-256 so the consumer's copy stays verifiable.
{
"case": {
"state": "DECLARED",
"withdrawalPeriod": {
"startsAt": "2026-03-09T14:30:00.000Z",
"expiresAt": "2026-03-23T23:59:59.999Z",
"isOpen": true,
"daysRemaining": 5,
"basis": "Art. 9(2)(b) — delivery of the goods"
},
"obligation": {
"refundDueAt": "2026-04-01T23:59:59.999Z",
"refundOverdue": false,
"mayWithhold": true,
"explanation": "You may withhold the refund until the
goods arrive or the consumer supplies proof of
return — whichever comes first (Art. 13(3))."
},
"portalUrl": "https://.../w/acme/ORD-10024?t=…"
}
}The rules we implement
Four decisions, each one testable.
The clock starts at delivery, for goods
Article 9(2)(b): the period runs from the day the consumer receives the goods — the last item, where an order arrives in parts. Using the order date is the most common error and it shortens the period by exactly the shipping time. This service refuses to compute a goods period without a delivery date rather than quietly falling back to the order.
Fourteen days from the declaration, not the return
Article 13(1) gives the trader fourteen days from being informed of the withdrawal. Waiting for the parcel and then starting the count is how refunds become late. You may withhold the money under Article 13(3) — but only until the goods arrive or proof of return is supplied, whichever comes first, and that second half is the one traders forget.
Not informing does not remove the right
Article 10 extends the period by twelve months where the consumer was not told about it. It is not a technicality that lapses; it is a year-long right. And if the information is finally supplied during that year, the ordinary fourteen days run from that moment — Article 10(2).
An exemption you cannot evidence is not an exemption
"Digital content, no refunds" is a standard line in terms and is usually wrong: Article 16(1)(m) applies only where the consumer gave prior express consent, acknowledged losing the right, was sent confirmation on a durable medium, and performance has begun. All four. This service records a refusal only when each condition is asserted, and tells you which is missing when it is not.
The documents
A copy the consumer keeps, and you cannot quietly change.
The directive requires certain things to be given to the consumer on a durable medium — the Annex I.B model form, an acknowledgement that a withdrawal was received. A PDF alone does not achieve that, because the trader could always reissue a different one.
So every document we render is hashed at the moment of issue and the SHA-256 recorded. A document cannot contain its own hash, so it carries the reference and issue instant that address the register entry. If a consumer’s copy has been altered by so much as one character, it no longer matches.
Where this stands
New service. Not legal advice.
The engine is covered by a suite that states each rule as a scenario someone would actually argue about: the period that starts at the last parcel, the year-long extension for want of information, the fourteen days that run from the declaration, and the exemption that fails because one of its four conditions was never met.
What we will not claim: that using this makes a refusal lawful. Member states implement the directive with their own variations, national enforcement differs, and whether a particular case holds is a question for a lawyer. We compute the dates the directive specifies and show which article each one comes from.