Changelog
Every change to the embeddable widgets - URLs, parameters, keys, domains and limits - newest first. What stays stable within a version is set out in the policies.
Widgets no longer open a websocket connection to Bitculator or write translation data into the visitor's browser storage. Nothing changes on screen: widgets never streamed live prices, so figures are always as of page load.
A duration that ends part-way through a compounding period now earns pro-rata interest and still credits the deposits made inside it, and the growth curve is spaced by elapsed time. Inputs are capped at a principal of 1,000,000,000,000, a contribution of 1,000,000,000, a rate of 1,000% and 50 years or 600 months; a value over its cap is reset to the cap.
The rate is now an annual nominal rate, divided over the compounding periods. Before, the full rate was applied to every period, so 5% compounded monthly grew like 5% a month; results in existing embeds drop accordingly.
Cancelling a paid embed plan now also drops any downgrade you had scheduled; the plan simply runs to the end of the paid period.
The DCA start and end pickers read dates as UTC midnight, which showed the previous day to visitors west of UTC. They now use the visitor's local calendar day.
The {locale} path segment now also accepts ar (shown right-to-left), sk, th, ko, ro, hu, sr and fi, added between 19 and 24 September - 27 languages in total.
Widget pages no longer set a session or XSRF cookie and no longer register a service worker in the visitor's browser. The keyless per-visitor counter now uses a keyed hash of the IP address, and keyless loads without a referrer are reported as "direct" instead of by IP.
The monthly and weekly rows of /embed/zoom/{slug} are now fetched without a session token, which a widget inside another site's iframe cannot get.
The converter shows no figure when either asset has no usable price instead of "1 X = 0 Y", and the marketcap flipper clears its figures when a pair has no market caps instead of keeping the previous pair's numbers under the new names.
A widget URL that uses a coin's former slug now returns a 301 to the same widget under the current slug, with the query string - including embed_key - kept. Before, it returned 404.
Registered domains are parsed the way a browser reads a URL: scheme, path, port and a leading www. are dropped, the name is lower-cased and international names become punycode; anything that is not a hostname is rejected. The embedding page's Referer is normalised the same way. Subdomains other than www still need their own entry.
A move to a lower embed plan now takes effect when the paid period ends. Before, a downgrade on the same billing interval applied immediately and cut the monthly limit mid-period. Upgrades still apply at once.
An unknown or inactive coin slug now returns a bare "Not Found" text response instead of rendering the full Bitculator site - header, sidebar and footer - inside your iframe.
Creating an embed key now requires a verified email address; accounts created with a crypto wallet are exempt. Key creation is limited to 10 a minute, and existing keys keep working.
From 14 August, domain checks were cached for 5 minutes, including "not registered" results, so a domain you had just added could keep returning 403 for up to 5 minutes. Only successful matches are cached now; removing a domain can still take up to 5 minutes to take effect.
A key's last-used time in the embed console is now written at most once an hour, and widget loads no longer count as visits in Bitculator's own site statistics. Embed usage counts are unaffected.
On narrow widths the weekly band and the yearly, quarterly and monthly band now scroll independently, so dragging the long weekly row no longer pulls the shorter band sideways.
Between 12 and 16 July the calculator widgets and the flipper got new layouts and inputs, and some sections were removed: picker on the flipper, chart and table on interest, results on tax and loan, and banner, table and chart on staking, which now lists daily to yearly rewards inline. Visitors' saved arrangements were reset; rebuild any layout or visible value that names a removed section.
A host page can post {type: 'bitculator-embed-host-growable'} to the widget window. The widget then opens its pickers downward and includes them in the height it reports through bitculator-embed-resize; without the message, pickers open as an overlay inside the fixed frame.
/embed/zoom/{slug} now shows one grid of yearly, quarterly, monthly and weekly returns per year, with an average row and win-rate summaries, plus a quarterly "tornado" view. It replaces the earlier quarterly, monthly and weekly tables and has no outer card frame.
The embed console now charts requests per day for the current billing period.
/{locale}/pricing/embed now redirects to /{locale}/crypto-tools, which gained a plan picker with checkout and a widget explorer that previews one widget at a time next to the snippet builder.
This reference went live at /{locale}/documentation/embed/v1, with a snippet builder, authentication, domains, quota, plans, every widget's parameters and click-to-load previews.
Embed loads now have their own plan, billing period and counter; the Data API had drawn from the embed plan for its first two days. Only embed keys count toward your embed key limit, a Data API key or an expired key in a widget URL gets 403, and widget responses carry no X-Quota-* headers.
After you cancel a paid embed plan, usage keeps counting in your billing-day window until the plan ends instead of switching to the calendar month mid-period, and the console's reset date is right for billing days at the end of a month.
The early JSON endpoints /api/v1/prices and /api/v1/widgets/convert/{from}/{to}, which took an embed key, were replaced by the Data API, which accepts only its own keys. Embed keys are managed at /user/developer/embed.
The embedding host is lower-cased and loses any trailing dot before it is compared with your registered domains.
/{locale}/crypto-tools became a widgets page with a live converter, a copyable snippet and the Free, Starter and Pro comparison.
A load with embed_key but no Referer or Origin header now gets 403; before, it skipped the domain check. Keep the browser's default referrer policy and do not set referrerpolicy="no-referrer" on the iframe.
The keyless allowance of 1,000 loads a month now counts per visitor IP across every keyless widget on every site, instead of one pool per embedding domain.
The link at the foot of every widget is back after its removal on 4 April. It points to the matching tool on bitculator.com and cannot be switched off.
Builder snippets went back to a bare <iframe>; snippets copied on 3 April also carried a wrapper, a separate Powered-by link and an auto-resize <script>. The in-widget footer link was removed at the same time and came back on 2 May.
Each tool page gained a builder: paste your embed key, pick the widget language, a layout template and the visible sections, and set width, height, corner radius and lazy or eager loading, with the snippet and a live preview updating together.
The calculator and flipper widgets accept ?visible=, a comma-separated list of the section IDs to show by default. A visitor's own choice, saved in their browser, takes precedence.
Pass your key as ?embed_key=; ?api_key= still works as an alias. The console moved to /{locale}/user/developer/embed, and a new key's full value is shown once, right after it is created.
Widget pages still went out with X-Frame-Options: SAMEORIGIN and frame-ancestors 'self', so browsers refused to show them on other domains. They now send frame-ancestors * and no X-Frame-Options.
The plans introduced on 22 March became embed plans with their own checkout, and the pricing page moved to /{locale}/pricing/embed. Limits did not change.
The DCA, profit, interest, tax, loan, staking and flipper widgets are split into sections that visitors can drag, resize and align, saved in their browser with a "Reset layout" button. ?layout= sets the starting arrangement, for example c(stats::cc,settings::cc), where c() is a column, r() a row and a section is id:width:alignment.
Widgets accept a key in the URL, and a load with a key must come from a domain registered in the console or gets 403; keyless loads still render. Free allows 10,000 loads a month, 1 domain and 2 keys, Starter 50,000, 3 and 5, and Pro 500,000, 10 and 10. Over the limit, the widget shows a usage-limit page (HTTP 429).
The converter widget lost its comparison table, so hideTable has had no effect since. The parameter is still accepted.
Widgets post {type: 'bitculator-embed-resize', height} to the parent window whenever their height changes, so a host script can size the iframe, and show a loading placeholder until they are ready. Every tool page gained a copyable embed snippet.
Launch: the converter (/{locale}/embed/converter/{from}/{to}), zoom (/zoom/{slug}), marketcap flipper (/flip/{entity1}/{entity2}) and the /dca, /profit, /interest, /tax, /loan and /staking calculators. Every widget accepts ?compact=1 and ?theme=dark, has a transparent background, is noindex and carries a "Powered by Bitculator" link.
Removing a widget version or lowering a limit is announced here and by email at least six months ahead - see the deprecation policy.