Terms of service
Effective 4 September 2026.
1. Who this is between, and what Spinwait is
These terms are an agreement between you and the operator of Spinwait, named in section 11. They apply whether you show the placement, buy it, or both.
Spinwait is a two-sided advertising network. One side runs a client that draws a single labelled sponsored line in an AI coding assistant. The other side prepays a balance and bids for that line. The words below mean the same thing everywhere on this page:
- publisher
- Someone running the Spinwait client on their own machine, who earns when the placement is shown.
- advertiser
- Someone who funds a balance and runs campaigns that bid for the placement.
- placement
- The one sponsored row the client draws: a label, a brand, a tagline and a domain. Never more than one row.
- impression
- One billable rendering of the placement, redeemed against a single-use token the server signed.
- click
- A visit recorded server side when someone follows the placement through the Spinwait redirect.
- balance
- Money already settled and held on your account. An advertiser spends it down. A publisher earns it up.
The client is open source under Apache-2.0 and you can read every line of it. These terms cover the service, meaning the auction, the billing, the ledger and the payouts, and they do not change the licence of the code. The licence governs what you may do with the software; this page governs what happens when you point that software at Spinwait's servers.
2. Accounts
A publisher account has no password. The client generates a key on first run, keeps it on your machine, and that key is the account. There is no way to look it up and no way to reissue it, so if you lose it you lose the balance attached to it. Look after it, and treat anyone holding it as you.
An email address is optional at publisher registration and exists only so we can reach you. Registration works with the field left blank, and nothing else in the product asks for it.
An advertiser account is created with an email address and a password of at least eight characters, and it also holds an API key for the command line. The same rule applies to that key: whoever has it can spend your balance.
Registration is rate limited to three accounts per network address per 24 hours, counting publishers and advertisers together. Every other limit in this product is per account, so unlimited accounts would multiply all of them. If you are behind a shared address and hit this, get in touch.
One person, one account per role. Running several publisher accounts to multiply the per-publisher caps, or several advertiser accounts to multiply the per-advertiser frequency cap, is a breach of these terms even where the limit above did not stop you.
We may suspend an account for invalid traffic or for a payment dispute. A suspended publisher serves no ads, earns nothing further, and cannot withdraw. A suspended advertiser has their campaigns paused and serves nothing. Suspension is a state on the account, not a deletion: the balance and the ledger stay where they are while we look at it.
3. Publisher terms
What is billable
Nothing is billable on your say-so. The server issues a signed single-use token when it serves an ad, and it bills strictly off that token, so a repriced or replayed payload is refused rather than paid. An impression also has to pass a viewability check: the activity marker your client reports must be one that has not been seen before for that session, and a marker that goes backwards is refused outright. A session stays billable for three minutes after the model last did work, and past that the client renders nothing at all.
On top of that, these caps apply and are enforced server side:
- 60 per hour
- Billable impressions per publisher per rolling hour, across every session.
- 20 per session
- Billable impressions per session per rolling hour.
- 25 seconds
- Minimum gap between two billable impressions in one session.
- 6 sessions
- New billable sessions per publisher per rolling hour. A fresh session id is not a way around the two limits above.
- 10 clicks
- Billable clicks per publisher per rolling hour.
- 1 click
- Billable clicks per publisher per campaign per UTC day, on top of the hourly click cap.
A click bills only if the same token was already recorded as an impression by the same publisher. Clicks are attributed server side through the redirect; a click your client declares is refused and moves no money.
What earns nothing
- Rendering faster. The caps are the ceiling, so drawing the line more often produces refusals rather than earnings.
- An idle terminal. Once activity stops, the session leaves the three minute window and the placement is not drawn.
- Fabricated activity. Forging the marker, minting session ids, or reporting work that did not happen.
- Clicks on ads that were never shown. No matching impression, no click.
What you are paid
You are credited 70% of what the impression bills, per impression, at the moment it is billed. Earnings become withdrawable seven days after the impression that earned them. That hold exists because card money is not final when it arrives, and it has no manual override.
The minimum withdrawal is $10.00 of settled balance. Payouts run through Stripe Connect to an account you set up yourself. Stripe, not Spinwait, collects the identity and bank details for that account, and payouts stay disabled until Stripe has verified them.
A withdrawal is held for a manual check when all of the following are true, which is the shape of a stolen card being cashed out through a campaign the same person controls:
- the withdrawal is over $25.00, and
- more than 80% of your earnings since your last paid payout came from a single advertiser, and
- that advertiser's first successful top-up was less than 30 days ago, and
- nobody has yet marked your account as reviewed.
Nothing is deducted while a payout is held. The request is refused, your balance is untouched, and you can ask us to look. Once an account is marked reviewed, this gate does not apply to it again.
Invalid traffic
Invalid traffic is any impression or click that did not come from a real person plausibly looking at a real session. That includes automated or scripted activity, a client altered to report work that did not happen, impressions from machines or accounts you do not control, and clicks you generate on your own placements.
Where we determine credits came from invalid traffic, we may reverse those credits and suspend the account. A suspended publisher's balance is held pending that review rather than paid or deleted.
Two things you must not do
- Do not modify the client to change what it reports. The licence lets you change the code, and these terms are about what you send us: altering the activity marker, the session id, the counting or the caps is invalid traffic whatever the licence permits.
- Do not run the client on machines or accounts you do not control. The placement is paid for as one developer's attention, and it is only that if the machine is yours.
4. Advertiser terms
Balance
Spinwait is prepaid. You add funds through Stripe Checkout, minimum $5.00 and maximum $50,000.00 per top-up, and the balance is credited only once Stripe confirms the payment has settled. There is no credit, no invoicing and no line of account: a campaign with no balance behind it simply stops being eligible to serve.
Your balance is not a deposit, it is not held in trust, and it earns no interest. It is a prepayment for advertising and nothing else.
Bidding and billing
Each campaign carries a CPM bid, optionally a CPC bid alongside it, and a daily cap. Bids are accepted between $0.00 and $1,000.00 for each of CPM and CPC, and the daily cap between $0.00 and $100,000.00, where zero means uncapped. The cap is a hard ceiling on that campaign's spend per UTC day.
Every impression is a separate sealed-bid second-price auction. Campaigns are ranked on expected revenue per thousand impressions, so a click bid competes on its cost per click times its measured click-through rate. The winner pays $0.01 CPM above whatever it beat rather than its own bid, and never more than it bid. Nothing serves below the reserve of $8.00 CPM, so while the field is uncontested the reserve is the price. No advertiser takes more than half of one batch of slots while another advertiser is eligible.
Billing works off the clearing price sealed into the token at serve time. A token is valid for 15 minutes, and the campaign is re-checked at the moment it is redeemed: if you paused it, if your account was suspended, or if the daily cap has since been reached, the impression does not bill. You are charged for what actually served, not for what was fetched.
Refunds, disputes and invalid traffic
Unused balance is refundable on request, back to the original payment method. Spend that has already served is not refundable. A refund is deducted from your balance when Stripe confirms it.
If you dispute a charge with your card issuer, the account is suspended, every campaign on it is paused, and the disputed amount is debited from your balance immediately. If the dispute is later resolved in your favour, the debit is reversed and the suspension is lifted. Campaigns paused by a dispute are not resumed for you, because we cannot tell which of them you had already paused yourself. Ask us before disputing a charge: it is slower and worse for both of us than a refund.
Where we determine spend came from invalid traffic, we credit it back to your balance.
Targeting and reporting
There is no targeting. Every campaign competes for every impression. The auction is never told which tool, machine or person the placement will appear in front of, so there is no audience to select and no profile being built.
Delivery and spend are reported from Spinwait's own ledger, which is the record for what you owe and what you were charged. Your own measurement may differ, and where it does the ledger governs.
5. Creative policy
A creative is four fields and nothing else:
- brand
- Up to 40 characters after sanitisation.
- tagline
- Up to 80 characters after sanitisation.
- url
- One destination. It must be http or https; any other scheme is refused.
- color
- One six digit hex accent, clamped into a legible luminance band.
Brand and tagline are sanitised before they are stored and again when they are rendered. Control characters, escape sequences and invisible or text-reordering characters are stripped, and runs of whitespace are collapsed. The accent colour is clamped so a brand cannot render itself invisible against a light or a dark terminal. What comes back out is what was left after all of that, so write for the limit rather than to it.
Creative must not:
- make a misleading claim about what a product does or costs;
- impersonate another company, another product, or the tool the placement is running inside;
- be unlawful, or promote anything unlawful;
- advertise adult content or gambling;
- distribute malware, phish, or lead to a deceptive download of any kind;
- carry political advertising;
- or say anything a reasonable developer would object to finding in their own terminal.
We review campaigns, and we may pause or remove any creative at any time, with or without a reason given. If we remove one, unspent balance is refundable.
The disclosure is not yours to style. The sponsored label, the separator and the domain are drawn dim or default and never take your accent colour. Only the glyph and the brand name are tinted. Do not submit creative that tries to work around this, for example by building a fake label into the brand or tagline text.
The destination must be your own site or a page you control, and the domain shown in the placement is derived from it. It must not redirect to a different domain. Someone reading a status line has one domain to judge the link by, and sending them somewhere else is the thing that makes the whole placement untrustworthy.
6. Money, taxes and records
Balances and prices are held internally in micros, where one US dollar is 1,000,000 micros, so a fraction of a cent is neither rounded away nor invented. Anything crossing the Stripe boundary, a top-up or a payout, is in whole cents, and the fraction below a cent stays on your balance rather than being paid out or discarded. Everything is in US dollars.
Each party is responsible for its own taxes. Spinwait's prices are exclusive of any tax you owe on what you earn or what you spend, and it is on you to report and pay it. Spinwait issues no tax forms beyond whatever Stripe issues to connected accounts under its own obligations.
The ledger is the record. It is append-only, every entry names its reason and the object that caused it, and it is what we will look at if we disagree about a number.
7. Acceptable use
This applies to both sides:
- Do not interfere with the service, or with anyone else's use of it.
- Do not scrape or automate the API beyond the calls the client makes in ordinary use.
- Do not attempt to defeat the caps, the viewability check, the token signature or the auction, whether by altering the client, by forging what it reports, or by any other means.
- Do not register accounts automatically.
8. Availability and changes
The service may change, and it may stop. Caps, the reserve price, the revenue share and the length of the payout hold are all tunable numbers, and we may change them. When we do, the new value appears on this page and on the site before it applies to you.
There is no guarantee of earnings, of demand, of delivery, or of uptime. The placement lives inside somebody else's tool: if a host tool changes how its status line works, or stops having one, the placement can disappear without us being able to do anything about it.
9. Disclaimers and liability
The service is provided as is. We do not promise it will be uninterrupted, error free, or that it will earn or deliver any particular amount. To the extent the law allows, there are no warranties beyond the ones written on this page.
Neither of us is liable to the other for indirect or consequential loss, or for lost profits or lost data. Spinwait's total liability to you, for everything, is capped at the greater of the balance we are holding for you and $100. Nothing here limits liability that cannot be limited by law.
10. Termination
Either of us can stop at any time. A publisher stops by uninstalling the client, and no notice is needed. An advertiser stops by pausing their campaigns and asking for the unspent balance back.
We may terminate an account for a breach of these terms, for invalid traffic, or for a payment dispute.
On termination:
- A publisher's balance is paid out once the seven day hold has cleared on the earnings in it and the total is at or above the $10.00 minimum, provided the account is connected to Stripe and is not suspended. Below the minimum there is nothing we can transfer, because Stripe transfers whole cents and the fee would exceed the payment.
- An advertiser's unspent balance is refunded to the original payment method. Spend that has already served is not refunded.
Sections 6, 9 and 11 survive termination, along with anything owed under them.
11. Governing law and contact
These terms are governed by the law of the place where Spinwait's operator is established, and any dispute is heard in the courts there.
Questions about any of this, a refund, a held payout, or a creative we removed: hello@spinwait.net.
See also the privacy policy, which describes what the client sends and what it never sends.