What Customers keep
Open in
Whatever ends a product, its Customers keep the same things: notice, service until the close, their records, their unspent money and receipts that still verify.
Each step runs whether the seller acts or the platform acts for it. Filled: what a Customer sees. The point marks money returned.
The floor no file lowers
Each line holds whatever the file says, so a Customer reads the same promise on every product.
| What a Customer keeps | For how long |
|---|---|
| Notice of the close | At least 30 days, or the rest of a signed commitment if longer |
| Every paid call served | Until the close; a sunset stops new sign-ups, never a paying Customer |
| Its records | Exported from the portal or by its API until the close and 30 days after |
| Unspent credits | Refunded to the card that paid them, at the close |
| Funds held for work not delivered | Returned in full: held funds are never paid out before delivery |
| A prepaid period | Refunded for the days after the close |
| Its receipts | Verifying against the seller's keys, kept listed for 7 years |
Refunds come from the seller's Stripe balance; held funds sit apart from it, so they are there to return.
Four ways a product ends
The way differs; what a Customer keeps does not.
| The product | Who acts | What changes for a Customer |
|---|---|---|
| Is sunset by its seller | The seller, by Product.sunset | Nothing until the close, then the steps above |
| Is transferred | The two workspaces | Nothing: the same Host, Keys, prices and receipts |
| Leaves APIs.Dev | The seller, by Product.export | Nothing if the seller serves it elsewhere on the same Domain; else a sunset |
| Has a seller that cannot act | The platform, by a wind-down | The steps above, run by the platform on the seller's behalf |
A seller cannot act when its workspace closes for cause, or when it stops answering for 30 days while its product owes work or money. A wind-down follows the seller's own published rules, with the shortest notice they allow.
Ninety days of notice
The weekly brief gives its members 90 days' notice, three times the floor.
import { define, generative } from 'apis.dev'
/** A weekly brief on the software companies that changed headcount, for members and their agents. */
export default define({
name: 'briefs', domain: 'briefs.apis.dev',
sources: {
firms: { api: 'companyfacts.apis.dev', cost: { 'Company.search': 0.005 } },
},
Issue: {
week: 'string!#', title: 'string', body: 'markdown',
status: {
draft: { run: generative('This week in {firms}: who hired, who shrank') },
review: { in: 'drafted', role: 'editor' },
publish: { in: 'reviewed', role: 'editor' },
send: { in: 'published', to: 'Member' },
},
},
on: { 'every Mon 06: 00': 'Issue.draft', 'Issue.published': 'Issue.send' },
offer: {
'Issue.list': 0, 'Issue.read': 0.25,
Member: { month: 8, includes: { 'Issue.read': 'all' } },
},
operate: { sunset: '90d' },
})Each member's Watch receives the notice the day the sunset starts, with what it keeps.
{
"id": "evt_90",
"type": "Product.sunsetting",
"at": "2026-10-28T09: 00: 00Z",
"data": {
"closes": "2027-01-26",
"export": "https: //briefs.apis.dev/ dashboard/ export",
"exportUntil": "2027-02-25",
"refunds": { "credits": 3.75, "period": 4.27, "currency": "USD" },
"receiptKeys": "https: //briefs.apis.dev/ .well-known/ receipt-keys"
}
}A buyer's agent reads the same close date on the offer card, which says sunsetting, and its policy moves its mandates to another seller.
A product may end; what its Customers paid for, made and were promised does not end with it.
Bring an existing business
Import an OpenAPI file into your file, and Stripe customers, subscriptions, members and Keys into the product, each tried dry first and undone within 7 days.
Definition and compile
One file becomes a checked, versioned Definition that every Interface, price and record reads, and every change arrives as its diff.