1<!DOCTYPE html><html data-dpl-id="dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc" lang="en" class="js"><head><meta charSet="utf-8"/><link rel="preconnect" href="/" crossorigin=""/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/immutable/chunks/0h6gqshjpa3q7.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/immutable/chunks/2roxca3dzm799.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/immutable/chunks/1i_tdidraj460.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/immutable/chunks/17tuxysuvqwd2.js"/>
1<script src="/_next/static/immutable/chunks/2tegluoxg9ia3.js" async=""></script>
1<script src="/_next/static/immutable/chunks/3jf57fuuxcgrq.js" async=""></script>
1<script src="/_next/static/immutable/chunks/3sy1nqme467ma.js" async=""></script>
1<script src="/_next/static/immutable/chunks/turbopack-2axmjf-ze8l22.js" async=""></script>
1<script src="/_next/static/immutable/chunks/1tf2pn9278k7y.js" async=""></script>
1<script src="/_next/static/immutable/chunks/02fdmtrpe1j59.js" async=""></script>
1<script src="/_next/static/immutable/chunks/1tejsfbbbtbet.js" async=""></script>
1<script src="/_next/static/immutable/chunks/2lz67str4xv0d.js" async=""></script>
1<script src="/_next/static/immutable/chunks/1gaxm1euvcjb0.js" async=""></script>
1<script src="/_next/static/immutable/chunks/3a6ue4fmoufh-.js" async=""></script>
1<script src="/_next/static/immutable/chunks/13_-s5u75pnmm.js" async=""></script>
1<script src="/_next/static/immutable/chunks/325vyszgqblpc.js" async=""></script>
1<script src="/_next/static/immutable/chunks/1ibk_c4qd8xp0.js" async=""></script>
1<script src="/_next/static/immutable/chunks/0376t9sp49t43.js" async=""></script>
1<link rel="manifest" href="/manifest.json"/><meta name="trustpilot-one-time-domain-verification-id" content="d4c94b7d-631f-4ddc-a67a-6b09a9b55ee7"/><meta name="yandex-verification" content="984a524362cc5b99"/><title>Authentication API with Apple and Google sign-in | Anythink</title><meta name="description" content="Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server."/><meta name="application-name" content="Anythink"/><meta name="keywords" content="authentication API, Sign in with Apple backend, Google sign-in backend, LinkedIn sign-in API, magic link authentication, JWT refresh tokens, OAuth PKCE, Auth0 alternative, Authentication API with Apple and Google sign-in, email, password and magic links, users, native apple, google and linkedin sign-in, web oauth with pkce, user, jwt sessions with refresh, users are part of your data model, roles, security, workflows, one provider list per project, backend as a service, BaaS, cloud infrastructure, API development, database management, marketplace backend, scalable infrastructure, cloud computing, developer tools, no-code backend, rapid development, business automation, startup platform, app development"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow"/><link rel="canonical" href="https://anythink.cloud/products/authentication"/><link rel="alternate" type="application/rss+xml" href="https://anythink.cloud/rss.xml" title="Anythink articles"/><meta property="og:title" content="Sign-in for web and mobile, verified on the server"/><meta property="og:description" content="Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server."/><meta property="og:url" content="https://anythink.cloud/products/authentication"/><meta property="og:site_name" content="Anythink"/><meta property="og:locale" content="en_GB"/><meta property="og:image" content="https://anythink.cloud/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Authentication"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@anythink"/><meta name="twitter:creator" content="@anythink"/><meta name="twitter:title" content="Sign-in for web and mobile, verified on the server"/><meta name="twitter:description" content="Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server."/><meta name="twitter:image" content="https://anythink.cloud/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png"/><link rel="shortcut icon" href="/favicon.ico"/><link rel="icon" href="/favicon.ico"/><link rel="apple-touch-icon" href="/favicon.ico"/>
1<script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('consent','default',{"analytics_storage":"denied","ad_storage":"denied","ad_user_data":"denied","ad_personalization":"denied","wait_for_update":500});</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https://anythink.cloud/#website","name":"Anythink","alternateName":["Anythink Cloud","anythink.cloud"],"url":"https://anythink.cloud","inLanguage":"en-GB","publisher":{"@id":"https://anythink.cloud/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://anythink.cloud/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","@id":"https://anythink.cloud/#organization","name":"Anythink","alternateName":["Anythink Cloud","anythink.cloud"],"legalName":"Anythink Ltd","url":"https://anythink.cloud","logo":{"@type":"ImageObject","url":"https://anythink.cloud/anythink-icon-02.svg","width":512,"height":512},"description":"A database with an instant REST API, sign-in, subscriptions, workflows and an operations dashboard, all built from your data model.","slogan":"The whole backend, in one project.","foundingDate":"2024-02-26","foundingLocation":{"@type":"Place","address":{"@type":"PostalAddress","addressLocality":"London","addressCountry":"GB"}},"knowsAbout":["Backend as a service","REST API","Subscriptions and payments","Workflow automation","Model Context Protocol (MCP)"],"sameAs":["https://x.com/anythink_cloud","https://github.com/anythink-cloud","https://www.linkedin.com/company/anythink-cloud","https://www.youtube.com/@anythink_cloud","https://discord.gg/B2VxUja95S","https://www.producthunt.com/products/anythink","https://www.crunchbase.com/organization/anythink","https://www.g2.com/products/anythink/reviews","https://www.wikidata.org/wiki/Q141642271"],"contactPoint":[{"@type":"ContactPoint","contactType":"sales","email":"[email protected]","url":"https://anythink.cloud/contact","availableLanguage":"English"}]}</script>
1<script src="/_next/static/immutable/chunks/0c0hxoamwjsbw.js" noModule=""></script>
1</head><body class="inter_1324b96a-module__LC_YAG__className"><div hidden=""><!--$--><!--/$--></div><div data-is-root-theme="true" data-accent-color="red" data-gray-color="slate" data-has-background="true" data-panel-background="translucent" data-radius="medium" data-scaling="100%" class="radix-themes light min-h-screen"><div><main>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","@id":"https://anythink.cloud/products/authentication#webpage","name":"Authentication","description":"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.","url":"https://anythink.cloud/products/authentication","inLanguage":"en-GB","isPartOf":{"@id":"https://anythink.cloud/#website"},"publisher":{"@id":"https://anythink.cloud/#organization"}}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://anythink.cloud/"},{"@type":"ListItem","position":2,"name":"Products","item":"https://anythink.cloud/products"},{"@type":"ListItem","position":3,"name":"Authentication","item":"https://anythink.cloud/products/authentication"}]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"SoftwareApplication","@id":"https://anythink.cloud/products/authentication#software","name":"Anythink Authentication","description":"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.","url":"https://anythink.cloud/products/authentication","applicationCategory":"DeveloperApplication","operatingSystem":"Web","installUrl":"https://my.anythink.cloud/auth/register","softwareHelp":{"@type":"WebPage","url":"https://docs.anythink.cloud"},"brand":{"@id":"https://anythink.cloud/#organization"},"publisher":{"@id":"https://anythink.cloud/#organization"},"keywords":["authentication API","Sign in with Apple backend","Google sign-in backend","LinkedIn sign-in API","magic link authentication","JWT refresh tokens","OAuth PKCE","Auth0 alternative"]}</script>
1<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What sign-in methods does Anythink support?","acceptedAnswer":{"@type":"Answer","text":"Email and password (with email confirmation and password reset), magic links, native Apple, Google and LinkedIn sign-in for mobile apps, and web OAuth sign-in for the providers you enable. Every method ends with the same JWT access and refresh tokens."}},{"@type":"Question","name":"How do I add Sign in with Apple to an iOS app?","acceptedAnswer":{"@type":"Answer","text":"Turn on Apple under Settings ⺠Social Sign-In in the Anythink dashboard and list your app's client IDs. Your app sends the identity token and user identifier from Sign in with Apple to POST /auth/v1/native/apple. Anythink verifies the token against Apple's published keys, checks the subject matches, and returns a session. Apple only shares the user's name on the first sign-in, so send given_name and family_name on that call."}},{"@type":"Question","name":"How do access and refresh tokens work?","acceptedA
1nswer":{"@type":"Answer","text":"Sign-in returns a JWT access token for API calls and a refresh token. Send the access token as a Bearer token. When it expires, POST the refresh token to /auth/v1/refresh for a new pair. Logging out revokes the refresh token."}},{"@type":"Question","name":"Can I control what each signed-in user can see?","acceptedAnswer":{"@type":"Answer","text":"Yes. Every user has a role, and roles carry permissions per entity, such as orders:read. Row-level security then limits which records a user reaches. Users can also belong to groups, so team members can read their team's records while staff-only records stay private."}}]}</script>
1<nav class="fixed top-0 left-0 right-0 z-50 bg-white/20 dark:bg-black/40 backdrop-blur-sm border-b border-gray-200 dark:border-white/20"><div class="max-w-[1200px] mx-auto px-6 py-4 flex justify-between items-center"><div class="flex items-start justify-start flex-shrink-0"><a class="flex items-start justify-start hover:opacity-80 transition-opacity duration-200" aria-label="Anythink homepage" href="/"><img alt="Anythink" loading="lazy" width="150" height="50" decoding="async" data-nimg="1" class="h-8 w-auto dark:[filter:brightness(0)_saturate(100%)_invert(1)]" style="color:transparent" srcSet="/_next/image?url=%2Fanythink-icon-02.svg&w=256&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1x, /_next/image?url=%2Fanythink-icon-02.svg&w=384&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 2x" src="/_next/image?url=%2Fanythink-icon-02.svg&w=384&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc"/></a></div><div class="hidden lg:flex items-center space-x-4"><a class="flex items-center space-x-2 px-2 py-2 transition-colors duration-200 text-gray-700 hover:text-zinc-900 dark:text-white/70 dark:hover:text-white/90 hover:bg-gray-100 dark:hover:bg-transparent" aria-label="Search" href="/search"><svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg><span class="text-sm hidden sm:inline">Search</span><kbd class="hidden lg:inline-flex items-center px-2 py-1 text-xs font-mono border bg-zinc-100 border-zinc-300 dark:bg-white/10 dark:border-white/20">âK</kbd></a><nav aria-label="Main" data-orientation="horizontal" dir="ltr" class="relative"><div style="position:relative"><ul data-orientation="horizontal" class="flex items-center space-x-3" dir="ltr"><li class="relative group"><button class="flex items-center space-x-1 px-2 py-2 text-sm transition-colors duration-200 font-medium focus:outline-none text-zinc-700 hover:text-zinc-900 dark:text-white/90 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-transparent">Product<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 transition-transform duration-200 group-hover:rotate-180 text-gray-500 dark:text-gray-400"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><div class="absolute top-full mt-1 opacity-0 invisible group-hover:opacity-100 group-hover:visible group-focus-within:opacity-100 group-focus-within:visible transition-all duration-200 z-50 bg-white dark:bg-zinc-800 border border-gray-200 dark:border-zinc-600 shadow-lg left-0 min-w-[620px]"><div class="grid grid-cols-3 p-4 gap-0"><div class="col-span-2 grid grid-cols-2 gap-1 pr-4 border-r border-gray-100 dark:border-zinc-700"><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/authentication"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Authentication</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Add email and password, magic links, and Apple, Google orâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/workflow-automation"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Workflows</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Automation that runs inside every project. Trigger on aâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/instant-apis"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Instant APIs</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Every entity you create gets a REST API straight away, withâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/visual-database-designer"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Visual Database Designer</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Model entities, fields and relationships in the Anythinkâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/smart-file-manager"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Smart File Manager</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Store files of any type, serve public ones from a CDN andâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/subscriptions"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Subscriptions</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Model plans, trials and offers once, then take paymentâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/powerful-search-engine"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Search</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Search any entity with typo-tolerant full-text queries,â¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/access-control"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Access Control</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Roles carry entity-scoped permissions, row-level securityâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/dashboards"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Dashboards</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Build charts, grids, kanban boards and dashboards on theâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/integrations"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Integrations</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Connect Slack, Google Calendar, GitHub, LinkedIn, X,â¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/push-notifications"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Push Notifications</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Send push notifications with tappable action buttons, andâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/secrets"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Secrets</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Store the API keys, tokens and credentials your backendâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/products/email"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Email</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Send sign-up confirmations, invites, password resets, magicâ¦</div></a></div><div class="pl-4"><div class="text-xs font-mono uppercase tracking-widest text-zinc-600 dark:text-zinc-200 mb-2 px-2">Comparisons</div><a class="flex items-center justify-between p-2 mb-1 transition-colors hover:bg-zinc-100 dark:hover:bg-zinc-700 border-b border-gray-100 dark:border-zinc-700" href="/comparisons"><span class="text-sm font-medium text-zinc-900 dark:text-zinc-100">All comparisons</span><span class="text-[#F97316] text-xs">â</span></a></div></div></div></li><li class="relative group"><button class="flex items-center space-x-1 px-2 py-2 text-sm transition-colors duration-200 font-medium focus:outline-none text-zinc-700 hover:text-zinc-900 dark:text-white/90 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-transparent">Solutions<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 transition-transform duration-200 group-hover:rotate-180 text-gray-500 dark:text-gray-400"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.564
164L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><div class="absolute top-full mt-1 opacity-0 invisible group-hover:opacity-100 group-hover:visible group-focus-within:opacity-100 group-focus-within:visible transition-all duration-200 z-50 bg-white dark:bg-zinc-800 border border-gray-200 dark:border-zinc-600 shadow-lg left-0 min-w-[560px]"><div class="grid grid-cols-2 p-4 gap-0"><div class="pr-4 border-r border-gray-100 dark:border-zinc-700"><div class="text-xs font-mono uppercase tracking-widest text-zinc-600 dark:text-zinc-200 mb-2 px-2">Who it's for</div><div class="grid gap-1"><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/for-founders"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">For Founders</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Anythink gives founders sign-in, a REST API, subscriptions,â¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/for-enterprise"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">For Enterprise</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Anythink gives enterprise teams a managed backend withâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/for-agencies"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">For Agencies</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Anythink gives agencies a project per client, a brandedâ¦</div></a></div></div><div class="pl-4"><div class="text-xs font-mono uppercase tracking-widest text-zinc-600 dark:text-zinc-200 mb-2 px-2">Platform</div><div class="grid gap-1"><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/content-manager"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Content Management</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Anythink works as a headless CMS: model content types, editâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/flexible-data-views"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Flexible Data Views</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Switch any entity between a grid, a kanban board, aâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/white-label-platform"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Branded dashboard</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Brand the Anythink dashboard with your colours, logos,â¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/typescript-sdk"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">TypeScript SDK</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">The Anythink SDK is an open source React library forâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/anythink-cli"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Anythink CLI</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">The open source Anythink CLI runs a whole project from theâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/ai-and-mcp"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">AI & MCP</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Build your backend in a conversation, from Claude Code,â¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/migrate-from-amazon-pinpoint"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Migrate from Amazon Pinpoint</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Amazon Pinpoint reaches end of support on 30 October 2026,â¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/migrate-from-firebase-extensions"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Migrate from Firebase Extensions</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Firebase Extensions shuts down on 31 March 2027, taking theâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/supabase-alternative"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Supabase alternative</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Supabase gives you Postgres, auth and an API. Anythinkâ¦</div></a><a class="block p-2 transition-colors duration-200 hover:bg-zinc-100 dark:hover:bg-zinc-700" href="/solutions/firebase-alternative"><div class="font-medium text-sm text-zinc-900 dark:text-zinc-100">Firebase alternative</div><div class="text-xs text-zinc-600 dark:text-zinc-300 mt-0.5 leading-tight">Firebase leans on Extensions for payments, in-appâ¦</div></a></div></div></div></div></li><li><a class="px-2 py-2 text-sm transition-colors duration-200 font-medium text-zinc-700 hover:text-zinc-900 dark:text-white/90 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-transparent" data-radix-collection-item="" href="/articles">Articles</a></li><li><a href="https://docs.anythink.cloud/" target="_blank" rel="noopener noreferrer" class="px-2 py-2 text-sm transition-colors duration-200 font-medium text-zinc-700 hover:text-zinc-900 dark:text-white/90 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-transparent" data-radix-collection-item="">Docs</a></li><li><a class="px-2 py-2 text-sm transition-colors duration-200 font-medium text-zinc-700 hover:text-zinc-900 dark:text-white/90 dark:hover:text-white hover:bg-zinc-100 dark:hover:bg-transparent" data-radix-collection-item="" href="/pricing">Pricing</a></li></ul></div><div class="absolute top-full left-0 w-full perspective-1000"></div></nav><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><div class="w-9 h-9 bg-zinc-100 dark:bg-zinc-800 animate-pulse"></div><!--/$--><button type="button" class="flex items-center gap-2 border border-gray-300 hover:border-gray-400 dark:border-white/20 dark:hover:border-white/40 text-gray-700 hover:text-gray-900 dark:text-white/90 dark:hover:text-white px-4 h-9 font-mono text-[11px] uppercase tracking-widest transition-colors flex-shrink-0 cursor-pointer">Book demo</button><a href="https://my.anythink.cloud/auth/login" target="_blank" rel="noopener noreferrer" class="px-3 py-2 text-sm text-gray-700 hover:text-gray-900 dark:text-white/90 dark:hover:text-white ">Log in</a><a href="https://my.anythink.cloud/auth/register" target="_blank" rel="noopener noreferrer" class="flex items-center justify-center bg-[#F97316] hover:bg-[#ea6c0e] text-white font-bold px-4 h-9 font-mono text-[11px] uppercase tracking-widest transition-colors shadow-lg shadow-[#F97316]
1/20 flex-shrink-0 ">Start free</a></div><div class="lg:hidden flex items-center space-x-3"><a class="p-2 transition-colors text-gray-700 hover:text-zinc-900 dark:text-white/70 dark:hover:text-white/90 hover:bg-gray-100 dark:hover:bg-transparent" aria-label="Search" href="/search"><svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></a><a href="#mobile-menu" role="button" aria-controls="mobile-menu" class="p-2 transition-colors text-gray-700 hover:text-zinc-900 dark:text-white/70 dark:hover:text-white/90 hover:bg-gray-100 dark:hover:bg-transparent" aria-label="Open menu"><svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path></svg></a></div></div></nav><div id="mobile-menu" class="fixed inset-0 z-[60] lg:hidden hidden target:block"><a href="#" tabindex="-1" aria-hidden="true" class="absolute inset-0 bg-black/50 backdrop-blur-sm"></a><div class="absolute top-0 right-0 h-full w-80 bg-white dark:bg-zinc-900 border-l border-gray-200 dark:border-zinc-700"><div class="flex flex-col h-full"><div class="flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-800"><img alt="Anythink" loading="lazy" width="120" height="40" decoding="async" data-nimg="1" class="h-6 w-auto dark:brightness-0 dark:invert" style="color:transparent" srcSet="/_next/image?url=%2Fanythink-icon-02.svg&w=128&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1x, /_next/image?url=%2Fanythink-icon-02.svg&w=256&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 2x" src="/_next/image?url=%2Fanythink-icon-02.svg&w=256&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc"/><a href="#" role="button" class="p-2 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors" aria-label="Close menu"><svg class="w-6 h-6 text-zinc-700 dark:text-zinc-300" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></a></div><div class="flex-1 overflow-y-auto p-6"><div class="space-y-1"><details class="space-y-1"><summary class="w-full p-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100 flex items-center justify-between cursor-pointer list-none"><span class="font-medium text-zinc-900 dark:text-white">Product</span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-gray-500"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></summary><div class="space-y-1 mt-1"><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/authentication"><span class="text-zinc-700 dark:text-zinc-300">Authentication</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/workflow-automation"><span class="text-zinc-700 dark:text-zinc-300">Workflows</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/instant-apis"><span class="text-zinc-700 dark:text-zinc-300">Instant APIs</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/visual-database-designer"><span class="text-zinc-700 dark:text-zinc-300">Visual Database Designer</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/smart-file-manager"><span class="text-zinc-700 dark:text-zinc-300">Smart File Manager</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/subscriptions"><span class="text-zinc-700 dark:text-zinc-300">Subscriptions</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/powerful-search-engine"><span class="text-zinc-700 dark:text-zinc-300">Search</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/access-control"><span class="text-zinc-700 dark:text-zinc-300">Access Control</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/dashboards"><span class="text-zinc-700 dark:text-zinc-300">Dashboards</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/integrations"><span class="text-zinc-700 dark:text-zinc-300">Integrations</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/push-notifications"><span class="text-zinc-700 dark:text-zinc-300">Push Notifications</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/secrets"><span class="text-zinc-700 dark:text-zinc-300">Secrets</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/products/email"><span class="text-zinc-700 dark:text-zinc-300">Email</span></a><div class="px-6 pt-2 pb-1"><div class="text-xs font-mono uppercase tracking-widest text-zinc-600 dark:text-zinc-200">Comparisons</div></div><a class="flex items-center justify-between p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors border-b border-gray-100 dark:border-zinc-700" href="/comparisons"><span class="text-zinc-700 dark:text-zinc-300 font-medium">All comparisons</span><span class="text-[#F97316] text-xs">â</span></a></div></details>
1<details class="space-y-1"><summary class="w-full p-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100 flex items-center justify-between cursor-pointer list-none"><span class="font-medium text-zinc-900 dark:text-white">Solutions</span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-gray-500"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></summary><div class="space-y-1 mt-1"><div class="px-6 pt-1 pb-1"><div class="text-xs font-mono uppercase tracking-widest text-zinc-600 dark:text-zinc-200">Who it's for</div></div><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/for-founders"><span class="text-zinc-700 dark:text-zinc-300">For Founders</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/for-enterprise"><span class="text-zinc-700 dark:text-zinc-300">For Enterprise</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/for-agencies"><span class="text-zinc-700 dark:text-zinc-300">For Agencies</span></a><div class="px-6 pt-2 pb-1"><div class="text-xs font-mono uppercase tracking-widest text-zinc-600 dark:text-zinc-200">Platform</div></div><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/content-manager"><span class="text-zinc-700 dark:text-zinc-300">Content Management</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/flexible-data-views"><span class="text-zinc-700 dark:text-zinc-300">Flexible Data Views</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/white-label-platform"><span class="text-zinc-700 dark:text-zinc-300">Branded dashboard</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/typescript-sdk"><span class="text-zinc-700 dark:text-zinc-300">TypeScript SDK</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/anythink-cli"><span class="text-zinc-700 dark:text-zinc-300">Anythink CLI</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/ai-and-mcp"><span class="text-zinc-700 dark:text-zinc-300">AI & MCP</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/migrate-from-amazon-pinpoint"><span class="text-zinc-700 dark:text-zinc-300">Migrate from Amazon Pinpoint</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/migrate-from-firebase-extensions"><span class="text-zinc-700 dark:text-zinc-300">Migrate from Firebase Extensions</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/supabase-alternative"><span class="text-zinc-700 dark:text-zinc-300">Supabase alternative</span></a><a class="block p-3 pl-6 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/solutions/firebase-alternative"><span class="text-zinc-700 dark:text-zinc-300">Firebase alternative</span></a></div></details><a class="block p-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/articles"><span class="font-medium text-zinc-900 dark:text-white">Articles</span></a><a href="https://docs.anythink.cloud/" target="_blank" rel="noopener noreferrer" class="block p-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100"><span class="font-medium text-zinc-900 dark:text-white">Docs</span></a><a class="block p-3 hover:bg-zinc-100 dark:hover:bg-zinc-800 transition-colors duration-100" href="/pricing"><span class="font-medium text-zinc-900 dark:text-white">Pricing</span></a></div></div><div class="p-6 border-t border-gray-200 dark:border-gray-800 space-y-4 flex-shrink-0 bg-white dark:bg-zinc-900 isolate"><button type="button" class="flex items-center w-full p-3 hover:bg-brand-rust/10 dark:hover:bg-brand-rust/20 transition-colors"><svg class="w-5 h-5 mr-3 text-brand-rust" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path></svg><span class="font-medium text-zinc-900 dark:text-white">Dark Mode</span></button><a href="https://my.anythink.cloud/auth/login" target="_blank" rel="noopener noreferrer" class="px-3 py-2 text-sm text-gray-700 hover:text-gray-900 dark:text-white/90 dark:hover:text-white w-full text-center block">Log in</a><a href="https://my.anythink.cloud/auth/register" target="_blank" rel="noopener noreferrer" class="flex items-center justify-center bg-[#F97316] hover:bg-[#ea6c0e] text-white font-bold px-4 h-9 font-mono text-[11px] uppercase tracking-widest transition-colors shadow-lg shadow-[#F97316]/20 flex-shrink-0 w-full text-center block">Start free</a><button class="w-full py-3 bg-white dark:bg-zinc-800 border-2 border-[#F97316] text-[#F97316] font-mono text-[11px] uppercase tracking-widest transition-colors hover:bg-[#F97316] hover:text-white block">Talk to us</button><button type="button" class="w-full py-3 border border-gray-300 dark:border-white/20 text-gray-700 dark:text-white/90 font-mono text-[11px] uppercase tracking-widest transition-colors text-center cursor-pointer">Book a demo</button></div></div></div></div><div class="min-h-screen bg-white dark:bg-black"><section class="bg-[#F8F7F4] dark:bg-[#111] grid-bg pt-32 pb-20 relative"><div class="absolute top-0 left-0 right-0 h-1 bg-[#F97316]"></div><div class="max-w-[1200px] mx-auto px-6 relative z-10"><div class="flex flex-col mb-8 md:mb-12"><div class="w-full flex justify-start md:justify-end mb-4"><span class="text-2xl font-bold font-helvetica text-[#2C2C2C] dark:text-white"><span class="block">Authentication</span></span></div><div class="w-full h-[1px] bg-[#F97316]"></div></div><div class="grid grid-cols-1 [&>*]:min-w-0 md:grid-cols-2 gap-12 items-center"><div><h1 class="text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight font-helvetica mb-8 leading-[1.1] mt-[-20px] md:mt-[-30px]"><span class="block text-[#2C2C2C] dark:text-white">Sign-in for web and mobile,<!-- --> </span><span class="block mt-2 text-[#666666] dark:text-gray-400">verified on the server<!-- --> </span></h1><div class="text-lg md:text-xl font-light leading-relaxed mb-8 max-w-[600px] text-[#666666] dark:text-gray-300 [&_p]:mb-4 [&_p:last-child]:mb-0"><p>Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.</p></div><div class="flex flex-col gap-3 max-w-[280px]"><a href="https://my.anythink.cloud/auth/register" class="px-7 py-3 bg-[#F97316] text-white font-medium hover:bg-[#ea6c0e] transition-colors text-center shadow-lg shadow-[#F97316]/25">Start free</a><a href="https://docs.anythink.cloud/guides/authentication" class="px-7 py-3 border border-gray-300 dark:border-gray-600 text-[#2C2C2C] dark:text-white hover:border-[#F97316] font-medium transition-all text-center">Read the docs</a></div></div><div class="relative border border-gray-200 dark:border-gray-800 overflow-hidden bg-[#111] aspect-video"><video class="w-full h-auto bg-[#1A1A1A] h-full object-cover" poster="https://docs.anythink.cloud/clips/dashboard/authentication/google-sign-in.jpg" muted="" loop="" playsInline="" preload="metadata" aria-label="Authentication in the Anythink dashboard" data-clip="dashboard/authentication/google-sign-in"><source src="https://docs.anythink.cloud/clips/dashboard/authentication/google-sign-in.webm" type="video/webm"/><source src="https://docs.anythink.cloud/clips/dashboard/authentication/google-sign-in.mp4" type="video/mp4"/></video></div></div></div></section><section data-story="surfaces" class="py-20 md:py-24 border-b border-gray-200 dark:border-gray-800 bg-white dark:bg-[#0a0a0a]"><div class="max-w-[1200px] mx-auto px-6"><div class="max-w-[760px] mb-12"><h2 class="text-3xl md:text-5xl font-bold tracking-tight font-helvetica leading-[1.1] text-[#2C2C2C] dark:text-white text-balance">The same task, three ways</h2><p class="mt-4 text-lg md:text-xl font-light leading-relaxed text-[#5A5A5A] dark:text-gray-300">Every task works three ways, and all of them change the same project. Here's one: let people sign in with Google.</p></div><div class="grid grid-cols-1 md:grid-cols-3 gap-6"><figure class="min-w-0 flex flex-col border border-gray-200 dark:border-gray-800 bg-white dark:bg-[#111]"><figcaption class="px-5 pt-5"><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">The Anythink dashboard</p><p class="mt-2 text-sm text-[#5A5A5A] dark:text-gray-300 leading-relaxed">Add the Google credentials once per project.</p></figcaption><div class="mt-5 flex-1 flex items-center bg-[#1A1A1A]">
1<video class="w-full h-auto bg-[#1A1A1A] " poster="https://docs.anythink.cloud/clips/dashboard/authentication/google-sign-in.jpg" muted="" loop="" playsInline="" preload="metadata" aria-label="The Anythink dashboard: Settings â Social Sign-In â Google â Configure 2Web Client ID: paste it from Google Cloud 3Client secret: paste it from Google Cloud 4iOS Client IDs: add them for native apps 5Save 6 7â Google is listed by /auth/v1/providers" data-clip="dashboard/authentication/google-sign-in"><source src="https://docs.anythink.cloud/clips/dashboard/authentication/google-sign-in.webm" type="video/webm"/><source src="https://docs.anythink.cloud/clips/dashboard/authentication/google-sign-in.mp4" type="video/mp4"/></video></div></figure><figure class="min-w-0 flex flex-col border border-gray-200 dark:border-gray-800 bg-white dark:bg-[#111]"><figcaption class="px-5 pt-5"><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">The Anythink CLI</p><p class="mt-2 text-sm text-[#5A5A5A] dark:text-gray-300 leading-relaxed">The client ID and secret are prompted for, not passed as flags, so they stay out of your shell history.</p></figcaption><div class="demo-seq mt-5 flex-1 bg-[#1A1A1A] text-[#F5F3F0] p-5 text-[13px] leading-relaxed font-mono overflow-x-auto md:text-[14px]"><code class="block"><span class="hero-demo-line block whitespace-pre-wrap [overflow-wrap:anywhere] " style="animation-delay:0.2s"><span class="text-[#F97316] select-none">$ </span>anythink oauth google configure</span><span class="hero-demo-line block whitespace-pre-wrap [overflow-wrap:anywhere] " style="animation-delay:0.55s"><span class="text-[#F97316] select-none">$ </span>anythink oauth google status</span><span class="hero-demo-line block whitespace-pre-wrap [overflow-wrap:anywhere] " style="animation-delay:0.8999999999999999s"><span class="text-[#F97316] select-none">$ </span>anythink fetch /auth/v1/providers</span></code><ul class="mt-4 space-y-1.5 border-t border-white/10 pt-4"><li class="hero-demo-line flex gap-3" style="animation-delay:1.65s"><span class="text-[#7FD3A0]">â</span><span class="[overflow-wrap:anywhere]">Google client ID and secret saved to the project</span></li><li class="hero-demo-line flex gap-3" style="animation-delay:2s"><span class="text-[#7FD3A0]">â</span><span class="[overflow-wrap:anywhere]">Status shows Google as configured</span></li><li class="hero-demo-line flex gap-3" style="animation-delay:2.3499999999999996s"><span class="text-[#7FD3A0]">â</span><span class="[overflow-wrap:anywhere]">/auth/v1/providers lists Google</span></li></ul></div></figure><figure class="min-w-0 flex flex-col border border-gray-200 dark:border-gray-800 bg-white dark:bg-[#111]"><figcaption class="px-5 pt-5"><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">Claude, through MCP</p><p class="mt-2 text-sm text-[#5A5A5A] dark:text-gray-300 leading-relaxed">Keep the secret out of chat: set it in the dashboard or CLI, then ask the assistant to check the setup.</p></figcaption><div class="demo-seq mt-5 flex-1 bg-[#1A1A1A] text-[#F5F3F0] p-5 text-[13px] leading-relaxed font-mono"><p class="hero-demo-line [overflow-wrap:anywhere]" style="animation-delay:0.2s"><span class="text-[#F97316]">you ⺠</span>âIs Google sign-in configured on this project? Which sign-in buttons should my login page show?â</p><ul class="mt-4 space-y-1.5 border-t border-white/10 pt-4"><li class="hero-demo-line flex gap-3" style="animation-delay:1s"><span class="text-[#7FD3A0]">â</span><span class="[overflow-wrap:anywhere]">Ran oauth google status: Google is configured</span></li><li class="hero-demo-line flex gap-3" style="animation-delay:1.35s"><span class="text-[#7FD3A0]">â</span><span class="[overflow-wrap:anywhere]">Fetched /auth/v1/providers: Google is listed</span></li><li class="hero-demo-line flex gap-3" style="animation-delay:1.7s"><span class="text-[#7FD3A0]">â</span><span class="[overflow-wrap:anywhere]">Your login page should show a Google button</span></li></ul></div></figure></div></div></section><section data-story="proofs" class="py-20 md:py-24 border-b border-gray-200 dark:border-gray-800 bg-[#F8F7F4] dark:bg-[#0d0d0d]"><div class="max-w-[1200px] mx-auto px-6"><div class="max-w-[760px] mb-12"><h2 class="text-3xl md:text-5xl font-bold tracking-tight font-helvetica leading-[1.1] text-[#2C2C2C] dark:text-white text-balance">Why it holds up</h2></div><div class="grid grid-cols-1 md:grid-cols-2 gap-x-12 gap-y-14"><article class="min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6"><div aria-hidden="true" class="mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]"><canvas class="w-full h-full absolute inset-0" aria-hidden="true"></canvas></div><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">Native sign-in</p><h3 class="mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug">Identity tokens are verified, not trusted</h3><p class="mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed">Apple, Google and LinkedIn tokens are checked against each provider's published keys, and the token's subject must match the user identifier your app sent. A forged or swapped token is rejected.</p><div class="mt-5 flex flex-wrap gap-x-6 gap-y-2"><a href="https://docs.anythink.cloud/guides/authentication/social-sign-in" class="text-sm font-medium text-[#F97316] hover:underline">Social sign-in guide<!-- --> â</a></div></article><article class="min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6"><div aria-hidden="true" class="mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]"><canvas class="w-full h-full absolute inset-0" aria-hidden="true"></canvas></div><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">Stable identity</p><h3 class="mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug">The same user, even when the email changes</h3><p class="mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed">Anythink links each provider's stable subject ID to the user, so a returning user is matched behind Apple's private email relay or after changing their email address.</p><div class="mt-5 flex flex-wrap gap-x-6 gap-y-2"><a href="https://docs.anythink.cloud/guides/authentication/users-and-teams" class="text-sm font-medium text-[#F97316] hover:underline">
7Users and teams<!-- --> â</a></div></article><article class="min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6"><div aria-hidden="true" class="mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]"><canvas class="w-full h-full absolute inset-0" aria-hidden="true"></canvas></div><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">One session</p><h3 class="mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug">One JWT for your app, the API and MCP</h3><p class="mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed">The token your app receives works on every entity endpoint, and the Anythink MCP server authenticates with the same user JWT, so permissions apply the same way to people and assistants.</p><div class="mt-5 flex flex-wrap gap-x-6 gap-y-2"><a class="text-sm font-medium text-[#F97316] hover:underline" href="/products/instant-apis">Instant APIs<!-- --> â</a><a class="text-sm font-medium text-[#F97316] hover:underline" href="/solutions/ai-and-mcp">AI and MCP<!-- --> â</a></div></article><article class="min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6"><div aria-hidden="true" class="mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]"><canvas class="w-full h-full absolute inset-0" aria-hidden="true"></canvas></div><p class="font-mono text-xs uppercase tracking-widest text-[#F97316]">Access</p><h3 class="mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug">Sign-in feeds roles and row-level security</h3><p class="mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed">Every user has a role with per-entity permissions, and row-level security limits which records they reach, including group-scoped reads for teams.</p><div class="mt-5 flex flex-wrap gap-x-6 gap-y-2"><a class="text-sm font-medium text-[#F97316] hover:underline" href="/products/access-control">Access control<!-- --> â</a><a href="https://docs.anythink.cloud/guides/authentication/roles-and-permissions" class="text-sm font-medium text-[#F97316] hover:underline">Roles and permissions<!-- --> â</a></div></article></div></div></section><section class="bg-white dark:bg-[#0a0a0a] py-24"><div class="max-w-[1200px] mx-auto px-6"><div class="flex flex-col mb-10 md:mb-12"><div class="w-full flex justify-start mb-4"><div class="text-left max-w-[800px]"><h2 class="text-3xl md:text-5xl font-bold tracking-tight font-helvetica mb-3 leading-[1.1]"><span class="block text-[#2C2C2C] dark:text-white">Sign-in that ships<!-- --> </span><span class="block text-[#666666] dark:text-gray-400 mt-1">with your backend<!-- --> </span></h2><div class="text-xl text-[#5A5A5A] dark:text-gray-300 font-light leading-relaxed"><p>Email and password, magic links, native and web social sign-in, and JWT sessions, all on the same users your data model already links to.</p></div></div></div><div class="w-full h-[1px] bg-[#F97316]"></div></div><noscript><div class="space-y-6"><div class="border border-gray-200 dark:border-gray-800 p-5 rounded"><p class="font-bold text-[#2C2C2C] dark:text-white mb-2">Email, password and magic links</p><p class="text-sm text-[#666] dark:text-gray-400 mb-3 line-clamp-3">Register users, confirm their email, reset passwords and send one-time magic links from the built-in auth endpoints. Password sign-in waits until the email address is confirmed.</p></div><div class="border border-gray-200 dark:border-gray-800 p-5 rounded"><p class="font-bold text-[#2C2C2C] dark:text-white mb-2">Native Apple, Google and LinkedIn sign-in</p><p class="text-sm text-[#666] dark:text-gray-400 mb-3 line-clamp-3">Your iOS or Android app sends Anythink the provider's identity token. Anythink checks it against the provider's published keys and cross-checks the subject ID before it signs anyone in. Native sign-in needs your app's client IDs, not a client secret.</p></div><div class="border border-gray-200 dark:border-gray-800 p-5 rounded"><p class="font-bold text-[#2C2C2C] dark:text-white mb-2">Web OAuth with PKCE</p><p class="text-sm text-[#666] dark:text-gray-400 mb-3 line-clamp-3">For browser sign-in, Anythink runs the authorise and callback flow for each provider you enable, using PKCE where the provider supports it, and records UTM and referrer details when a user signs up.</p></div><div class="border border-gray-200 dark:border-gray-800 p-5 rounded"><p class="font-bold text-[#2C2C2C] dark:text-white mb-2">JWT sessions with refresh</p><p class="text-sm text-[#666] dark:text-gray-400 mb-3 line-clamp-3">Sign-in returns a JWT access token and a refresh token. Refreshing issues a new pair, logout revokes the refresh token, and transfer tokens hand a session from one app or device to another.</p></div><div class="border border-gray-200 dark:border-gray-800 p-5 rounded"><p class="font-bold text-[#2C2C2C] dark:text-white mb-2">Users are part of your data model</p><p class="text-sm text-[#666] dark:text-gray-400 mb-3 line-clamp-3">Every signed-in user is a record you can link to any entity with a user field, then use in roles, row-level security and workflows.</p></div><div class="border border-gray-200 dark:border-gray-800 p-5 rounded"><p class="font-bold text-[#2C2C2C] dark:text-white mb-2">One provider list per project</p><p class="text-sm text-[#666] dark:text-gray-400 mb-3 line-clamp-3">GET /auth/v1/providers returns the sign-in methods this project has configured, so your login page shows only the buttons that will work.</p></div></div></noscript><div class="js-only border border-gray-200 dark:border-gray-800 overflow-hidden"><div class="md:grid md:grid-cols-[220px_1fr]"><div class="relative md:border-r border-gray-200 dark:border-gray-800"><div role="tablist" aria-label="Features" class="flex overflow-x-auto md:overflow-visible md:flex-col border-b md:border-b-0 border-gray-200 dark:border-gray-800 scrollbar-hide"><button type="button" role="tab" id="_R_2aqnpfiulb_-tab-0" aria-selected="true" aria-controls="_R_2aqnpfiulb_-panel-0" tabindex="0" class="flex-shrink-0 md:w-full md:text-left px-4 py-3 md:px-5 md:py-4 border-r last:border-r-0 md:border-r-0 md:border-b md:last:border-b-0 border-gray-200 dark:border-gray-800 transition-colors whitespace-nowrap md:whitespace-normal bg-[#F97316] text-white"><span class="hidden md:block text-xs font-mono mb-1 text-white/60">01</span><span class="block font-bold text-sm leading-tight">Email, password and magic links</span></button><button type="button" role="tab" id="_R_2aqnpfiulb_-tab-1" aria-selected="false" aria-controls="_R_2aqnpfiulb_-panel-1" tabindex="-1" class="flex-shrink-0 md:w-full md:text-left px-4 py-3 md:px-5 md:py-4 border-r last:border-r-0 md:border-r-0 md:border-b md:last:border-b-0 border-gray-200 dark:border-gray-800 transition-colors whitespace-nowrap md:whitespace-normal bg-white dark:bg-[#1a1a1a] text-[#2C2C2C] dark:text-white md:hover:bg-gray-50 dark:md:hover:bg-[#222]"><span class="hidden md:block text-xs font-mono mb-1 text-[#F97316]">02</span><span class="block font-bold text-sm leading-tight">Native Apple, Google and LinkedIn sign-in</span></button><button type="button" role="tab" id="_R_2aqnpfiulb_-tab-2" aria-selected="false" aria-controls="_R_2aqnpfiulb_-panel-2" tabindex="-1" class="flex-shrink-0 md:w-full md:text-left px-4 py-3 md:px-5 md:py-4 border-r last:border-r-0 md:border-r-0 md:border-b md:last:border-b-0 border-gray-200 dark:border-gray-800 transition-colors whitespace-nowrap md:whitespace-normal bg-white dark:bg-[#1a1a1a] text-[#2C2C2C] dark:text-white md:hover:bg-gray-50 dark:md:hover:bg-[#222]"><span class="hidden md:block text-xs font-mono mb-1 text-[#F97316]">03</span><span class="block font-bold text-sm leading-tight">Web OAuth with PKCE</span></button><button type="button" role="tab" id="_R_2aqnpfiulb_-tab-3" aria-selected="false" aria-controls="_R_2aqnpfiulb_-panel-3" tabindex="-1" class="flex-shrink-0 md:w-full md:text-left px-4 py-3 md:px-5 md:py-4 border-r last:border-r-0 md:border-r-0 md:border-b md:last:border-b-0 border-gray-200 dark:border-gray-800 transition-colors whitespace-nowrap md:whitespace-normal bg-white dark:bg-[#1a1a1a] text-[#2C2C2C] dark:text-white md:hover:bg-gray-50 dark:md:hover:bg-[#222]"><span class="hidden md:block text-xs font-mono mb-1 text-[#F97316]">04</span><span class="block font-bold text-sm leading-tight">JWT sessions with refresh</span></button><button type="button" role="tab" id="_R_2aqnpfiulb_-tab-4" aria-selected="false" aria-controls="_R_2aqnpfiulb_-panel-4" tabindex="-1" class="flex-shrink-0 md:w-full md:text-left px-4 py-3 md:px-5 md:py-4 border-r last:border-r-0 md:border-r-0 md:border-b md:last:border-b-0 border-gray-200 dark:border-gray-800 transition-colors whitespace-nowrap md:whitespace-normal bg-white dark:bg-[#1a1a1a] text-[#2C2C2C] dark:text-white md:hover:bg-gray-50 dark:md:hover:bg-[#222]"><span class="hidden md:block text-xs font-mono mb-1 text-[#F97316]">05</span><span class="block font-bold text-sm leading-tight">Users are part of your data model</span></button><button type="button" role="tab" id="_R_2aqnpfiulb_-tab-5" aria-selected="false" aria-controls="_R_2aqnpfiulb_-panel-5" tabindex="-1" class="flex-shrink-0 md:w-full md:text-left px-4 py-3 md:px-5 md:py-4 border-r last:border-r-0 md:border-r-0 md:border-b md:last:border-b-0 border-gray-200 dark:border-gray-800 transition-colors whitespace-nowrap md:whitespace-normal bg-white dark:bg-[#1a1a1a] text-[#2C2C2C] dark:text-white md:hover:bg-gray-50 dark:md:hover:bg-[#222]"><span class="hidden md:block text-xs font-mono mb-1 text-[#F97316]">06</span><span class="block font-bold text-sm leading-tight">One provider list per project</span></button></div><div class="pointer-events-none absolute right-0 top-0 bottom-0 w-8 bg-gradient-to-l from-white dark:from-[#1a1a1a] to-transparent md:hidden"></div></div><div><div role="tabpanel" id="_R_2aqnpfiulb_-panel-0" aria-labelledby="_R_2aqnpfiulb_-tab-0" class="flex flex-col tab-panel-enter"><div class="aspect-video bg-[#F4F3F0] dark:bg-[#111] overflow-hidden relative"><img alt="Email, password and magic links" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="(min-width: 1280px) 900px, (min-width: 768px) 70vw, 100vw" srcSet="/_next/image?url=%2Fcdn-assets%2F20804318%2F53fd07ad0bdc4e91ab10bae3fed6b4af.png&w=640&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 640w, /_next/image?url=%2Fcdn-assets%2F20804318%2F53fd07ad0bdc4e91ab10bae3fed6b4af.png&w=768&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 768w, /_next/image?url=%2Fcdn-assets%2F20804318%2F53fd07ad0bdc4e91ab10bae3fed6b4af.png&w=1024&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1024w, /_next/image?url=%2Fcdn-assets%2F20804318%2F53fd07ad0bdc4e91ab10bae3fed6b4af.png&w=1280&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1280w, /_next/image?url=%2Fcdn-assets%2F20804318%2F53fd07ad0bdc4e91ab10bae3fed6b4af.png&w=1600&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1600w" src="/_next/image?url=%2Fcdn-assets%2F20804318%2F53fd07ad0bdc4e91ab10bae3fed6b4af.png&w=1600&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc"/></div><div class="p-6 flex flex-col justify-between flex-1 bg-white dark:bg-[#1a1a1a]"><div><h3 class="text-lg font-bold text-[#2C2C2C] dark:text-white mb-2 leading-tight">Email, password and magic links</h3><p class="text-sm text-[#666] dark:text-gray-400 leading-relaxed">Register users, confirm their email, reset passwords and send one-time magic links from the built-in auth endpoints. Password sign-in waits until the email address is confirmed.</p></div><div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-800 flex items-center justify-between"><span></span><span class="hidden md:inline font-mono text-xs text-gray-600 dark:text-gray-400">01<!-- --> /<!-- --> <!-- -->06</span></div></div></div><div role="tabpanel" id="_R_2aqnpfiulb_-panel-1" aria-labelledby="_R_2aqnpfiulb_-tab-1" hidden="" class="hidden"><div class="aspect-video bg-[#F4F3F0] dark:bg-[#111] overflow-hidden relative"></div><div class="p-6 flex flex-col justify-between flex-1 bg-white dark:bg-[#1a1a1a]"><div><h3 class="text-lg font-bold text-[#2C2C2C] dark:text-white mb-2 leading-tight">Native Apple, Google and LinkedIn sign-in</h3><p class="text-sm text-[#666] dark:text-gray-400 leading-relaxed">Your iOS or Android app sends Anythink the provider's identity token. Anythink checks it against the provider's published keys and cross-checks the subject ID before it signs anyone in. Native sign-in needs your app's client IDs, not a client secret.</p></div><div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-800 flex items-center justify-between"><span></span><span class="hidden md:inline font-mono text-xs text-gray-600 dark:text-gray-400">01<!-- --> /<!-- --> <!-- -->06</span></div></div></div><div role="tabpanel" id="_R_2aqnpfiulb_-panel-2" aria-labelledby="_R_2aqnpfiulb_-tab-2" hidden="" class="hidden"><div class="aspect-video bg-[#F4F3F0] dark:bg-[#111] overflow-hidden relative"></div><div class="p-6 flex flex-col justify-between flex-1 bg-white dark:bg-[#1a1a1a]"><div><h3 class="text-lg font-bold text-[#2C2C2C] dark:text-white mb-2 leading-tight">Web OAuth with PKCE</h3><p class="text-sm text-[#666] dark:text-gray-400 leading-relaxed">For browser sign-in, Anythink runs the authorise and callback flow for each provider you enable, using PKCE where the provider supports it, and records UTM and referrer details when a user signs up.</p></div><div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-800 flex items-center justify-between"><span></span><span class="hidden md:inline font-mono text-xs text-gray-600 dark:text-gray-400">01<!-- --> /<!-- --> <!-- -->06</span></div></div></div><div role="tabpanel" id="_R_2aqnpfiulb_-panel-3" aria-labelledby="_R_2aqnpfiulb_-tab-3" hidden="" class="hidden"><div class="aspect-video bg-[#F4F3F0] dark:bg-[#111] overflow-hidden relative"></div><div class="p-6 flex flex-col justify-between flex-1 bg-white dark:bg-[#1a1a1a]"><div><h3 class="text-lg font-bold text-[#2C2C2C] dark:text-white mb-2 leading-tight">JWT sessions with refresh</h3><p class="text-sm text-[#666] dark:text-gray-400 leading-relaxed">Sign-in returns a JWT access token and a refresh token. Refreshing issues a new pair, logout revokes the refresh token, and transfer tokens hand a session from one app or device to another.</p></div><div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-800 flex items-center justify-between"><span></span><span class="hidden md:inline font-mono text-xs text-gray-600 dark:text-gray-400">01<!-- --> /<!-- --> <!-- -->06</span></div></div></div><div role="tabpanel" id="_R_2aqnpfiulb_-panel-4" aria-labelledby="_R_2aqnpfiulb_-tab-4" hidden="" class="hidden"><div class="aspect-video bg-[#F4F3F0] dark:bg-[#111] overflow-hidden relative"></div><div class="p-6 flex flex-col justify-between flex-1 bg-white dark:bg-[#1a1a1a]"><div><h3 class="text-lg font-bold text-[#2C2C2C] dark:text-white mb-2 leading-tight">Users are part of your data model</h3><p class="text-sm text-[#666] dark:text-gray-400 leading-relaxed">Every signed-in user is a record you can link to any entity with a user field, then use in roles, row-level security and workflows.</p></div><div class="mt-4 pt-4 border-t border-gray-200 dark:border-gray-800 flex items-center justify-between"><span></span><span class="hidden md:inline font-mono text-xs text-gray-600 dark:text-gray-400">01<!-- --> /<!-- --> <!-- -->06</span></div></div></div><div role="tabpanel" id="_R_2aqnpfiulb_-panel-5" aria-labelledby="_R_2aqnpfiulb_-tab-5" hidden="" class="hidden"><div class="aspect-video bg-[#F4F3F0] dark:bg-[#111] overflow-hidden relative"></div><div class="p-6 flex flex-col justify-between flex-1 bg-white dark:bg-[#1a1a1a]"><div><h3 class="text-lg font-bold text-[#2C2C2C] dark:text-white mb-2 leading-tight">One provider list per project</h3><p class="text-sm text-[#666] dark:text-gray-400 leading-relaxed">GET /auth/v1/providers returns the sign-in methods this project has configured, so your login page shows only the buttons that will work.</p></div><div class="mt-4 pt-4 border-t border-gray-200 dark:b
7order-gray-800 flex items-center justify-between"><span></span><span class="hidden md:inline font-mono text-xs text-gray-600 dark:text-gray-400">01<!-- --> /<!-- --> <!-- -->06</span></div></div></div></div></div><div class="flex md:hidden items-center justify-center py-1.5 border-t border-gray-200 dark:border-gray-800 bg-white dark:bg-[#1a1a1a]"><button type="button" aria-label="Go to tab 1" class="flex h-6 w-6 items-center justify-center"><span class="h-1.5 transition-all duration-200 w-4 bg-[#F97316]"></span></button><button type="button" aria-label="Go to tab 2" class="flex h-6 w-6 items-center justify-center"><span class="h-1.5 transition-all duration-200 w-1.5 bg-gray-300 dark:bg-gray-700"></span></button><button type="button" aria-label="Go to tab 3" class="flex h-6 w-6 items-center justify-center"><span class="h-1.5 transition-all duration-200 w-1.5 bg-gray-300 dark:bg-gray-700"></span></button><button type="button" aria-label="Go to tab 4" class="flex h-6 w-6 items-center justify-center"><span class="h-1.5 transition-all duration-200 w-1.5 bg-gray-300 dark:bg-gray-700"></span></button><button type="button" aria-label="Go to tab 5" class="flex h-6 w-6 items-center justify-center"><span class="h-1.5 transition-all duration-200 w-1.5 bg-gray-300 dark:bg-gray-700"></span></button><button type="button" aria-label="Go to tab 6" class="flex h-6 w-6 items-center justify-center"><span class="h-1.5 transition-all duration-200 w-1.5 bg-gray-300 dark:bg-gray-700"></span></button></div></div></div></section><section class="py-16 border-t border-gray-200 dark:border-zinc-700"><div class="max-w-6xl mx-auto px-4 sm:px-6"><div class="grid grid-cols-1 lg:grid-cols-[1fr_2fr] gap-10 items-start"><div><p class="text-sm font-medium font-mono text-[#F97316] uppercase tracking-widest mb-2">In practice</p><h2 class="text-2xl font-bold text-gray-900 dark:text-white mb-2 leading-snug">The REST calls behind each sign-in method</h2><div role="tablist" aria-orientation="vertical" aria-label="The REST calls behind each sign-in method" class="mt-8 flex flex-col gap-1"><button type="button" role="tab" id="_R_1cqnpfiulb_-tab-0" aria-selected="true" aria-controls="_R_1cqnpfiulb_-panel" tabindex="0" class="text-left px-4 py-2.5 font-mono text-sm border transition-colors border-[#F97316]/60 bg-[#F97316]/5 text-[#F97316]">Email and password</button><button type="button" role="tab" id="_R_1cqnpfiulb_-tab-1" aria-selected="false" aria-controls="_R_1cqnpfiulb_-panel" tabindex="-1" class="text-left px-4 py-2.5 font-mono text-sm border transition-colors border-transparent text-zinc-600 hover:text-zinc-900 hover:border-zinc-300 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:border-zinc-600">Magic link</button><button type="button" role="tab" id="_R_1cqnpfiulb_-tab-2" aria-selected="false" aria-controls="_R_1cqnpfiulb_-panel" tabindex="-1" class="text-left px-4 py-2.5 font-mono text-sm border transition-colors border-transparent text-zinc-600 hover:text-zinc-900 hover:border-zinc-300 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:border-zinc-600">Native Apple</button><button type="button" role="tab" id="_R_1cqnpfiulb_-tab-3" aria-selected="false" aria-controls="_R_1cqnpfiulb_-panel" tabindex="-1" class="text-left px-4 py-2.5 font-mono text-sm border transition-colors border-transparent text-zinc-600 hover:text-zinc-900 hover:border-zinc-300 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:border-zinc-600">Refresh</button><button type="button" role="tab" id="_R_1cqnpfiulb_-tab-4" aria-selected="false" aria-controls="_R_1cqnpfiulb_-panel" tabindex="-1" class="text-left px-4 py-2.5 font-mono text-sm border transition-colors border-transparent text-zinc-600 hover:text-zinc-900 hover:border-zinc-300 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:border-zinc-600">Provider list</button></div></div><div role="tabpanel" id="_R_1cqnpfiulb_-panel" aria-labelledby="_R_1cqnpfiulb_-tab-0" class="border border-gray-200 bg-[#0d0d0d] overflow-hidden"><div class="flex items-center gap-1.5 px-4 py-3 border-b border-white/10"><span class="w-2.5 h-2.5 rounded-full bg-red-500/60"></span><span class="w-2.5 h-2.5 rounded-full bg-yellow-500/60"></span><span class="w-2.5 h-2.5 rounded-full bg-green-500/60"></span><span class="ml-3 font-mono text-xs text-white/60">email and password<!-- -->.<!-- -->ts</span></div><pre tabindex="0" class="p-6 text-sm font-mono text-gray-200 overflow-x-auto leading-relaxed whitespace-pre"><span class="text-gray-200">POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/token<!-- --> 8</span><span class="text-gray-200">Content-Type: application/json<!-- --> 9</span><span class="text-gray-200"> 10</span><span class="text-gray-200">{<!-- --> 11</span><span class="text-gray-200"> "email": "[email protected]",<!-- --> 12</span><span class="text-gray-200"> "password": "<password>"<!-- --> 13</span><span class="text-gray-200">}<!-- --> 14</span></pre></div></div><div class="mt-16 pt-16 border-t border-gray-100 dark:border-zinc-800"><div><div class="mb-10"><p class="text-sm font-medium font-mono text-[#F97316] uppercase tracking-widest mb-2">How it works</p><h2 class="text-2xl font-bold text-gray-900 dark:text-white leading-snug">From an empty project to a signed-in user</h2></div><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-px bg-gray-200 dark:bg-zinc-700"><div class="bg-white dark:bg-zinc-900 p-8"><div class="font-mono text-5xl font-bold leading-none select-none mb-6" style="color:rgba(249,115,22,0.65)">01</div><h3 class="font-bold text-gray-900 dark:text-white text-base mb-3 leading-snug">Pick your sign-in methods</h3><p class="text-gray-600 dark:text-zinc-400 leading-relaxed text-sm">Email and password and magic links use the built-in auth endpoints. Turn on Apple, Google or LinkedIn under Settings ⺠Social Sign-In with your client IDs.</p></div><div class="bg-white dark:bg-zinc-900 p-8"><div class="font-mono text-5xl font-bold leading-none select-none mb-6" style="color:rgba(249,115,22,0.65)">02</div><h3 class="font-bold text-gray-900 dark:text-white text-base mb-3 leading-snug">Show the right buttons</h3><p class="text-gray-600 dark:text-zinc-400 leading-relaxed text-sm">Your login page calls /auth/v1/providers and renders only the methods this project has configured.</p></div><div class="bg-white dark:bg-zinc-900 p-8"><div class="font-mono text-5xl font-bold leading-none select-none mb-6" style="color:rgba(249,115,22,0.65)">03</div><h3 class="font-bold text-gray-900 dark:text-white text-base mb-3 leading-snug">Sign the user in</h3><p class="text-gray-600 dark:text-zinc-400 leading-relaxed text-sm">Web apps run the OAuth redirect, with PKCE where the provider supports it. Mobile apps send the provider's identity token to /auth/v1/native/{provider}, which verifies it and creates the user on first sign-in.</p></div><div class="bg-white dark:bg-zinc-900 p-8"><div class="font-mono text-5xl font-bold leading-none select-none mb-6" style="color:rgba(249,115,22,0.65)">04</div><h3 class="font-bold text-gray-900 dark:text-white text-base mb-3 leading-snug">Use the session</h3><p class="text-gray-600 dark:text-zinc-400 leading-relaxed text-sm">Send the access token as a Bearer token on each API call and refresh it when it expires. In React, the open-source SDK'
14s AuthProvider and useAuth handle this for you.</p></div><div class="bg-white dark:bg-zinc-900 p-8"><div class="font-mono text-5xl font-bold leading-none select-none mb-6" style="color:rgba(249,115,22,0.65)">05</div><h3 class="font-bold text-gray-900 dark:text-white text-base mb-3 leading-snug">Decide what they can reach</h3><p class="text-gray-600 dark:text-zinc-400 leading-relaxed text-sm">Give the user a role, link records to them, and let row-level security filter what they see.</p></div><div class="bg-[#F97316]/5 dark:bg-zinc-900 p-8 flex flex-col"><p class="font-mono text-xs uppercase tracking-widest text-[#9A3412] dark:text-[#F97316]">Follow the guide</p><h3 class="mt-2 font-bold text-gray-900 dark:text-white text-base leading-snug">Google sign-in, start to finish</h3><p class="mt-3 text-gray-600 dark:text-zinc-400 leading-relaxed text-sm">Create the credentials in Google Cloud, add them to the project and people can sign in with Google.</p><a href="https://docs.anythink.cloud/guides/authentication/social-sign-in" class="mt-5 inline-block text-sm font-medium text-[#9A3412] dark:text-[#F97316] hover:underline">Read the social sign-in guide<!-- --> â</a></div></div></div></div></div></section><section class="py-32 bg-white dark:bg-[#1a1a1a]"><div class="max-w-[1200px] mx-auto px-6"><div class="text-left mb-16"><h2 class="text-4xl md:text-5xl font-bold tracking-tight font-helvetica text-[#2C2C2C] dark:text-white mb-6 leading-[1.1]">Frequently Asked Questions</h2></div><div class="space-y-0"><details class="group border-b border-gray-200 dark:border-gray-700"><summary class="w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [&::-webkit-details-marker]:hidden"><span class="text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]">What sign-in methods does Anythink support?</span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></summary><div class="pb-6 text-[#666666] dark:text-gray-300 leading-relaxed" style="line-height:1.75"><p class="mb-3 last:mb-0">Email and password (with email confirmation and password reset), magic links, native Apple, Google and LinkedIn sign-in for mobile apps, and web OAuth sign-in for the providers you enable. Every method ends with the same JWT access and refresh tokens.</p></div></details><details class="group border-b border-gray-200 dark:border-gray-700"><summary class="w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [&::-webkit-details-marker]:hidden"><span class="text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]">How do I add Sign in with Apple to an iOS app?</span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></summary><div class="pb-6 text-[#666666] dark:text-gray-300 leading-relaxed" style="line-height:1.75"><p class="mb-3 last:mb-0">Turn on Apple under <strong class="font-semibold text-[#2C2C2C] dark:text-white">Settings ⺠Social Sign-In</strong> in the Anythink dashboard and list your app's client IDs. Your app sends the identity token and user identifier from Sign in with Apple to POST /auth/v1/native/apple. Anythink verifies the token against Apple's published keys, checks the subject matches, and returns a session.</p><p class="mb-3 last:mb-0">Apple only shares the user's name on the first sign-in, so send given_name and family_name on that call.</p></div></details>
14<details class="group border-b border-gray-200 dark:border-gray-700"><summary class="w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [&::-webkit-details-marker]:hidden"><span class="text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]">How do access and refresh tokens work?</span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></summary><div class="pb-6 text-[#666666] dark:text-gray-300 leading-relaxed" style="line-height:1.75"><p class="mb-3 last:mb-0">Sign-in returns a JWT access token for API calls and a refresh token. Send the access token as a Bearer token. When it expires, POST the refresh token to /auth/v1/refresh for a new pair. Logging out revokes the refresh token.</p></div></details><details class="group border-b border-gray-200 dark:border-gray-700"><summary class="w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [&::-webkit-details-marker]:hidden"><span class="text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]">Can I control what each signed-in user can see?</span><svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></summary><div class="pb-6 text-[#666666] dark:text-gray-300 leading-relaxed" style="line-height:1.75"><p class="mb-3 last:mb-0">Yes. Every user has a role, and roles carry permissions per entity, such as orders:read. Row-level security then limits which records a user reaches. Users can also belong to groups, so team members can read their team's records while staff-only records stay private.</p></div></details></div><div class="mt-16 text-left"><p class="text-[#666666] dark:text-gray-400 mb-4">Still have questions?</p><a href="/contact" class="inline-block px-7 py-3 bg-[#F97316] text-white font-medium hover:bg-[#ea6c0e] transition-colors shadow-lg shadow-[#F97316]/25">Get in Touch</a></div></div></section><noscript><section class="py-20 bg-[#F8F7F4] dark:bg-[#1a1a1a]"><div class="max-w-[1200px] mx-auto px-6"><div><h3 class="text-2xl font-bold text-[#2C2C2C] dark:text-white mb-6">Documentation</h3><p class="text-gray-600 dark:text-gray-400 mb-8">Guides and reference at docs.anythink.cloud.</p><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"><div class="bg-white dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700"><h4 class="font-bold text-[#2C2C2C] dark:text-white mb-3">Mobile app backend</h4><p class="text-sm text-gray-600 dark:text-gray-400 mb-4 line-clamp-2">A backend for a mobile app: sign-in, push notifications with action buttons, Apple in-app purchases and file uploads, all from one data model.</p><a href="https://docs.anythink.cloud" class="text-[#F97316] hover:underline text-sm font-medium" target="_blank" rel="noopener noreferrer">Read More â</a></div><div class="bg-white dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700"><h4 class="font-bold text-[#2C2C2C] dark:text-white mb-3">SaaS backend for teams</h4><p class="text-sm text-gray-600 dark:text-gray-400 mb-4 line-clamp-2">Multi-user projects with roles, permissions, groups and row-level security, so each team only ever sees its own records.<
14/p><a href="https://docs.anythink.cloud" class="text-[#F97316] hover:underline text-sm font-medium" target="_blank" rel="noopener noreferrer">Read More â</a></div><div class="bg-white dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700"><h4 class="font-bold text-[#2C2C2C] dark:text-white mb-3">Sign in users: email, tokens and API keys</h4><p class="text-sm text-gray-600 dark:text-gray-400 mb-4 line-clamp-2">Register and sign in users with email and password, manage sessions with access and refresh tokens, reset passwords, and know when to use an API key.</p><a href="https://docs.anythink.cloud/guides/authentication/sign-in" class="text-[#F97316] hover:underline text-sm font-medium" target="_blank" rel="noopener noreferrer">Read More â</a></div></div></div></div></section></noscript><section class="bg-[#F5F3F0] dark:bg-[#2a2a2a] py-10 md:py-12"><div class="max-w-[1200px] mx-auto px-6"><div class="flex flex-col mb-5 md:mb-6"><div class="w-full flex justify-start mb-4"><div class="text-left max-w-[800px]"><h2 class="text-3xl md:text-5xl font-bold tracking-tight font-helvetica text-[#2C2C2C] dark:text-white mb-3 leading-[1.1]">Ready to go?</h2><div class="text-xl text-[#5A5A5A] dark:text-gray-300 font-light leading-relaxed"><p>Create an account and start building</p></div></div></div><div class="w-full h-[2px] bg-gradient-to-r from-[#F97316] via-[#c4d1c5] to-[#c4d1c5] dark:from-[#F97316] dark:via-[#c4d1c5] dark:to-[#c4d1c5]"></div></div><div class="flex flex-col gap-2 md:gap-3 max-w-[280px] ml-auto"><a href="https://my.anythink.cloud/auth/register" class="px-7 py-3 bg-[#F97316] text-white font-medium hover:bg-[#ea6c0e] transition-colors text-center shadow-lg shadow-[#F97316]/25">Start free</a></div></div></section></div><section class="bg-[#F8F7F4] dark:bg-[#1a1a1a] py-8 "><div class="max-w-[1200px] mx-auto px-6"><nav class="" aria-label="Breadcrumb"><ol class="flex items-center flex-wrap gap-y-1 font-mono text-xs tracking-wide overflow-hidden"><li class="flex items-center"><a class="text-[#2C2C2C]/70 dark:text-gray-500 hover:text-[#F97316] dark:hover:text-[#F97316] transition-colors flex items-center min-h-6 min-w-6 justify-center -ml-1.5" aria-label="Home" title="Home" href="/"><svg class="w-3.5 h-3.5" viewBox="0 0 134.88 144.19" fill="currentColor" aria-hidden="true"><path d="M53.43,121.21h-25.09V42.71c0-10.89,8.76-19.72,19.56-19.72h39.08c10.79,0,19.56,8.84,19.56,19.72v78.5h-25.06c-1.78-6.11-7.39-10.57-14.02-10.57s-12.24,4.46-14.02,10.57ZM67.46,67.3c-8.07,0-14.62,6.61-14.62,14.74s6.55,14.74,14.62,14.74,14.62-6.61,14.62-14.74-6.55-14.74-14.62-14.74Z"></path></svg></a><span class="mx-2 text-[#2C2C2C]/30 dark:text-gray-700 select-none">/</span></li><li class="flex items-center"><a class="text-[#2C2C2C]/70 dark:text-gray-500 hover:text-[#F97316] dark:hover:text-[#F97316] transition-colors flex items-center" title="Products" href="/products">Products</a><span class="mx-2 text-[#2C2C2C]/30 dark:text-gray-700 select-none">/</span></li><li class="flex items-center"><span class="text-[#2C2C2C] dark:text-white flex items-center" aria-current="page">Authentication</span></li></ol></nav></div></section><footer class="bg-black text-white"><div class="px-8 py-20"><div class="max-w-[1200px] mx-auto"><div class="flex flex-col lg:flex-row justify-between gap-12 lg:gap-16 mb-20"><div class="space-y-6 flex-shrink-0"><div class="relative w-[180px] h-[120px]"><img alt="Anythink" loading="lazy" decoding="async" data-nimg="fill" class="object-contain brightness-0 invert" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="180px" srcSet="/_next/image?url=%2Fanythink-rotating.gif&w=16&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 16w, /_next/image?url=%2Fanythink-rotating.gif&w=32&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 32w, /_next/image?url=%2Fanythink-rotating.gif&w=48&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 48w, /_next/image?url=%2Fanythink-rotating.gif&w=64&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 64w, /_next/image?url=%2Fanythink-rotating.gif&w=96&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 96w, /_next/image?url=%2Fanythink-rotating.gif&w=128&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 128w, /_next/image?url=%2Fanythink-rotating.gif&w=256&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 256w, /_next/image?url=%2Fanythink-rotating.gif&w=384&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 384w, /_next/image?url=%2Fanythink-rotating.gif&w=640&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 640w, /_next/image?url=%2Fanythink-rotating.gif&w=768&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 768w, /_next/image?url=%2Fanythink-rotating.gif&w=1024&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1024w, /_next/image?url=%2Fanythink-rotating.gif&w=1280&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1280w, /_next/image?url=%2Fanythink-rotating.gif&w=1600&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc 1600w" src="/_next/image?url=%2Fanythink-rotating.gif&w=1600&q=75&dpl=dpl_Bc5z7gwpQXxz2J4WgZzBhektVvNc"/></div><p class="text-sm text-gray-300 max-w-[180px]">The whole backend, in one project.</p></div><div class="flex-1 flex flex-col lg:flex-row justify-end gap-8 lg:gap-12"><div class="flex flex-col sm:flex-row gap-8 lg:gap-12"><div><div class="space-y-3"><h3 class="font-bold mb-4 text-gray-100">Product</h3><ul class="space-y-2"><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/authentication">Authentication</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/workflow-automation">Workflows</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/instant-apis">Instant APIs</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/visual-database-designer">Visual Database Designer</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/smart-file-manager">Smart File Manager</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/subscriptions">Subscriptions</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/powerful-search-engine">Search</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/access-control">Access Control</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/dashboards">Dashboards</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/integrations">Integrations</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/push-notifications">Push Notifications</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/secrets">Secrets</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/products/email">Email</a></li></ul></div></div><div><div class="space-y-3"><h3 class="font-bold mb-4 text-gray-100">Solutions</h3><ul class="space-y-2"><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/content-manager">Content Management</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/flexible-data-views">Flexible Data Views</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/white-label-platform">Branded dashboard</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/typescript-sdk">TypeScript SDK</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/anythink-cli">Anythink CLI</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/ai-and-mcp">AI & MCP</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/migrate-from-amazon-pinpoint">Migrate from Amazon Pinpoint</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/migrate-from-firebase-extensions">Migrate from Firebase Extensions</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/supabase-alternative">Supabase alternative</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/firebase-alternative">Firebase alternative</a></li></ul></div></div><div><div class="space-y-3"><h3 class="font-bold mb-4 text-gray-100">Who it's for</h3><ul class="space-y-2"><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/for-founders">For Founders</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/for-enterprise">For Enterprise</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/solutions/for-agencies">For Agencies</a></li></ul></div></div><div><div class="space-y-3"><h3 class="font-bold mb-4 text-gray-100">Get Started</h3><ul class="space-y-2"><li><a href="https://docs.anythink.cloud/" target="_blank" rel="noopener noreferrer" class="text-sm text-gray-400 hover:text-gray-200 transition-colors">Documentation</a></li><li><a href="https://my.anythink.cloud/auth/register" target="_blank" rel="noopener noreferrer" class="text-sm text-gray-400 hover:text-gray-200 transition-colors">Sign Up Free</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/pricing">Pricing</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/articles">All Articles</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/comparisons">Comparisons</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/careers">Careers</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/policy/terms-of-service">Terms of Service</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/policy/privacy-policy">Privacy Policy</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/policy/cookie-policy">Cookie Policy</a></li><li><a class="text-sm text-gray-400 hover:text-gray-200 transition-colors" href="/contact">Contact</a></li></ul></div></div></div><div class="space-y-6 flex-shrink-0"><h3 class="font-bold mb-4 text-white">Subscribe</h3><p class="text-sm text-gray-300 mb-4 max-w-[220px]">Get new features and releases by email.</p><div class="max-w-[220px]"><form class="space-y-3"><input type="email" placeholder="Enter your email" aria-label="Email address" required="" class="w-full p-3 bg-gray-800 text-white placeholder-gray-400 border border-gray-600 focus:outline-none focus:ring-2 focus:ring-[#F97316]" value=""/><button type="submit" class="w-full py-3 bg-[#F97316] text-white hover:bg-[#ea6c0e] transition-colors disabled:opacity-50 disabled:cursor-not-allowed shadow-lg shadow-[#F97316]
14/25">Subscribe</button></form></div><p class="text-xs text-gray-400 max-w-[220px] mt-4">By subscribing you agree to our Privacy Policy.</p></div></div></div><div class="flex flex-col md:flex-row justify-between items-center gap-6 pt-8 border-t border-gray-700"><div class="text-sm text-gray-400 text-center md:text-left flex flex-col sm:flex-row items-center gap-2 sm:gap-6"><p>© 2026 Anythink®. All rights reserved.</p><button type="button" class="text-sm text-gray-400 hover:text-gray-200 underline-offset-2 hover:underline transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[#F97316]">Cookie settings</button></div><div class="flex flex-col sm:flex-row items-center gap-6"><a href="https://discord.gg/B2VxUja95S" target="_blank" rel="noopener noreferrer" class="flex items-center gap-2.5 group"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 640 512" class="w-5 h-5 text-gray-400 group-hover:text-[#5865F2] transition-colors flex-shrink-0" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"></path></svg><span><span class="block text-sm font-medium text-gray-300 group-hover:text-white transition-colors leading-tight">Join the community</span><span class="block text-xs text-gray-400 leading-tight">Get help · share what you're building</span></span></a><div class="hidden sm:block w-px h-8 bg-gray-700"></div><div class="flex items-center gap-1"><span class="text-xs text-gray-400 mr-2 font-mono uppercase tracking-wider">Company</span><a href="https://x.com/anythink_cloud" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="Twitter"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg></a><a href="https://www.linkedin.com/company/anythink-cloud" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="LinkedIn"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg></a><a href="https://bsky.app/profile/anythink-uk.bsky.social" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="BlueSky"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z"></path></svg></a><a href="https://www.youtube.com/@anythink_cloud" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="YouTube"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg></a><a href="https://www.producthunt.com/products/anythink?launch=anythink" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="Product Hunt"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z"></path></svg></a><a href="https://www.npmjs.com/package/@anythink-cloud/sdk" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="Open Source Typescript SDK - NPM Package"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z"></path></svg></a><a href="https://github.com/Anythink-Ltd" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="Github - Link to open source projects including our TypeScript SDK"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a></div><div class="hidden sm:block w-px h-8 bg-gray-700"></div><div class="flex items-center gap-1"><span class="text-xs text-gray-400 mr-2 font-mono uppercase tracking-wider">Founder</span><a href="https://www.tiktok.com/@chris.addams" target="_blank" rel="noopener noreferrer" class="p-1.5 text-gray-400 hover:text-white transition-colors" title="TikTok"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="w-5 h-5" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z"></path></svg></a></div></div></div></div></div></footer><div class="fixed bottom-6 right-6 z-50 hidden lg:flex flex-col items-end"><div class="relative"><button aria-label="Open AI chat" class="relative flex items-center gap-2 bg-[#F97316] hover:bg-[#ea6c0e] text-white transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[#F97316] focus-visible:ring-offset-2 shadow-lg shadow-[#F97316]
14/30 px-4 h-12"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path></svg><span class="font-mono font-bold text-[11px] uppercase tracking-widest">Talk to us</span></button></div></div></main><!--$--><!--/$--></div></div>
14<script src="/_next/static/immutable/chunks/17tuxysuvqwd2.js" id="_R_" async=""></script>
14<script>(self.__next_f=self.__next_f||[]).push([0])</script>
14<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n9:I[68027,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"default\",1]\n:HL[\"/_next/static/immutable/chunks/0h6gqshjpa3q7.css\",\"style\"]\n:HL[\"/_next/static/immutable/chunks/2roxca3dzm799.css\",\"style\"]\n:HL[\"/_next/static/immutable/chunks/1i_tdidraj460.css\",\"style\"]\n:HC[\"/\",\"\"]\n2:T557,{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"@id\":\"https://anythink.cloud/#organization\",\"name\":\"Anythink\",\"alternateName\":[\"Anythink Cloud\",\"anythink.cloud\"],\"legalName\":\"Anythink Ltd\",\"url\":\"https://anythink.cloud\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://anythink.cloud/anythink-icon-02.svg\",\"width\":512,\"height\":512},\"description\":\"A database with an instant REST API, sign-in, subscriptions, workflows and an operations dashboard, all built from your data model.\",\"slogan\":\"The whole backend, in one project.\",\"foundingDate\":\"2024-02-26\",\"foundingLocation\":{\"@type\":\"Place\",\"address\":{\"@type\":\"PostalAddress\",\"addressLocality\":\"London\",\"addressCountry\":\"GB\"}},\"knowsAbout\":[\"Backend as a service\",\"REST API\",\"Subscriptions and payments\",\"Workflow automation\",\"Model Context Protocol (MCP)\"],\"sameAs\":[\"https://x.com/anythink_cloud\",\"https://github.com/anythink-cloud\",\"https://www.linkedin.com/company/anythink-cloud\",\"https://www.youtube.com/@anythink_cloud\",\"https://discord.gg/B2VxUja95S\",\"https://www.producthunt.com/products/anythink\",\"https://www.crunchbase.com/organization/anythink\",\"https://www.g2.com/products/anythink/reviews\",\"https://www.wikidata.org/wiki/Q141642271\"],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"sales\",\"email\":\"[email protected]\",\"url\":\"https://anythink.cloud/contact\",\"availableLanguage\":\"English\"}]}7:X\n0:{\"P\":null,\"c\":[\"\",\"products\",\"authentication\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[[\"type\",\"products\",\"d\",[\"api\",\"articles\",\"careers\",\"comparisons\",\"contact\",\"llms.txt\",\"news-sitemap.xml\",\"pricing\",\"products\",\"rss.xml\",\"search\",\"sitemap.xml\",\"solutions\"]],{\"children\":[[\"slug\",\"authentication\",\"d\",[]],{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4256]},\"$undefined\",\"$undefined\",4192]},\"$undefined\",\"$undefined\",4160]},\"$undefined\",\"$undefined\",4112],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/0h6gqshjpa3q7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/2roxca3dzm799.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/1i_tdidraj460.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"js\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('consent','default',{\\\"analytics_storage\\\":\\\"denied\\\",\\\"ad_storage\\\":\\\"denied\\\",\\\"ad_user_data\\\":\\\"denied\\\",\\\"ad_personalization\\\":\\\"denied\\\",\\\"wait_for_update\\\":500});\"}}],[\"$\",\"link\",null,{\"rel\":\"manifest\",\"href\":\"/manifest.json\"}
14],[\"$\",\"meta\",null,{\"name\":\"trustpilot-one-time-domain-verification-id\",\"content\":\"d4c94b7d-631f-4ddc-a67a-6b09a9b55ee7\"}],[\"$\",\"meta\",null,{\"name\":\"yandex-verification\",\"content\":\"984a524362cc5b99\"}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebSite\\\",\\\"@id\\\":\\\"https://anythink.cloud/#website\\\",\\\"name\\\":\\\"Anythink\\\",\\\"alternateName\\\":[\\\"Anythink Cloud\\\",\\\"anythink.cloud\\\"],\\\"url\\\":\\\"https://anythink.cloud\\\",\\\"inLanguage\\\":\\\"en-GB\\\",\\\"publisher\\\":{\\\"@id\\\":\\\"https://anythink.cloud/#organization\\\"},\\\"potentialAction\\\":{\\\"@type\\\":\\\"SearchAction\\\",\\\"target\\\":{\\\"@type\\\":\\\"EntryPoint\\\",\\\"urlTemplate\\\":\\\"https://anythink.cloud/search?q={search_term_string}\\\"},\\\"query-input\\\":\\\"required name=search_term_string\\\"}}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}]]}],\"$L3\"]}]]}],{\"children\":[\"$L4\",{\"children\":[\"$L5\",{\"children\":[\"$L6\",{},null,false,null]},null,false,\"$7\"]},null,false,\"$7\"]},null,false,null],\"$L8\",false]],\"m\":\"$undefined\",\"G\":[\"$9\",[\"$La\",\"$Lb\",\"$Lc\"]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\nd:I[11015,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"default\"]\ne:I[72262,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"RadixThemeProvider\"]\nf:I[39756,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"default\"]\n10:I[37457,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"default\"]\n12:I[44491,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"default\"]\n13:I[16706,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"SmartAnalytics\"]\n14:I[37496,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"default\"]\n16:I[97367,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"OutletBoundary\"]\n17:\"$Sreact.suspense\"\n19:I[97367,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"ViewportBoundary\"]\n1b:I[97367,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"MetadataBoundary\"]\n3:[\"$\",\"body\",null,{\"className\":\"inter_1324b96a-module__LC_YAG__className\",\"children\":[[\"$\",\"$Ld\",null,{}],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$L11\",[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L12\",null,{}],[\"$\",\"$L13\",null,{}],[\"$\",\"$L14\",null,{}]]}]\n4:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n5:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n6:[\"$\",\"$1\",\"c\",{\"children\":[\"$L15\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"async\":true,\"nonce\":\"$undefined\"}
14],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@18\"}]}]]}]\n8:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L19\",null,{\"children\":\"$L1a\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1b\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1c\"}]}]}],null]}]\na:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/0h6gqshjpa3q7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nb:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/2roxca3dzm799.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\nc:[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/immutable/chunks/1i_tdidraj460.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n1d:I[88589,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n7:C\n11:[[\"$\",\"$L1d\",null,{\"ssrData\":{\"product\":[{\"id\":1,\"slug\":\"authentication\",\"type\":\"product\",\"title\":\"Authentication\",\"status\":\"published\",\"hero\":{\"headline\":\"Sign-in for web and mobile,/verified on the server\",\"description\":\"\u003cp\u003eAdd email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\u003c/p\u003e\",\"featurePills\":[\"Email and password\",\"Magic links\",\"Native Apple / Google / LinkedIn\",\"Web OAuth with PKCE\",\"JWT and refresh tokens\",\"Provider list per project\"],\"image\":{\"url\":\"/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\",\"alt\":\"Authentication\"},\"images\":[{\"id\":\"71\",\"url\":\"/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\",\"alt\":\"Authentication\",\"original_file_name\":\"Copy of User Name (1).png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/ded73b0819e74c65886012108cee1456.mp4\",\"alt\":\"Authentication\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/authentication\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Sign-in that ships/with your backend\",\"description\":\"\u003cp\u003eEmail and password, magic links, native and web social sign-in, and JWT sessions, all on the same users your data model already links to.\u003c/p\u003e\",\"cards\":[{\"id\":20,\"type\":\"feature\",\"title\":\"Email, password and magic links\",\"description\":\"\u003cp\u003eRegister users, confirm their email, reset passwords and send one-time magic links from the built-in auth endpoints. Password sign-in waits until the email address is confirmed.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/53fd07ad0bdc4e91ab10bae3fed6b4af.png\",\"alt\":\"Email, password and magic links\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":21,\"type\":\"feature\",\"title\":\"Native Apple, Google and LinkedIn sign-in\",\"description\":\"\u003cp\u003eYour iOS or Android app sends Anythink the provider's identity token. Anythink checks it against the provider's published keys and cross-checks the subject ID before it signs anyone in. Native sign-in needs your app's client IDs, not a client secret.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/4c0513737e7f4e14878113d6c09389a9.png\",\"alt\":\"Native Apple, Google and LinkedIn sign-in\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":22,\"type\":\"feature\",\"title\":\"Web OAuth with PKCE\",\"description\":\"\u003cp\u003eFor browser sign-in, Anythink runs the authorise and callback flow for each provider you enable, using PKCE where the provider supports it, and records UTM and referrer details when a user signs up.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/be8f04543cfb41d7a126876abee72c7c.mp4\",\"alt\":\"Web OAuth with PKCE\"},\"pageIds\":[1]},{\"id\":69,\"type\":\"feature\",\"title\":\"JWT sessions with refresh\",\"description\":\"\u003cp\u003eSign-in returns a JWT access token and a refresh token. Refreshing issues a new pair, logout revokes the refresh token, and transfer tokens hand a session from one app or device to another.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":79,\"type\":\"feature\",\"title\":\"Users are part of your data model\",\"description\":\"\u003cp\u003eEvery signed-in user is a record you can link to any entity with a user field, then use in roles, row-level security and workflows.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/fee6ede0ad8c4dc4a3e6096c80705ace.png\",\"alt\":\"Users are part of your data model\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":191,\"type\":\"feature\",\"title\":\"One provider list per project\",\"description\":\"\u003cp\u003e\u003ccode\u003eGET /auth/v1/providers\u003c/code\u003e returns the sign-in methods this project has configured, so your login page shows only the buttons that will work.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[1]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"authentication API, Sign in with Apple backend, Google sign-in backend, LinkedIn sign-in API, magic link authentication, JWT refresh tokens, OAuth PKCE, Auth0 alternative\",\"seo_focus_keyword\":\"Authentication API with Apple and Google sign-in\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: let people sign in with Google.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Add the Google credentials once per project.\",\"example\":\"Settings â Social Sign-In â Google â Configure\\nWeb Client ID: paste it from Google Cloud\\nClient secret: paste it from Google Cloud\\niOS Client IDs: add them for native apps\\nSave\\n\\nâ Google is listed by /auth/v1/providers\",\"clip\":\"dashboard/authentication/google-sign-in\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The client ID and secret are prompted for, not passed as flags, so they stay out of your shell history.\",\"example\":\"anythink oauth google configure\\nanythink oauth google status\\nanythink fetch /auth/v1/providers\",\"result\":[\"Google client ID and secret saved to the project\",\"Status shows Google as configured\",\"/auth/v1/providers lists Google\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Keep the secret out of chat: set it in the dashboard or CLI, then ask the assistant to check the setup.\",\"example\":\"âIs Google sign-in configured on this project? Which sign-in buttons should my login page show?â\",\"result\":[\"Ran oauth google status: Google is configured\",\"Fetched /auth/v1/providers: Google is listed\",\"Your login page should show a Google button\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why it holds up\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Native sign-in\",\"title\":\"Identity tokens are verified, not trusted\",\"body\":\"Apple, Google and LinkedIn tokens are checked against each provider's published keys, and the token's subject must match the user identifier your app sent. A forged or swapped token is rejected.\",\"links\":[{\"label\":\"Social sign-in guide\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}]},{\"eyebrow\":\"Stable identity\",\"title\":\"The same user, even when the email changes\",\"body\":\"Anythink links each provider's stable subject ID to the user, so a returning user is matched behind Apple's private email relay or after changing their email address.\",\"links\":[{\"label\":\"Users and teams\",\"href\":\"https://docs.anythink.cloud/guides/authentication/users-and-teams\"}]},{\"eyebrow\":\"One session\",\"title\":\"One JWT for your app, the API and MCP\",\"body\":\"The token your app receives works on every entity endpoint, and the Anythink MCP server authenticates with the same user JWT, so permissions apply the same way to people and assistants.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"}]},{\"eyebrow\":\"Access\",\"title\":\"Sign-in feeds roles and row-level security\",\"body\":\"Every user has a role with per-entity permissions, and row-level security limits which records they reach, including group-scoped reads for teams.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"The REST calls behind each sign-in method\",\"tabs\":[{\"label\":\"Email and password\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/token\\nContent-Type: application/json\\n\\n{\\n \\\"email\\\": \\\"[email protected]\\\",\\n \\\"password\\\": \\\"\u003cpassword\u003e\\\"\\n}\"},{\"label\":\"Magic link\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/[email protected]\"},{\"label\":\"Native Apple\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/native/apple\\nContent-Type: application/json\\n\\n{\\n \\\"identity_token\\\": \\\"\u003cApple identityToken\u003e\\\",\\n \\\"user_identifier\\\": \\\"\u003cApple user ID\u003e\\\",\\n \\\"given_name\\\": \\\"Alice\\\",\\n \\\"family_name\\\": \\\"Smith\\\"\\n}\"},{\"label\":\"Refresh\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/refresh\\nContent-Type: application/json\\n\\n{\\n \\\"token\\\": \\\"\u003crefresh token\u003e\\\"\\n}\"},{\"label\":\"Provider list\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/auth/v1/providers\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a signed-in user\",\"steps\":[{\"title\":\"Pick your sign-in methods\",\"prose\":\"Email and password and magic links use the built-in auth endpoints. Turn on Apple, Google or LinkedIn under Settings ⺠Social Sign-In with your client IDs.\"},{\"title\":\"Show the right buttons\",\"prose\":\"Your login page calls /auth/v1/providers and renders only the methods this project has configured.\"},{\"title\":\"Sign the user in\",\"prose\":\"Web apps run the OAuth redirect, with PKCE where the provider supports it. Mobile apps send the provider's identity token to /auth/v1/native/{provider}, which verifies it and creates the user on first sign-in.\"},{\"title\":\"Use the session\",\"prose\":\"Send the access token as a Bearer token on each API call and refresh it when it expires. In React, the open-source SDK's AuthProvider and useAuth handle this for you.\"},{\"title\":\"Decide what they can reach\",\"prose\":\"Give the user a role, link records to them, and let row-level security filter what they see.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Google sign-in, start to finish\",\"body\":\"Create the credentials in Google Cloud, add them to the project and people can sign in with Google.\",\"link\":{\"label\":\"Read the social sign-in guide\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}}}}},{\"id\":7,\"slug\":\"workflow_automation\",\"type\":\"product\",\"title\":\"Workflows\",\"status\":\"published\",\"hero\":{\"headline\":\"Visual workflows,/inside your backend\",\"description\":\"\u003cp\u003eAutomation that runs inside every project. Trigger on a record change, a schedule or an API call, then send email and push, call other services or run a script.\u003c/p\u003e\",\"featurePills\":[\"Event\",\"Timed\",\"Manual and Api triggers\",\"Multiple triggers per workflow\",\"Data\",\"email\",\"push and integration steps\",\"Inline JavaScript\"],\"image\":{\"url\":\"/cdn-assets/20804318/effe9b3605ec4f84ac5172b5dad
14d5bda.png\",\"alt\":\"Workflows\"},\"images\":[{\"id\":\"65\",\"url\":\"/cdn-assets/20804318/effe9b3605ec4f84ac5172b5dadd5bda.png\",\"alt\":\"Workflows\",\"original_file_name\":\"workflow (2).png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/8c15743e888a473c9f3afe40ea623205.mp4\",\"alt\":\"Workflows\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A workflow engine,/not a separate tool to wire up\",\"description\":\"\u003cp\u003eTriggers, steps and conditional branching, running inside your backend on the same data model you already defined\u003c/p\u003e\",\"cards\":[{\"id\":29,\"type\":\"feature\",\"title\":\"Every step type you need, built in\",\"description\":\"\u003cp\u003eRead, create, update, upsert and delete data; call an external API; run inline JavaScript; send a command; branch on a condition; send an email or push notification; run an integration step; or handle a file â all as workflow steps, no separate service to deploy.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/597fdd4675604b70923d3a1e4163e4fc.png\",\"alt\":\"Every step type you need, built in\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/3812e95409fd4b288aea790adcb5d37f.mp4\",\"alt\":\"Every step type you need, built in\"},\"pageIds\":[7]},{\"id\":30,\"type\":\"feature\",\"title\":\"Execution history, per job\",\"description\":\"\u003cp\u003eEvery run is a job with its own log. Inspect what each step did, what it returned, and where a run stopped, from the dashboard or with \u003ccode\u003eanythink workflows jobs\u003c/code\u003e from the CLI.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/01046477205048859794738cb311c94b.png\",\"alt\":\"Execution history, per job\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/e3bf350730e345f3b9d8733f00765658.mp4\",\"alt\":\"Execution history, per job\"},\"pageIds\":[7]},{\"id\":63,\"type\":\"feature\",\"title\":\"Four trigger types, mixed freely\",\"description\":\"\u003cp\u003eEvent (on a record created, updated or deleted), Timed (cron), Manual (on demand) and Api (a custom HTTP route). A single workflow can carry more than one trigger, so the same steps run whether a record changed or someone kicked it off by hand.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/e54df322a78a47dfa60b169525b118be.png\",\"alt\":\"Four trigger types, mixed freely\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/3812e95409fd4b288aea790adcb5d37f.mp4\",\"alt\":\"Four trigger types, mixed freely\"},\"pageIds\":[7]},{\"id\":64,\"type\":\"feature\",\"title\":\"Inline JavaScript when you need it\",\"description\":\"\u003cp\u003eA Run Script step executes JavaScript inside the workflow, with access to trigger data and every previous step's output. Use it for calculations and transformations that don't fit a pre-built action.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/53e8529f370641fbb2965c6ca0d17612.png\",\"alt\":\"Inline JavaScript when you need it\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/a4463e81a5304f1197b95d9b1ad1d98d.mp4\",\"alt\":\"Inline JavaScript when you need it\"},\"pageIds\":[7]},{\"id\":65,\"type\":\"feature\",\"title\":\"Branch on success or failure\",\"description\":\"\u003cp\u003eEach step can route to a different next step depending on whether it succeeded or failed. Combine that with a Condition step reading your trigger data, and a workflow can take different paths without any code outside the step parameters.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/9ff4d3a099f34cffb9685dfafb4096b3.png\",\"alt\":\"Branch on success or failure\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/a4463e81a5304f1197b95d9b1ad1d98d.mp4\",\"alt\":\"Branch on success or failure\"},\"pageIds\":[7]},{\"id\":66,\"type\":\"feature\",\"title\":\"Call an API, or run an integration\",\"description\":\"\u003cp\u003eA Call an API step reaches any external HTTP endpoint. An Integration step drives a connected provider directly â Slack, GitHub, Google Calendar, LinkedIn, Twitter/X, Claude or Grok â without you handling that provider's auth or request shape.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/a2fd0fba45974cc6a4418baae17d8f6d.png\",\"alt\":\"Call an API, or run an integration\"},\"video_demo\":\"$undefined\",\"pageIds\":[7]},{\"id\":67,\"type\":\"feature\",\"title\":\"Full CRUD on your data\",\"description\":\"\u003cp\u003eRead, Create, Update, Upsert and Delete Data steps cover every write your backend needs, across any entity, with the same row-level security and permissions that apply everywhere else.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/019c29c37a3a4b7197191fc99fdf3264.png\",\"alt\":\"Full CRUD on your data\"},\"video_demo\":\"$undefined\",\"pageIds\":[7]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"What teams build with it\",\"description\":\"\u003cp\u003eWhether you're a solo foun
14der or running a team, these are the shapes most workflows take\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":true,\"title\":\"Automation in Action\",\"description\":\"\u003cp\u003eReal workflows, built from real trigger and step types\u003c/p\u003e\",\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":18,\"slug\":\"workflows\",\"title\":\"How workflows work\"},\"seo_keywords\":\"workflow engine, event-driven automation, cron scheduled workflows, business logic without a separate service\",\"seo_focus_keyword\":\"Visual workflow automation for your backend\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: email a customer when their order is paid.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Build it on a canvas: a trigger, a filter and one step.\",\"example\":\"Settings â Email Templates â Create New Template: order_paid\\nWorkflows â New Workflow\\nName: Order paid email â Create Workflow\\nWorkflow Settings â Add trigger\\nTrigger: Event, EntityUpdated, orders\\nFilter: status changed to paid\\nAdd Step â Send an email\\nTo Email Address: {{ $anythink.trigger.data.customer_email }}\\nTemplate: order_paid\\nSave Workflow â enable it\\n\\nâ every order that changes to paid sends the email\",\"clip\":\"dashboard/workflows/build-workflow\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Repeatable and reviewable, so a workflow can live in your repo and go into every project.\",\"example\":\"anythink workflows create order-paid-email --trigger Event \\\\\\n --entity orders --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"op\\\":\\\"changed_to\\\",\\\"value\\\":\\\"paid\\\"}' --enabled\\n# 31 is the id printed by workflows create\\nanythink workflows step-add 31 send_receipt --action SendAnEmail --start --enabled \\\\\\n --params '{\\\"to\\\":\\\"{{ $anythink.trigger.data.customer_email }}\\\",\\\"template_type\\\":\\\"order_paid\\\"}'\\nanythink data update orders 42 --data '{\\\"status\\\":\\\"paid\\\"}'\\nanythink workflows jobs 31\",\"result\":[\"Workflow created, triggered when an order's status changes to paid\",\"Send an email step added as the start step\",\"Updating order 42 starts a job\",\"The job appears in the workflow's history\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe what should happen. It builds the workflow and tells you how to test it.\",\"example\":\"âWhen an order's status changes to paid, email the customer using the order_paid template.â\",\"result\":[\"Workflow created with an Event trigger on orders\",\"Filter: status changed to paid\",\"Send an email step addressed to the order's customer_email\",\"Enabled; check Job History after the next paid order\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Real commands against a real workflow\",\"tabs\":[{\"label\":\"Create the workflow\",\"language\":\"bash\",\"code\":\"anythink workflows create \\\\\\n --name \\\"Overdue invoice reminder\\\" \\\\\\n --trigger Event \\\\\\n --entity invoices \\\\\\n --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"o
14perator\\\":\\\"changed_to\\\",\\\"value\\\":\\\"overdue\\\"}' \\\\\\n --enabled\"},{\"label\":\"Add a scheduled trigger\",\"language\":\"bash\",\"code\":\"anythink workflows trigger 71 --payload '{\\\"manual\\\":true}'\\n\\n# Or let it run on a schedule â add a second, Timed trigger\\n# to the same workflow from the dashboard: 0 9 * * 1-5 (weekdays, 9am)\"},{\"label\":\"Add a Run Script step\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 71 calculate-total \\\\\\n --name \\\"Calculate total\\\" \\\\\\n --action RunScript \\\\\\n --params '{\\n \\\"script\\\": \\\"const orders = $anythink.steps.fetch_orders.data; const total = orders.reduce((sum, o) =\u003e sum + o.total, 0); return { total_revenue: total };\\\"\\n }' \\\\\\n --enabled\"}]},\"narrative\":{\"heading\":\"What teams automate\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Order fulfilment and notifications\",\"prose\":\"Every new paid order triggers fulfilment, updates inventory, notifies the team on Slack through an Integration step, and emails the customer â all in one workflow, reading and writing the same entities your API and dashboard use.\"},{\"title\":\"Scheduled reports and data hygiene\",\"prose\":\"Run daily summaries, weekly digests and monthly cleanup jobs on a cron schedule. Read data, process it in a Run Script step, then send it wherever it needs to go â no separate scheduler to run and monitor.\"},{\"title\":\"Status-change pipelines\",\"prose\":\"An Event trigger with a changed_to filter fires only on the transition you care about â a ticket moving to \\\"resolved\\\", a payment moving to \\\"failed\\\" â so a workflow doesn't run on every unrelated field update.\"}]}}},{\"id\":8,\"slug\":\"instant_apis\",\"type\":\"product\",\"title\":\"Instant APIs\",\"status\":\"published\",\"hero\":{\"headline\":\"A REST API for every entity,/live the moment you save\",\"description\":\"\u003cp\u003eEvery entity you create gets a REST API straight away, with filtering, sorting and pagination built in.\u003c/p\u003e\u003cp\u003eMake each entity public or private. Row-level security decides what each caller sees, every project is rate-limited, and your OpenAPI docs write themselves.\u003c/p\u003e\",\"featurePills\":[\"REST for every entity\",\"Public or private per entity\",\"Rate-limited per project\",\"OpenAPI docs per project\",\"Row-level security\"],\"image\":{\"url\":\"/cdn-assets/20804318/cf888a2d41ea4535b2c1bd2dd02dd30b.png\",\"alt\":\"Instant APIs\"},\"images\":[{\"id\":\"64\",\"url\":\"/cdn-assets/20804318/cf888a2d41ea4535b2c1bd2dd02dd30b.png\",\"alt\":\"Instant APIs\",\"original_file_name\":\"api.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/44974e69babe4f7698cee3129345bf6b.mp4\",\"alt\":\"Instant APIs\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/rest-api\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A REST API you don't write,/and don't have to babysit\",\"description\":\"\u003cp\u003eEvery entity gets the same REST surface, with permissions, row-level security and rate limiting applied to every call.\u003c/p\u003e\",\"cards\":[{\"id\":17,\"type\":\"feature\",\"title\":\"A full REST API for every entity\",\"description\":\"\u003cp\u003eList, get, create, bulk create, update, delete and bulk delete for every entity you create. No controller code and no publish step.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/0a93ea522ff74c4db30335ef91c01221.png\",\"alt\":\"A full REST API for every entity\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/3a3f4bb75b4e4fdbab22b23b0e3ff77c.mp4\",\"alt\":\"A full REST API for every entity\"},\"pageIds\":[8]},{\"id\":18,\"type\":\"feature\",\"title\":\"Filter, sort and paginate\",\"description\":\"\u003cp\u003eFilter on any field with one query parameter per field and operators such as \u003ccode\u003eGTE:\u003c/code\u003e, \u003ccode\u003eLT:\u003c/code\u003e, \u003ccode\u003eIN:\u003c/code\u003e and \u003ccode\u003eC:\u003c/code\u003e for contains. Sort by any field and page through up to 1,000 records per request.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/3a3f4bb75b4e4fdbab22b23b0e3ff77c.mp4\",\"alt\":\"Filter, sort and paginate\"},\"pageIds\":[8]}
14,{\"id\":217,\"type\":\"feature\",\"title\":\"Public or private, per entity\",\"description\":\"\u003cp\u003eExpose an entity's chosen fields on a public, read-only endpoint for your website or app, and keep everything else behind authentication with roles and row-level security.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]},{\"id\":218,\"type\":\"feature\",\"title\":\"Rate-limited and documented\",\"description\":\"\u003cp\u003eEvery project has a per-minute rate limit, with \u003ccode\u003eX-RateLimit\u003c/code\u003e headers on each response and a 429 when it's exceeded. Each project also gets an OpenAPI description of its API, and \u003ccode\u003eanythink api\u003c/code\u003e lists every endpoint.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]},{\"id\":219,\"type\":\"feature\",\"title\":\"Row-level security on every call\",\"description\":\"\u003cp\u003eEach call is checked against the caller's role permissions, and row-level security filters the records it returns. Grant records to users or whole groups.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]},{\"id\":220,\"type\":\"feature\",\"title\":\"API keys for servers and scripts\",\"description\":\"\u003cp\u003eCreate API keys with named permissions for CI, scripts and integrations, and send them in the \u003ccode\u003eX-Api-Key\u003c/code\u003e header. The CLI checks permission names before it creates a key.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":7,\"slug\":\"dynamic-api-overview\",\"title\":\"Call the instant REST API\"},\"seo_keywords\":\"instant REST API, auto-generated REST API, backend API without code, OpenAPI documentation, public read-only API, API rate limiting, API keys, headless backend\",\"seo_focus_keyword\":\"Instant REST API from your database\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: make a products entity public, with only the name and price exposed.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Choose what's public entity by entity, field by field.\",\"example\":\"Settings â Data Model â products â Edit\\nPublic: on â Update Entity\\nOpen the name field â Searchable, Publicly Searchable\\nOpen the price field â Searchable, Publicly Searchable\\n\\nâ /entities/products/public/items is live\",\"clip\":\"dashboard/rest-api/make-entity-public\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"List the endpoints, then call one with your project's credentials.\",\"example\":\"anythink entities update products --public true\\nanythink fields update products name --searchable --public\\nanythink fields update products price --searchable --public\\nanythink api\\nanythink fetch \\\"/entities/products/items?page=1\u0026pageSize=20\\\"\",\"result\":[\"products is publicly queryable\",\"Only name and price are public fields\",\"api lists every endpoint the entity n
14ow has\",\"fetch returns the first page of products\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask in plain text. It runs the same commands and shows you what it exposed.\",\"example\":\"âMake the products entity public with only name and price exposed, list the endpoints it now has, and show me the first page of products.â\",\"result\":[\"products set to public\",\"name and price marked publicly searchable\",\"Listed the entity's endpoints\",\"Returned the first page of products\"]}]}},{\"type\":\"proofs\",\"heading\":\"What every endpoint already does\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Always current\",\"title\":\"Nothing to regenerate or redeploy\",\"body\":\"Endpoints come from your data model as it is now, so a field added in the dashboard is in the next response.\",\"links\":[{\"label\":\"Visual database designer\",\"href\":\"/products/visual-database-designer\"}]},{\"eyebrow\":\"Access\",\"title\":\"Permissions and row-level security on every request\",\"body\":\"Each call is checked against the caller's role, and row-level security filters the records it returns, including group-scoped reads for teams.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}]},{\"eyebrow\":\"Search\",\"title\":\"Full-text search on the same entities\",\"body\":\"Fields you mark searchable are indexed as records change, and authenticated search applies the same row-level security as the entity API.\",\"links\":[{\"label\":\"Search\",\"href\":\"/products/powerful-search-engine\"}]},{\"eyebrow\":\"Automation\",\"title\":\"Every write can start a workflow\",\"body\":\"Creating, updating or deleting a record through the API can trigger a workflow that sends email or push, calls another API or runs a script.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"APIs ready the moment you create an entity\",\"tabs\":[{\"label\":\"List and paginate\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/products/items?page=1\u0026pageSize=20\u0026sortBy=price\u0026sortDirection=asc\\nAuthorization: Bearer \u003caccess token\u003e\\n\\n{\\n \\\"items\\\": [\\n { \\\"id\\\": 1, \\\"name\\\": \\\"Starter\\\", \\\"price\\\": 29 },\\n { \\\"id\\\": 2, \\\"name\\\": \\\"Pro\\\", \\\"price\\\": 99 }\\n ],\\n \\\"page\\\": 1,\\n \\\"page_size\\\": 20,\\n \\\"total_items\\\": 2,\\n \\\"total_pages\\\": 1,\\n \\\"has_next_page\\\": false,\\n \\\"has_previous_page\\\": false,\\n \\\"retrieval_time\\\": 8\\n}\"},{\"label\":\"Filter\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/orders/items?status=paid\u0026total=GTE:50\u0026page=1\u0026pageSize=25\\nAuthorization: Bearer \u003caccess token\u003e\"},{\"label\":\"Create\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/entities/orders/items\\nX-Api-Key: \u003capi key\u003e\\nContent-Type: application/json\\n\\n{\\n \\\"total\\\": 149.99,\\n \\\"status\\\": \\\"pending\\\"\\n}\"},{\"label\":\"Public read\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/products/public/items?page=1\u0026pageSize=20\"},{\"label\":\"From the CLI\",\"language\":\"bash\",\"code\":\"anythink api\\nanythink fetch \\\"/entities/orders/items?status=paid\u0026page=1\u0026pageSize=25\\\"\\nanythink data create orders --data '{\\\"total\\\":149.99,\\\"status\\\":\\\"pending\\\"}'\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From a data model to a working API\",\"steps\":[{\"title\":\"Model an entity\",\"prose\":\"Create it in the dashboard, with the CLI or by asking Claude. Its endpoints exist as soon as it's saved.\"},{\"title\":\"Call it\",\"prose\":\"Send a user's JWT or an API key to /org/{org_id}/entities/{entity}/items. Filter, sort and paginate with query parameters.\"},{\"title\":\"Decide who can reach it\",\"prose\":\"Give roles read, create, update and delete permissions per entity, and turn on row-level security so each user only gets their own records.\"},{\"title\":\"Open it up where it helps\",\"prose\":\"Mark an entity and s
14ome of its fields public to serve them read-only from /public/items, with no credentials in your website's code.\"},{\"title\":\"Watch the headers\",\"prose\":\"Every response carries X-RateLimit headers for your project's per-minute limit. Back off when you get a 429.\"}],\"aside\":{\"eyebrow\":\"See it working\",\"title\":\"A new entity is already an API\",\"body\":\"Create an entity in the dashboard and its REST endpoints are live straight away.\",\"clip\":\"dashboard/database/create-entity\",\"link\":{\"label\":\"Read the REST API guide\",\"href\":\"https://docs.anythink.cloud/guides/rest-api/rest-api\"}}}}},{\"id\":10,\"slug\":\"visual_database_designer\",\"type\":\"product\",\"title\":\"Visual Database Designer\",\"status\":\"published\",\"hero\":{\"headline\":\"Design your data,/get the API\",\"description\":\"\u003cp\u003eModel entities, fields and relationships in the Anythink dashboard, the CLI or with Claude, and each entity gets a REST API the moment you save it.\u003c/p\u003e\",\"featurePills\":[\"18 field types\",\"Relationships incl. many-to-many\",\"Geo / file / secret / JSON fields\",\"REST API on save\",\"CSV import with saved mappings\",\"Materialised views\"],\"image\":{\"url\":\"/cdn-assets/20804318/d01905f22fab44b6aa5d20ad9695eca0.png\",\"alt\":\"Visual Database Designer\"},\"images\":[{\"id\":\"69\",\"url\":\"/cdn-assets/20804318/d01905f22fab44b6aa5d20ad9695eca0.png\",\"alt\":\"Visual Database Designer\",\"original_file_name\":\"database designer.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/36eabc5e55b3432caf9b4e29ac871d92.mp4\",\"alt\":\"Visual Database Designer\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Model it once,/use it everywhere\",\"description\":\"\u003cp\u003eEntities, 18 field types, relationships, CSV import and materialised views, editable in the dashboard, the CLI or through Claude.\u003c/p\u003e\",\"cards\":[{\"id\":14,\"type\":\"feature\",\"title\":\"18 field types\",\"description\":\"\u003cp\u003eText, rich text, selects, numbers, checkboxes, dates and timestamps, plus geo points, files, users, JSON and dynamic references. Each field's display type can change without changing how it's stored, so a text value can be an input, a select or a radio group.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/bce1d597371d43beb0e1258ff85864a1.png\",\"alt\":\"18 field types\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":15,\"type\":\"feature\",\"title\":\"Relationships between entities\",\"description\":\"\u003cp\u003eOne-to-one, one-to-many, many-to-one and many-to-many links, plus dynamic references that can point at records in different entities. Choose what happens on delete: cascade, set null, set default or restrict.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/fee6ede0ad8c4dc4a3e6096c80705ace.png\",\"alt\":\"Relationships between entities\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":16,\"type\":\"feature\",\"title\":\"Encrypted secret fields\",\"description\":\"\u003cp\u003eAdd a secret field to any entity and its value is encrypted at rest with AES-256-GCM, the same mechanism that protects integration credentials. Values are masked when read back.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/ac4a24d4e7ba46d885d6759d67aafd5f.png\",\"alt\":\"Encrypted secret fields\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":128,\"type\":\"feature\",\"title\":\"The API is live when you save\",\"description\":\"\u003cp\u003eCreate an entity and its list, get, create, update and delete endpoints exist straight away. Add a field and it's in the next response. There's no publish step and no migration file to write.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/ee22c64a66f34b6d8ca35fa0520004f7.png\",\"alt\":\"The API is live when you save\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":259,\"type\":\"feature\",\"title\":\"CSV import with saved mappings\",\"description\":\"\u003cp\u003eUpload a CSV, map its columns to fields, and save the mapping as a template for the next file with the same layout. Each import runs as a tracked job: pending, processing, completed or failed.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":260,\"type\":\"feature\",\"title\":\"Materialised views\",\"description\":\"\u003cp\u003eJoin an entity with another entity, or with payments and subscriptions data, into one grid of exists, count or value columns with a project-wide total row. Configured in the dashboard, paginated on the server.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[10]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":10,\"slug\":\"data_modelling\",\"title\":\"Model your data: entities, fields, relations\"},\"seo_keywords\":\"visual database designer, database schema builder, no-code database with REST API, data model builder, CSV import with column mapping, materialised views, encrypted fields, Directus alternative\",\"seo_focus_keyword\":\"Visual database designer with an instant API\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: an orders entity with a total and a status.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for seeing the shape of your data.\",\"example\":\"Settings â Data Model â Add Entity\\nEntity Name: orders â Create Entity\\nAdd Field: total (decimal, required)\\nAdd Field: status (select: pending, paid)\\n\\nâ /entities/orders/items is live\",\"clip\":\"dashboard/database/create-entity\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Repeatable, so the same model can be rebuilt in another project.\",\"example\":\"anythink entities create orders\\nanythink fields add orders total --type decimal --required\\nanythink fields add orders status --type varchar \\\\\\n --display select --options pending,paid\\nanythink data list orders\",\"result\":[\"Entity orders created\",\"Fields: total (decimal, required), status (select)\",\"data list returns an empty page, ready for records\"],\"clip\":\"cli/database/create-entity\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the model. It runs the same commands and shows what changed.\",\"example\":\"âCreate an orders entity with a required decimal total and a status select with the options pending and paid. Then show me the entity and its fields.â\",\"result\":[\"Entity orders created\",\"total: decimal, required\",\"status: select with pending and paid\",\"Showed the entity and its fields\"]}]}},{\"type\":\"proofs\",\"heading\":\"More than a table editor\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Instant API\",\"t
14itle\":\"Save the entity, call the endpoint\",\"body\":\"Every entity gets list, get, create, update and delete endpoints with filtering, sorting and pagination, described in your project's OpenAPI documentation.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"REST API guide\",\"href\":\"https://docs.anythink.cloud/guides/rest-api/rest-api\"}]},{\"eyebrow\":\"Secrets\",\"title\":\"Encrypted fields on any entity\",\"body\":\"A secret field encrypts its value with AES-256-GCM before it's stored, so a customer's own API token can sit on their record without being readable in the database.\",\"links\":[{\"label\":\"Field types reference\",\"href\":\"https://docs.anythink.cloud/reference/field-types\"}]},{\"eyebrow\":\"Location\",\"title\":\"Geo fields work in search and on a map\",\"body\":\"A geo field powers radius and bounding-box search, nearest-first sorting, and the map view in the dashboard, with nothing extra to configure.\",\"links\":[{\"label\":\"Search\",\"href\":\"/products/powerful-search-engine\"},{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"}]},{\"eyebrow\":\"Operations\",\"title\":\"Materialised views join what a single table can't\",\"body\":\"Pivot an entity against another entity or your payments data, with exists, count or value columns and a total row across the whole project.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a working data model\",\"steps\":[{\"title\":\"Create an entity\",\"prose\":\"Name it in the dashboard, with the CLI or by asking Claude. Turn on row-level security or public read access when you create it, or later.\"},{\"title\":\"Add fields\",\"prose\":\"Pick a field type, then mark it required, unique, indexed or searchable, or give it a default value.\"},{\"title\":\"Link entities\",\"prose\":\"Add relationship fields between entities and choose what happens to linked records when one is deleted.\"},{\"title\":\"Load your data\",\"prose\":\"Import a CSV with a saved column mapping, or create records through the API.\"},{\"title\":\"Use it\",\"prose\":\"Call the REST API from your app, search it, and work with it in the dashboard's grid, kanban, calendar and map views.\"}],\"aside\":{\"eyebrow\":\"See it working\",\"title\":\"Build the model by chatting\",\"body\":\"Describe an entity to the dashboard's AI chat and watch it appear in your data model.\",\"clip\":\"dashboard/ai/chat-builds-entity\",\"link\":{\"label\":\"Read the data modelling guide\",\"href\":\"https://docs.anythink.cloud/guides/database/model-your-data\"}}}}},{\"id\":11,\"slug\":\"smart_file_manager\",\"type\":\"product\",\"title\":\"Smart File Manager\",\"status\":\"published\",\"hero\":{\"headline\":\"Upload once,/serve it public or private\",\"description\":\"\u003cp\u003eStore files of any type, serve public ones from a CDN and private ones through short-lived signed links, with size, dimensions and duration recorded for you.\u003c/p\u003e\",\"featurePills\":[\"Streamed uploads\",\"CDN for public files\",\"Signed links for private files\",\"Folders\",\"Automatic media metadata\",\"SHA-256 content hash\"],\"image\":{\"url\":\"/cdn-assets/20804318/f3643b601ec54e4091dab15b7b397e74.png\",\"alt\":\"Smart File Manager\"},\"images\":[{\"id\":\"68\",\"url\":\"/cdn-assets/20804318/f3643b601ec54e4091dab15b7b397e74.png\",\"alt\":\"Smart File Manager\",\"original_file_name\":\"file explorer.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/10d2b90eb6ae475facd434fb834aa52f.mp4\",\"alt\":\"Smart File Manager\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database/files\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"File storage that knows/what you uploaded\",\"description\":\"\u003cp\u003eUpload, organise and serve files from the same project as your data, with access rules and media metadata handled for you.\u003c/p\u003e\",\"cards\":[{\"id\":23,\"type\":\"feature\",\"title\":\"Uploads streamed to storage\",\"description\":\"\u003cp\u003eFiles go from the request straight into object storage without being buffered in memory, so a multi-gigabyte upload doesn't stall the API. Your project's storage quota is checked before the upload starts.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":24,\"type\":\"feature\",\"title\":\"Media metadata, added for you\",\"description\":\"\u003cp\u003eA background worker probes every upload and records duration, width and height, bitrate, frame rate, codecs and audio channels where they apply, plus a SHA-256 hash of the content.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":25,\"type\":\"feature\",\"title\":\"Folders\",\"description\":\"\u003cp\u003eOrganise files into nested folders in the Anythink dashboard or through the API, and upload straight into a folder.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":86,\"type\":\"feature\",\"title\":\"Public or private, per file\",\"description\":\"\u003cp\u003ePublic files are served from a CDN at a stable URL. Private files are only reach
14able through a signed storage link that expires within five minutes, issued to callers with permission to read files.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":248,\"type\":\"feature\",\"title\":\"Files on your records\",\"description\":\"\u003cp\u003eAdd a file field to any entity to attach uploads to records, check uploads against the file types that field accepts, and read the linked files back through the entity API.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":249,\"type\":\"feature\",\"title\":\"Fetch from a URL in a workflow\",\"description\":\"\u003cp\u003eThe File Handler workflow step downloads a file from a URL, stores it in your project and links it to a record, so imports and integrations can bring their files with them.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":14,\"slug\":\"file_management\",\"title\":\"Upload and manage files\"},\"seo_keywords\":\"file storage API, file upload API, CDN file hosting, signed URLs for private files, media metadata extraction, video duration API, file content hash, Firebase Storage alternative\",\"seo_focus_keyword\":\"File storage API with automatic media metadata\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: upload a podcast episode and get its public URL.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Switch Public on, drag the file in, copy the link.\",\"example\":\"Files â Public: on\\nUpload Files â episode-12.mp3\\nCopy public link on the new file\\n\\nâ the CDN URL is on your clipboard\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"files get shows the basics. fetch returns the full record, including cdn_url and duration_seconds.\",\"example\":\"anythink files upload episode-12.mp3 --public\\nanythink files list\\n# 87 is the id that files list shows\\nanythink fetch /files/87\",\"result\":[\"File uploaded and marked public\",\"The record includes cdn_url, the public URL\",\"Duration and hash appear once the file has been probed\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the upload and the details. It runs the same commands.\",\"example\":\"âUpload episode-12.mp3 as a public file, then tell me its duration and CDN URL once it's been probed.â\",\"result\":[\"Uploaded episode-12.mp3 as a public file\",\"Read the file record\",\"Reported the duration and CDN URL\"]}]}},{\"type\":\"proofs\",\"heading\":\"Built for large files\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Scale\",\"title\":\"Downloads never stream through the API\",\"body\":\"A request for a file gets a redirect to a signed storage link, so a large download goes straight from storage to the client instead of through the API.\",\"links\":[{\"label\":\"File management guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}]},{\"eyebrow\":\"Integrity\",\"title\":\"Every file gets a SHA-256 hash\",\"body\":\"The content hash is computed when the file is probed, so you can spot duplicate uploads or check that a file hasn't changed.\",\"links\":[{\"label\":\"File management guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}]},{\"eyebrow\":\"Automation\",\"title\":\"Files move through workflows\",\"body\":\"Fetch a file from a URL and link it to a record in one workflow step, then send an email or push when it lands.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]},{\"eyebrow\":\"Access\",\"title\":\"Private files follow your permissions\",\"body\":\"Signed links are issued only to callers allowed to read files, and they expire within five minutes. Public files carry no credentials at all.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"The REST calls behind it\",\"tabs\":[{\"label\":\"Upload\",\"language\":\"bash\",\"code\":\"curl -X POST \\\"https://api.my.anythink.cloud/org/{org_id}/files?isPublic=true\u0026folderId=3\\\" \\\\\\n -H \\\"Authorization: Bearer \u003caccess token\u003e\\\" \\\\\\n -F \\\"[email protected]\\\"\"},{\"label\":\"Read metadata\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/files/87\\nAuthorization: Bearer \u003caccess token\u003e\\n\\n{\\n \\\"id\\\": 87,\\n \\\"original_file_name\\\": \\\"episode-12.mp3\\\",\\n \\\"file_type\\\": \\\"audio/mpeg\\\",\\n \\\"file_size\\\": 48213904,\\n \\\"is_public\\\": true,\\n \\\"folder_path\\\": \\\"episodes\\\",\\n \\\"duration_seconds\\\": 1806.4,\\n \\\"bitrate\\\": 213000,\\n \\\"content_hash\\\": \\\"9f2câ¦\\\"\\n}\"},{\"label\":\"Private download\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/files/87/get\\nâ 302 to a signed storage link (valid for one minute)\\n\\nGET https://api.my.anythink.cloud/org/{org_id}/files/87/url\\nâ { \\\"url\\\": \\\"â¦\\\", \\\"expires_at\\\": \\\"â¦\\\" } (valid for five minutes)\"},{\"label\":\"Public file\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/files/87/public\\nâ 302 to the CDN URL, or 404 if the file is private\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an upload to a file your app can serve\",\"steps\":[{\"title\":\"Upload\",\"prose\":\"Send the file to /files from the dashboard, the CLI or your app. It streams into storage, after a check against your project's storage quota.\"},{\"title\":\"Choose who can see it\",\"prose\":\"Public files get a CDN URL. Private files stay behind your permissions and are served through signed links.\"},{\"title\":\"Let the worker probe it\",\"prose\":\"A background worker downloads the file to temporary disk, reads
14its media details and hash, and writes them back to the file record.\"},{\"title\":\"Attach it to a record\",\"prose\":\"Link the file to an entity through a file field, by hand, from your app or with a File Handler workflow step.\"},{\"title\":\"Serve it\",\"prose\":\"Your app requests the file and gets a redirect to the CDN or to a short-lived signed link. The bytes never pass through the API.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Public files, private files and CDN links\",\"body\":\"Upload through the dashboard or the CLI, and add file fields to your own entities.\",\"link\":{\"label\":\"Read the file management guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}}}}},{\"id\":12,\"slug\":\"subscriptions\",\"type\":\"product\",\"title\":\"Subscriptions\",\"status\":\"published\",\"hero\":{\"headline\":\"Subscriptions,/without the plumbing\",\"description\":\"\u003cp\u003eModel plans, trials and offers once, then take payment through Stripe or Apple in-app purchases without writing receipt-validation code.\u003c/p\u003e\",\"featurePills\":[\"Stripe subscriptions\",\"Stripe Connect\",\"Apple in-app purchases\",\"Trials and discount codes\",\"Entitlement checks via /me\",\"Admin recovery tools\"],\"image\":{\"url\":\"/cdn-assets/20804318/477506c2b42a48349e4279de1d8083bd.png\",\"alt\":\"Subscriptions\"},\"images\":[{\"id\":\"67\",\"url\":\"/cdn-assets/20804318/477506c2b42a48349e4279de1d8083bd.png\",\"alt\":\"Subscriptions\",\"original_file_name\":\"stripe.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/11b808bb83f944b4970daafc552b3f70.mp4\",\"alt\":\"Subscriptions\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/payments\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A subscription backend,/not a payment recipe\",\"description\":\"\u003cp\u003ePlans, trials, discount codes, Stripe and Apple in-app purchases, all on the same subscriber record.\u003c/p\u003e\",\"cards\":[{\"id\":250,\"type\":\"feature\",\"title\":\"Plans, trials and offers\",\"description\":\"\u003cp\u003eDefine subscription plans with billing intervals and trial periods, then layer on offer and discount codes for redemption and referral programmes.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":251,\"type\":\"feature\",\"title\":\"Stripe and Stripe Connect\",\"description\":\"\u003cp\u003eTake card payments and recurring billing through Stripe, or split funds across a marketplace's sellers with Stripe Connect. Webhooks are handled for you.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":252,\"type\":\"feature\",\"title\":\"Apple in-app purchases, verified server-side\",\"description\":\"\u003cp\u003eReceipts are verified against the real App Store Server API, not trusted from the device. Verification is idempotent, upserting by the transaction's original_transaction_id, so a renewal or a retried request never creates a duplicate subscription.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":253,\"type\":\"feature\",\"title\":\"Purchases bound to an account\",\"description\":\"\u003cp\u003eApple verification checks the purchase's appAccountToken against the account that submitted it. A receipt replayed against a different account is rejected, closing a common in-app purchase replay gap.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":254,\"type\":\"feature\",\"title\":\"Entitlement checks on /me\",\"description\":\"\u003cp\u003eYour app asks a subscriber-scoped /me endpoint whether the signed-in user has access, offer codes, referrals and balance. These routes use a subscriber permission, not an admin one, so you can call them directly from a client app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":255,\"type\":\"feature\",\"title\":\"Admin recovery tools\",\"description\":\"\u003cp\u003eWhen a payment provider and your data disagree, an admin can override a subscription's status, relink it to the right subscriber, or resync it from Stripe, from the Anythink dashboard.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real subscription products\",\"description\":\"\u003cp\u003eThe same subscriber record, whether the purchase happened on the web or inside an iOS app.\u003c/p\u003e\",\"cards\":[]}
14,\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"subscription backend, Apple in-app purchase backend, RevenueCat alternative, Stripe subscriptions API, App Store server verification, entitlement checks, Stripe Connect\",\"seo_focus_keyword\":\"Subscription backend with Apple in-app purchases\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a monthly plan with a seven-day free trial.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Fill in the plan once. It syncs to Stripe when Connect onboarding is complete.\",\"example\":\"AnythinkPay â Plans â New plan\\nPlan name: Pro monthly\\nSubscription name: Pro monthly\\nAmount: 9.99, Billing period: Month, Bill every: 1\\nTrial period (days): 7\\nActive: on â Save\\n\\nâ the plan is live, with a seven-day trial\",\"clip\":\"dashboard/payments/create-plan\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Plans go through the AnythinkPay API, so a script can create them.\",\"example\":\"anythink fetch /integrations/anythinkpay/subscription-plans --method POST --body \\\\\\n '{\\\"plan_name\\\":\\\"Pro monthly\\\",\\\"name\\\":\\\"Pro monthly\\\",\\\"description\\\":\\\"Full access\\\",\\\"type\\\":\\\"recurring\\\",\\\"amount\\\":9.99,\\\"currency\\\":\\\"gbp\\\",\\\"billing_interval\\\":\\\"month\\\",\\\"interval_count\\\":1,\\\"trial_period_days\\\":7,\\\"is_active\\\":true}'\",\"result\":[\"Plan Pro monthly created with a seven-day trial\",\"Stripe ids stay empty until Connect onboarding is complete\"],\"clip\":\"cli/payments/create-plan\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the plan. It calls the same API and reports what it created.\",\"example\":\"âCreate an AnythinkPay subscription plan called Pro monthly at £9.99 a month with a 7-day trial.â\",\"result\":[\"Called the AnythinkPay plans API with your details\",\"Plan Pro monthly: £9.99 a month, seven-day trial\",\"It syncs to Stripe once Connect onboarding is finished\",\"The plan is listed under AnythinkPay â Plans\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why this holds up in production\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Idempotent by design\",\"title\":\"Verification upserts, it never duplicates\",\"body\":\"Apple receipt verification keys off the purchase's original_transaction_id. Re-verifying the same purchase, or a renewal coming back around, updates the existing row instead of creating a second subscription.\",\"points\":[\"Account-binding check rejects a receipt replayed against a different account\",\"Superseded purchases are marked explicitly, so entitlement for a product is never ambiguous\"]},{\"eyebrow\":\"A timely reason to avoid extensions\",\"title\":\"Firebase's Stripe and RevenueCat routes run on Extensions, which shut down 31 March 2027\",\"body\":\"After that date, Firebase Extensions can't be installed or edited, which pu
14shes Stripe and Apple IAP handling on Firebase into custom Cloud Functions. Anythink's payment handling is native, not an extension that can be deprecated.\",\"links\":[{\"label\":\"How payments work\",\"href\":\"https://docs.anythink.cloud/guides/payments/how-payments-work\"}]}]}},{\"type\":\"matrix\",\"heading\":\"Subscriptions, compared\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Supabase\",\"Firebase\"],\"rows\":[{\"capability\":\"Stripe subscriptions\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase: Stripe sync engine or a webhook recipe.\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"none\",\"addon\"],\"note\":\"Firebase: via the RevenueCat extension, which Extensions sunsets 31 March 2027.\"},{\"capability\":\"Server-side receipt verification\",\"values\":[\"native\",\"unknown\",\"addon\"]},{\"capability\":\"Admin recovery (status override, resync)\",\"values\":[\"native\",\"unknown\",\"unknown\"]}],\"footnote\":\"Sourced from each vendor's own docs as of 28 September 2026. \\\"Addon\\\" means an extension, plugin or code recipe rather than a feature of the core platform.\"}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"A plan, a trial, and a verified purchase\",\"tabs\":[{\"label\":\"Create a plan\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscription-plans\\nContent-Type: application/json\\n\\n{\\n \\\"plan_name\\\": \\\"pro-monthly\\\",\\n \\\"name\\\": \\\"Pro Monthly\\\",\\n \\\"description\\\": \\\"Full access, billed monthly\\\",\\n \\\"amount\\\": 19.00,\\n \\\"currency\\\": \\\"gbp\\\",\\n \\\"billing_interval\\\": \\\"month\\\",\\n \\\"trial_period_days\\\": 14\\n}\"},{\"label\":\"Check entitlement\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscriptions/me/entitlement\"},{\"label\":\"Verify an Apple purchase\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscriptions/apple/verify\\nContent-Type: application/json\\n\\n{\\n \\\"receipt\\\": \\\"\u003cbase64 App Store transaction\u003e\\\",\\n \\\"app_account_token\\\": \\\"\u003cthe signed-in user's token\u003e\\\"\\n}\"},{\"label\":\"Check Stripe Connect status\",\"language\":\"bash\",\"code\":\"anythink pay status\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"An iOS subscription app\",\"prose\":\"Sell a subscription through Apple in-app purchase. Anythink verifies the receipt against the App Store, binds it to the signed-in account, and keeps renewals from duplicating the entitlement. Your app just asks /me whether access is active.\"},{\"title\":\"A SaaS with a free trial\",\"prose\":\"Set a trial period on the plan, so new subscribers get full access for 14 days before the first Stripe charge. Offer codes extend a trial or discount the first invoice for a referral programme.\"},{\"title\":\"A marketplace with a platform fee\",\"prose\":\"Route a buyer's payment to a seller through Stripe Connect and take a percentage automatically. Configure the split once; every transaction after that follows it.\"}]},\"links\":[{\"label\":\"Apple in-app purchases\",\"url\":\"https://docs.anythink.cloud/guides/payments/apple-in-app-purchases\",\"description\":\"Server-side verification with the App Store Server API\"},{\"label\":\"Offers, trials and entitlements\",\"url\":\"https://docs.anythink.cloud/guides/payments/offers-trials-and-entitlements\",\"description\":\"Offer codes, free trials and access checks\"},{\"label\":\"Payments quick start\",\"url\":\"https://docs.anythink.cloud/guides/payments/quick-start\",\"description\":\"Your first plan in minutes\"}],\"linksHeading\":\"Related reading\"}},{\"id\":14,\"slug\":\"powerful-search-engine\",\"type\":\"product\",\"title\":\"Search\",\"status\":\"published\",\"hero\":{\"headline\":\"Search your data,/by text, filter or distance\",\"description\":\"\u003cp\u003eSearch any entity with typo-tolerant full-text queries, filters, facets and geo radius, backed by Meilisearch and indexed as your records change.\u003c/p\u003e\",\"featurePills\":[\"Meilisearch full-text\",\"Filters and facets\",\"Geo radius and bounding box\",\"Sort by distance\",\"Highlighting\",\"Similar items\",\"Public search\"],\"image\":{\"url\":\"/cdn-assets/20804318/66f82943ff4c4fdc9f71f21bae4988a4.png\",\"alt\":\"Search\"},\"images\":[{\"id\":\"70\",\"url\":\"/cdn-assets/20804318/66f82943ff4c4fdc9f71f21bae4988a4.png\",\"alt\":\"Search\",\"original_file_name\":\"Copy of User Name.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/6fba0fbb14c2443f94dcd4124186f82d.mp4\",\"alt\":\"Search\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database/search\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Search built into the backend,/not bolted on beside it\",\"description\":\"\u003cp\u003eFull-text, filters, facets, geo and similar items on one endpoint, indexed from the same entities your API serves.\u003c/p\u003e\",\"cards\":[{\"id\":26,\"type\":\"feature\",\"title\":\"Typo-tolerant full-text search\",\"description\":\"\u003cp\u003eMark fields searchable and records are indexed in Meilisearch as they're created, updated or deleted. Results rank by word matches, typos, proximity and field, with name fields weighted first.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":27,\"type\":\"feature\",\"title\":\"Filters, facets and highlighting\",\"description\":\"\u003cp\u003eFilter with expressions such as \u003ccode\u003estatus = published AND price \u0026lt; 200\u003c/code\u003e, count results per value with facets, sort on searchable fields or creation date, and highlight matched terms, all on one GET request.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":28,\"type\":\"feature\",\"title\":\"Results follow row-level security\",\"description\":\"\u003cp\u003eAuthenticated search f
14ilters hits through the same row-level security as the entity API, so users only find records they're allowed to open.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":96,\"type\":\"feature\",\"title\":\"Public search, field by field\",\"description\":\"\u003cp\u003ePublic search needs no credentials and returns only fields marked publicly searchable. \u003ccode\u003eanythink search audit\u003c/code\u003e compares what you configured with what public search actually returns.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":97,\"type\":\"feature\",\"title\":\"Geo radius and bounding box\",\"description\":\"\u003cp\u003eEntities with a geo field can be filtered by distance from a point or by a bounding box, and sorted nearest first. A store locator or a listings search needs no extra service.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":241,\"type\":\"feature\",\"title\":\"Similar items\",\"description\":\"\u003cp\u003e\u003ccode\u003eGET /search/similar\u003c/code\u003e returns records that read like a given one, using embeddings Meilisearch creates as each record is indexed. There's no embedding provider or vector database for you to run.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"search API, full-text search API, geo search API, faceted search, Meilisearch backend, similar items API, site search for apps, Algolia alternative\",\"seo_focus_keyword\":\"Full-text, geo and similarity search API\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: make a listings entity searchable, then search it by place and bedrooms.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Choose which fields are searchable. Indexing follows.\",\"example\":\"Settings â Data Model â listings\\nOpen the title field â Searchable\\nOpen the description field â Searchable\\nOpen the bedrooms field â Searchable\\n\\nâ listings are indexed and kept in sync\",\"clip\":\"dashboard/search/searchable-fields\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Every search option is a flag on one command.\",\"example\":\"anythink fields update listings title --searchable\\nanythink fields update listings bedrooms --searchable\\n# garden flats within 5 km, two bedrooms or more, nearest first\\nanythink search query \\\"garden flat\\\" --entities listings \\\\\\n --filter \\\"_geoRadius(51.5072, -0.1276, 5000) AND bedrooms \u003e= 2\\\" \\\\\\n --sort \\\"_geoPoint(51.5072, -0.1276):asc\\\" \\\\\\n --facet bedrooms --highlight\\nanythink search similar listings 42\",\"result\":[\"Matching listings, with the search terms highlighted\",\"Counts for each bedroom number\",\"Listings similar to listing 42\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the search. It builds the filter and runs
14it.\",\"example\":\"âSearch listings for garden flats with at least two bedrooms within 5 km of central London, nearest first, and tell me how many results there are for each bedroom count.â\",\"result\":[\"Searched listings for garden flat\",\"Filtered to two or more bedrooms within 5 km\",\"Sorted nearest first\",\"Counted results for each bedroom number\"]}]}},{\"type\":\"proofs\",\"heading\":\"Search you don't have to run\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Kept in sync\",\"title\":\"The index follows your data\",\"body\":\"Creates, updates and deletes reach the index through a queue. If an index ever drifts, an admin can rehydrate it from the CLI or the API.\",\"links\":[{\"label\":\"Search guide\",\"href\":\"https://docs.anythink.cloud/guides/database/search\"}]},{\"eyebrow\":\"Safe to expose\",\"title\":\"Public search shows only what you choose\",\"body\":\"Only publicly searchable fields reach the public endpoint, and the audit command flags any difference between your settings and what it returns.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"}]},{\"eyebrow\":\"Location\",\"title\":\"Geo search on any entity with a geo field\",\"body\":\"Add a geo field in the data model and radius, bounding-box and nearest-first search work straight away. The same field plots records on the dashboard's map view.\",\"links\":[{\"label\":\"Visual database designer\",\"href\":\"/products/visual-database-designer\"},{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"}]},{\"eyebrow\":\"Recommendations\",\"title\":\"More like this, from the same index\",\"body\":\"The similar-items endpoint ranks records by meaning rather than shared words, for related products, articles or listings, on the authenticated and public endpoints.\",\"links\":[{\"label\":\"Search guide\",\"href\":\"https://docs.anythink.cloud/guides/database/search\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"One endpoint, a few query parameters\",\"tabs\":[{\"label\":\"Full-text\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/search?q=garden+flat\u0026e=listings\u0026hl=true\\nAuthorization: Bearer \u003caccess token\u003e\"},{\"label\":\"Filters and facets\",\"language\":\"bash\",\"code\":\"anythink search query \\\"*\\\" --entities listings \\\\\\n --filter \\\"bedrooms \u003e= 2\\\" \\\\\\n --facet bedrooms --sort \\\"created_at:desc\\\"\"},{\"label\":\"Public search\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/search/public?q=garden+flat\u0026e=listings\"},{\"label\":\"Similar items\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/search/similar?e=listings\u0026id=42\u0026limit=5\\nAuthorization: Bearer \u003caccess token\u003e\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From a data model to a search box\",\"steps\":[{\"title\":\"Choose searchable fields\",\"prose\":\"Tick Searchable on the fields people should find records by. Searchable fields can also be filtered and faceted.\"},{\"title\":\"Records index themselves\",\"prose\":\"Each create, update and delete is queued and applied to that entity's Meilisearch index. There's no search cluster for you to run.\"},{\"title\":\"Query one endpoint\",\"prose\":\"Call /search with a query, the entities to search, and any filters, facets, sorting or highlighting you need.\"},{\"title\":\"Open it to the public, carefully\",\"prose\":\"Tick Publicly Searchable on the fields visitors may see, then call /search/public from your website. Run the audit command before launch.\"},{\"title\":\"Add related items\",\"prose\":\"Call /search/similar with a record's ID to show more like it.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Searchable fields, filters and facets\",\"body\":\"Choose which fields are searchable, then query, filter and sort them over the API.\",\"link\":{\"label\":\"Read the search guide\",\"href\":\"https://docs.anythink.cloud/guides/database/search\"}}}}},{\"id\":19,\"slug\":\"access_control\",\"type\":\"product\",\"title\":\"Access Control\",\"status\":\"published\",\"hero\":{\"headline\":\"Who can see what,/down to the record\",\"description\":\"\u003cp\u003eRoles carry entity-scoped permissions, row-level security restricts which records a user can see, and group-scoped reads extend that to a team without opening every record to every teammate. All three are enforced at the API, not reimplemented in your app.\u003c/p\u003e\",\"featurePills\":[\"Entity-scoped permissions\",\"Row-level security\",\"Group-scoped reads\",\"Set automatically by a workflow\"],\"image\":{\"url\":\"/cdn-assets/20804318/ec8feaeb4e6d405a88237202c848ec1b.png\",\"alt\":\"Access Control\"},\"images\":[{\"id\":\"66\",\"url\":\"/cdn-assets/20804318/ec8feaeb4e6d405a88237202c848ec1b.png\",\"alt\":\"Access Control\",\"original_file_name\":\"permissions.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/e6dacb08db5a476e9eec6b232e51c26c.mp4\",\"alt\":\"Access Control\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Access control that matches how teams actually share data\",\"description\":\"\u003cp\u003eRoles and permissions control what an action can do. Row-level security controls which records it can do it to.\u003c/p\u003e\",\"cards\":[{\"id\":110,\"type\":\"feature\",\"title\":\"Permissions named entity:action\",\"description\":\"\u003cp\u003eEvery permission follows the same shape â blog_posts:read, orders:update, anythink_group_data:read. Assign them to roles, assign a role to a user, and every API call, workflow step and dashboard view checks the same permission set.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]},{\"id\":111,\"type\":\"feature\",\"title\":\"Custom roles, entity-scoped\",\"description\":\"\u003cp\u003eCreate as many roles as your team structure needs. Each permission on a role is scoped to one entity and one action, so an editor role can read and update articles without being able to delete them.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]},{\"id\":112,\"type\":\"feature\",\"title\":\"Row-level security set at creation\",\"description\":\"\u003cp\u003eA Create Data workflow step can set row-level security on the record
14it just created â auto_set_rls plus the field that links it to a user â so a new record is scoped to its owner the moment it exists, not in a follow-up write.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/be8f04543cfb41d7a126876abee72c7c.mp4\",\"alt\":\"Row-level security set at creation\"},\"pageIds\":[19]},{\"id\":113,\"type\":\"feature\",\"title\":\"Managing access after the fact\",\"description\":\"\u003cp\u003eAn Update Data step manages RLS on an existing record with rls_mode: add, remove or set â grant a second user access, revoke it, or replace the access list outright, from inside a workflow.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/54daff0079ae48e09b953cab8686f324.mp4\",\"alt\":\"Managing access after the fact\"},\"pageIds\":[19]},{\"id\":114,\"type\":\"feature\",\"title\":\"Group-scoped reads\",\"description\":\"\u003cp\u003ePass ?group_scope=\u0026lt;group_id\u0026gt; on a read and a user sees records shared with that group, provided they hold a membership role in it with the anythink_group_data:read permission. Being a group's admin doesn't grant this by itself â membership and the read permission are checked separately.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]},{\"id\":115,\"type\":\"feature\",\"title\":\"Enforced at the API, not in your app\",\"description\":\"\u003cp\u003ePermissions, row-level security and group scope are all checked server-side on every request. There's no separate authorisation layer to keep in sync with your frontend â the same rules apply whether the call comes from the dashboard, the API, or a workflow.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for how teams actually share data\",\"description\":\"\u003cp\u003eThe three mechanisms combine for most of the access patterns a product needs\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":true,\"title\":\"Access Control in Practice\",\"description\":\"\u003cp\u003eHow roles, row-level security and group-scoped reads work together\u003c/p\u003e\",\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":\"\",\"relatedDoc\":{\"id\":11,\"slug\":\"authentication\",\"title\":\"Sign in users: email, tokens and API keys\"},\"seo_keywords\":\"row-level security, group-scoped reads, entity permissions, role-based access control backend\",\"seo_focus_keyword\":\"Row-level security for teams and groups\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a supp
14ort role that can read and update orders, with each person seeing only the orders they're given.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the role, switch on row-level security, then grant access record by record.\",\"example\":\"Settings â Roles and Permissions â New role\\nRole Name: support â Create Role\\nPermissions: orders â Read, Update\\nSettings â Data Model â orders â Edit\\nEnable Row-Level Security â Update Entity\\nEntities â orders â open an order â Row-Level Security\\nAdd User Access â pick a user â Add User\\n\\nâ that user sees only the orders they've been given\",\"clip\":\"dashboard/access/support-role-rls\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Scriptable, so the same access rules can go into every project.\",\"example\":\"anythink roles create support --description \\\"Support agents\\\"\\n# 12 is the id that roles list shows for support\\nanythink roles permissions add 12 orders --actions read,update\\nanythink entities update orders --rls true\\nanythink data rls orders 42 --user 72\",\"result\":[\"Role support can read and update orders\",\"Row-level security is on for orders\",\"User 72 can see and edit order 42, and no other order\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the access you want. It runs the same commands and tells you what it did; you can check every change in the dashboard.\",\"example\":\"âCreate a support role that can read and update orders. Turn on row-level security for orders, then give user 72 access to order 42 only.â\",\"result\":[\"Role support created with read and update on orders\",\"Row-level security switched on for orders\",\"User 72 granted access to order 42\",\"Administrators still see every order\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Permissions, row-level security and group reads as they're actually configured\",\"tabs\":[{\"label\":\"Set RLS at creation\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 33 create-ticket \\\\\\n --name \\\"Create ticket\\\" \\\\\\n --action CreateData \\\\\\n --params '{\\n \\\"entity\\\": \\\"support_tickets\\\",\\n \\\"data\\\": { \\\"subject\\\": \\\"{{ $anythink.trigger.data.subject }}\\\" },\\n \\\"auto_set_rls\\\": true,\\n \\\"rls_user_field\\\": \\\"created_by\\\"\\n }' \\\\\\n --start --enabled\"},{\"label\":\"Grant a second user access\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 33 grant-manager-access \\\\\\n --name \\\"Grant manager access\\\" \\\\\\n --action UpdateData \\\\\\n --params '{\\n \\\"entity\\\": \\\"support_tickets\\\",\\n \\\"id\\\": \\\"{{ $anythink.steps.create_ticket.data.id }}\\\",\\n \\\"_rls\\\": { \\\"mode\\\": \\\"add\\\", \\\"users\\\": [{ \\\"user_id\\\": 21, \\\"readonly\\\": false }] }\\n }' \\\\\\n --enabled\"},{\"label\":\"Read within a group's scope\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/support_tickets/items?group_scope=14\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Multi-team SaaS with per-user isolation\",\"prose\":\"Set row-level security on every record at creation, scoped to the user who created it. Eac
14h user sees only their own records, enforced at the API, with nothing to configure per request.\"},{\"title\":\"Team workspaces without opening every record to everyone\",\"prose\":\"Put teammates in a group, grant the group's members the anythink_group_data:read permission, and reads scoped with ?group_scope can return records shared with the group â distinct from the per-user grants a record might also carry.\"},{\"title\":\"Role-gated write paths\",\"prose\":\"An editor role gets articles:read, articles:create and articles:update, but not articles:delete. The same permission check runs whether the write comes from the dashboard, a direct API call, or a workflow step.\"}]}}},{\"id\":31,\"slug\":\"dashboards\",\"type\":\"product\",\"title\":\"Dashboards\",\"status\":\"published\",\"hero\":{\"headline\":\"Dashboards,/on data you already have\",\"description\":\"\u003cp\u003eBuild charts, grids, kanban boards and dashboards on the same data model your API already runs on, with no second database to keep in sync.\u003c/p\u003e\",\"featurePills\":[\"Bar\",\"pie\",\"line\",\"funnel and cohort charts\",\"Materialised views across entities\",\"Grid\",\"kanban\",\"calendar and map views\",\"Branded colours\",\"radius and logo\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/dashboards\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Internal dashboards/on your own data\",\"description\":\"\u003cp\u003eCharts, cross-entity grids and five ways to view your data, styled with your own colours and logo.\u003c/p\u003e\",\"cards\":[{\"id\":195,\"type\":\"feature\",\"title\":\"Five chart types, per entity\",\"description\":\"\u003cp\u003eBar, pie, line, funnel and cohort charts, each built on a single entity with a field, an aggregation, a timeframe preset and a compare-to-prior-period option.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":196,\"type\":\"feature\",\"title\":\"Materialised views across entities\",\"description\":\"\u003cp\u003eA materialised view joins another entity, or your payments and subscriptions data, in as columns, with a project-wide TOTAL row and server-side pagination, for the cross-entity grid a single chart can't show.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":197,\"type\":\"feature\",\"title\":\"Five views on every entity\",\"description\":\"\u003cp\u003eSwitch any entity between Grid, Kanban, Map, Calendar and Charts without building a separate screen. Kanban groups records by a status field with drag-and-drop; Map plots a geo field.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":198,\"type\":\"feature\",\"title\":\"Dashboards you assemble from widgets\",\"description\":\"\u003cp\u003eCombine charts and materialised views into a dashboard, with a live preview as you build it. Each dashboard has its own data endpoint, scoped by the same permissions as the rest of your API.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":199,\"type\":\"feature\",\"title\":\"Your colours, radius and logo\",\"description\":\"\u003cp\u003eSet a primary colour, grey palette and corner radius, and add your project's logo, so the Anythink dashboard reads as part of your product, not a generic admin panel.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":200,\"type\":\"feature\",\"title\":\"Menus you configure\",\"description\":\"\u003cp\u003eDecide which entities, dashboards and pages show in the navigation, and in what order, instead of shipping every entity to every role by default.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real operations teams\",\"description\":\"\u003cp\u003eFrom a single chart on one entity to a project-wide revenue view that joins payments and subscriptions.\u003c/p\u003e\",\"cards\":[]}
14,\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"internal dashboards, Retool alternative, cross-entity reporting, materialised views, kanban view, admin dashboard builder, operations dashboard\",\"seo_focus_keyword\":\"Internal dashboards on your app data\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a bar chart of revenue by month, built from your orders.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Design the chart on screen and drop it onto a dashboard.\",\"example\":\"Dashboard â Customize â Add widget\\nWidget: Chart â Design chart\\nData source: orders\\nChart type: Bar Chart\\nX-Axis Field: created_at, Interval: Month\\nAggregation: Sum, Y Field: total\\nChart name: Revenue by month â Save Chart\\n\\nâ the chart is ready to add to your dashboard\",\"clip\":\"dashboard/dashboards/build-chart\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"A chart is a saved configuration, so you can create it from a script.\",\"example\":\"anythink fetch /charts --method POST --body \\\\\\n '{\\\"name\\\":\\\"Revenue by month\\\",\\\"dataSource\\\":\\\"entity\\\",\\\"chartType\\\":\\\"column\\\",\\\"entityName\\\":\\\"orders\\\",\\\"xField\\\":\\\"created_at\\\",\\\"xInterval\\\":\\\"month\\\",\\\"yField\\\":\\\"total\\\",\\\"yAgg\\\":\\\"sum\\\"}'\",\"result\":[\"Chart Revenue by month saved\",\"Sums orders.total for each month\",\"Pick it from Add widget â Chart on any dashboard\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the chart. It saves the configuration and tells you where to find it.\",\"example\":\"âMake a bar chart of revenue by month from the orders entity, summing the total field.â\",\"result\":[\"Chart configuration created on orders\",\"Bar chart: sum of total, grouped by month\",\"Saved as Revenue by month\",\"Ready to add from Add widget â Chart\"]}]}},{\"type\":\"matrix\",\"heading\":\"Dashboards, compared\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Directus\",\"Supabase\"],\"rows\":[{\"capability\":\"Charts on your data\",\"values\":[\"native\",\"native\",\"addon\"],\"note\":\"Directus: Insights dashboards. Supabase: charts appear in the AI assistant chat, not as a standalone builder.\"},{\"capability\":\"Cross-entity joined views\",\"values\":[\"native\",\"unknown\",\"none\"],\"note\":\"Anythink: materialised views, including payments/subscriptions as a join source.\"},{\"capability\":\"Kanban / map / calendar views\",\"values\":[\"native\",\"unknown\",\"none\"]},{\"capability\":\"Branding (colours, radius, logo)\",\"values\":[\"native\",\"native\",\"none\"]}],\"footnote\":\"Sourced from each vendor's own docs as of 28 September 2026. Anythink's branding is colours, corner radius, logos and menus, not a fully white-label product.\"}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"A chart, a materialised view, a branded dashboard\",\"tabs\":[{\"label\":\"Read a materialised view\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/materialised-views/{id}/data?page=1\u0026page_size=25\"},{\"label\":\"List entity items\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/orders/items?page=1\u0026pageSize=25\"},{\"label\":\"Read your project's theme\",\"language\":\"bash\",\"code\":\"anythink settings get --json\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"A revenue dashboard across payments and orders\",\"prose\":\"A materialised view joins your orders entity with subscriptions data, so finance can see revenue per plan without a separate BI pipeline or a hand-written join.\"},{\"title\":\"A support queue on Kanban\",\"prose\":\"Switch your tickets entity to Kanban, grouped by status. Agents drag a ticket from Open to In progress to Resolved, and the same records still power your API and workflows.\"},{\"title\":\"A branded ops panel for an agency's client\",\"prose\":\"Set the client's colours, logo and corner radius, and configure the menu to show only the entities and dashboards that client's team should see.\"}]}}},{\"id\":32,\"slug\":\"integrations\",\"type\":\"product\",\"title\":\"Integrations\",\"status\":\"published\",\"hero\":{\"headline\":\"Backend integrations,/called from a workflow\",\"description\":\"\u003cp\u003eConnect Slack, Google Calendar, GitHub, LinkedIn, X, Claude, OpenAI and Grok, then call any of them as a step in a workflow. Gemini powers the AI chat in the Anythink dashboard, and Calendly and Fireflies are coming soon.\u003c/p\u003e\",\"featurePills\":[\"Slack\",\"Google Calendar\",\"GitHub\",\"LinkedIn and X\",\"Claude\",\"OpenAI and Grok steps\",\"Per-user or per-project connections\",\"Bring your own OAuth app\",\"Dynamic pickers in the workflow editor\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/integrations\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Integrations,/wired into workflows\",\"description\":\"\u003cp\u003eEvery provider is callable as a workflow step, with per-user or per-project connections.\u003c/p\u003e\",\"cards\":[{\"id\":221,\"type\":\"feature\",\"title\":\"Providers ready in every project\",\"description\":\"\u003cp\u003eSlack, Google Calendar (with Meet), GitHub, LinkedIn (profile or company page), X, Claude, OpenAI and Grok as workflow steps, plus Google and Apple for sign-in, each with its own auth type and operations. Gemini is available in the dashboard AI chat. Calendly and Fireflies are coming soon.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":222,\"type\":\"feature\",\"title\":\"Per-user or per-project connections\",\"description\":\"\u003cp\u003eA connection can belong to the project, so every workflow run uses the same account, or to a single user, so each end-u
14ser of your app connects their own Slack, LinkedIn or X account.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":223,\"type\":\"feature\",\"title\":\"Bring your own OAuth app\",\"description\":\"\u003cp\u003eOverride a provider's OAuth app with your own client ID and secret at the project level, instead of connecting through Anythink's shared app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":224,\"type\":\"feature\",\"title\":\"Integration steps in any workflow\",\"description\":\"\u003cp\u003eCall any provider's operation as a workflow step: post to Slack, create a calendar event, read a repository's latest commits or releases, publish to LinkedIn or X, or generate, summarise and translate text with Claude, OpenAI or Grok.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":225,\"type\":\"feature\",\"title\":\"Dynamic pickers for the operation's inputs\",\"description\":\"\u003cp\u003eFields like a GitHub repository are searchable dropdowns of the connected account's actual repositories in the workflow editor, not free text you have to get exactly right.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":226,\"type\":\"feature\",\"title\":\"Managed from the dashboard or the CLI\",\"description\":\"\u003cp\u003eList definitions, connect an API key or OAuth provider, and enable, disable or disconnect a connection from the dashboard or the anythink CLI.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real integration flows\",\"description\":\"\u003cp\u003eFrom a single Slack notification to a per-user publishing flow across LinkedIn and X.\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"backend integrations, Slack GitHub LinkedIn integration workflow, bring your own OAuth app, per-user integration connections, workflow automation integrations, Zapier inside your backend\",\"seo_focus_keyword\":\"Backend integrations: Slack, GitHub, LinkedIn\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"Connect Slack in a minute\",\"subheading\":\"The same connection, made from the dashboard or the CLI.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Pick Slack in Integrations, sign in and allow access.\",\"example\":\"Settings â Integrations â Integrations tab\\nSlack â Connect\\nSign in to Slack and allow access\\n\\nâ Slack shows as Connected\",\"clip\":\"dashboard/integrations/connect-slack\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"One command opens the OAuth flow and stores the connection.\",\"example\":\"anythink integrations oauth connect slack\\nanythink integrations connections list --provider slack\",\"result\":[\"Slack authorised in your browser\",\"Connection stored for the project\",\"Listed
14with your other connections\"],\"clip\":\"cli/integrations/connect-slack\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask the assistant to list connections or use one in a workflow.\",\"example\":\"âWhich integrations are connected in this project? Add a step to my new-order workflow that posts the order total to #sales on Slack.â\",\"result\":[\"Listed the project's connections, including Slack\",\"Added an Integration step to the new-order workflow\",\"The step posts the order total to #sales\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Connect a provider, then call it from a workflow\",\"tabs\":[{\"label\":\"List providers\",\"language\":\"bash\",\"code\":\"anythink integrations list\"},{\"label\":\"Connect over OAuth\",\"language\":\"bash\",\"code\":\"anythink integrations oauth connect slack\"},{\"label\":\"Workflow step\",\"language\":\"text\",\"code\":\"Trigger: EntityCreated on support_tickets\\n\\nSteps:\\n 1. Integration â Slack: Send Message\\n â channel: #support\\n â text: \\\"New ticket: {{ $anythink.trigger.data.subject }}\\\"\\n\\nNo webhook endpoint to write or host.\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"A per-user social publisher\",\"prose\":\"Each user connects their own LinkedIn and X account. When they publish a post from your app, a workflow posts it through their connection, not a shared company account.\"}
14,{\"title\":\"A Slack-notified support queue\",\"prose\":\"A new support ticket triggers a workflow that posts to Slack and opens a tracking entry. Your team never has to poll a dashboard for new tickets.\"},{\"title\":\"An AI-assisted triage step\",\"prose\":\"Summarise a long support ticket with Claude, Gemini, OpenAI or Grok as a workflow step, then route the summary into Slack or GitHub, without hand-rolling an API client for each provider.\"}]},\"links\":[{\"label\":\"Integrations reference: providers and operations\",\"url\":\"https://docs.anythink.cloud/guides/integrations/reference\"},{\"label\":\"Connect your first integration\",\"url\":\"https://docs.anythink.cloud/guides/integrations/quick-start\"},{\"label\":\"Workflows quick start\",\"url\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}],\"linksHeading\":\"Related reading\"}},{\"id\":35,\"slug\":\"push-notifications\",\"type\":\"product\",\"title\":\"Push Notifications\",\"status\":\"published\",\"hero\":{\"headline\":\"Push notifications/with action buttons\",\"description\":\"\u003cp\u003eSend push notifications with tappable action buttons, and route the tap back into a workflow.\u003c/p\u003e\u003cp\u003eAnythink sends through Firebase Cloud Messaging (Android and iOS) and web push (VAPID), templates the payload, and fans bulk sends out across a queue instead of a synchronous loop.\u003c/p\u003e\",\"featurePills\":[\"FCM for Android and iOS\",\"Web push (VAPID)\",\"iOS categories and action buttons\",\"Tap-to-workflow\",\"Templates\",\"Bulk fan-out via the queue\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows/push-notifications\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Push with action buttons,/not just a message\",\"description\":\"\u003cp\u003eCategories, action buttons and bulk sends, wired into the same workflow engine as the rest of Anythink.\u003c/p\u003e\",\"cards\":[{\"id\":242,\"type\":\"feature\",\"title\":\"FCM and web push\",\"description\":\"\u003cp\u003eRegistered devices are sent to through Firebase Cloud Messaging, which delivers to Android and iOS, or through web push with VAPID for browsers, from the same send call.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":243,\"type\":\"feature\",\"title\":\"iOS categories and action buttons\",\"description\":\"\u003cp\u003eDefine a notification category with an ordered set of action buttons and their labels, then attach it to a template. Categories sync to the device so the system notification renders the right buttons.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":244,\"type\":\"feature\",\"title\":\"A tap fires a real workflow\",\"description\":\"\u003cp\u003eWhen someone taps an action button, the tap is verified against a signed, category-scoped token and checked against the project's registered actions, then it triggers a workflow. A lock-screen button can start automation, not just open the app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":245,\"type\":\"feature\",\"title\":\"Templates with per-button actions\",\"description\":\"\u003cp\u003eBuild a push template once, with its own action buttons and click behaviour, then send it from a workflow step with templated fields instead of hand-building the payload each time.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":246,\"type\":\"feature\",\"title\":\"Bulk sends over the queue\",\"description\":\"\u003cp\u003eSending to a list fans each recipient out as its own message on the queue, so a broadcast to thousands of devices doesn't run as a slow synchronous loop inside the workflow.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]}
14,{\"id\":247,\"type\":\"feature\",\"title\":\"Triggered from any workflow\",\"description\":\"\u003cp\u003eSend a push as a step in any workflow, using the same trigger types as the rest of Anythink: an entity change, a schedule, a manual run, or an API call.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real notification flows\",\"description\":\"\u003cp\u003eFrom a one-off broadcast to a tap that re-triggers automation, modelled as a workflow step.\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"push notification backend, push notifications with action buttons, FCM backend, web push VAPID, iOS notification categories, notification workflow automation\",\"seo_focus_keyword\":\"Push notification backend with action buttons\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a push notification with Start, Snooze and Skip buttons.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Android and web show the buttons as sent. On iOS the app registers the matching button group first.\",\"example\":\"Settings â Push Notifications â Send notification\\nTitle: Time for your workout\\nBody: Your session starts in 10 minutes\\nButtons: add Start, Snooze and Skip\\nRecipients: Specific users â pick a user\\nSend to 1 user\\n\\nâ the notification arrives with three action buttons\",\"clip\":\"dashboard/push/action-buttons\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same send, as one API call from a script or CI job.\",\"example\":\"anythink fetch /push/test --method POST --body \\\\\\n '{\\\"title\\\":\\\"Time for your workout\\\",\\\"body\\\":\\\"Your session starts in 10 minutes\\\",\\\"target_user_id\\\":72,\\\"buttons\\\":[{\\\"id\\\":\\\"start\\\",\\\"label\\\":\\\"Start\\\"},{\\\"id\\\":\\\"snooze\\\",\\\"label\\\":\\\"Snooze\\\"},{\\\"id\\\":\\\"skip\\\",\\\"label\\\":\\\"Skip\\\"}]}'\",\"result\":[\"Push sent to user 72's registered devices\",\"Buttons: Start, Snooze, Skip\",\"The delivery result is under Push Notifications â History\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Say who gets it and what the buttons are. It sends the push and reports the result.\",\"example\":\"âSend user 72 a push saying their workout starts in 10 minutes, with Start, Snooze and Skip buttons.â\",\"result\":[\"Sent through the project's push providers\",\"Added three action buttons: Start, Snooze, Skip\",\"Delivery result is in the History tab\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"A category, a template, and a triggered send\",\"tabs\":[{\"label\":\"Workflow step\",\"language\":\"text\",\"code\":\"Trigger: EntityUpdated on orders (changed_to: status = \\\"shipped\\\")\\n\\nSteps:\\n 1. SendPushNotification\\n â template: order-shipped\\n â recipients: {{ $anythink.trigger.data.customer_id }}\\n\\nThe order-shipped template carries its own\\naction buttons: \\\"Track package\\\", \\\"Contact support\\\".\"},{\"label\":\"Tap endpoint\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/push/action-events\\nContent-Type: application/json\\n\\n{\\n \\\"notification_id\\\": \\\"\u003csigned token issued at send time\u003e\\\",\\n \\\"category\\\": \\\"order-shipped\\\",\\n \\\"action_id\\\": \\\"track-package\\\",\\n \\\"received_at\\\": \\\"2026-10-02T09:00:00Z\\\",\\n \\\"responded_at\\\": \\\"2026-10-02T09:00:04Z\\\"\\n}\"},{\"label\":\"Register a device\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/push/vapid-public-key\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Order status pushes with a tracking action\",\"prose\":\"When an order's status changes to shipped, a workflow sends a push with a \\\"Track package\\\" button. Tapping it fires a workflow that looks up the tracking link, instead of just deep-linking into the app.\"},{\"title\":\"A reminder with Snooze and Done buttons\",\"prose\":\"A scheduled workflow pushes a reminder with two actions. \\\"Done\\\" marks the task complete via a workflow step; \\\"Snooze\\\" re-queues the same reminder for later, all from the lock screen.\"},{\"title\":\"A broadcast to every subscriber\",\"prose\":\"A manual workflow loops over a list of recipients and sends through the queue, so a broadcast to a large group doesn't run as a slow, synchronous send inside the workflow.\"}]}}},{\"id\":64,\"slug\":\"secrets\",\"type\":\"product\",\"title\":\"Secrets\",\"status\":\"published\",\"hero\":{\"headline\":\"API keys and tokens,/encrypted and out of sight\",\"description\":\"\u003cp\u003eStore the API keys, tokens and credentials your backend needs as project secrets. They're encrypted at rest, never shown again after you save them, and decrypted only at the moment a workflow step uses them.\u003c/p\u003e\",\"featurePills\":[\"AES-256-GCM at rest\",\"Never displayed after saving\",\"{{ $anythink.secrets.KEY }} in workflows\",\"Shared with chosen users\",\"Role permissions\",\"CLI and MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows/secrets\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Secrets your workflows can use,/and nobody can read\",\"description\":\"\u003cp\u003eOne encrypted store for every credential your backend touches: AI provider keys, payment keys, webhook tokens and third-party API keys.\u003c/p\u003e\",\"cards\":[{\"id\":285,\"type\":\"feature\",\"title\":\"Encrypted at rest with AES-256-GCM\",\"description\":\"\u003cp\u003eEvery value is encrypted before it's stored, using AES-256-GCM with a key derived through PBKDF2 (600,000 iterations). The plaintext never sits in your database.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":286,\"type\":\"feature\",\"title\":\"Write once, never shown again\",\"description\":\"\u003cp\u003eAfter you save a secret, the dashboard, API and CLI show only its name and dates, never the value. To change it, you replace it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":287,\"type\":\"feature\",\"title\":\"Use them in any workflow step\",\"description\":\"\u003cp\u003eWrite \u003ccode\u003e{{ $anythink.secrets.STRIPE_SECRET_KEY }}\u003c/code\u003e in a Call an API header, a script or an integration step. The value is decrypted inside the workflow worker when that step runs, and nowhere else.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":288,\"type\":\"feature\",\"title\":\"Shared with the people who need them\",\"description\":\"\u003cp\u003eProject administrators see every secret. Everyone else sees only the secrets shared with them, either read-only or editable.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":289,\"type\":\"feature\",\"title\":\"Controlled by roles\",\"description\":\"\u003cp\u003eReading, creating, updating and deleting secrets are separate permissions, so a role can use the backend without ever managing its credentials.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":290,\"type\":\"feature\",\"title\":\"Every stored credential, the same protection\",\"description\":\"\u003cp\u003eIntegration OAuth credentials, push notification service accounts and Apple in-app purchase keys are encrypted the same way, so nothing sensitive is stored in plain text.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"store API keys securely, encrypted secrets management, backend secrets, workflow secrets, environment variables alternative, API key storage, secrets manager for apps\",\"seo_focus_keyword\":\"Encrypted secrets for your backend and workflows\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: store a Stripe key and use it from a workflow.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"clip\":\"dashboard/workflows/secrets\",\"caption\":\"Save the key once, then reference it by name in a workflow step.\",\"example\":\"Settings â Secrets â Add Secret\\nKey: STRIPE_SECRET_KEY\\nValue: paste it, then Save\\n\\nWorkflows â Sync Stripe customers â Add Step â Call An API\\nHeader Authorization: Bearer {{ $anythink.secrets.STRIPE_SECRET_KEY }}\\n\\nâ the key is decrypted only when the step runs\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The value is prompted for, so it never lands in your shell history.\",\"example\":\"anythink secrets create STRIPE_SECRET_KEY\\nanythink secrets list\",\"result\":[\"STRIPE_SECRET_KEY stored, encrypted with AES-256-GCM\",\"list shows names and dates, never values\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Keep the value out of chat: store it in the dashboard or CLI, then ask the assistant to use it.\",\"example\":\"âAdd a step to the Sync Stripe customers workflow that calls the Stripe customers API, using the STRIPE_SECRET_KEY secret as a bearer token.â\",\"result\":[\"Added a Call An API step\",\"Authorization header references {{ $anythink.secrets.STRIPE_SECRET_KEY }}\",\"The secret's value was never read or shown\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Store a key once, then use it from a workflow\",\"tabs\":[{\"label\":\"Store the secret\",\"language\":\"bash\",\"code\":\"anythink secrets create STRIPE_SECRET_KEY\\n# prompts for the value, so it never lands in your shell history\"},{\"label\":\"List what's stored\",\"language\":\"bash\",\"code\":\"anythink secrets list\\n# names and dates only; values are never shown\"},{\"label\":\"Use it in a workflow step\",\"language\":\"text\",\"code\":\"Call an API POST https://api.stripe.com/v1/refunds\\nHeader Authorization: Bearer {{ $anythink.secrets.STRIPE_SECRET_KEY }}\"}]},\"narrative\":{\"heading\":\"What teams keep in secrets\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"AI provider keys\",\"prose\":\"Keep a Claude, OpenAI or Grok key in one place and reference it from every workflow that summarises, translates or analyses. To rotate it, update the secret, not each workflow.\"},{\"title\":\"Payment and webhook credentials\",\"prose\":\"Stripe keys, webhook signing secrets and partner API tokens live in one place instead of being pasted into each workflow. Send them in a header or the body: Call an API logs header names, never the
14ir values.\"},{\"title\":\"Per-environment configuration\",\"prose\":\"Staging and production projects each hold their own secrets under the same names, so a workflow promoted with anythink migrate picks up the right credentials in each.\"}]}}},{\"id\":65,\"slug\":\"email\",\"type\":\"product\",\"title\":\"Email\",\"status\":\"published\",\"hero\":{\"headline\":\"Transactional email,/sent from your own domain\",\"description\":\"\u003cp\u003eSend sign-up confirmations, invites, password resets, magic links and any email your app needs, from your own verified domain and with your own templates. Workflows send email when a record changes, on a schedule, or when your API calls them.\u003c/p\u003e\",\"featurePills\":[\"Your own sending domain\",\"Editable templates\",\"Built-in auth emails\",\"Send from any workflow\",\"Attachments and inline images\",\"Gmail sender logo\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows/email\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Email that comes from you,/not from your backend vendor\",\"description\":\"\u003cp\u003eEvery email your users receive carries your domain, your design and your sender name, without you running a separate email service.\u003c/p\u003e\",\"cards\":[{\"id\":291,\"type\":\"feature\",\"title\":\"Your own verified sending domain\",\"description\":\"\u003cp\u003eAdd your domain, publish the DNS records Anythink shows you, and verify it. Email then goes out from your addresses, authenticated for your domain rather than ours.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":292,\"type\":\"feature\",\"title\":\"Several sender addresses, one default\",\"description\":\"\u003cp\u003eSend support mail from support@ and receipts from billing@. Pick a default, and choose a different address per workflow step when you need to.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":293,\"type\":\"feature\",\"title\":\"Sign-up, invite and reset emails built in\",\"description\":\"\u003cp\u003eAccount confirmation, team invites, password resets and magic links are sent for you by Anythink's authentication, using templates you can restyle.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":294,\"type\":\"feature\",\"title\":\"Templates with a shared shell\",\"description\":\"\u003cp\u003eWrite each template once, wrap them all in one branded HTML shell, and preview the rendered result with real variables before anything is sent.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":295,\"type\":\"feature\",\"title\":\"Send from any workflow\",\"description\":\"\u003cp\u003eA Send an Email step addresses its recipient from the triggering record, a related user or a fixed address, fills the template from the record's data, and can attach files from your project as attachments or inline images.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":296,\"type\":\"feature\",\"title\":\"Your logo next to your name in Gmail\",\"description\":\"\u003cp\u003eUpload a sender avatar and Anythink adds the Schema.org markup Gmail uses to show it beside your messages.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]}
14,\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"transactional email API, send email from backend, custom sending domain, email templates API, password reset email, magic link email, workflow email automation, SendGrid alternative backend\",\"seo_focus_keyword\":\"Transactional email API with your own domain\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"proofs\",\"heading\":\"Email that comes from you\",\"subheading\":\"Verify a domain, set a sender and preview a template, all in the Anythink dashboard.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Sending domains\",\"title\":\"Your domain, verified in a few clicks\",\"clip\":\"dashboard/email/sending-domain\",\"body\":\"Add mail.yourdomain.com, publish the DNS records the Anythink dashboard shows you, and verify. Set hello@ as your default sender and every email goes out under your name.\",\"links\":[{\"label\":\"Email in workflows\",\"href\":\"https://docs.anythink.cloud/guides/workflows/email\"}]},{\"eyebrow\":\"Templates\",\"title\":\"Preview with real variables before anything sends\",\"body\":\"Each template is rendered inside one shared, branded shell. Preview it with sample data, then send it from any workflow step.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"}]},{\"eyebrow\":\"Built in\",\"title\":\"Sign-up, invite, reset and magic-link emails\",\"body\":\"Authentication sends these for you, from your domain and in your design.\",\"links\":[{\"label\":\"Authentication\",\"href\":\"/products/authentication\"}]}]}}],\"narrative\":{\"heading\":\"What teams send\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Order and booking confirmations\",\"prose\":\"A new paid order triggers a workflow that emails the customer a templated receipt, with the invoice PDF from your file store attached, from billing@yourdomain.\"},{\"title\":\"Status changes your users care about\",\"prose\":\"When an application, ticket or delivery changes status, a workflow filtered on that change emails the right person, with the record's details already in the template.\"},{\"title\":\"Scheduled summaries\",\"prose\":\"A timed workflow reads the week's new records and emails your team a summary every Monday morning, without anyone running a report.\"}]}}}],\"for_me\":[{\"id\":2,\"slug\":\"for-founders\",\"type\":\"for_me\",\"title\":\"For Founders\",\"status\":\"published\",\"hero\":{\"headline\":\"From MVP to paying customers,/on one project\",\"description\":\"\u003cp\u003eAnythink gives founders sign-in, a REST API, subscriptions, workflows and an operations dashboard in one project, from first prototype to paying customers.\u003c/p\u003e\",\"featurePills\":[\"Apple\",\"Google and LinkedIn sign-in\",\"Stripe and Apple in-app purchases\",\"Visual workflows\",\"Operations dashboard\",\"Everything included in every plan\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What you'd otherwise/stitch together\",\"description\":\"\u003cp\u003eSign-in, payments, automation and an admin dashboard, all reading the same data model.\u003c/p\u003e\",\"cards\":[{\"id\":2
1412,\"type\":\"feature\",\"title\":\"Sign-in your users expect\",\"description\":\"\u003cp\u003eEmail and password, magic links, and Apple, Google and LinkedIn sign-in with tokens verified on the server. The open source React SDK handles sign-in and sessions in your web app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":213,\"type\":\"feature\",\"title\":\"Charge from the first release\",\"description\":\"\u003cp\u003ePlans, trials and offer codes with Stripe, plus Apple in-app purchases verified against the App Store. Your app asks a /me endpoint whether the signed-in user has access.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":214,\"type\":\"feature\",\"title\":\"Automate the busywork\",\"description\":\"\u003cp\u003eWorkflows run when a record changes, on a schedule or from an API call. Send a welcome email, push a reminder, post to Slack or ask Claude to draft a reply, without a separate automation tool.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":215,\"type\":\"feature\",\"title\":\"Run the business from the dashboard\",\"description\":\"\u003cp\u003eCharts, materialised views that join your data with subscriptions, and grid, kanban, calendar and map views. Your first hires work in the same project your app uses.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":216,\"type\":\"feature\",\"title\":\"No rebuild at the next stage\",\"description\":\"\u003cp\u003eRoles, row-level security and group access are there when you need them, and the CLI promotes a staging project to production. The project you prototype on is the one you scale.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":4,\"slug\":\"my_anythink\",\"title\":\"Account, billing and projects\"},\"seo_keywords\":\"startup backend, MVP backend, backend with subscriptions, Apple in-app purchase backend, Firebase alternative for startups, Supabase alternative for startups\",\"seo_focus_keyword\":\"Backend for startup founders and MVPs\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Sell a monthly plan with a 14-day trial.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the plan. It syncs to Stripe once you have connected it.\",\"example\":\"Settings â Stripe â connect your Stripe account\\nCreate a plan: Pro Monthly, £9.99 a month, 14-day trial\\n\\nâ your app checks access on /me/entitlement\",\"clip\":\"dashboard/payments/create-plan\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Create the plan through the API, once Stripe onboarding is done.\",\"example\":\"anythink pay connect\\nanythink fetch /integrations/anythinkpay/subscription-plans \\\\\\n --method POST --body '{\\\"plan_name\\\":\\\"pro-monthly\\\",\\n \\\"name\\\":\\\"Pro Monthly\\\",\\\"description\\\":\\\"Full access\\\",\\n \\\"amount\\\":9.99,\\\"currency\\\":\\\"gbp\\\",\\n \\\"billing_interval\\\":\\\"month\\\",\\\"trial_period_days\\\":14}'\\nanythink pay status\",\"language\":\"bash\",\"result\":[\"Stripe onboarding started\",\"Plan Pro Monthly created: £9.99 a month, 14-day trial\",\"Stripe account status shown\"],\"clip\":\"cli/payments/create-plan\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the plan in plain English.\",\"example\":\"âSet up a Pro Monthly plan at £9.99 a month with a 14-d
14ay free trial, and tell me whether our Stripe account is ready to take payments.â\",\"result\":[\"Created plan Pro Monthly at £9.99 a month\",\"Added a 14-day trial\",\"Checked the Stripe account status\",\"Told you what is left to finish onboarding\"]}]}},{\"type\":\"proofs\",\"heading\":\"Built for the first paying customer\",\"subheading\":\"The pieces a startup needs before it hires a backend engineer.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Subscriptions\",\"title\":\"Web and iOS subscriptions on one record\",\"body\":\"Stripe plans and Apple in-app purchases land on the same subscriber. Re-verifying an Apple receipt never creates a duplicate subscription.\",\"links\":[{\"label\":\"Subscriptions\",\"href\":\"/products/subscriptions\"},{\"label\":\"Payments quick start\",\"href\":\"https://docs.anythink.cloud/guides/payments/quick-start\"}],\"clip\":\"dashboard/payments/apple-iap-setup\"},{\"eyebrow\":\"Sign-in\",\"title\":\"Apple and Google sign-in, checked on the server\",\"body\":\"Native sign-in tokens are verified by Anythink before a session is issued, and each user's provider is shown in the dashboard.\",\"links\":[{\"label\":\"Authentication\",\"href\":\"/products/authentication\"},{\"label\":\"Social sign-in\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}]},{\"eyebrow\":\"Workflows\",\"title\":\"Onboarding emails without another tool\",\"body\":\"Trigger a workflow when a record is created or changes, on a schedule or from an API call, then send email and push or call another service.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]},{\"eyebrow\":\"Pricing\",\"title\":\"Everything included in every plan\",\"body\":\"Workflows, payments and dashboards are in Free as well as paid plans. You pay for storage, users and usage, not features.\",\"links\":[{\"label\":\"Pricing\",\"href\":\"/pricing\"},{\"label\":\"Core concepts\",\"href\":\"https://docs.anythink.cloud/get-started/core-concepts\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Model your product\",\"prose\":\"Create entities for the things your product tracks. Each one gets a REST API straight away.\"},{\"title\":\"Let people sign in\",\"prose\":\"Turn on email, magic link, Apple, Google or LinkedIn sign-in, and use the open source SDK to add sign-in to your web app.\"},{\"title\":\"Charge for it\",\"prose\":\"Connect Stripe, create a plan with a trial, add Apple in-app purchases for iOS, and check entitlement from your app.\"},{\"title\":\"Automate it\",\"prose\":\"Add workflows for welcome emails, reminders and alerts that run when your data changes.\"},{\"title\":\"Run it\",\"prose\":\"Watch signups and revenue in the dashboard, and give your first hires a role that shows them what they need.\"}],\"aside\":{\"eyebrow\":\"Charge for it\",\"title\":\"Subscribe a user and check their access\",\"body\":\"Your app asks one endpoint whether a user is entitled, whether they paid through Stripe or Apple.\",\"clip\":\"dashboard/payments/subscribe-user\",\"link\":{\"label\":\"Payments quick start\",\"href\":\"https://docs.anythink.cloud/guides/payments/quick-start\"}}}}},{\"id\":6,\"slug\":\"for-enterprise\",\"type\":\"for_me\",\"title\":\"For Enterprise\",\"status\":\"published\",\"hero\":{\"headline\":\"A managed backend,/on a stack of your own\",\"description\":\"\u003cp\u003eAnythink gives enterprise teams a managed backend with roles, row-level security and encrypted secrets, on a dedicated Kubernetes cluster if you need one.\u003c/p\u003e\",\"featurePills\":[\"Dedicated stack on request\",\"Any DigitalOcean region\",\"Single sign-on (SSO)\",\"Custom SLA \u0026 compliance\",\"Row-level security and groups\",\"Encrypted secrets\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Contact sales\",\"action\":\"/contact\"},\"secondaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Controls your security team/will ask about\",\"description\":\"\u003cp\u003eThe access, secrets and environment c
14ontrols that come with every project, plus a dedicated stack when you need one.\u003c/p\u003e\",\"cards\":[{\"id\":206,\"type\":\"feature\",\"title\":\"A dedicated stack, on request\",\"description\":\"\u003cp\u003eEnterprise customers can run Anythink on their own Kubernetes cluster, separate from the shared platform. We build it for you on request; it isn't a self-serve option.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":207,\"type\":\"feature\",\"title\":\"Roles, row-level security and groups\",\"description\":\"\u003cp\u003ePermissions follow an entity:action pattern for every entity. Row-level security grants records to users or whole groups, and group members read their team's data while staff-only records stay private.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":208,\"type\":\"feature\",\"title\":\"Encrypted secrets\",\"description\":\"\u003cp\u003eAPI keys, tokens and secret fields are encrypted with AES-256-GCM and never shown again after they're saved. Workflows and integrations use them without exposing the value.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":209,\"type\":\"feature\",\"title\":\"Promotion between environments\",\"description\":\"\u003cp\u003eThe CLI's migrate command copies entities, workflows, roles and permissions, settings and menus from one project to another, with a dry run first.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":210,\"type\":\"feature\",\"title\":\"Integrations through your own OAuth apps\",\"description\":\"\u003cp\u003eSet your own client ID and secret per provider, so users approve your organisation's app rather than a shared one. Connections can belong to the project or to an individual user.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":211,\"type\":\"feature\",\"title\":\"Scoped, expiring API keys\",\"description\":\"\u003cp\u003eEach key carries only the permissions you list and expires after a set number of days. The CLI checks that every permission exists and that you hold it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"dedicated backend infrastructure, enterprise backend as a service, row-level security, role-based access control, encrypted secrets, staging to production promotion, bring your own OAuth app\",\"seo_focus_keyword\":\"Enterprise backend with dedicated infrastructure\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Give a CI pipeline a scoped API key that expires.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"API keys live under My Account.\",\"example\":\"My Account â API Keys â Create API Key\\nName: github-actions, expires in 90 days\\nPermissions: orders:read, orders:update\\n\\nâ the key is shown once; store it in your CI secrets\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Permission names are checked before the key is created.\",\"example\":\"anythink fetch /permissions\\nanythink api-keys create github-actions \\\\\\n --permissions orders:read,orders:update \\\\\\n --expires-in 90 --save-as ci\",\"language\":\"bash\",\"result\":[\"Permission names checked against the project\",\"Key github-actions created, expires in 90 days\",\"Key shown once and saved to the ci profile\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the key and the permissions it needs.\",\"example\":\"âCreate a 90-day API key called github-actions that can only read and update orders, and tell me if any permission couldn't be granted.â\",\"result\":[\"Checked the permission names exist\",\"Created github-actions with orders:read and orders:update\",\"Set it to expire in 90 days\",\"Reported that every permission was granted\"]}]}},{\"type\":\"proofs\",\"heading\":\"What enterprise teams check first\",\"subheading\":\"Controls every project gets, plus infrastru
14cture of your own.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Infrastructure\",\"title\":\"A cluster of your own\",\"body\":\"A dedicated stack runs Anythink on its own Kubernetes cluster, separate from other customers. Anythink builds and runs it for you.\",\"links\":[{\"label\":\"Contact sales\",\"href\":\"/contact\"},{\"label\":\"Pricing\",\"href\":\"/pricing\"}]},{\"eyebrow\":\"Access\",\"title\":\"Group access that keeps staff data private\",\"body\":\"Row-level security separates group membership from group roles, so a customer's team can read its own records while staff-only records stay hidden.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}],\"clip\":\"dashboard/access/group-rls\"},{\"eyebrow\":\"Secrets\",\"title\":\"Encrypted once, never displayed\",\"body\":\"Secrets use AES-256-GCM with a per-secret salt and nonce. They're write-only through the API, the dashboard and the CLI.\",\"links\":[{\"label\":\"Secrets in workflows\",\"href\":\"https://docs.anythink.cloud/guides/workflows/secrets\"},{\"label\":\"Anythink CLI\",\"href\":\"/solutions/anythink-cli\"}]},{\"eyebrow\":\"Integrations\",\"title\":\"Your OAuth app, your consent screen\",\"body\":\"Configure your own client ID and secret for Slack, Google and other providers, so users approve your organisation's app.\",\"links\":[{\"label\":\"Integrations\",\"href\":\"/products/integrations\"},{\"label\":\"Integrations reference\",\"href\":\"https://docs.anythink.cloud/guides/integrations/reference\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Talk to us\",\"prose\":\"Tell us about your workload and integration needs. We'll agree whether a dedicated stack is right for you.\"},{\"title\":\"We build the stack\",\"prose\":\"Anythink provisions your dedicated Kubernetes cluster and runs it for you.\"},{\"title\":\"Model and secure\",\"prose\":\"Create entities, roles and permissions, set row-level security and groups, and store credentials as encrypted secrets.\"},{\"title\":\"Promote with the CLI\",\"prose\":\"Build in a staging project, preview with anythink migrate --dry-run, then promote to production.\"}],\"aside\":{\"eyebrow\":\"Dedicated stack\",\"title\":\"Need your own cluster?\",\"body\":\"A dedicated stack, with its own Kubernetes cluster, is built on request. It is not self-serve.\",\"link\":{\"label\":\"Talk to us\",\"href\":\"/contact\"}}}}},{\"id\":27,\"slug\":\"for-agencies\",\"type\":\"for_me\",\"title\":\"For Agencies\",\"status\":\"published\",\"hero\":{\"headline\":\"A project per client,/started from your template\",\"description\":\"\u003cp\u003eAnythink gives agencies a project per client, a branded dashboard to hand over, and a CLI that copies your template project into each new client project.\u003c/p\u003e\",\"featurePills\":[\"A project per client\",\"Template to client with migrate\",\"Branded dashboards\",\"Per-user connections\",\"Client-ready data views\",\"A plan per project\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Build it once,/deliver it to every client\",\"description\":\"\u003cp\u003eYour template becomes the starting point, and each client gets a project and a dashboard of their own.\u003c/p\u003e\",\"cards\":[{\"id\":201,\"type\":\"feature\",\"title\":\"A project per client\",\"description\":\"\u003cp\u003eEach client gets their own project with separate data, users, roles, API keys and integrations. Switch between them in the CLI with saved profiles.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]},{\"id\":202,\"type\":\"feature\",\"title\":\"Start every client from a template\",\"description\":\"\u003cp\u003eBuild your standard backend once. \u003ccode\u003eanythink migrate\u003c/code\u003e copies its entities, workflows, roles, settings and menus into each new client project, with a dry run first.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]},{\"id\":203,\"type\":\"feature\",\"title\":\"Dashboards in the client's brand\",\"description\":\"\u003cp\u003eSet the client's colours, grey palette, corner radius, logos and menus, and send their system email from their own verified domain.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]},{\"id\":204,\"type\":\"feature\",\"title\":\"Connections per user\",\"description\":\"\u003cp\u003eA client's users can each connect their own Slack, Google Calendar or AI account, so workflows post and book as them rather than as one shared login.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]}
14,{\"id\":205,\"type\":\"feature\",\"title\":\"A dashboard your client can run\",\"description\":\"\u003cp\u003eInvite the client's team with a role, and give them grid, kanban, calendar and map views and charts over their own data. They manage their business without a custom admin panel.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":\"\",\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"agency backend platform, backend for client projects, branded client dashboard, project template migration, per-user integrations, multi-project backend\",\"seo_focus_keyword\":\"Backend platform for agencies\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Start a client project from your template.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the project and invite the client. The template copy is not in the dashboard yet.\",\"example\":\"Create project: Acme Ltd\\nSettings â Users â invite the client's team, with a role\\n\\nâ copying your template runs from the CLI or MCP; the dashboard has no copy button yet\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Create, connect, preview the copy, then run it.\",\"example\":\"anythink projects create \\\"Acme Ltd\\\" --region lon1\\nanythink projects use \u003cproject-id\u003e\\n\\nanythink migrate --from agency-template --to acme-ltd \\\\\\n --include-workflows --include-roles \\\\\\n --include-settings --include-menus --dry-run\\n\\nanythink users invite [email protected] Jo Bloggs --role-id 3\",\"language\":\"bash\",\"result\":[\"Project Acme Ltd created in lon1\",\"Dry run lists entities, workflows, roles, settings and menus\",\"Jo Bloggs invited with role 3\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the client project in one request.\",\"example\":\"âCreate a project called Acme Ltd in London, copy our agency template's entities, workflows, roles, settings and menus into it, show me a dry run first, then invite [email protected] as an editor.â\",\"result\":[\"Created Acme Ltd in London\",\"Showed a dry run of the template copy\",\"Copied entities, workflows, roles, settings and menus\",\"Invited [email protected] as an editor\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why agencies standardise on Anythink\",\"subheading\":\"One template, many clients, each with a project of their own.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Templates\",\"title\":\"Your standard backend, copied in one command\",\"body\":\"migrate copies entities and fields, and when you ask, workflows, roles and permissions, settings, menus, files and data. Permissions are remapped to the client project's entities.\",\"links\":[{\"label\":\"Anythink CLI\",\"href\":\"/solutions/anythink-cli\"},{\"label\":\"Core concepts\",\"href\":\"https://docs.anythink.cloud/get-started/core-concepts\"}]},{\"eyebrow\":\"Branding\",\"title\":\"The client's colours, logos and email domain\",\"body\":\"Each project carries its own theme, menus and sending domain, so the dashboard y
14ou hand over looks like the client's.\",\"links\":[{\"label\":\"Branded dashboards\",\"href\":\"/solutions/white-label-platform\"},{\"label\":\"Branding and menus\",\"href\":\"https://docs.anythink.cloud/guides/dashboards/branding-and-menus\"}]},{\"eyebrow\":\"Integrations\",\"title\":\"Each user connects their own accounts\",\"body\":\"User-scoped connections let a client's staff connect their own calendar or Slack, and workflows act on their behalf.\",\"links\":[{\"label\":\"Integrations\",\"href\":\"/products/integrations\"},{\"label\":\"Integrations quick start\",\"href\":\"https://docs.anythink.cloud/guides/integrations/quick-start\"}],\"clip\":\"cli/integrations/user-scoped-connect\"},{\"eyebrow\":\"Handover\",\"title\":\"A dashboard, not a support ticket\",\"body\":\"Clients work in grid, kanban, calendar and map views with charts on their own data, under roles you set, so routine changes don't come back to you.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"},{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Build a template project\",\"prose\":\"Model your standard entities, roles, workflows and menus once, in a project you keep as the template.\"},{\"title\":\"Create the client project\",\"prose\":\"Create a project for the client and connect to it with anythink projects use. Each project picks its own plan.\"},{\"title\":\"Copy the template\",\"prose\":\"Run anythink migrate from the template to the client project with a dry run, then for real.\"},{\"title\":\"Brand it\",\"prose\":\"Set the client's colours, logos and menus, and verify their sending domain so system email comes from them.\"},{\"title\":\"Hand it over\",\"prose\":\"Invite the client's team with roles, and let each user connect their own integrations.\"}],\"aside\":{\"eyebrow\":\"Next\",\"title\":\"Brand each client project\",\"body\":\"Set colours, logos and menus, and send system email from the client's own domain.\",\"link\":{\"label\":\"White-label platform\",\"href\":\"/solutions/white-label-platform\"}}}}}],\"solution\":[{\"id\":3,\"slug\":\"content-manager\",\"type\":\"solution\",\"title\":\"Content Management\",\"status\":\"published\",\"hero\":{\"headline\":\"Your content model,/live as an API\",\"description\":\"\u003cp\u003eAnythink works as a headless CMS: model content types, edit them in the Anythink dashboard, and serve them to your website through a public REST API.\u003c/p\u003e\",\"featurePills\":[\"Custom content types\",\"Rich-text fields\",\"Media metadata\",\"Public read API\",\"Editorial kanban\",\"Full-text search\",\"Editor roles\"],\"image\":{\"url\":\"/cdn-assets/20804318/bc08731c67464edcb2ccfcbfc36c54c2.png\",\"alt\":\"Content Management\"},\"images\":[{\"id\":\"44\",\"url\":\"/cdn-assets/20804318/bc08731c67464edcb2ccfcbfc36c54c2.png\",\"alt\":\"Content Management\",\"original_file_name\":\"content management.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/use-cases/headless-cms\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A CMS that is also/your backend\",\"description\":\"\u003cp\u003eContent types are ordinary Anythink entities, so the same project holds your content, your users and your app data.\u003c/p\u003e\",\"cards\":[{\"id\":158,\"type\":\"feature\",\"title\":\"Rich text next to structured fields\",\"description\":\"\u003cp\u003eGive a text field the rich-text display and editors write long-form copy in the dashboard. The body sits on the same record as its title, author, category and hero image, so your site can query on any of them.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/3a3f4bb75b4e4fdbab22b23b0e3ff77c.mp4\",\"alt\":\"Rich text next to structured fields\"},\"pageIds\":[3]},{\"id\":159,\"type\":\"feature\",\"title\":\"Files with their metadata\",\"description\":\"\u003cp\u003eUploads stream straight to object storage. Anythink then probes each image, audio or video file out of process and records its size, dimensions, duration and a SHA-256 hash. Downloads use short-lived signed URLs, and files marked public need no sign-in.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]},{\"id\":160,\"type\":\"feature\",\"title\":\"Content types you define\",\"description\":\"\u003cp\u003eCreate an entity for each content type and g
14ive it the fields it needs: text, rich text, dates, selects, relationships, files and JSON. Each type gets a REST API as soon as it's saved.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/f7b352ae05e04e0aa8bbc5f55a92e5a0.mp4\",\"alt\":\"Content types you define\"},\"pageIds\":[3]},{\"id\":192,\"type\":\"feature\",\"title\":\"An editorial board from your status field\",\"description\":\"\u003cp\u003eSwitch any content type to the kanban view and it groups records by a status field you choose. Editors drag an article from in review to published; grid and calendar views read the same records.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]},{\"id\":193,\"type\":\"feature\",\"title\":\"Search across your content\",\"description\":\"\u003cp\u003eMark fields as searchable and Anythink indexes them, with filters, facets, sorting and highlighting. Public search only ever returns fields you've marked public.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]},{\"id\":194,\"type\":\"feature\",\"title\":\"Roles for editors and writers\",\"description\":\"\u003cp\u003eCreate an editor role that can read, create and update articles but not delete them. Add row-level security when writers should only see their own drafts.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"headless CMS, API-first CMS, content modelling, Strapi alternative, Directus alternative, editorial kanban board, media library with metadata, public content API\",\"seo_focus_keyword\":\"Headless CMS with a REST API\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Create an articles content type your website can read.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Model the content type, then your editors write in the same place.\",\"example\":\"Data Model â Add Entity: articles (public)\\nAdd Field: title (varchar, required, searchable)\\nAdd Field: body (text, rich text)\\nAdd Field: hero_image (file)\\nAdd Field: status (select: draft, in_review, published)\\nCreate Entity\\n\\nâ GET /entities/articles/public/items is live\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same content type, scriptable and repeatable.\",\"example\":\"anythink entities create articles --public\\nanythink fields add articles title --type varchar \\\\\\n --required --public --searchable\\nanythink fields add articles body --type text \\\\\\n --display rich-text --public\\nanythink fields add articles hero_image --type file \\\\\\n --display file --public\\nanythink fields add articles status --type varchar \\\\\\n --display select --options draft,in_review,published --public\",\"language\":\"bash\",\"result\":[\"Entity articles created, public\",\"Fields added: title, body, hero_image, status\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the content type. The assistant runs the same commands.\",\"example\":\"âCreate an articles content type for our blog with a required, searchable title, a rich-text body, a hero image and a status of draft, in review or published. Make it publicly readable so our website can fetch published articles.â\",\"result\":[\"Entity articles, publicly readable\",\"Title is required and searchable\",\"Body is ric
14h text, with a hero image\",\"Status: draft, in review, published\"]}]}},{\"type\":\"proofs\",\"heading\":\"What makes it work as a CMS\",\"subheading\":\"Content types are entities, so every part of Anythink works with them.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Public API\",\"title\":\"Your website reads content without a key\",\"body\":\"Mark a content type and its fields public, and /entities/articles/public/items serves them without sign-in, with paging, sorting and field filters. Fields you don't mark public stay private.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"API reference\",\"href\":\"https://docs.anythink.cloud/reference\"}]},{\"eyebrow\":\"Media\",\"title\":\"Upload a video, get its duration\",\"body\":\"A worker probes each upload with ffprobe and writes duration, dimensions, bitrate, size and a hash back to the file record. Your site can show a running time without reading the file itself.\",\"links\":[{\"label\":\"File manager\",\"href\":\"/products/smart-file-manager\"},{\"label\":\"Files guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}]},{\"eyebrow\":\"Editorial\",\"title\":\"Kanban columns from your status field\",\"body\":\"The kanban view groups any content type by a status field. Moving a card updates the record, so the board and the API never disagree about what's published.\",\"links\":[{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"},{\"label\":\"Model your data\",\"href\":\"https://docs.anythink.cloud/guides/database/model-your-data\"}],\"clip\":\"dashboard/database/switch-views\"},{\"eyebrow\":\"Automation\",\"title\":\"Publishing can start a workflow\",\"body\":\"Trigger a workflow when an article's status changes to published: post to Slack, email your subscribers or call a webhook to rebuild your site.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Model your content types\",\"prose\":\"Create an entity for articles, case studies or products and add the fields each one needs, including rich text, files and relationships to authors or categories.\"},{\"title\":\"Give editors a role\",\"prose\":\"Create an editor role with read, create and update permissions on your content types, then invite your writers to the Anythink dashboard.\"},{\"title\":\"Run the editorial board\",\"prose\":\"Editors write in the dashboard and move content through draft, in review and published on the kanban view.\"},{\"title\":\"Fetch it from your site\",\"prose\":\"Your website calls the public endpoint for each content type and asks for published records only. A field you add in the dashboard appears in the response straight away.\"}],\"aside\":{\"eyebrow\":\"Editorial board\",\"title\":\"Move content through draft, review and published\",\"body\":\"Switch the articles entity to Kanban View and drag cards between statuses.\",\"clip\":\"dashboard/database/switch-views\",\"link\":{\"label\":\"Flexible data views\",\"href\":\"/solutions/flexible-data-views\"}}},\"code\":{\"heading\":\"In practice\",\"subheading\":\"Read, search and secure your content\",\"tabs\":[{\"label\":\"Fetch published articles\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/articles/public/items?status=published\u0026sortBy=id\u0026sortDirection=desc\u0026page=1\u0026pageSize=10\"},{\"label\":\"Search content\",\"language\":\"bash\",\"code\":\"anythink search query \\\"pricing\\\" --entities articles \\\\\\n --filter \\\"status=published\\\" --public --highlight\"},{\"label\":\"Add an editor role\",\"language\":\"bash\",\"code\":\"anythink roles create editor --description \\\"Writes and edits articles\\\"\\nanythink roles permissions add \u003crole-id\u003e articles \\\\\\n --actions read,create,update\"}]}}},{\"id\":15,\"slug\":\"flexible-data-views\",\"type\":\"solution\",\"title\":\"Flexible Data Views\",\"status\":\"published\",\"hero\":{\"headline\":\"One dataset,/five ways to work with it\",\"description\":\"\u003cp\u003eSwitch any entity between a grid, a kanban board, a calendar, a map and charts in the Anythink dashboard, all on the same records your API serves.\u003c/p\u003e\",\"featurePills\":[\"Grid with inline editing\",\"Kanban by status\",\"Calendar from date fields\",\"Map from geo fields\",\"Per-entity charts\",\"CSV import\"],\"image\":{\"url\":\"/cdn-assets/20804318/d7c0180c8aa645eb99b444a4922837e2.png\",\"alt\":\"Flexible Data Views\"},\"images\":[{\"id\":\"57\",\"url\":\"/cdn-assets/20804318/d7c0180c8aa645eb99b444a4922837e2.png\",\"alt\":\"Flexible Data Views\",\"original_file_name\":\"calender.png\"},{\"id\":\"58\",\"url\":\"/cdn-assets/20804318/9e4cee7da11449c38da0878055e80171.png\",\"alt\":\"Flexible Data Views\",\"original_file_name\":\"kanban.png\"},{\"id\":\"59\",\"url\":\"/cdn-assets/20804318/1e18fa29fea042989a93337d707c5ef6.png\",\"alt\":\"Flexible Data Views\",\"original_file_name\":\"grid view.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Five views,/one set of records\",\"description\":\"\u003cp\u003eEvery view reads and writes the same entity through the same API and permissions, so nothing is copied and nothing drifts.\u003c/p\u003e\",\"cards\":[{\"id\":164,\"type\":\"feature\",\"title\":\"Grid with inline editing\",\"description\":\"\u003cp\u003eA spreadsheet-style grid with column filters, sorting and pagination. Tur
14n on Instant Edit to change values in the cell, or import a CSV from the same screen.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/f7b352ae05e04e0aa8bbc5f55a92e5a0.mp4\",\"alt\":\"Grid with inline editing\"},\"pageIds\":[15]},{\"id\":165,\"type\":\"feature\",\"title\":\"Kanban by status\",\"description\":\"\u003cp\u003eGroup records into columns by a select field, such as status. Drag a card to another column and Anythink updates that record through the API.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]},{\"id\":166,\"type\":\"feature\",\"title\":\"Calendar from date fields\",\"description\":\"\u003cp\u003eLay records out on a calendar by a date or timestamp field to see bookings, deadlines and events at a glance.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/f44dcfc44f794d668673854ba05cf630.mp4\",\"alt\":\"Calendar from date fields\"},\"pageIds\":[15]},{\"id\":179,\"type\":\"feature\",\"title\":\"Charts per entity\",\"description\":\"\u003cp\u003eBuild column, bar, line, pie, funnel and cohort charts from an entity's fields, with counts or totals over time, then save them to use on dashboards.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]},{\"id\":180,\"type\":\"feature\",\"title\":\"Map from geo fields\",\"description\":\"\u003cp\u003ePlot every record with a geo field as a pin and click through to the record. Field service, deliveries and listings read better on a map.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]},{\"id\":183,\"type\":\"feature\",\"title\":\"The same data as your API\",\"description\":\"\u003cp\u003eViews read and write through the entity API with the signed-in user's permissions, so changes made in a view trigger the same workflows as changes from your app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"kanban view of database records, calendar view of records, map view of data, data grid with inline editing, admin panel views, internal tool views, charts from database\",\"seo_focus_keyword\":\"Grid, kanban, calendar and map views of your data\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Move order 1042 from packed to shipped.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Drag the card. The record updates.\",\"example\":\"orders â Kanban View\\nStatus Field: status\\nDrag order 1042 from Packed to Shipped\\n\\nâ status is now shipped, and workflows wat
14ching it run\",\"clip\":\"dashboard/database/switch-views\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same update, scriptable.\",\"example\":\"anythink data get orders 1042\\nanythink data update orders 1042 \\\\\\n --data '{\\\"status\\\":\\\"shipped\\\"}'\",\"language\":\"bash\",\"result\":[\"Order 1042 read\",\"status is now shipped\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask in plain text. The assistant runs the same commands.\",\"example\":\"âMark order 1042 as shipped, then tell me which orders are still packed.â\",\"result\":[\"Read order 1042\",\"Set its status to shipped\",\"Listed orders still packed\",\"Workflows watching status ran\"]}]}},{\"type\":\"proofs\",\"heading\":\"Views that do real work\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Kanban\",\"title\":\"A drag is a real update\",\"body\":\"Moving a card writes the new status through the entity API, so permissions apply and any workflow watching for the change runs.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"}]},{\"eyebrow\":\"Map\",\"title\":\"One geo field, a map and geo search\",\"body\":\"The geo field that puts records on the map also powers radius search and nearest-first sorting in the search API.\",\"links\":[{\"label\":\"Search\",\"href\":\"/products/powerful-search-engine\"}]},{\"eyebrow\":\"Charts\",\"title\":\"From an entity to a dashboard\",\"body\":\"Save a chart from an entity's Charts View and add it to a dashboard alongside materialised views and other widgets.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}],\"clip\":\"dashboard/dashboards/build-chart\"},{\"eyebrow\":\"Import\",\"title\":\"Bring your data with you\",\"body\":\"Import a CSV from the grid with a saved column mapping, then switch views on the new records straight away.\",\"links\":[{\"label\":\"Visual database designer\",\"href\":\"/products/visual-database-designer\"},{\"label\":\"Database guides\",\"href\":\"https://docs.anythink.cloud/guides/database\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an entity to the view that suits the job\",\"steps\":[{\"title\":\"Give the entity the right fields\",\"prose\":\"A select field for a kanban board, a date or timestamp for the calendar, a geo field for the map.\"},{\"title\":\"Open it in the dashboard\",\"prose\":\"Every entity opens in the grid. Switch with the view buttons above it: Grid, Kanban, Map, Calendar or Charts.\"},{\"title\":\"Work in the view\",\"prose\":\"Edit cells in the grid, drag cards on the board, or click a pin or an event to open the record.\"},{\"title\":\"Chart it\",\"prose\":\"Build charts in Charts View, save them, and add them to a dashboard for the rest of the team.\"}],\"aside\":{\"eyebrow\":\"See it switch\",\"title\":\"One entity, five views\",\"body\":\"Open the same records as a grid, kanban board, map, calendar or chart.\",\"clip\":\"dashboard/database/switch-views\",\"link\":{\"label\":\"Dashboards guide\",\"href\":\"https://docs.anythink.cloud/guides/dashboards\"}}}}},{\"id\":17,\"slug\":\"white-label-platform\",\"type\":\"solution\",\"title\":\"Branded dashboard\",\"status\":\"published\",\"hero\":{\"headline\":\"Your brand on the dashboard,/your domain on the email\",\"description\":\"\u003cp\u003eBrand the Anythink dashboard with your colours, logos, corner radius and menus, and send system email from your own verified domain and sender address.\u003c/p\u003e\",\"featurePills\":[\"Primary colour and grey palette\",\"Corner radius\",\"Square and standard logos\",\"Menu configuration\",\"Verified sending domains\",\"Branded system email\"],\"image\":{\"url\":\"/cdn-assets/20804318/1491ff7813e7422d8bca3889a3d1b903.png\",\"alt\":\"Branded dashboard\"},\"images\":[{\"id\":\"61\",\"url\":\"/cdn-assets/20804318/1491ff7813e7422d8bca3889a3d1b903.png\",\"alt\":\"Branded dashboard\",\"original_file_name\":\"Branding.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/dashboards/branding-and-menus\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Branding you set once,/per project\",\"description\":\"\u003cp\u003eEvery project carries its own theme, logos, menus, email templates and sending domains.\u003c/p\u003e\",\"cards\":[{\"id\":167,\"type\":\"feature\",\"title\":\"Colours, corner radius and logos\",\"description\":\"\u003cp\u003ePick a primary colour, a grey palette and a corner radius in \u003cstrong\u003eOrganisation Settings ⺠Branding\u003c/strong\u003e, and upload a square and a standard logo. The dashboard previews each change as you make it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":168,\"type\":\"feature\",\"title\":\"Branded system email\",\"description\":\"\u003cp\u003eSign-up confirmations, invitations, password resets and magic links use your email templates and a shared layout with your logo, header and footer. They go out from your default sender once its domain is verified.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":261,\"type\":\"feature\",\"title\":\"Sending domains you verify\",\"description\":\"\u003cp\u003eRegister a hostname, add the DNS records Anythink issues at your DNS provider, and verify it. You can then add sender addresses on that domain, choose a default, and set the avatar Gmail shows next to your messages.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":262,\"type\":\"feature\",\"title\":\"Menus shaped to the job\",\"description\":\"\u003cp\u003eChoose which entities appear in the dashboard's navigation and in what order, so a client or an operations team sees their data first, not the whole data model.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":263,\"type\":\"feature\",\"title\":\"Copy a brand to another project\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink migrate --include-settings --include-menus\u003c/code\u003e copies the theme and menus from one project to another. Add \u003ccode\u003e--include-files\u003c/code\u003e and the logos come too.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Who sets up branding\",\"description\":\"\u003cp\u003eAgencies branding a client's project, and SaaS builders giving their own product a consistent look.\u003c/p\u003e\",\"cards\":[]}
14,\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"branded admin dashboard, custom dashboard theme, branded system email, custom sending domain, admin panel branding, agency client dashboard\",\"seo_focus_keyword\":\"Branded admin dashboard for your app\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Send system email from your own domain.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Settings ⺠Email Templates ⺠Sending Domains.\",\"example\":\"Settings â Email Templates â Sending Domains\\nAdd a sending domain: mail.acme.com\\nAdd the DNS records it issues at your DNS provider\\nVerify\\nAdd a sender address: [email protected], make default\\n\\nâ confirmation and invitation email now comes from [email protected]\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same API calls through anythink fetch.\",\"example\":\"anythink fetch /tenant-domains --method POST \\\\\\n --body '{\\\"hostname\\\":\\\"mail.acme.com\\\"}'\\n\\n# add the DNS records it returns, then\\nanythink fetch /tenant-domains/12/verify --method POST\\n\\nanythink fetch /tenant-sender-addresses --method POST \\\\\\n --body '{\\\"address\\\":\\\"[email protected]\\\",\\\"display_name\\\":\\\"Acme\\\",\\\"make_default\\\":true}'\",\"language\":\"bash\",\"result\":[\"Domain mail.acme.com registered, DNS records returned\",\"Domain verified\",\"[email protected] is the default sender\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the domain and the records you need to add.\",\"example\":\"âRegister mail.acme.com as a sending domain for this project and show me the DNS records to add. When I say they're in place, verify the domain and make [email protected] the default sender.â\",\"result\":[\"Registered mail.acme.com\",\"Listed the DNS records to add\",\"Verified the domain once you confirmed\",\"Made [email protected] the default sender\"]}]}},{\"type\":\"proofs\",\"heading\":\"What you can brand, and what you can't\",\"subheading\":\"Every project carries its own brand settings.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Theme\",\"title\":\"Primary colour, grey palette and corner radius\",\"body\":\"Three settings restyle the whole dashboard, from buttons to tables. Square and standard logos replace the defaults in the navigation.\",\"links\":[{\"label\":\"Branding and menus\",\"href\":\"https://docs.anythink.cloud/guides/dashboards/branding-and-menus\"},{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}]},{\"eyebrow\":\"Email\",\"title\":\"Only verified domains send under your name\",\"body\":\"A Send an Email step can only use a From address on a domain you've verified. Anything else falls back to your default sender, so an unverified address never goes out as you.\",\"links\":[{\"label\":\"Email in workflows\",\"href\":\"https://docs.anythink.cloud/guides/workflows/email\"},{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"}]},{\"eyebrow\":\"Templates\",\"title\":\"System emails in your layout\",\"body\":\"Confirmation, invitation, password reset and magic link emails are templates you can edit, wrapped in one layout that carries your logo, header and footer.\",\"links\":[{\"label\":\"Authentication\",\"href\":\"/products/authentication\"},{\"label\":\"Email guide\",\"href\":\"https://docs.anythink.cloud/guides/workflows/email\"}]},{\"eyebrow\":\"Limits\",\"title\":\"Branding, not a full white-label\",\"body\":\"There's no custom domain for the dashboard and Anythink marks remain. For a customer-facing interface that is entirely yours, build a front end on the REST API.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"TypeScript SDK\",\"href\":\"/solutions/typescript-sdk\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Set the theme\",\"prose\":\"In Organisation Settings ⺠Branding, choose a primary colour, a grey palette and a corner radius, and upload your logos.\"},{\"title\":\"Shape the menus\",\"prose\":\"In Menu Configuration, choose which entities appear in the navigation and in what order.\"},{\"title\":\"Verify a sending domain\",\"prose\":\"Register your domain under Email Templates, add the DNS records it issues and verify it. Add a sender address and make it the default.\"},{\"title\":\"Edit the system emails\",\"prose\":\"Adjust the confirmation, invitation, password reset and magic link templates and the shared layout around them.\"},{\"title\":\"Reuse it\",\"prose\":\"Copy the theme and menus to another project with anythink migrate, so every client or environment starts with the same brand.\"}],\"aside\":{\"eyebrow\":\"Next\",\"title\":\"Start every client project from a template\",\"body\":\"Copy your theme, menus, roles and workflows into a new project with one command.\",\"link\":{\"label\":\"For agencies\",\"href\":\"/solutions/for-agencies\"}}}}},{\"id\":28,\"slug\":\"typescript-sdk\",\"type\":\"solution\",\"title\":\"TypeScript SDK\",\"status\":\"published\",\"hero\":{\"headline\":\"Sign-in and sessions,/without the boilerplate\",\"description\":\"\u003cp\u003eThe Anythink SDK is an open source React library for sign-in and sessions: an auth client, a provider, a useAuth hook, and a base class for authenticated requests. Data calls go through the REST API directly â there's no hidden query layer to learn.\u003c/p\u003e\",\"featurePills\":[\"Open source\",\"React\",\"Token refresh handled\",\"Multi-tab session isolation\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"View on GitHub\",\"action\":\"https://github.com/Anythink-Ltd/anythink-sdk\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/rest-api/sdk\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Auth and sessions, handled\",\"description\":\"\u003cp\u003eThe SDK is sign-in and sessions, done properly, so you're not hand-rolling token refresh in every project.\u003c/p\u003e\",\"cards\":[{\"id\":151,\"type\":\"feature\",\"title\":\"Silent, de-duplicated token refresh\",\"description\":\"\u003cp\u003eConcurrent requests that hit a 401 don't each fire their own refresh call. AuthenticatedBaseService registers a response interceptor that serialises and caches the refresh, then replays the original requests once it completes.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]},{\"id\":256,\"type\":\"feature\",\"title\":\"AuthProvider and useAuth\",\"description\":\"\u003cp\u003eWrap your app in AuthProvider, point authPrefix at your login route, and call useAuth anywhere for sign-in, sign-out and the current session. No manual token plumbing through your component tree.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]},{\"id\":257,\"type\":\"feature\",\"title\":\"Session storage you choose\",\"description\":\"\u003cp\u003ePick cookie, sessionStorage or localStorage per AuthClient instance. sessionStorage and localStorage isolate sessions per browser tab, which matters if your app opens multiple projects or environments side by side.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]},{\"id\":258,\"type\":\"feature\",\"title\":\"A base class for authenticated calls\",\"description\":\"\u003cp\u003eExtend AuthenticatedBaseService once, and every request through it carries the session token and handles refresh automatically. Data calls go through the standard Anythink REST API underneath, not a separate client-side query language.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"anythink sdk, react authentication sdk, token refresh react, auth provider react\",\"seo_focus_keyword\":\"Open source React SDK for sign-in and sessions\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"code\":{\"heading\":\"In practice\",\"subheading\":\"The SDK's actual surface\",\"tabs\":[{\"label\":\"Set up the auth client\",\"language\":\"typescript\",\"code\":\"import { AuthClient } from \\\"@anythink-cloud/sdk\\\";\\n\\nlet authClientInstance: AuthClient | null = null;\\n\\nexport const getAuthClient = (): AuthClient =\u003e {\\n if (!authClientInstance) {\\n authClientInstance = new AuthClient({\\n instanceUrl: \\\"https://api.my.anythink.cloud\\\",\\n orgId: 12345678,\\n storageType: \\\"sessionStorage\\\", // \\\"cookie\\\" (default), \\\"sessionStorage\\\" or \\\"localStorage\\\"\\n });\\n }\\n return authClientInstance;\\n};\"},{\"label\":\"Wrap your app\",\"language\":\"typescript\",\"code\":\"import { AuthProvider } from \\\"@anythink-cloud/sdk\\\";\\n\\n\u003cAuthProvider\\n authClient={getAuthClient()}\\n loginUrl=\\\"/auth/login\\\"\\n authPrefix=\\\"/auth\\\" // must match your login route prefix\\n\u003e\\n {children}\\n\u003c/AuthProvider\u003e\"},{\"label\":\"Sign in\",\"language\":\"typescript\",\"code\":\"import { useAuth } from \\\"@anythink-cloud/sdk\\\";\\n\\nconst auth = useAuth();\\n\\nconst handleLoginSubmit = async (values: { email: string; password: string }) =\u003e {\\n try {\\n await auth?.signIn(values.email, values.password);\\n } catch (err) {\\n setError(err?.toString() ?? \\\"An error occurred. Please try again.\\\");\\n }\\n};\"},{\"label\":\"Authenticated requests\",\"language\":\"typescript\",\"code\":\"import { AuthenticatedBaseService } from \\\"@anythink-cloud/sdk\\\";\\n\\nclass OrdersService extends AuthenticatedBaseService {\\n constructor() {\\n super(getAuthClient(), \\\"https://api.my.anythink.cloud\\\");\\n }\\n\\n // GET /org/{org_id}/entities/orders/items, with the session token attached\\n // and a 401 handled by a silent refresh â no extra code here.\\n listOrders() {\\n return this.get(\\\"/org/12345678/entities/orders/items\\\");\\n }\\n}\"}]},\"narrative\":{\"heading\":\"What it's for, and what it isn't\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Sign-in that works the same everywhere\",\"prose\":\"One AuthClient configuration covers email/password, session refresh and logout. Wire it into a React or Next.js app once, and every authenticated call through AuthenticatedBaseService carries a valid token.\"},{\"title\":\"Multiple sessions in the same browser\",\"prose\":\"sessionStorage or localStorage mode isolates a session per tab, which matters if your app, or your team, moves between projects or environments without wanting one login to bleed into another.\"},{\"title\":\"Data calls stay on the REST API\",\"prose\":\"The SDK doesn't wrap your entities in a query builder. You call the same REST endpoints documented in the API reference, through a service class that handles the auth header and token refresh for you.\"}]},\"links\":[{\"label\":\"npm install @anythink-cloud/sdk\",\"url\":\"https://www.npmjs.com/package/@anythink-cloud/sdk\",\"icon\":\"npm\",\"description\":\"Latest stable release on npm\"},{\"label\":\"github.com/Anythink-Ltd/anythink-sdk\",\"url\":\"https://github.com/Anythink-Ltd/anythink-sdk\",\"icon\":\"github\",\"description\":\"Star, fork, and contribute\"}],\"linksHeading\":\"Get the SDK · Get involved\"}},{\"id\":29,\"slug\":\"anythink-cli\",\"type\":\"solution\",\"title\":\"Anythink CLI\",\"status\":\"published\",\"hero\":{\"headline\":\"Your whole backend,/from the terminal\",\"description\":\"\u003cp\u003eThe open source Anythink CLI runs a whole project from the terminal: entities, fields, data, workflows, roles, users, files, search, secrets and integrations.\u003c/p\u003e\",\"featurePills\":[\"MIT licence\",\"Homebrew install\",\"migrate --dry-run\",\"Permission-checked API keys\",\"--json output\",\"Same commands over MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/reference/cli\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Every part of a project,/one command away\",\"description\":\"\u003cp\u003eThe CLI talks to the same API as the dashboard, so anything you script here shows up there straight away.\u003c/p\u003e\",\"cards\":[{\"id\":153,\"type\":\"feature\",\"title\":\"Workflows as files\",\"description\":\"\u003cp\u003eExport a workflow to JSON, keep it in your repository and seed it into another project with variables substituted. Add steps, trigger runs and read job history from the terminal.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":170,\"type\":\"feature\",\"title\":\"Schema from the command line\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink entities create\u003c/code\u003e and \u003ccode\u003eanythink fields add\u003c/code\u003e cover public and row-level-secured entities, relationships, selects with options, rich text, files, geo and secret fields.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":174,\"type\":\"feature\",\"title\":\"Promote staging to production\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink migrate --from staging --to prod --dry-run\u003c/code\u003e previews what will change. Then copy entities and fields, plus workflows, roles and permissions, settings, menus, files and data when you ask for them.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":175,\"type\":\"feature\",\"title\":\"JSON for scripts and CI\",\"description\":\"\u003cp\u003eData, search, integrations, API keys, \u003ccode\u003eapi\u003c/code\u003e and \u003ccode\u003edocs\u003c/code\u003e commands take \u
14003ccode\u003e--json\u003c/code\u003e, and \u003ccode\u003eanythink fetch\u003c/code\u003e calls any endpoint on the active project and prints its response.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":176,\"type\":\"feature\",\"title\":\"API keys that check their permissions\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink api-keys create\u003c/code\u003e requires a permission list, rejects names that don't exist and warns if the server dropped a permission you don't hold. Keys expire after 90 days unless you choose otherwise.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":190,\"type\":\"feature\",\"title\":\"Integrations and secrets\",\"description\":\"\u003cp\u003eConnect Slack, Google Calendar, Claude or OpenAI through OAuth or an API key, at project or user level. Secrets are encrypted at rest and the CLI never displays their values.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"anythink cli, backend command line tool, open source cli, staging to production migration, CI/CD backend automation, API key permissions, homebrew cli\",\"seo_focus_keyword\":\"Open source CLI for your backend\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Connect Slack to a project.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for seeing what is connected.\",\"example\":\"Settings â Integrations â Slack â Connect\\nApprove access in Slack\\n\\nâ Slack steps appear in the workflow builder\",\"clip\":\"dashboard/integrations/connect-slack\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"One command opens the OAuth flow and saves the connection. Scriptable for any project.\",\"example\":\"anythink integrations oauth connect slack --name \\\"Team workspace\\\"\\nanythink integrations connections list\",\"language\":\"bash\",\"result\":[\"Browser opens to approve Slack access\",\"Connection Team workspace saved\"],\"clip\":\"cli/integrations/connect-slack\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"The assistant runs the same command and hands you the link to approve.\",\"example\":\"âConnect our Slack workspace to this project, name the connection Team workspace, and give me the link to approve it.â\",\"result\":[\"Started the Slack OAuth flow\",\"Named the connection Team workspace\",\"Sent you the link to approve\",\"Listed connections to confirm it saved\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why teams script Anythink\",\"subheading\":\"The CLI is a full client for the Anythink API, not a deploy helper.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Environments\",\"title\":\"Dry-run a promotion before it happens\",\"body\":\"migrate compares two projects and shows what it would create before it touches anything. It remaps entity-scoped permissions to the target project's entities.\",\"links\":[{\"label\":\"For agencies\",\"href\":\"/solutions/for-agencies\"},{\"label\":\"GitHub\",\"href\":\"https://github.com/anythink-cloud/anythink-cli\"}]},{\"eyebrow\":\"Access\",\"title\":\"The permission mistake, caught at creation\",\"body\":\"A missing permission is the most common reason an integration gets a 403. The CLI checks every n
14ame you pass and tells you when the server granted less than you asked for.\",\"links\":[{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"},{\"label\":\"Access control\",\"href\":\"/products/access-control\"}]},{\"eyebrow\":\"AI\",\"title\":\"MCP runs the same commands\",\"body\":\"The anythink-mcp server has a cli tool that runs any Anythink CLI command, so Claude, Cursor or another MCP client reaches everything the CLI does.\",\"links\":[{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"},{\"label\":\"Connect Claude with MCP\",\"href\":\"https://docs.anythink.cloud/guides/ai/connect-mcp\"}]},{\"eyebrow\":\"Integrations\",\"title\":\"Project-wide or per user\",\"body\":\"Connect a provider once for the whole project, or add --user-connection so the connection belongs to one user. Test, disable and disconnect connections from the terminal too.\",\"links\":[{\"label\":\"Integrations\",\"href\":\"/products/integrations\"},{\"label\":\"Integrations quick start\",\"href\":\"https://docs.anythink.cloud/guides/integrations/quick-start\"}],\"clip\":\"cli/integrations/user-scoped-connect\"}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Install\",\"prose\":\"Run brew install anythink-cloud/tap/anythink. You get the anythink CLI and the anythink-mcp server.\"},{\"title\":\"Sign in and pick a project\",\"prose\":\"Run anythink login, then anythink projects use \u003cid\u003e. Each project you connect is saved as a profile you can switch between with anythink config use.\"},{\"title\":\"Build\",\"prose\":\"Create entities and fields, add roles and permissions, connect integrations and set up workflows. Every change is live in the dashboard straight away.\"},{\"title\":\"Promote\",\"prose\":\"Run anythink migrate --dry-run from your staging profile to production, check the preview, then run it for real.\"}],\"aside\":{\"eyebrow\":\"Try it\",\"title\":\"Create an entity from the terminal\",\"body\":\"One command makes the entity and its REST API. Add fields with anythink fields add.\",\"clip\":\"cli/database/create-entity\",\"link\":{\"label\":\"Core concepts\",\"href\":\"https://docs.anythink.cloud/get-started/core-concepts\"}}},\"code\":{\"heading\":\"In practice\",\"subheading\":\"Real commands from anythink --help\",\"tabs\":[{\"label\":\"Schema\",\"language\":\"bash\",\"code\":\"anythink entities create products --rls\\nanythink fields add products price --type decimal --required\\nanythink fields add products status --type varchar \\\\\\n --display select --options draft,live\"},{\"label\":\"Data\",\"language\":\"bash\",\"code\":\"anythink data create products --data '{\\\"price\\\":19.99,\\\"status\\\":\\\"live\\\"}'\\nanythink data list products --limit 10 --json\\nanythink search query \\\"*\\\" --entities products --filter \\\"status=live\\\"\"},{\"label\":\"Workflows\",\"language\":\"bash\",\"code\":\"anythink workflows export 31 --output order-alerts.json\\nanythink config use acme-prod\\nanythink workflows seed order-alerts.json --var connection_id=abc-123\\nanythink workflows trigger 31 --payload '{\\\"order_id\\\":42}'\"},{\"label\":\"Promote\",\"language\":\"bash\",\"code\":\"anythink migrate --from acme-staging --to acme-prod \\\\\\n --include-workflows --include-roles --dry-run\"}]},\"links\":[{\"label\":\"brew install anythink-cloud/tap/anythink\",\"url\":\"https://github.com/anythink-cloud/homebrew-tap\",\"icon\":\"brew\",\"description\":\"macOS and Linux, installs the CLI and the MCP server\"},{\"label\":\"dotnet tool install --global anythink-cli\",\"url\":\"https://github.com/anythink-cloud/anythink-cli\",\"icon\":\"docs\",\"description\":\"Any platform with the .NET 8 SDK\"},{\"label\":\"github.com/anythink-cloud/anythink-cli\",\"url\":\"https://github.com/anythink-cloud/anythink-cli\",\"icon\":\"github\",\"description\":\"MIT-licensed. Star, fork and contribute\"}],\"linksHeading\":\"Get the CLI\"}},{\"id\":30,\"slug\":\"ai-and-mcp\",\"type\":\"solution\",\"title\":\"AI \u0026 MCP\",\"status\":\"published\",\"hero\":{\"headline\":\"AI that runs/your whole backend\",\"description\":\"\u003cp\u003eBuild your backend in a conversation, from Claude Code, Cursor or the AI chat in the Anythink dashboard. The same MCP tools reach the whole CLI, from entities and fields to workflows, roles, secrets and payments.\u003c/p\u003e\",\"featurePills\":[\"Public MCP server (stdio)\",\"Full CLI surface\",\"AI chat in the dashboard\",\"BYOK or platform key\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/ai\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"One backend, reachable from plain text\",\"description\":\"\u003cp\u003eThe dashboard is the simple interface. The API, CLI and MCP go further: text with an AI assistant is the interface, and the output is a working system.\u003c/p\u003e\",\"cards\":[{\"id\":155,\"type\":\"feature\",\"title\":\"A public MCP server, not a demo\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink-mcp\u003c/code\u003e is a published tool that speaks stdio, so it works with Claude Code, Cursor and any other MCP client. It isn't a cut-down preview: it reaches the same commands you'd run yourself.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":156,\"type\":\"feature\",\"title\":\"One tool reaches the whole CLI\",\"description\":\"\u003cp\u003eAlongside dedicated tools for accounts and projects, a generic \u003ccode\u003ecli\u003c/code\u003e tool runs any Anythink CLI command: entities, fields, data, workflows, roles, secrets, users, files, payments, integrations, migrate. An AI assistant isn't limited to a handful of pre-wired actions.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/3812e95409fd4b288aea790adcb5d37f.mp4\",\"alt\":\"One tool reaches the whole CLI\"},\"pageIds\":[30]},{\"id\":186,\"type\":\"feature\",\"title\":\"The dashboard's AI chat can build too\",\"description\":\"\u003cp\u003eThe AI chat in the dashboard uses the same MCP tools as an external assistant. Ask it a question about your data, or ask it to create an entity, add fields or set up a workflow, and it tells you what it did, the same way Claude does anywhere else. Every change is there to check in the dashboard.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":187,\"type\":\"feature\",\"title\":\"BYOK or a platform key\",\"description\":\"\u003cp\u003eEac
14h project chooses platform-managed AI usage, billed with quota tracking, or its own Claude connection for bring-your-own-key billing. Either way, the AI chat and Claude workflow steps use the project's chosen mode.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":188,\"type\":\"feature\",\"title\":\"Claude and Grok as workflow steps\",\"description\":\"\u003cp\u003eClaude and Grok are available as Integration steps inside a workflow, so a step can generate or transform text as part of a larger pipeline â a support ticket summarised before it's filed, a draft written before an email step sends it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":189,\"type\":\"feature\",\"title\":\"Credential tools are blocked in hosted mode\",\"description\":\"\u003cp\u003eTools that mutate credentials â login, signup, logout, switching the active account or config â are explicitly blocked when the MCP server runs in the shared, multi-project HTTP deployment. They stay available over stdio, where the server runs as you, locally.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"AI that runs your backend, Claude Code backend MCP, Cursor backend MCP, AI chat in admin dashboard\",\"seo_focus_keyword\":\"MCP server for your backend\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Create a support_tickets entity and a workflow that emails the team when a ticket arrives.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for seeing exactly what was built.\",\"example\":\"Data Model â Add Entity: support_tickets\\nAdd Field: status (select)\\nCreate Entity\\nWorkflows â New Workflow: New ticket alert\\nTrigger: a support_tickets record is created\\nAdd step: Send an Email\\n\\nâ every new ticket emails [email protected]\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Scriptable and repeatable. Good for CI and for promoting staging to production.\",\"example\":\"anythink entities create support_tickets --rls\\nanythink fields add support_tickets status --type varchar \\\\\\n --display select --options new,open,closed\\n\\nanythink workflows create \\\"New ticket alert\\\" \\\\\\n --trigger Event --entity support_tickets \\\\\\n --event EntityCreated --enabled\\n\\nanythink workflows step-add 61 notify-team \\\\\\n --action SendAnEmail --start --enabled \\\\\\n --params '{\\\"to\\\":\\\"[email protected]\\\",\\\"template\\\":\\\"new-ticket\\\"}'\",\"language\":\"bash\",\"result\":[\"Entity support_tickets created, with row-level security\",\"Field status added\",\"Workflow New ticket alert created and enabled\",\"Step notify-team added\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe what you want, in Claude Code or the dashboard's AI chat. It runs the same commands and tells you what it did.\",\"example\":\"âCreate a support_tickets entity with row-level security and a status field. Then add a workflow that emails [email protected] whenever a new ticket is created.â\",\"result\":[\"Entity support_tickets, with row-level security\",\"Field status: new, open, closed\",\"Workflow: when a ticket is created, send an email\",\"Enabled, and ready to try with Test Workflow\"],\"clip\":\"dashboard/ai/chat-builds-entity\"}]}},{\"type\":\"principle\",\"heading\":\"Why the interface can be plain text\",\"subheading\":\"$undefined\",\"content\":{\"quote\":\"When the point of contact between the product and the people becomes a point of friction, then the industrial designer has failed.\",\"attribution\":\"Henry Dreyfuss, Designing for People, 1955\",\"body\":\"A dashboard has to be learned. An API has to be read. A conversation doesn't: you say
14what you want, and the Anythink MCP server carries it out, as real entities, fields and workflows. You don't have to learn Anythink before you can use it; you can describe the outcome, in your own words, and get a working system back.\"}}],\"links\":[{\"label\":\"MCP tools reference\",\"url\":\"https://docs.anythink.cloud/guides/ai/mcp-tools\",\"description\":\"Every tool the Anythink MCP server exposes\"},{\"label\":\"Connect the MCP server\",\"url\":\"https://docs.anythink.cloud/guides/ai/connect-mcp\",\"description\":\"Claude Code, Claude Desktop and other clients\"},{\"label\":\"AI recipes\",\"url\":\"https://docs.anythink.cloud/guides/ai/recipes\",\"description\":\"Worked examples with AI workflow steps\"}],\"linksHeading\":\"Related reading\"}},{\"id\":33,\"slug\":\"migrate-from-amazon-pinpoint\",\"type\":\"solution\",\"title\":\"Migrate from Amazon Pinpoint\",\"status\":\"published\",\"hero\":{\"headline\":\"Amazon Pinpoint is retiring./Your push notifications don't have to\",\"description\":\"\u003cp\u003eAmazon Pinpoint reaches end of support on 30 October 2026, and AWS Amplify's push notifications depend on it. Move device tokens, templates and campaign logic to Anythink: push built on FCM and web push, with taps that can trigger a workflow.\u003c/p\u003e\",\"featurePills\":[\"FCM and web push (VAPID)\",\"iOS action buttons\",\"Tap-to-workflow\",\"Bulk fan-out via the queue\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What moves, and what doesn't\",\"description\":\"\u003cp\u003eDevice tokens, templates and campaign logic all have a direct home in Anythink. Here is what each one becomes.\u003c/p\u003e\",\"cards\":[{\"id\":227,\"type\":\"feature\",\"title\":\"Device tokens, no separate service\",\"description\":\"\u003cp\u003eDevices register against your project's own push endpoint, not a third service you have to wire up. FCM and web push (VAPID) are both supported, with per-project credentials and per-device records you can list or revoke.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":228,\"type\":\"feature\",\"title\":\"Templates and iOS action categories\",\"description\":\"\u003cp\u003ePush templates hold the payload once and get reused across sends. iOS categories carry the action button order and labels, synced to the device, so a notification can offer Approve, Snooze or Reply without opening the app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":229,\"type\":\"feature\",\"title\":\"A tap can trigger a workflow\",\"description\":\"\u003cp\u003eAction-button taps post to a signed, category-scoped endpoint that checks the action was actually registered for that notification before it fires. On a match, it triggers a real workflow â not just a logged event.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":230,\"type\":\"feature\",\"title\":\"Bulk sends run through the queue\",\"description\":\"\u003cp\u003eA Send Push step in a workflow can fan out over an array of recipients. Each one is published to a dedicated queue and sent independently, so a campaign to a segment doesn't run as a slow loop inside one job.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"What you're probably sending\",\"description\":\"\u003cp\u003eWhat Pinpoint-driven push is usually doing, and how it looks running on Anythink.\u003c/p\u003e\",\"cards\":[{\"id\":231,\"type\":\"use_case\",\"title\":\"Event-triggered transactional push\",\"description\":\"\u003cp\u003e\\\"Order shipped\\\" is a status change on a record, not a campaign you schedule.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eA workflow with an Event trigger on \u003ccode\u003eorders\u003c/code\u003e, filtered to \u003ccode\u003estatus changed_to \\\"shipped\\\"\u003c/code\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA Send Push step with the tracking link templated from the order record\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo polling, no separate campaign tool to keep in sync with your data\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":232,\"type\":\"use_case\",\"title\":\"Actionable notifications\",\"description\":\"\u003cp\u003eReplace a Pinpoint campaign that just opens the app with one that does something from the lock screen.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eA push category with Approve / Decline action buttons\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA tap on either button fires a workflow trigger with the choice attached\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe workflow updates the record and emails a confirmation, no app launch required\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":233,\"type\":\"use_case\",\"title\":\"Scheduled digests and reminders\",\"description\":\"\u003cp\u003eThe campaigns Pinpoint would run on a schedule become a Timed trigger.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eA Timed workflow reads records matching a condition (for example, trials expiring in 3 days)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA Send Push step fans the result set out to one notification per recipient\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe same workflow can also send an email in parallel steps of the pipeline\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]}]}
14,\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Pinpoint push notifications migration, Amplify push notifications alternative, FCM and web push backend, push notifications that trigger workflows\",\"seo_focus_keyword\":\"Amazon Pinpoint alternative\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Send a push notification when an order ships.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Build it in the workflow editor. The trigger and the push step replace a Pinpoint campaign.\",\"example\":\"Workflows â New Workflow: Order shipped push\\nTrigger: an orders record is updated, status changed to shipped\\nAdd step: Send a Push Notification\\nTitle: Your order shipped\\nSave and enable\\n\\nâ customers get a push when an order's status becomes shipped\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The trigger and the push step, scriptable and repeatable.\",\"example\":\"anythink workflows create \\\"Order shipped push\\\" \\\\\\n --trigger Event --entity orders --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"operator\\\":\\\"changed_to\\\",\\\"value\\\":\\\"shipped\\\"}' \\\\\\n --enabled\\n\\nanythink workflows step-add 42 send-tracking-push \\\\\\n --action SendPushNotification \\\\\\n --params '{\\\"to\\\":\\\"{{ $anythink.trigger.data.customer.device_token }}\\\",\\\"title\\\":\\\"Your order shipped\\\"}' \\\\\\n --start --enabled\",\"language\":\"bash\",\"result\":[\"Workflow Order shipped push created and enabled\",\"Step send-tracking-push added\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the campaign. The assistant builds the workflow.\",\"example\":\"âWhen an order's status changes to shipped, send a push notification to the customer saying their order shipped, with the tracking link.â\",\"result\":[\"Workflow: when an order's status changes to shipped\",\"Step: send a push notification to the customer's device\",\"Included the tracking link in the body\",\"Enabled, and ready to try with Test Workflow\"]}]}},{\"type\":\"matrix\",\"heading\":\"Anythink vs Pinpoint-dependent stacks\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Amplify / Pinpoint\"],\"rows\":[{\"capability\":\"Push notifications (FCM + web push)\",\"values\":[\"native\",\"addon\"],\"note\":\"Amplify's push notifications feature depends on Pinpoint, which reaches end of support 30 October 2026\"},{\"capability\":\"iOS action categories and buttons\",\"values\":[\"native\",\"unknown\"]},{\"capability\":\"Tap triggers a backend workflow\",\"values\":[\"native\",\"unknown\"]},{\"capability\":\"Bulk fan-out via a queue\",\"values\":[\"native\",\"unknown\"]}],\"footnote\":\"Amplify/Pinpoint column reflects published AWS documentation on the Pinpoint migration requirement, not a feature-by-feature audit of every Amplify configuration.\"}}],\"code\":{\"heading\":\"What a migrated send looks like\",\"subheading\":\"Real requests against the push API\",\"tabs\":[{\"label\":\"Register a device\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/push/devices\\n\\n{\\n \\\"provider\\\": \\\"fcm\\\",\\n \\\"token\\\": \\\"\u003cdevice-token\u003e\\\",\\n \\\"platform\\\": \\\"android\\\"\\n}\"},{\"label\":\"Create the workflow\",\"language\":\"bash\",\"code\":\"anythink workflows create \\\\\\n --name \\\"Order shipped push\\\" \\\\\\n --trigger Event \\\\\\n --entity orders \\\\\\n --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"o
14perator\\\":\\\"changed_to\\\",\\\"value\\\":\\\"shipped\\\"}' \\\\\\n --enabled\"},{\"label\":\"Add the push step\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 42 send-tracking-push \\\\\\n --name \\\"Send tracking push\\\" \\\\\\n --action SendPushNotification \\\\\\n --params '{\\n \\\"to\\\": \\\"{{ $anythink.trigger.data.customer.device_token }}\\\",\\n \\\"title\\\": \\\"Your order shipped\\\",\\n \\\"body\\\": \\\"Track it: {{ $anythink.trigger.data.tracking_url }}\\\"\\n }' \\\\\\n --start --enabled\"}]},\"narrative\":{\"heading\":\"Moving a Pinpoint setup\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Re-register your device tokens\",\"prose\":\"Export the endpoints from Pinpoint and re-register each device against your Anythink project's push endpoint, tagged with its provider (FCM or web push). This is a one-time batch job, not a new integration to maintain.\"},{\"title\":\"Turn campaign logic into workflow triggers\",\"prose\":\"A scheduled Pinpoint campaign becomes a Timed trigger. A behavioural campaign (send on an event) becomes an Event trigger with a filter, like status changed_to \\\"shipped\\\". Both are configured in the dashboard or with the CLI, not in campaign-definition JSON.\"},{\"title\":\"Rebuild message templates as push templates\",\"prose\":\"Recreate your Pinpoint message templates as Anythink push templates. If a campaign used custom data per recipient, the template variable syntax pulls fields straight from the triggering record or an earlier workflow step.\"},{\"title\":\"Wire up action buttons, if you used them\",\"prose\":\"iOS action categories carry the button order and labels to the device. Point each action at a workflow trigger instead of a Pinpoint event handler, and the tap does the same job it always did â just verified and triggered on your own backend.\"}],\"aside\":{\"eyebrow\":\"Next\",\"title\":\"Push with action buttons\",\"body\":\"Add buttons to a notification and point each tap at a workflow on your own backend.\",\"clip\":\"dashboard/push/action-buttons\",\"link\":{\"label\":\"Push notifications\",\"href\":\"/products/push-notifications\"}}}}},{\"id\":34,\"slug\":\"migrate-from-firebase-extensions\",\"type\":\"solution\",\"title\":\"Migrate from Firebase Extensions\",\"status\":\"published\",\"hero\":{\"headline\":\"Firebase Extensions is shutting down./Here's where each one goes\",\"description\":\"\u003cp\u003eFirebase Extensions shuts down on 31 March 2027, taking the Stripe payments extension and the RevenueCat in-app purchase extension with it. Anythink does both of those jobs natively, plus the workflow automation extensions normally fill in.\u003c/p\u003e\",\"featurePills\":[\"Native subscriptions\",\"Apple in-app purchases\",\"Workflow-driven email\",\"No extensions to reinstall\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"The job each extension did, built in\",\"description\":\"\u003cp\u003eFirebase Extensions wired third-party add-ons into Cloud Functions. Anythink does the same jobs natively, so there's nothing external to re-install after the shutdown.\u003c/p\u003e\",\"cards\":[{\"id\":234,\"type\":\"feature\",\"title\":\"Stripe payments, without the extension\",\"description\":\"\u003cp\u003eAnythinkPay handles subscription plans, offer codes, payment methods, charges, refunds and Stripe Connect directly â no extension to install, version, or lose when Extensions closes.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":235,\"type\":\"feature\",\"title\":\"Apple in-app purchases, natively\",\"description\":\"\u003cp\u003eApple IAP verification runs against the real App Store Server API, is idempotent on renewals, and binds each purchase to the buying user so a replayed transaction can't be claimed by someone else. This is the job the RevenueCat extension did.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]}
14,{\"id\":236,\"type\":\"feature\",\"title\":\"Trigger Email, as a workflow step\",\"description\":\"\u003cp\u003eThe Firebase \\\"Trigger Email\\\" extension watched a collection and sent an email on write. A Send an Email step on an Event-triggered workflow does the same thing, with the record's fields available to the template.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":237,\"type\":\"feature\",\"title\":\"Search, without an Algolia extension\",\"description\":\"\u003cp\u003eSearch is a built-in, Meilisearch-backed endpoint per entity, including facets, geo filters and vector similarity â not a third-party service wired up through an extension and kept in sync by a Cloud Function.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Common extension setups\",\"description\":\"\u003cp\u003eWhat these extensions were usually doing, and the Anythink equivalent.\u003c/p\u003e\",\"cards\":[{\"id\":238,\"type\":\"use_case\",\"title\":\"Subscription app, previously Stripe extension + Cloud Functions\",\"description\":\"\u003cp\u003ePlans and entitlement checks that used to span a Stripe extension and hand-written functions become one configuration.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eSubscription plans and offer codes managed in the dashboard\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStripe Connect for split payments, if you need them\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ccode\u003e/me\u003c/code\u003e endpoints scoped to the signed-in subscriber for entitlement checks\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":239,\"type\":\"use_case\",\"title\":\"Mobile app with Apple in-app purchases\",\"description\":\"\u003cp\u003eReplacing the RevenueCat extension's verification step.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eThe app posts the App Store transaction for verification\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAnythink verifies it against Apple's App Store Server API and records entitlement\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA renewal or restore re-verifies without creating a duplicate purchase\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":240,\"type\":\"use_case\",\"title\":\"Notify on new document, previously Trigger Email\",\"description\":\"\u003cp\u003eThe most common Extensions use case: send an email when a record is created.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eAn Event-triggered workflow on \u003ccode\u003eEntityCreated\u003c/code\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA Send an Email step, templated from the new record's fields\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo Cloud Function, no extension configuration to migrate before the shutdown\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]}]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Stripe Firebase extension replacement, RevenueCat Firebase extension alternative, Firebase trigger email alternative, Firebase Extensions shutdown\",\"seo_focus_keyword\":\"Firebase Extensions alternative\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Replace the Stripe extension: sell a monthly plan with a 14-d
14ay trial.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the plan. It syncs to Stripe once you have connected it.\",\"example\":\"Settings â Stripe â connect your Stripe account\\nCreate a plan: Pro Monthly, £9.99 a month, 14-day trial\\n\\nâ your app checks access on /me/entitlement\",\"clip\":\"dashboard/payments/create-plan\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Create the plan through the API, once Stripe onboarding is done.\",\"example\":\"anythink pay connect\\nanythink fetch /integrations/anythinkpay/subscription-plans \\\\\\n --method POST --body '{\\\"plan_name\\\":\\\"pro-monthly\\\",\\n \\\"name\\\":\\\"Pro Monthly\\\",\\\"description\\\":\\\"Full access\\\",\\n \\\"amount\\\":9.99,\\\"currency\\\":\\\"gbp\\\",\\n \\\"billing_interval\\\":\\\"month\\\",\\\"trial_period_days\\\":14}'\\nanythink pay status\",\"language\":\"bash\",\"result\":[\"Stripe onboarding started\",\"Plan Pro Monthly created: £9.99 a month, 14-day trial\",\"Stripe account status shown\"],\"clip\":\"cli/payments/create-plan\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the plan in plain English.\",\"example\":\"âReplace our Firebase Stripe extension: set up a Pro Monthly plan at £9.99 a month with a 14-day free trial, and tell me whether our Stripe account is ready to take payments.â\",\"result\":[\"Created plan Pro Monthly at £9.99 a month\",\"Added a 14-day trial\",\"Checked the Stripe account status\",\"Told you what is left to finish onboarding\"]}]}},{\"type\":\"matrix\",\"heading\":\"Anythink vs Firebase + Extensions\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Firebase + Extensions\"],\"rows\":[{\"capability\":\"Subscription payments\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase's Stripe payments extension, shutting down 31 March 2027\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase relies on the RevenueCat extension\"},{\"capability\":\"Email on record write\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase's Trigger Email extension\"},{\"capability\":\"Search, including facets and geo\",\"values\":[\"native\",\"addon\"]}],\"footnote\":\"\\\"Addon\\\" reflects Firebase's own documented reliance on Extensions, a third-party marketplace, for these jobs rather than a native product feature.\"}}],\"code\":{\"heading\":\"Trigger Email, rebuilt as a workflow\",\"subheading\":\"The most common extension, as a workflow step\",\"tabs\":[{\"label\":\"Create the workflow\",\"language\":\"bash\",\"code\":\"anythink workflows create \\\\\\n --name \\\"Welcome email\\\" \\\\\\n --trigger Event \\\\\\n --entity users \\\\\\n --event EntityCreated \\\\\\n --enabled\"},{\"label\":\"Add the email step\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 51 send-welcome-email \\\\\\n --name \\\"Send welcome email\\\" \\\\\\n --action SendAnEmail \\\\\\n --params '{\\n \\\"to\\\": \\\"{{ $anythink.trigger.data.email }}\\\",\\n \\\"template\\\": \\\"welcome\\\",\\n \\\"data\\\": { \\\"first_name\\\": \\\"{{ $anythink.trigger.data.first_name }}\\\" }\\n }' \\\\\\n --start --enabled\"},{\"label\":\"Check a purchase's entitlement\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscriptions/me/entitlement\"}]},\"narrative\":{\"heading\":\"Moving off Extensions before March 2027\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Move payments off the Stripe extension\",\"prose\":\"Recreate your products and prices as AnythinkPay subscription plans. The extension's Firestore-synced subscription documents become AnythinkPay subscription records, and your app reads entitlement from the /me endpoints instead of a Firestore listener.\"},{\"title\":\"Move Apple IAP off the RevenueCat extension\",\"prose\":\"Point your app's purchase verification at Anythink instead of RevenueCat's endpoint. Verification, renewal handling and ownership binding are built in, so there's no separate service to keep paying for once Extensions closes.\"},{\"title\":\"Rebuild event-driven extensions as workflows\",\"prose\":\"Anything that used to run as \\\"on document write, do X\\\" â send an email, call an API, update a related record â becomes an Event-tr
14iggered workflow with the matching action step. No Cloud Functions runtime to provision or keep patched.\"}]}}},{\"id\":66,\"slug\":\"supabase-alternative\",\"type\":\"solution\",\"title\":\"Supabase alternative\",\"status\":\"published\",\"hero\":{\"headline\":\"A Supabase alternative,/with the rest of the backend built in\",\"description\":\"\u003cp\u003eSupabase gives you Postgres, auth and an API. Anythink gives you the database, REST API and sign-in too, plus the parts you'd otherwise bolt on: subscriptions with Apple in-app purchases, visual workflows, a dedicated search engine, push notifications and dashboards. All of it runs on one data model, in one project.\u003c/p\u003e\",\"featurePills\":[\"REST API and OpenAPI from your data model\",\"Stripe and Apple in-app purchases built in\",\"Visual workflows with AI steps\",\"Meilisearch with facets and geo\",\"Push with action buttons\",\"Run it from Claude through MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the full comparison\",\"action\":\"/articles/anythink-vs-supabase\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What you'd add to Supabase,/already in Anythink\",\"description\":\"\u003cp\u003eThe jobs that usually mean an extension, a webhook recipe or a second vendor alongside Supabase.\u003c/p\u003e\",\"cards\":[{\"id\":297,\"type\":\"feature\",\"title\":\"Subscriptions without a sync engine\",\"description\":\"\u003cp\u003ePlans, trials and offer codes on Stripe, and Apple in-app purchases verified on the server, land on the same subscriber record. No Stripe sync engine or webhook recipe to run.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":298,\"type\":\"feature\",\"title\":\"Workflows instead of edge-function glue\",\"description\":\"\u003cp\u003eTrigger on a record change, a schedule, a manual run or an API call, then send email or push, call an API, run a script or use Claude, OpenAI or Grok, all in a visual editor.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":299,\"type\":\"feature\",\"title\":\"A real search engine, not just full-text\",\"description\":\"\u003cp\u003eEvery project gets Meilisearch: typo tolerance, facets, highlighting, geo radius and distance sort, kept in step with your records. No PostGIS or separate search service.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":300,\"type\":\"feature\",\"title\":\"Access control down to the field\",\"description\":\"\u003cp\u003eRoles with per-entity permissions, field-level security per role, and row-level access for users and groups that workflows can set when a record is created.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":301,\"type\":\"feature\",\"title\":\"Dashboards on your app data\",\"description\":\"\u003cp\u003eBar, line, funnel and cohort charts, materialised views that join payment data, and grid, Kanban, map and calendar views for your team, without a separate BI tool.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":302,\"type\":\"feature\",\"title\":\"Built for AI assistants\",\"description\":\"\u003cp\u003eThe Anythink MCP server and Claude Code skill let an assistant model your data, build workflows and query records. The dashboard's AI chat uses the same tools.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]}
14,\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Supabase alternative, Supabase alternatives 2026, backend as a service, BaaS, Supabase vs Anythink, Firebase alternative, managed backend with payments, backend with workflows\",\"seo_focus_keyword\":\"Supabase alternative with payments and workflows\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"matrix\",\"heading\":\"Anythink and Supabase, compared\",\"subheading\":\"What's built in, what needs an add-on, and where Supabase is the better fit.\",\"content\":{\"columns\":[\"Anythink\",\"Supabase\"],\"rows\":[{\"capability\":\"REST API generated from your data model\",\"values\":[\"native\",\"native\"]},{\"capability\":\"OpenAPI spec for your own data API\",\"values\":[\"native\",\"unknown\"],\"note\":\"Supabase generates TypeScript types and in-dashboard API docs instead.\"},{\"capability\":\"Social sign-in, including Apple and Google\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Row-level access for groups and teams\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase: Postgres RLS policies you write in SQL.\"},{\"capability\":\"Dedicated search engine: typo tolerance, facets\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase uses Postgres full-text search.\"},{\"capability\":\"Geo search: radius, bounding box, distance sort\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase needs the PostGIS extension.\"},{\"capability\":\"Visual workflow engine\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Stripe subscriptions\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase: Stripe sync engine or a webhook recipe.\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Push notifications\",\"values\":[\"native\",\"addon\"]},{\"capability\":\"Dashboards and charts on app data\",\"values\":[\"native\",\"none\"]},{\"capability\":\"MCP server for AI assistants\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Realtime subscriptions (planned for Anythink)\",\"values\":[\"none\",\"native\"]},{\"capability\":\"Direct SQL access to Postgres\",\"values\":[\"none\",\"native\"]},{\"capability\":\"Self-hosting\",\"values\":[\"none\",\"native\"],\"note\":\"Anythink is managed. Enterprise customers can have a dedicated stack in any DigitalOcean region.\"}],\"footnote\":\"Based on Supabase's public documentation, checked 28 September and 3 October 2026. An add-on means an extension, a partner integration or a recipe you build and run yourself.\"}}],\"narrative\":{\"heading\":\"Which one fits\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Choose Anythink if\",\"prose\":\"You're shipping a product that charges money, sends notifications and runs automations, and you'd rather configure those than assemble them. You want your data model to drive the API, the dashboard and the access rules, and you want an AI assistant to be able to run the whole backend.\"},{\"title\":\"Choose Supabase if\",\"prose\":\"You want direct SQL access to Postgres or to self-host, or you need realtime today; realtime is planned for Anythink. Those are real strengths, and Anythink doesn't offer them yet.\"},{\"title\":\"Moving across\",\"prose\":\"Model your tables as entities in the Anythink dashboard or with the CLI, import your rows from CSV with saved column mappings, then point your app at the generated REST API. Sign-in providers, roles and workflows are set up per project.\"}]},\"links\":[{\"label\":\"Build your first app\",\"url\":\"https://docs.anythink.cloud/get-started/first-app\",\"description\":\"Model data, get a REST API and sign users in\"},{\"label\":\"Model your data\",\"url\":\"https://docs.anythink.cloud/guides/database/model-your-data\",\"description\":\"Turn your tables into entities\"},{\"label\":\"Groups and row-level security\",\"url\":\"https://docs.anythink.cloud/guides/authentication/groups-and-row-level-security\",\"description\":\"Access rules without writing SQL policies\"},{\"label\":\"Plans and subscriptions\",\"url\":\"https://docs.anythink.cloud/guides/payments/plans-and-subscriptions\",\"description\":\"Stripe and Apple in-app purchases\"},{\"label\":\"Search\",\"url\":\"https://docs.anythink.cloud/guides/database/search\",\"description\":\"Typo tolerance, facets and geo\"}],\"linksHeading\":\"Related reading\"}},{\"id\":67,\"slug\":\"firebase-alternative\",\"type\":\"solution\",\"title\":\"Firebase alternative\",\"status\":\"published\",\"hero\":{\"headline\":\"A Firebase alternative,/without the extensions\",\"description\":\"\u003cp\u003eFirebase leans on Extensions for payments, in-app purchases, email and search, and Extensions shuts down on 31 March 2027. Anythink builds those in: a REST API generated from your data model, subscriptions with Apple in-app purchases, visual workflows, Meilisearch and push notifications with action buttons, in one project.\u003c/p\u003e\",\"featurePills\":[\"REST API and OpenAPI from your data model\",\"Stripe and Apple in-app purchases built in\",\"Visual workflows with AI steps\",\"Meilisearch with facets and geo\",\"Push through FCM with action buttons\",\"Run it from Claude through MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the full comparison\",\"action\":\"/articles/anythink-vs-firebase\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What Firebase needs Extensions for,/built into Anythink\",\"description\":\"\u003cp\u003ePayments, purchases, email and search are core features here, not marketplace add-ons with a shutdown date.\u003c/p\u003e\",\"cards\":[{\"id\":303,\"type\":\"feature\",\"title\":\"Payments without the Stripe extension\",\"description\":\"\u003cp\u003ePlans, trials and offer codes on Stripe, with entitlement checks your app can call, built into the platform rather than
14installed from a marketplace.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":304,\"type\":\"feature\",\"title\":\"Apple in-app purchases without RevenueCat\",\"description\":\"\u003cp\u003eReceipts are verified on the server against the App Store, re-verifying never duplicates a subscription, and each purchase is bound to the account that made it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":305,\"type\":\"feature\",\"title\":\"A REST API from your data model\",\"description\":\"\u003cp\u003eEvery entity gets list, filter, create, update and delete endpoints the moment you save it, with an OpenAPI spec for client generators and per-entity public or private access.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":306,\"type\":\"feature\",\"title\":\"Workflows instead of Cloud Functions glue\",\"description\":\"\u003cp\u003eReact to record changes, schedules, manual runs or API calls with steps for email, push, API calls, scripts and AI providers, in a visual editor.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":307,\"type\":\"feature\",\"title\":\"Search that Firestore doesn't do\",\"description\":\"\u003cp\u003eTypo-tolerant search, facets, highlighting and geo radius search on every project, indexed as records change, with no Algolia extension.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":308,\"type\":\"feature\",\"title\":\"Push you can act on\",\"description\":\"\u003cp\u003eSend through FCM to Android and iOS and through web push, with iOS action buttons whose taps start a workflow on your backend.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Firebase alternative, Firebase alternatives 2026, Firebase Extensions replacement, RevenueCat alternative, backend as a service, BaaS, Firebase vs Anythink, Supabase alternative\",\"seo_focus_keyword\":\"Firebase alternative with payments built in\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"matrix\",\"heading\":\"Anythink and Firebase, compared\",\"subheading\":\"What's built in, what needs an extension, and where Firebase is the better fit.\",\"content\":{\"columns\":[\"Anythink\",\"Firebase\"],\"rows\":[{\"capability\":\"REST API generated from your data model\",\"values\":[\"native\",\"none\"]},{\"capability\":\"OpenAPI spec for your own data API\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Social sign-in, including Apple and Google\",\"values\":[\"native\",\"native\"]}
14,{\"capability\":\"Row-level access for groups and teams\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase: security rules you write and maintain.\"},{\"capability\":\"Full-text and faceted search\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase points to Algolia-style extensions.\"},{\"capability\":\"Geo search: radius, bounding box, distance sort\",\"values\":[\"native\",\"addon\"],\"note\":\"Firestore needs geohash libraries you implement.\"},{\"capability\":\"Visual workflow engine\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Subscriptions and payments\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase's Stripe payments extension.\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase relies on the RevenueCat extension; Extensions shut down on 31 March 2027.\"},{\"capability\":\"Push notifications\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Dashboards and charts on app data\",\"values\":[\"native\",\"none\"]},{\"capability\":\"MCP server for AI assistants\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Realtime sync and offline persistence\",\"values\":[\"none\",\"native\"],\"note\":\"Realtime is planned for Anythink.\"}],\"footnote\":\"Based on Firebase's public documentation, checked 28 September and 3 October 2026. An add-on means an extension, a partner integration or a recipe you build and run yourself.\"}}],\"narrative\":{\"heading\":\"Which one fits\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Choose Anythink if\",\"prose\":\"You take payments or in-app purchases, run automations and need search, and you don't want each of those to depend on an extension with a shutdown date. You want a REST API and an OpenAPI spec generated from your data model, and an AI assistant that can run the whole backend.\"},{\"title\":\"Choose Firebase if\",\"prose\":\"Your app depends on realtime sync and offline persistence on the device today, or you're invested in Google's wider tooling such as Analytics and Crashlytics. Those are real strengths, and Anythink doesn't offer realtime yet.\"},{\"title\":\"Moving across\",\"prose\":\"Model your collections as entities in the Anythink dashboard or with the CLI, export documents to CSV and import them with saved column mappings, then switch your app to the generated REST API. Keep FCM for delivery: Anythink sends push through it.\"}]},\"links\":[{\"label\":\"Build your first app\",\"url\":\"https://docs.anythink.cloud/get-started/first-app\",\"description\":\"Model data, get a REST API and sign users in\"},{\"label\":\"Apple in-app purchases\",\"url\":\"https://docs.anythink.cloud/guides/payments/apple-in-app-purchases\",\"description\":\"Server-side verification with the App Store Server API\"},{\"label\":\"Stripe payments\",\"url\":\"https://docs.anythink.cloud/guides/payments/stripe\",\"description\":\"Replace the Stripe payments extension\"},{\"label\":\"Push notifications\",\"url\":\"https://docs.anythink.cloud/guides/workflows/push-notifications\",\"description\":\"Send through FCM with action buttons\"},{\"label\":\"How workflows work\",\"url\":\"https://docs.anythink.cloud/guides/workflows/how-workflows-work\",\"description\":\"Instead of Cloud Functions glue\"}],\"linksHeading\":\"Related reading\"}}],\"pricing\":[{\"id\":4,\"slug\":\"pricing\",\"type\":\"pricing\",\"title\":\"Pricing\",\"status\":\"published\",\"hero\":{\"headline\":\"Every feature,/on every plan\",\"description\":\"\u003cp\u003eWorkflows, payments and dashboards come with every plan, including Free. Plans differ only in storage, users and usage, so you pay more as you grow.\u003c/p\u003e\",\"featurePills\":\"$undefined\",\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Contact Sales\",\"action\":\"/contact\"}},\"sections\":{\"features\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"cards\":[]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":true,\"title\":\"Plans differ by usage, not features\",\"description\":\"\u003cp\u003eCreate a free account. Build as many projects as you want. Pick the right plan for each project.\u003c/p\u003e\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":\"\u003cp\u003eHave a promo code? Enter it when you sign up, or when you create a project.\u003c/p\u003e\",\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Supabase pricing comparison, Auth0 pricing alternative, cost-effective BaaS, scalable backend pricing, start for free backend, Stripe Partner,\",\"seo_focus_keyword\":\"Pricing: everything included in every plan\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":\"$undefined\"}],\"home\":[{\"id\":5,\"slug\":\"home\",\"type\":\"home\",\"title\":\"Home\",\"status\":\"published\",\"hero\":{\"headline\":\"The whole backend,/in one project.\",\"description\":\"\u003cp\u003eA database with an instant REST API, sign-in, subscriptions, workflows and an operations dashboard, all built from your data model.\u003c/p\u003e\u003cp\u003eBuild it in the Anythink dashboard, from the terminal, or by asking Claude. You describe the system. Anythink runs it.\u003c/p\u003e\",\"featurePills\":[\"REST API from your data model\",\"Apple and Google sign-in\",\"Subscriptions and Apple in-app purchases\",\"Visual workflows\",\"Operations dashboard\",\"CLI and MCP\"],\"image\":{\"url\":\"/cdn-assets/20804318/e3522258d3b845fdbd21dad3c839b210.png\",\"alt\":\"Home\"},\"images\":[{\"id\":\"133\",\"url\":\"/cdn-assets/20804318/e3522258d3b845fdbd21dad3c839b210.png\",\"alt\":\"Home\",\"original_file_name\":\"Screenshot 2026-03-08 at 17.51.32.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Everything a product needs /from one data model\",\"description\":\"\u003cp\u003eEach part of Anythink reads from the same entities, so your API, permissions, workflows, payments and dashboards never drift apart.\u003c/p\u003e\",\"cards\":[]},\"benefits\":{\"title\":\"Benefits\",\"description\":\"\u003cp\u003eGet an entire backend-tech stack with a click of a button. Built for speed.\u003c/p\u003e\"},\"useCases\":{\"enabled\":true,\"title\":\"Who is it for?\",\"description\":\"\u003cp\u003eFrom a weekend prototype to a product with paying customers, on the same project.\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":true,\"title\":\"Tried, Tested, Trusted\",\"description\":\"\u003cp\u003eWe build and test Anythink with our customers to create a platform that works for Everythink\u003c/p\u003e\",\"logos\":[]},\"pricing\":{\"enabled\":true,\"title\":\"Everything included in every plan\",\"description\":\"\u003cp\u003eWorkflows, payments and dashboards come with every plan, including Free. Plans differ in storage, monthly active users and usage, so you pay more only as your product grows.\u003c/p\u003e\",\"tiers\":[]},\"examples\":{\"enabled\":true,\"title\":\"What can I do with it?\",\"description\":\"\u003cp\u003eAnythink isn't just for building your backend, it's also for running your business. You and your team can use Anythink to keep track of all of your stuff, whether it's articles, products, stock, training courses, appointments or... well, anythink...\u003c/p\u003e\",\"items\":[]},\"articles\":{\"enabled\":true,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":true,\"title\":\"Partners\",\"description\":\"\u003cp\u003ePayments run on Stripe, where Anythink is a verified partner, and projects run on DigitalOcean.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":{\"__data\":[],\"__count\":0},\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":true,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":3,\"slug\":\"quick_start\",\"title\":\"Quick Start\"}
14,\"seo_keywords\":\"backend as a service, BaaS, Supabase alternative, Firebase alternative, backend with subscriptions, Apple in-app purchase backend, workflow automation backend, MCP server backend, REST API from database\",\"seo_focus_keyword\":\"Backend as a service with built-in subscriptions\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"tools\",\"heading\":\"Six tools. One project.\",\"subheading\":\"Most products end up stitching together a database, a CMS, an automation tool, a subscription service, search and an admin panel. Anythink does each of those jobs from one data model.\",\"content\":{\"tools\":[{\"name\":\"Supabase or Firebase\",\"job\":\"Database, REST API and sign-in\"},{\"name\":\"Strapi or Directus\",\"job\":\"Content management\"},{\"name\":\"Zapier\",\"job\":\"Automation and integrations\"},{\"name\":\"RevenueCat\",\"job\":\"Subscriptions and in-app purchases\"},{\"name\":\"Algolia\",\"job\":\"Search\"},{\"name\":\"Retool\",\"job\":\"Internal dashboards\"}],\"result\":{\"title\":\"One project, one data model, one bill.\",\"text\":\"Model your data once. The API, permissions, subscriptions, workflows, search and dashboards all read from it, so there's no glue code to write and nothing to keep in sync.\"},\"footnote\":\"Anythink covers the core job each tool does for a typical app. It isn't a feature-for-feature copy of each one: Zapier, for example, connects to thousands of apps, while Anythink has a set of built-in integrations plus a step that calls any HTTP API.\"}},{\"type\":\"principle\",\"heading\":\"Less interface. More system.\",\"subheading\":\"$undefined\",\"content\":{\"quote\":\"When the point of contact between the product and the people becomes a point of friction, then the industrial designer has failed.\",\"attribution\":\"Henry Dreyfuss, Designing for People, 1955\",\"body\":\"Dreyfuss designed the Western Electric 500 telephone and the Honeywell round thermostat, objects people used for decades without reading a manual. Anythink applies the same idea to building a business. The dashboard keeps the controls simple. The API, CLI and MCP server go further: the interface can be a sentence typed to Claude or any AI assistant, and the output is a working backend you can inspect, test and trust. You don't have to learn the product first.\"}},{\"type\":\"surfaces\",\"heading\":\"Use the dashboard. Or don't.\",\"subheading\":\"Every task works three ways, and they all change the same project. Here's one task: an orders table with a total and a status.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for modelling data and seeing what's there.\",\"example\":\"Data Model â New entity: orders\\nAdd field: total (decimal, required)\\nAdd field: status (select: pending, paid)\\nSave\\n\\nâ /entities/orders/items is live\",\"clip\":\"dashboard/database/create-entity\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Scriptable and repeatable. Good for CI and for promoting staging to production.\",\"example\":\"anythink entities create orders\\nanythink fields add orders total --type decimal --required\\nanythink fields add orders status --type varchar \\\\\\n --display select --options pending,paid\\nanythink data list orders\",\"clip\":\"cli/database/create-entity\",\"result\":[\"Entity orders created\",\"Field total added to orders\",\"Field status added to orders\",\"orders: 0 items, ready at /entities/orders/items\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe what you want, in Claude Code or the dashboard's AI chat. It runs the same commands and tells you what it did; you can check every change in the dashboard.\",\"example\":\"âCreate an orders entity with a required decimal total and a status of pending or paid. Then add a workflow that emails the customer when the status changes to paid.â\",\"result\":[\"Entity orders: total, status (pending, paid)\",\"GET /entities/orders/items is live\",\"Workflow: when status changes to paid, send an email\",\"Ready to try with Test Workflow\"]}]}},{\"type\":\"proofs\",\"heading\":\"Built in, not bolted on\",\"subheading\":\"Six things Anythink does natively that usually take an extension, a second vendor or a weekend of glue code.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Subscriptions\",\"t
14itle\":\"Sell subscriptions on the web and in your iOS app\",\"body\":\"Plans, trials and offer codes with Stripe, plus Apple in-app purchases verified on the server. Receipts are checked against the App Store, re-verifying is safe, and each purchase is bound to the account that made it.\",\"links\":[{\"label\":\"Subscriptions\",\"href\":\"/products/subscriptions\"},{\"label\":\"Sell a subscription in 15 minutes\",\"href\":\"https://docs.anythink.cloud/guides/payments/quick-start\"}],\"clip\":\"dashboard/payments/create-plan\"},{\"eyebrow\":\"Workflows\",\"title\":\"Automation that lives next to your data\",\"body\":\"Trigger on a record change, a schedule, an API call or a button. Read and write data, call any HTTP API, run a script, send email and push, or ask Claude or OpenAI, without a separate automation tool.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}],\"clip\":\"dashboard/workflows/build-workflow\"},{\"eyebrow\":\"Access\",\"title\":\"Row-level security that understands teams\",\"body\":\"Grant records to users or whole groups when they're created, and let group members read their team's data while staff-only records stay private.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"}],\"clip\":\"dashboard/access/group-rls\"},{\"eyebrow\":\"Operations\",\"title\":\"An operations dashboard on the same data\",\"body\":\"Charts, materialised views that join entities with payments data, and grid, kanban and calendar views. Your team runs the business from the same project your app uses.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}],\"clip\":\"dashboard/database/switch-views\"},{\"eyebrow\":\"Push\",\"title\":\"Push notifications that trigger workflows\",\"body\":\"Send push from a workflow to one user or thousands, add action buttons, and run another workflow when someone taps one.\",\"links\":[{\"label\":\"Push notifications\",\"href\":\"/products/push-notifications\"}],\"clip\":\"dashboard/push/action-buttons\"},{\"eyebrow\":\"AI\",\"title\":\"An AI assistant can run the whole project\",\"body\":\"The Anythink MCP server reaches the whole CLI: entities, fields, data, workflows, roles, payments and more. Use it from Claude, Cursor or another MCP client, or from the AI chat in the dashboard, which has the same access.\",\"links\":[{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"},{\"label\":\"Connect Claude with MCP\",\"href\":\"https://docs.anythink.cloud/guides/ai/connect-mcp\"}],\"clip\":\"dashboard/ai/chat-builds-entity\"}]}},{\"type\":\"matrix\",\"heading\":\"How Anythink compares\",\"subheading\":\"What's built in, and where you'd need an add-on. Including the things we don't do.\",\"content\":{\"columns\":[\"Anythink\",\"Supabase\",\"Firebase\",\"Appwrite\"],\"rows\":[{\"capability\":\"REST API generated from your data model\",\"values\":[\"native\",\"native\",\"none\",\"native\"],\"note\":\"Anythink: public or private per entity, and rate-limited per project.\"},{\"capability\":\"Social sign-in, including Apple and Google\",\"values\":[\"native\",\"native\",\"native\",\"native\"]},{\"capability\":\"Row-level access for groups and teams\",\"values\":[\"native\",\"addon\",\"addon\",\"native\"]},{\"capability\":\"OpenAPI spec for your own data API\",\"values\":[\"native\",\"unknown\",\"none\",\"unknown\"],\"note\":\"Anythink publishes one for every project, ready for client generators. Supabase generates TypeScript types and in-dashboard API docs instead.\"},{\"capability\":\"Full-text search\",\"values\":[\"native\",\"native\",\"addon\",\"addon\"],\"note\":\"Supabase uses Postgres full-text search. Firebase and Appwrite point to Algolia-style extensions or integrations.\"},{\"capability\":\"Dedicated search engine: typo tolerance, facets, highlighting\",\"values\":[\"native\",\"addon\",\"addon\",\"addon\"],\"note\":\"Anythink runs Meilisearch for every project, indexed as your records change.\"},{\"capability\":\"Geo search: radius, bounding box, sort by distance\",\"values\":[\"native\",\"addon\",\"addon\",\"unknown\"],\"note\":\"Supabase needs the PostGIS extension; Firestore needs geohash libraries you implement.\"},{\"capability\":\"Visual workflow engine\",\"values\":[\"native\",\"none\",\"none\",\"none\"]}
14,{\"capability\":\"Push notifications\",\"values\":[\"native\",\"addon\",\"native\",\"native\"]},{\"capability\":\"Subscriptions and payments\",\"values\":[\"native\",\"addon\",\"addon\",\"addon\"]},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"none\",\"addon\",\"none\"],\"note\":\"Firebase relies on the RevenueCat extension; Extensions shut down on 31 March 2027.\"},{\"capability\":\"Dashboards and charts on app data\",\"values\":[\"native\",\"none\",\"none\",\"none\"]},{\"capability\":\"MCP server for AI assistants\",\"values\":[\"native\",\"native\",\"native\",\"native\"]},{\"capability\":\"Realtime subscriptions\",\"values\":[\"none\",\"native\",\"native\",\"native\"]},{\"capability\":\"Self-hosting\",\"values\":[\"none\",\"native\",\"none\",\"native\"],\"note\":\"Anythink is a managed service. Enterprise customers can have a dedicated stack.\"}],\"footnote\":\"Based on each vendor's public documentation, checked 28 September and 3 October 2026. An add-on means an extension, a partner integration or a recipe you build and run yourself.\"}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a product people pay for.\",\"steps\":[{\"title\":\"Model your data\",\"prose\":\"Create entities and fields in the dashboard, the CLI or by asking Claude. Every entity gets a REST API straight away, public or private as you choose.\"},{\"title\":\"Decide who sees what\",\"prose\":\"Set roles and permissions, then use row-level security so each user, or each group of users, only reaches their own records.\"},{\"title\":\"Automate it\",\"prose\":\"Add workflows that run when data changes, on a schedule or from an API call. Send email and push, call other services, or run a script.\"},{\"title\":\"Charge for it\",\"prose\":\"Create plans with trials and offers, take payment with Stripe or Apple in-app purchases, and check entitlements from your app.\"},{\"title\":\"Run it\",\"prose\":\"Watch it from the operations dashboard: charts, materialised views and grid, kanban, calendar and map views over the same data.\"}]}}}]}}],\"$L1e\"]\n1f:I[41937,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/0376t9sp49t43.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\"],\"default\"]\n20:I[22016,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"\"]\n"])</script>
14<script>self.__next_f.push([1,"1e:[\"$\",\"div\",null,{\"className\":\"min-h-[70vh] flex flex-col items-center justify-center px-6 py-16 bg-[#F8F7F4] dark:bg-[#111] grid-bg\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center max-w-2xl w-full\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[\"$\",\"svg\",null,{\"className\":\"w-24 h-24 mx-auto text-zinc-300 dark:text-zinc-700\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":1.5,\"d\":\"M9.172 16.172a4 4 0 015.656 0M9 12h6m-6-4h6m2 5.291A7.962 7.962 0 0112 15c-2.34 0-4.47-.881-6.08-2.33M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"}]}]}],[\"$\",\"h1\",null,{\"className\":\"text-6xl font-bold text-zinc-900 dark:text-white mb-4\",\"children\":\"404\"}],[\"$\",\"h2\",null,{\"className\":\"text-2xl font-semibold text-zinc-700 dark:text-zinc-300 mb-4\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"text-zinc-600 dark:text-zinc-400 mb-8\",\"children\":\"The page you're looking for doesn't exist or may have been moved.\"}],[\"$\",\"div\",null,{\"className\":\"mb-8 max-w-md mx-auto\",\"children\":[\"$\",\"$L1f\",null,{}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap justify-center gap-4 mb-8\",\"children\":[[\"$\",\"$L20\",null,{\"href\":\"/\",\"className\":\"inline-flex items-center gap-2 px-6 py-3 bg-orange-500 text-white font-medium hover:bg-orange-600 transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"w-5 h-5\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":2,\"d\":\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\"}]}],\"Back to Home\"]}],[\"$\",\"$L20\",null,{\"href\":\"/contact\",\"className\":\"inline-flex items-center gap-2 px-6 py-3 border border-zinc-300 dark:border-zinc-700 text-zinc-700 dark:text-zinc-300 font-medium hover:border-orange-500 hover:text-orange-500 transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"w-5 h-5\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":2,\"d\":\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"}]}],\"Contact Us\"]}]]}],[\"$\",\"div\",null,{\"className\":\"text-sm text-zinc-500 dark:text-zinc-400\",\"children\":[[\"$\",\"p\",null,{\"className\":\"mb-2\",\"children\":\"You might also want to check out:\"}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap justify-center gap-4\",\"children\":[[\"$\",\"$L20\",null,{\"href\":\"/pricing\",\"className\":\"text-orange-500 hover:underline\",\"children\":\"Pricing\"}],[\"$\",\"$L20\",null,{\"href\":\"/products\",\"className\":\"text-orange-500 hover:underline\",\"children\":\"Products\"}],[\"$\",\"$L20\",null,{\"href\":\"/articles\",\"className\":\"text-orange-500 hover:underline\",\"children\":\"Blog\"}],[\"$\",\"$L20\",null,{\"href\":\"https://docs.anythink.cloud/\",\"className\":\"text-orange-500 hover:underline\",\"children\":\"Documentation\"}]]}]]}]]}]}]\n1a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script>
14<script>self.__next_f.push([1,"21:T6b9,{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What sign-in methods does Anythink support?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Email and password (with email confirmation and password reset), magic links, native Apple, Google and LinkedIn sign-in for mobile apps, and web OAuth sign-in for the providers you enable. Every method ends with the same JWT access and refresh tokens.\"}},{\"@type\":\"Question\",\"name\":\"How do I add Sign in with Apple to an iOS app?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Turn on Apple under Settings ⺠Social Sign-In in the Anythink dashboard and list your app's client IDs. Your app sends the identity token and user identifier from Sign in with Apple to POST /auth/v1/native/apple. Anythink verifies the token against Apple's published keys, checks the subject matches, and returns a session. Apple only shares the user's name on the first sign-in, so send given_name and family_name on that call.\"}},{\"@type\":\"Question\",\"name\":\"How do access and refresh tokens work?\",\"acceptedA
14nswer\":{\"@type\":\"Answer\",\"text\":\"Sign-in returns a JWT access token for API calls and a refresh token. Send the access token as a Bearer token. When it expires, POST the refresh token to /auth/v1/refresh for a new pair. Logging out revokes the refresh token.\"}},{\"@type\":\"Question\",\"name\":\"Can I control what each signed-in user can see?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. Every user has a role, and roles carry permissions per entity, such as orders:read. Row-level security then limits which records a user reaches. Users can also belong to groups, so team members can read their team's records while staff-only records stay private.\"}}]}15:[\"$\",\"main\",null,{\"children\":[[[\"$\",\"script\",\"0\",{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebPage\\\",\\\"@id\\\":\\\"https://anythink.cloud/products/authentication#webpage\\\",\\\"name\\\":\\\"Authentication\\\",\\\"description\\\":\\\"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\\\",\\\"url\\\":\\\"https://anythink.cloud/products/authentication\\\",\\\"inLanguage\\\":\\\"en-GB\\\",\\\"isPartOf\\\":{\\\"@id\\\":\\\"https://anythink.cloud/#website\\\"},\\\"publisher\\\":{\\\"@id\\\":\\\"https://anythink.cloud/#organization\\\"}}\"}}],[\"$\",\"script\",\"1\",{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Home\\\",\\\"item\\\":\\\"https://anythink.cloud/\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"Products\\\",\\\"item\\\":\\\"https://anythink.cloud/products\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"Authentication\\\",\\\"item\\\":\\\"https://anythink.cloud/products/authentication\\\"}]}\"}}],[\"$\",\"script\",\"2\",{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"@id\\\":\\\"https://anythink.cloud/products/authentication#software\\\",\\\"name\\\":\\\"Anythink Authentication\\\",\\\"description\\\":\\\"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\\\",\\\"url\\\":\\\"https://anythink.cloud/products/authentication\\\",\\\"applicationCategory\\\":\\\"DeveloperApplication\\\",\\\"operatingSystem\\\":\\\"Web\\\",\\\"installUrl\\\":\\\"https://my.anythink.cloud/auth/register\\\",\\\"softwareHelp\\\":{\\\"@type\\\":\\\"WebPage\\\",\\\"url\\\":\\\"https://docs.anythink.cloud\\\"},\\\"brand\\\":{\\\"@id\\\":\\\"https://anythink.cloud/#organization\\\"},\\\"publisher\\\":{\\\"@id\\\":\\\"https://anythink.cloud/#organization\\\"},\\\"keywords\\\":[\\\"authentication API\\\",\\\"Sign in with Apple backend\\\",\\\"Google sign-in backend\\\",\\\"LinkedIn sign-in API\\\",\\\"magic link authentication\\\",\\\"JWT refresh tokens\\\",\\\"OAuth PKCE\\\",\\\"Auth0 alternative\\\"]}\"}}],[\"$\",\"script\",\"3\",{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$21\"}}]],\"$L22\",\"$L23\",false,\"$L24\",\"$L25\",\"$L26\"]}]\n"])</script>
14<script>self.__next_f.push([1,"27:I[62138,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n28:I[94998,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n32:I[91280,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n33:I[46501,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n34:I[27201,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\"],\"IconMark\"]\n22:[\"$\",\"$L1d\",null,{\"ssrData\":{\"product\":[{\"id\":1,\"slug\":\"authentication\",\"type\":\"product\",\"title\":\"Authentication\",\"status\":\"published\",\"hero\":{\"headline\":\"Sign-in for web and mobile,/verified on the server\",\"description\":\"\u003cp\u003eAdd email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\u003c/p\u003e\",\"featurePills\":[\"Email and password\",\"Magic links\",\"Native Apple / Google / LinkedIn\",\"Web OAuth with PKCE\",\"JWT and refresh tokens\",\"Provider list per project\"],\"image\":{\"url\":\"/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\",\"alt\":\"Authentication\"},\"images\":[{\"id\":\"71\",\"url\":\"/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\",\"alt\":\"Authentication\",\"original_file_name\":\"Copy of User Name (1).png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/ded73b0819e74c65886012108cee1456.mp4\",\"alt\":\"Authentication\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/authentication\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Sign-in that ships/with your backend\",\"description\":\"\u003cp\u003eEmail and password, magic links, native and web social sign-in, and JWT sessions, all on the same users your data model already links to.\u003c/p\u003e\",\"cards\":[{\"id\":20,\"type\":\"feature\",\"title\":\"Email, password and magic links\",\"description\":\"\u003cp\u003eRegister users, confirm their email, reset passwords and send one-time magic links from the built-in auth endpoints. Password sign-in waits until the email address is confirmed.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/53fd07ad0bdc4e91ab10bae3fed6b4af.png\",\"alt\":\"Email, password and magic links\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]}
14,{\"id\":21,\"type\":\"feature\",\"title\":\"Native Apple, Google and LinkedIn sign-in\",\"description\":\"\u003cp\u003eYour iOS or Android app sends Anythink the provider's identity token. Anythink checks it against the provider's published keys and cross-checks the subject ID before it signs anyone in. Native sign-in needs your app's client IDs, not a client secret.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/4c0513737e7f4e14878113d6c09389a9.png\",\"alt\":\"Native Apple, Google and LinkedIn sign-in\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":22,\"type\":\"feature\",\"title\":\"Web OAuth with PKCE\",\"description\":\"\u003cp\u003eFor browser sign-in, Anythink runs the authorise and callback flow for each provider you enable, using PKCE where the provider supports it, and records UTM and referrer details when a user signs up.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/be8f04543cfb41d7a126876abee72c7c.mp4\",\"alt\":\"Web OAuth with PKCE\"},\"pageIds\":[1]},{\"id\":69,\"type\":\"feature\",\"title\":\"JWT sessions with refresh\",\"description\":\"\u003cp\u003eSign-in returns a JWT access token and a refresh token. Refreshing issues a new pair, logout revokes the refresh token, and transfer tokens hand a session from one app or device to another.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":79,\"type\":\"feature\",\"title\":\"Users are part of your data model\",\"description\":\"\u003cp\u003eEvery signed-in user is a record you can link to any entity with a user field, then use in roles, row-level security and workflows.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/fee6ede0ad8c4dc4a3e6096c80705ace.png\",\"alt\":\"Users are part of your data model\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":191,\"type\":\"feature\",\"title\":\"One provider list per project\",\"description\":\"\u003cp\u003e\u003ccode\u003eGET /auth/v1/providers\u003c/code\u003e returns the sign-in methods this project has configured, so your login page shows only the buttons that will work.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[1]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:0:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"authentication API, Sign in with Apple backend, Google sign-in backend, LinkedIn sign-in API, magic link authentication, JWT refresh tokens, OAuth PKCE, Auth0 alternative\",\"seo_focus_keyword\":\"Authentication API with Apple and Google sign-in\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: let people sign in with Google.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Add the Google credentials once per project.\",\"example\":\"Settings â Social Sign-In â Google â Configure\\nWeb Client ID: paste it from Google Cloud\\nClient secret: paste it from Google Cloud\\niOS Client IDs: add them for native apps\\nSave\\n\\nâ Google is listed by /auth/v1/providers\",\"clip\":\"dashboard/authentication/google-sign-in\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The client ID and secret are prompted for, not passed as flags, so they stay out of your shell history.\",\"example\":\"anythink oauth google configure\\nanythink oauth google status\\nanythink fetch /auth/v1/providers\",\"result\":[\"Google client ID and secret saved to the project\",\"Status shows Google as configured\",\"/auth/v1/providers lists Google\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Keep the secret out of chat: set it in the dashboard or CLI, then ask the assistant to check the setup.\",\"example\":\"âIs Google sign-in configured on this project? Which sign-in buttons should my login page show?â\",\"result\":[\"Ran oauth google status: Google is configured\",\"Fetched /auth/v1/providers: Google is listed\",\"Your login page should show a Google button\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why it holds up\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Native sign-in\",\"t
14itle\":\"Identity tokens are verified, not trusted\",\"body\":\"Apple, Google and LinkedIn tokens are checked against each provider's published keys, and the token's subject must match the user identifier your app sent. A forged or swapped token is rejected.\",\"links\":[{\"label\":\"Social sign-in guide\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}]},{\"eyebrow\":\"Stable identity\",\"title\":\"The same user, even when the email changes\",\"body\":\"Anythink links each provider's stable subject ID to the user, so a returning user is matched behind Apple's private email relay or after changing their email address.\",\"links\":[{\"label\":\"Users and teams\",\"href\":\"https://docs.anythink.cloud/guides/authentication/users-and-teams\"}]},{\"eyebrow\":\"One session\",\"title\":\"One JWT for your app, the API and MCP\",\"body\":\"The token your app receives works on every entity endpoint, and the Anythink MCP server authenticates with the same user JWT, so permissions apply the same way to people and assistants.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"}]},{\"eyebrow\":\"Access\",\"title\":\"Sign-in feeds roles and row-level security\",\"body\":\"Every user has a role with per-entity permissions, and row-level security limits which records they reach, including group-scoped reads for teams.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"The REST calls behind each sign-in method\",\"tabs\":[{\"label\":\"Email and password\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/token\\nContent-Type: application/json\\n\\n{\\n \\\"email\\\": \\\"[email protected]\\\",\\n \\\"password\\\": \\\"\u003cpassword\u003e\\\"\\n}\"},{\"label\":\"Magic link\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/[email protected]\"},{\"label\":\"Native Apple\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/native/apple\\nContent-Type: application/json\\n\\n{\\n \\\"identity_token\\\": \\\"\u003cApple identityToken\u003e\\\",\\n \\\"user_identifier\\\": \\\"\u003cApple user ID\u003e\\\",\\n \\\"given_name\\\": \\\"Alice\\\",\\n \\\"family_name\\\": \\\"Smith\\\"\\n}\"},{\"label\":\"Refresh\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/refresh\\nContent-Type: application/json\\n\\n{\\n \\\"token\\\": \\\"\u003crefresh token\u003e\\\"\\n}\"},{\"label\":\"Provider list\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/auth/v1/providers\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a signed-in user\",\"steps\":[{\"title\":\"Pick your sign-in methods\",\"prose\":\"Email and password and magic links use the built-in auth endpoints. Turn on Apple, Google or LinkedIn under Settings ⺠Social Sign-In with your client IDs.\"},{\"title\":\"Show the right buttons\",\"prose\":\"Your login page calls /auth/v1/providers and renders only the methods this project has configured.\"},{\"title\":\"Sign the user in\",\"prose\":\"Web apps run the OAuth redirect, with PKCE where the provider supports it. Mobile apps send the provider's identity token to /auth/v1/native/{provider}, which verifies it and creates the user on first sign-in.\"},{\"title\":\"Use the session\",\"prose\":\"Send the access token as a Bearer token on each API call and refresh it when it expires. In React, the open-source SDK's AuthProvider and useAuth handle this for you.\"},{\"title\":\"Decide what they can reach\",\"prose\":\"Give the user a role, link records to them, and let row-level security filter what they see.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Google sign-in, start to finish\",\"body\":\"Create the credentials in Google Cloud, add them to the project and people can sign in with Google.\",\"link\":{\"label\":\"Read the social sign-in guide\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}}}}},{\"id\":7,\"slug\":\"workflow_automation\",\"type\":\"product\",\"title\":\"Workflows\",\"status\":\"published\",\"hero\":{\"headline\":\"Visual workflows,/inside your backend\",\"description\":\"\u003cp\u003eAutomation that runs inside every project. Trigger on a record change, a schedule or an API call, then send email and push, call other services or run a script.\u003c/p\u003e\",\"featurePills\":[\"Event\",\"Timed\",\"Manual and Api triggers\",\"Multiple triggers per workflow\",\"Data\",\"email\",\"push and integration steps\",\"Inline JavaScript\"],\"image\":{\"url\":\"/cdn-assets/20804318/effe9b3605ec4f84ac5172b5dad
14d5bda.png\",\"alt\":\"Workflows\"},\"images\":[{\"id\":\"65\",\"url\":\"/cdn-assets/20804318/effe9b3605ec4f84ac5172b5dadd5bda.png\",\"alt\":\"Workflows\",\"original_file_name\":\"workflow (2).png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/8c15743e888a473c9f3afe40ea623205.mp4\",\"alt\":\"Workflows\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A workflow engine,/not a separate tool to wire up\",\"description\":\"\u003cp\u003eTriggers, steps and conditional branching, running inside your backend on the same data model you already defined\u003c/p\u003e\",\"cards\":[{\"id\":29,\"type\":\"feature\",\"title\":\"Every step type you need, built in\",\"description\":\"\u003cp\u003eRead, create, update, upsert and delete data; call an external API; run inline JavaScript; send a command; branch on a condition; send an email or push notification; run an integration step; or handle a file â all as workflow steps, no separate service to deploy.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/597fdd4675604b70923d3a1e4163e4fc.png\",\"alt\":\"Every step type you need, built in\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/3812e95409fd4b288aea790adcb5d37f.mp4\",\"alt\":\"Every step type you need, built in\"},\"pageIds\":[7]},{\"id\":30,\"type\":\"feature\",\"title\":\"Execution history, per job\",\"description\":\"\u003cp\u003eEvery run is a job with its own log. Inspect what each step did, what it returned, and where a run stopped, from the dashboard or with \u003ccode\u003eanythink workflows jobs\u003c/code\u003e from the CLI.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/01046477205048859794738cb311c94b.png\",\"alt\":\"Execution history, per job\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/e3bf350730e345f3b9d8733f00765658.mp4\",\"alt\":\"Execution history, per job\"},\"pageIds\":[7]},{\"id\":63,\"type\":\"feature\",\"title\":\"Four trigger types, mixed freely\",\"description\":\"\u003cp\u003eEvent (on a record created, updated or deleted), Timed (cron), Manual (on demand) and Api (a custom HTTP route). A single workflow can carry more than one trigger, so the same steps run whether a record changed or someone kicked it off by hand.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/e54df322a78a47dfa60b169525b118be.png\",\"alt\":\"Four trigger types, mixed freely\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/3812e95409fd4b288aea790adcb5d37f.mp4\",\"alt\":\"Four trigger types, mixed freely\"},\"pageIds\":[7]},{\"id\":64,\"type\":\"feature\",\"title\":\"Inline JavaScript when you need it\",\"description\":\"\u003cp\u003eA Run Script step executes JavaScript inside the workflow, with access to trigger data and every previous step's output. Use it for calculations and transformations that don't fit a pre-built action.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/53e8529f370641fbb2965c6ca0d17612.png\",\"alt\":\"Inline JavaScript when you need it\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/a4463e81a5304f1197b95d9b1ad1d98d.mp4\",\"alt\":\"Inline JavaScript when you need it\"},\"pageIds\":[7]},{\"id\":65,\"type\":\"feature\",\"title\":\"Branch on success or failure\",\"description\":\"\u003cp\u003eEach step can route to a different next step depending on whether it succeeded or failed. Combine that with a Condition step reading your trigger data, and a workflow can take different paths without any code outside the step parameters.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/9ff4d3a099f34cffb9685dfafb4096b3.png\",\"alt\":\"Branch on success or failure\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/a4463e81a5304f1197b95d9b1ad1d98d.mp4\",\"alt\":\"Branch on success or failure\"},\"pageIds\":[7]},{\"id\":66,\"type\":\"feature\",\"title\":\"Call an API, or run an integration\",\"description\":\"\u003cp\u003eA Call an API step reaches any external HTTP endpoint. An Integration step drives a connected provider directly â Slack, GitHub, Google Calendar, LinkedIn, Twitter/X, Claude or Grok â without you handling that provider's auth or request shape.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/a2fd0fba45974cc6a4418baae17d8f6d.png\",\"alt\":\"Call an API, or run an integration\"},\"video_demo\":\"$undefined\",\"pageIds\":[7]},{\"id\":67,\"type\":\"feature\",\"title\":\"Full CRUD on your data\",\"description\":\"\u003cp\u003eRead, Create, Update, Upsert and Delete Data steps cover every write your backend needs, across any entity, with the same row-level security and permissions that apply everywhere else.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/019c29c37a3a4b7197191fc99fdf3264.png\",\"alt\":\"Full CRUD on your data\"},\"video_demo\":\"$undefined\",\"pageIds\":[7]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"What teams build with it\",\"description\":\"\u003cp\u003eWhether you're a solo foun
14der or running a team, these are the shapes most workflows take\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":true,\"title\":\"Automation in Action\",\"description\":\"\u003cp\u003eReal workflows, built from real trigger and step types\u003c/p\u003e\",\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:1:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":18,\"slug\":\"workflows\",\"title\":\"How workflows work\"},\"seo_keywords\":\"workflow engine, event-driven automation, cron scheduled workflows, business logic without a separate service\",\"seo_focus_keyword\":\"Visual workflow automation for your backend\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: email a customer when their order is paid.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Build it on a canvas: a trigger, a filter and one step.\",\"example\":\"Settings â Email Templates â Create New Template: order_paid\\nWorkflows â New Workflow\\nName: Order paid email â Create Workflow\\nWorkflow Settings â Add trigger\\nTrigger: Event, EntityUpdated, orders\\nFilter: status changed to paid\\nAdd Step â Send an email\\nTo Email Address: {{ $anythink.trigger.data.customer_email }}\\nTemplate: order_paid\\nSave Workflow â enable it\\n\\nâ every order that changes to paid sends the email\",\"clip\":\"dashboard/workflows/build-workflow\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Repeatable and reviewable, so a workflow can live in your repo and go into every project.\",\"example\":\"anythink workflows create order-paid-email --trigger Event \\\\\\n --entity orders --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"op\\\":\\\"changed_to\\\",\\\"value\\\":\\\"paid\\\"}' --enabled\\n# 31 is the id printed by workflows create\\nanythink workflows step-add 31 send_receipt --action SendAnEmail --start --enabled \\\\\\n --params '{\\\"to\\\":\\\"{{ $anythink.trigger.data.customer_email }}\\\",\\\"template_type\\\":\\\"order_paid\\\"}'\\nanythink data update orders 42 --data '{\\\"status\\\":\\\"paid\\\"}'\\nanythink workflows jobs 31\",\"result\":[\"Workflow created, triggered when an order's status changes to paid\",\"Send an email step added as the start step\",\"Updating order 42 starts a job\",\"The job appears in the workflow's history\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe what should happen. It builds the workflow and tells you how to test it.\",\"example\":\"âWhen an order's status changes to paid, email the customer using the order_paid template.â\",\"result\":[\"Workflow created with an Event trigger on orders\",\"Filter: status changed to paid\",\"Send an email step addressed to the order's customer_email\",\"Enabled; check Job History after the next paid order\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Real commands against a real workflow\",\"tabs\":[{\"label\":\"Create the workflow\",\"language\":\"bash\",\"code\":\"anythink workflows create \\\\\\n --name \\\"Overdue invoice reminder\\\" \\\\\\n --trigger Event \\\\\\n --entity invoices \\\\\\n --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"o
14perator\\\":\\\"changed_to\\\",\\\"value\\\":\\\"overdue\\\"}' \\\\\\n --enabled\"},{\"label\":\"Add a scheduled trigger\",\"language\":\"bash\",\"code\":\"anythink workflows trigger 71 --payload '{\\\"manual\\\":true}'\\n\\n# Or let it run on a schedule â add a second, Timed trigger\\n# to the same workflow from the dashboard: 0 9 * * 1-5 (weekdays, 9am)\"},{\"label\":\"Add a Run Script step\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 71 calculate-total \\\\\\n --name \\\"Calculate total\\\" \\\\\\n --action RunScript \\\\\\n --params '{\\n \\\"script\\\": \\\"const orders = $anythink.steps.fetch_orders.data; const total = orders.reduce((sum, o) =\u003e sum + o.total, 0); return { total_revenue: total };\\\"\\n }' \\\\\\n --enabled\"}]},\"narrative\":{\"heading\":\"What teams automate\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Order fulfilment and notifications\",\"prose\":\"Every new paid order triggers fulfilment, updates inventory, notifies the team on Slack through an Integration step, and emails the customer â all in one workflow, reading and writing the same entities your API and dashboard use.\"},{\"title\":\"Scheduled reports and data hygiene\",\"prose\":\"Run daily summaries, weekly digests and monthly cleanup jobs on a cron schedule. Read data, process it in a Run Script step, then send it wherever it needs to go â no separate scheduler to run and monitor.\"},{\"title\":\"Status-change pipelines\",\"prose\":\"An Event trigger with a changed_to filter fires only on the transition you care about â a ticket moving to \\\"resolved\\\", a payment moving to \\\"failed\\\" â so a workflow doesn't run on every unrelated field update.\"}]}}},{\"id\":8,\"slug\":\"instant_apis\",\"type\":\"product\",\"title\":\"Instant APIs\",\"status\":\"published\",\"hero\":{\"headline\":\"A REST API for every entity,/live the moment you save\",\"description\":\"\u003cp\u003eEvery entity you create gets a REST API straight away, with filtering, sorting and pagination built in.\u003c/p\u003e\u003cp\u003eMake each entity public or private. Row-level security decides what each caller sees, every project is rate-limited, and your OpenAPI docs write themselves.\u003c/p\u003e\",\"featurePills\":[\"REST for every entity\",\"Public or private per entity\",\"Rate-limited per project\",\"OpenAPI docs per project\",\"Row-level security\"],\"image\":{\"url\":\"/cdn-assets/20804318/cf888a2d41ea4535b2c1bd2dd02dd30b.png\",\"alt\":\"Instant APIs\"},\"images\":[{\"id\":\"64\",\"url\":\"/cdn-assets/20804318/cf888a2d41ea4535b2c1bd2dd02dd30b.png\",\"alt\":\"Instant APIs\",\"original_file_name\":\"api.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/44974e69babe4f7698cee3129345bf6b.mp4\",\"alt\":\"Instant APIs\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/rest-api\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A REST API you don't write,/and don't have to babysit\",\"description\":\"\u003cp\u003eEvery entity gets the same REST surface, with permissions, row-level security and rate limiting applied to every call.\u003c/p\u003e\",\"cards\":[{\"id\":17,\"type\":\"feature\",\"title\":\"A full REST API for every entity\",\"description\":\"\u003cp\u003eList, get, create, bulk create, update, delete and bulk delete for every entity you create. No controller code and no publish step.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/0a93ea522ff74c4db30335ef91c01221.png\",\"alt\":\"A full REST API for every entity\"},\"video_demo\":{\"url\":\"/cdn-assets/20804318/3a3f4bb75b4e4fdbab22b23b0e3ff77c.mp4\",\"alt\":\"A full REST API for every entity\"},\"pageIds\":[8]},{\"id\":18,\"type\":\"feature\",\"title\":\"Filter, sort and paginate\",\"description\":\"\u003cp\u003eFilter on any field with one query parameter per field and operators such as \u003ccode\u003eGTE:\u003c/code\u003e, \u003ccode\u003eLT:\u003c/code\u003e, \u003ccode\u003eIN:\u003c/code\u003e and \u003ccode\u003eC:\u003c/code\u003e for contains. Sort by any field and page through up to 1,000 records per request.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/3a3f4bb75b4e4fdbab22b23b0e3ff77c.mp4\",\"alt\":\"Filter, sort and paginate\"},\"pageIds\":[8]}
14,{\"id\":217,\"type\":\"feature\",\"title\":\"Public or private, per entity\",\"description\":\"\u003cp\u003eExpose an entity's chosen fields on a public, read-only endpoint for your website or app, and keep everything else behind authentication with roles and row-level security.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]},{\"id\":218,\"type\":\"feature\",\"title\":\"Rate-limited and documented\",\"description\":\"\u003cp\u003eEvery project has a per-minute rate limit, with \u003ccode\u003eX-RateLimit\u003c/code\u003e headers on each response and a 429 when it's exceeded. Each project also gets an OpenAPI description of its API, and \u003ccode\u003eanythink api\u003c/code\u003e lists every endpoint.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]},{\"id\":219,\"type\":\"feature\",\"title\":\"Row-level security on every call\",\"description\":\"\u003cp\u003eEach call is checked against the caller's role permissions, and row-level security filters the records it returns. Grant records to users or whole groups.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]},{\"id\":220,\"type\":\"feature\",\"title\":\"API keys for servers and scripts\",\"description\":\"\u003cp\u003eCreate API keys with named permissions for CI, scripts and integrations, and send them in the \u003ccode\u003eX-Api-Key\u003c/code\u003e header. The CLI checks permission names before it creates a key.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[8]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:2:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":7,\"slug\":\"dynamic-api-overview\",\"title\":\"Call the instant REST API\"},\"seo_keywords\":\"instant REST API, auto-generated REST API, backend API without code, OpenAPI documentation, public read-only API, API rate limiting, API keys, headless backend\",\"seo_focus_keyword\":\"Instant REST API from your database\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: make a products entity public, with only the name and price exposed.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Choose what's public entity by entity, field by field.\",\"example\":\"Settings â Data Model â products â Edit\\nPublic: on â Update Entity\\nOpen the name field â Searchable, Publicly Searchable\\nOpen the price field â Searchable, Publicly Searchable\\n\\nâ /entities/products/public/items is live\",\"clip\":\"dashboard/rest-api/make-entity-public\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"List the endpoints, then call one with your project's credentials.\",\"example\":\"anythink entities update products --public true\\nanythink fields update products name --searchable --public\\nanythink fields update products price --searchable --public\\nanythink api\\nanythink fetch \\\"/entities/products/items?page=1\u0026pageSize=20\\\"\",\"result\":[\"products is publicly queryable\",\"Only name and price are public fields\",\"api lists every endpoint the entity n
14ow has\",\"fetch returns the first page of products\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask in plain text. It runs the same commands and shows you what it exposed.\",\"example\":\"âMake the products entity public with only name and price exposed, list the endpoints it now has, and show me the first page of products.â\",\"result\":[\"products set to public\",\"name and price marked publicly searchable\",\"Listed the entity's endpoints\",\"Returned the first page of products\"]}]}},{\"type\":\"proofs\",\"heading\":\"What every endpoint already does\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Always current\",\"title\":\"Nothing to regenerate or redeploy\",\"body\":\"Endpoints come from your data model as it is now, so a field added in the dashboard is in the next response.\",\"links\":[{\"label\":\"Visual database designer\",\"href\":\"/products/visual-database-designer\"}]},{\"eyebrow\":\"Access\",\"title\":\"Permissions and row-level security on every request\",\"body\":\"Each call is checked against the caller's role, and row-level security filters the records it returns, including group-scoped reads for teams.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}]},{\"eyebrow\":\"Search\",\"title\":\"Full-text search on the same entities\",\"body\":\"Fields you mark searchable are indexed as records change, and authenticated search applies the same row-level security as the entity API.\",\"links\":[{\"label\":\"Search\",\"href\":\"/products/powerful-search-engine\"}]},{\"eyebrow\":\"Automation\",\"title\":\"Every write can start a workflow\",\"body\":\"Creating, updating or deleting a record through the API can trigger a workflow that sends email or push, calls another API or runs a script.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"APIs ready the moment you create an entity\",\"tabs\":[{\"label\":\"List and paginate\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/products/items?page=1\u0026pageSize=20\u0026sortBy=price\u0026sortDirection=asc\\nAuthorization: Bearer \u003caccess token\u003e\\n\\n{\\n \\\"items\\\": [\\n { \\\"id\\\": 1, \\\"name\\\": \\\"Starter\\\", \\\"price\\\": 29 },\\n { \\\"id\\\": 2, \\\"name\\\": \\\"Pro\\\", \\\"price\\\": 99 }\\n ],\\n \\\"page\\\": 1,\\n \\\"page_size\\\": 20,\\n \\\"total_items\\\": 2,\\n \\\"total_pages\\\": 1,\\n \\\"has_next_page\\\": false,\\n \\\"has_previous_page\\\": false,\\n \\\"retrieval_time\\\": 8\\n}\"},{\"label\":\"Filter\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/orders/items?status=paid\u0026total=GTE:50\u0026page=1\u0026pageSize=25\\nAuthorization: Bearer \u003caccess token\u003e\"},{\"label\":\"Create\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/entities/orders/items\\nX-Api-Key: \u003capi key\u003e\\nContent-Type: application/json\\n\\n{\\n \\\"total\\\": 149.99,\\n \\\"status\\\": \\\"pending\\\"\\n}\"},{\"label\":\"Public read\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/products/public/items?page=1\u0026pageSize=20\"},{\"label\":\"From the CLI\",\"language\":\"bash\",\"code\":\"anythink api\\nanythink fetch \\\"/entities/orders/items?status=paid\u0026page=1\u0026pageSize=25\\\"\\nanythink data create orders --data '{\\\"total\\\":149.99,\\\"status\\\":\\\"pending\\\"}'\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From a data model to a working API\",\"steps\":[{\"title\":\"Model an entity\",\"prose\":\"Create it in the dashboard, with the CLI or by asking Claude. Its endpoints exist as soon as it's saved.\"},{\"title\":\"Call it\",\"prose\":\"Send a user's JWT or an API key to /org/{org_id}/entities/{entity}/items. Filter, sort and paginate with query parameters.\"},{\"title\":\"Decide who can reach it\",\"prose\":\"Give roles read, create, update and delete permissions per entity, and turn on row-level security so each user only gets their own records.\"},{\"title\":\"Open it up where it helps\",\"prose\":\"Mark an entity and s
14ome of its fields public to serve them read-only from /public/items, with no credentials in your website's code.\"},{\"title\":\"Watch the headers\",\"prose\":\"Every response carries X-RateLimit headers for your project's per-minute limit. Back off when you get a 429.\"}],\"aside\":{\"eyebrow\":\"See it working\",\"title\":\"A new entity is already an API\",\"body\":\"Create an entity in the dashboard and its REST endpoints are live straight away.\",\"clip\":\"dashboard/database/create-entity\",\"link\":{\"label\":\"Read the REST API guide\",\"href\":\"https://docs.anythink.cloud/guides/rest-api/rest-api\"}}}}},{\"id\":10,\"slug\":\"visual_database_designer\",\"type\":\"product\",\"title\":\"Visual Database Designer\",\"status\":\"published\",\"hero\":{\"headline\":\"Design your data,/get the API\",\"description\":\"\u003cp\u003eModel entities, fields and relationships in the Anythink dashboard, the CLI or with Claude, and each entity gets a REST API the moment you save it.\u003c/p\u003e\",\"featurePills\":[\"18 field types\",\"Relationships incl. many-to-many\",\"Geo / file / secret / JSON fields\",\"REST API on save\",\"CSV import with saved mappings\",\"Materialised views\"],\"image\":{\"url\":\"/cdn-assets/20804318/d01905f22fab44b6aa5d20ad9695eca0.png\",\"alt\":\"Visual Database Designer\"},\"images\":[{\"id\":\"69\",\"url\":\"/cdn-assets/20804318/d01905f22fab44b6aa5d20ad9695eca0.png\",\"alt\":\"Visual Database Designer\",\"original_file_name\":\"database designer.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/36eabc5e55b3432caf9b4e29ac871d92.mp4\",\"alt\":\"Visual Database Designer\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Model it once,/use it everywhere\",\"description\":\"\u003cp\u003eEntities, 18 field types, relationships, CSV import and materialised views, editable in the dashboard, the CLI or through Claude.\u003c/p\u003e\",\"cards\":[{\"id\":14,\"type\":\"feature\",\"title\":\"18 field types\",\"description\":\"\u003cp\u003eText, rich text, selects, numbers, checkboxes, dates and timestamps, plus geo points, files, users, JSON and dynamic references. Each field's display type can change without changing how it's stored, so a text value can be an input, a select or a radio group.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/bce1d597371d43beb0e1258ff85864a1.png\",\"alt\":\"18 field types\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":15,\"type\":\"feature\",\"title\":\"Relationships between entities\",\"description\":\"\u003cp\u003eOne-to-one, one-to-many, many-to-one and many-to-many links, plus dynamic references that can point at records in different entities. Choose what happens on delete: cascade, set null, set default or restrict.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/fee6ede0ad8c4dc4a3e6096c80705ace.png\",\"alt\":\"Relationships between entities\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":16,\"type\":\"feature\",\"title\":\"Encrypted secret fields\",\"description\":\"\u003cp\u003eAdd a secret field to any entity and its value is encrypted at rest with AES-256-GCM, the same mechanism that protects integration credentials. Values are masked when read back.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/ac4a24d4e7ba46d885d6759d67aafd5f.png\",\"alt\":\"Encrypted secret fields\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":128,\"type\":\"feature\",\"title\":\"The API is live when you save\",\"description\":\"\u003cp\u003eCreate an entity and its list, get, create, update and delete endpoints exist straight away. Add a field and it's in the next response. There's no publish step and no migration file to write.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/ee22c64a66f34b6d8ca35fa0520004f7.png\",\"alt\":\"The API is live when you save\"},\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":259,\"type\":\"feature\",\"title\":\"CSV import with saved mappings\",\"description\":\"\u003cp\u003eUpload a CSV, map its columns to fields, and save the mapping as a template for the next file with the same layout. Each import runs as a tracked job: pending, processing, completed or failed.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[10]},{\"id\":260,\"type\":\"feature\",\"title\":\"Materialised views\",\"description\":\"\u003cp\u003eJoin an entity with another entity, or with payments and subscriptions data, into one grid of exists, count or value columns with a project-wide total row. Configured in the dashboard, paginated on the server.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[10]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:3:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":10,\"slug\":\"data_modelling\",\"title\":\"Model your data: entities, fields, relations\"},\"seo_keywords\":\"visual database designer, database schema builder, no-code database with REST API, data model builder, CSV import with column mapping, materialised views, encrypted fields, Directus alternative\",\"seo_focus_keyword\":\"Visual database designer with an instant API\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: an orders entity with a total and a status.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for seeing the shape of your data.\",\"example\":\"Settings â Data Model â Add Entity\\nEntity Name: orders â Create Entity\\nAdd Field: total (decimal, required)\\nAdd Field: status (select: pending, paid)\\n\\nâ /entities/orders/items is live\",\"clip\":\"dashboard/database/create-entity\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Repeatable, so the same model can be rebuilt in another project.\",\"example\":\"anythink entities create orders\\nanythink fields add orders total --type decimal --required\\nanythink fields add orders status --type varchar \\\\\\n --display select --options pending,paid\\nanythink data list orders\",\"result\":[\"Entity orders created\",\"Fields: total (decimal, required), status (select)\",\"data list returns an empty page, ready for records\"],\"clip\":\"cli/database/create-entity\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the model. It runs the same commands and shows what changed.\",\"example\":\"âCreate an orders entity with a required decimal total and a status select with the options pending and paid. Then show me the entity and its fields.â\",\"result\":[\"Entity orders created\",\"total: decimal, required\",\"status: select with pending and paid\",\"Showed the entity and its fields\"]}]}},{\"type\":\"proofs\",\"heading\":\"More than a table editor\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Instant API\",\"t
14itle\":\"Save the entity, call the endpoint\",\"body\":\"Every entity gets list, get, create, update and delete endpoints with filtering, sorting and pagination, described in your project's OpenAPI documentation.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"REST API guide\",\"href\":\"https://docs.anythink.cloud/guides/rest-api/rest-api\"}]},{\"eyebrow\":\"Secrets\",\"title\":\"Encrypted fields on any entity\",\"body\":\"A secret field encrypts its value with AES-256-GCM before it's stored, so a customer's own API token can sit on their record without being readable in the database.\",\"links\":[{\"label\":\"Field types reference\",\"href\":\"https://docs.anythink.cloud/reference/field-types\"}]},{\"eyebrow\":\"Location\",\"title\":\"Geo fields work in search and on a map\",\"body\":\"A geo field powers radius and bounding-box search, nearest-first sorting, and the map view in the dashboard, with nothing extra to configure.\",\"links\":[{\"label\":\"Search\",\"href\":\"/products/powerful-search-engine\"},{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"}]},{\"eyebrow\":\"Operations\",\"title\":\"Materialised views join what a single table can't\",\"body\":\"Pivot an entity against another entity or your payments data, with exists, count or value columns and a total row across the whole project.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a working data model\",\"steps\":[{\"title\":\"Create an entity\",\"prose\":\"Name it in the dashboard, with the CLI or by asking Claude. Turn on row-level security or public read access when you create it, or later.\"},{\"title\":\"Add fields\",\"prose\":\"Pick a field type, then mark it required, unique, indexed or searchable, or give it a default value.\"},{\"title\":\"Link entities\",\"prose\":\"Add relationship fields between entities and choose what happens to linked records when one is deleted.\"},{\"title\":\"Load your data\",\"prose\":\"Import a CSV with a saved column mapping, or create records through the API.\"},{\"title\":\"Use it\",\"prose\":\"Call the REST API from your app, search it, and work with it in the dashboard's grid, kanban, calendar and map views.\"}],\"aside\":{\"eyebrow\":\"See it working\",\"title\":\"Build the model by chatting\",\"body\":\"Describe an entity to the dashboard's AI chat and watch it appear in your data model.\",\"clip\":\"dashboard/ai/chat-builds-entity\",\"link\":{\"label\":\"Read the data modelling guide\",\"href\":\"https://docs.anythink.cloud/guides/database/model-your-data\"}}}}},{\"id\":11,\"slug\":\"smart_file_manager\",\"type\":\"product\",\"title\":\"Smart File Manager\",\"status\":\"published\",\"hero\":{\"headline\":\"Upload once,/serve it public or private\",\"description\":\"\u003cp\u003eStore files of any type, serve public ones from a CDN and private ones through short-lived signed links, with size, dimensions and duration recorded for you.\u003c/p\u003e\",\"featurePills\":[\"Streamed uploads\",\"CDN for public files\",\"Signed links for private files\",\"Folders\",\"Automatic media metadata\",\"SHA-256 content hash\"],\"image\":{\"url\":\"/cdn-assets/20804318/f3643b601ec54e4091dab15b7b397e74.png\",\"alt\":\"Smart File Manager\"},\"images\":[{\"id\":\"68\",\"url\":\"/cdn-assets/20804318/f3643b601ec54e4091dab15b7b397e74.png\",\"alt\":\"Smart File Manager\",\"original_file_name\":\"file explorer.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/10d2b90eb6ae475facd434fb834aa52f.mp4\",\"alt\":\"Smart File Manager\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database/files\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"File storage that knows/what you uploaded\",\"description\":\"\u003cp\u003eUpload, organise and serve files from the same project as your data, with access rules and media metadata handled for you.\u003c/p\u003e\",\"cards\":[{\"id\":23,\"type\":\"feature\",\"title\":\"Uploads streamed to storage\",\"description\":\"\u003cp\u003eFiles go from the request straight into object storage without being buffered in memory, so a multi-gigabyte upload doesn't stall the API. Your project's storage quota is checked before the upload starts.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":24,\"type\":\"feature\",\"title\":\"Media metadata, added for you\",\"description\":\"\u003cp\u003eA background worker probes every upload and records duration, width and height, bitrate, frame rate, codecs and audio channels where they apply, plus a SHA-256 hash of the content.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":25,\"type\":\"feature\",\"title\":\"Folders\",\"description\":\"\u003cp\u003eOrganise files into nested folders in the Anythink dashboard or through the API, and upload straight into a folder.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":86,\"type\":\"feature\",\"title\":\"Public or private, per file\",\"description\":\"\u003cp\u003ePublic files are served from a CDN at a stable URL. Private files are only reach
14able through a signed storage link that expires within five minutes, issued to callers with permission to read files.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":248,\"type\":\"feature\",\"title\":\"Files on your records\",\"description\":\"\u003cp\u003eAdd a file field to any entity to attach uploads to records, check uploads against the file types that field accepts, and read the linked files back through the entity API.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]},{\"id\":249,\"type\":\"feature\",\"title\":\"Fetch from a URL in a workflow\",\"description\":\"\u003cp\u003eThe File Handler workflow step downloads a file from a URL, stores it in your project and links it to a record, so imports and integrations can bring their files with them.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[11]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:4:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":14,\"slug\":\"file_management\",\"title\":\"Upload and manage files\"},\"seo_keywords\":\"file storage API, file upload API, CDN file hosting, signed URLs for private files, media metadata extraction, video duration API, file content hash, Firebase Storage alternative\",\"seo_focus_keyword\":\"File storage API with automatic media metadata\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: upload a podcast episode and get its public URL.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Switch Public on, drag the file in, copy the link.\",\"example\":\"Files â Public: on\\nUpload Files â episode-12.mp3\\nCopy public link on the new file\\n\\nâ the CDN URL is on your clipboard\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"files get shows the basics. fetch returns the full record, including cdn_url and duration_seconds.\",\"example\":\"anythink files upload episode-12.mp3 --public\\nanythink files list\\n# 87 is the id that files list shows\\nanythink fetch /files/87\",\"result\":[\"File uploaded and marked public\",\"The record includes cdn_url, the public URL\",\"Duration and hash appear once the file has been probed\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the upload and the details. It runs the same commands.\",\"example\":\"âUpload episode-12.mp3 as a public file, then tell me its duration and CDN URL once it's been probed.â\",\"result\":[\"Uploaded episode-12.mp3 as a public file\",\"Read the file record\",\"Reported the duration and CDN URL\"]}]}},{\"type\":\"proofs\",\"heading\":\"Built for large files\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Scale\",\"title\":\"Downloads never stream through the API\",\"body\":\"A request for a file gets a redirect to a signed storage link, so a large download goes straight from storage to the client instead of through the API.\",\"links\":[{\"label\":\"File management guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}]},{\"eyebrow\":\"Integrity\",\"title\":\"Every file gets a SHA-256 hash\",\"body\":\"The content hash is computed when the file is probed, so you can spot duplicate uploads or check that a file hasn't changed.\",\"links\":[{\"label\":\"File management guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}]},{\"eyebrow\":\"Automation\",\"title\":\"Files move through workflows\",\"body\":\"Fetch a file from a URL and link it to a record in one workflow step, then send an email or push when it lands.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]},{\"eyebrow\":\"Access\",\"title\":\"Private files follow your permissions\",\"body\":\"Signed links are issued only to callers allowed to read files, and they expire within five minutes. Public files carry no credentials at all.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"The REST calls behind it\",\"tabs\":[{\"label\":\"Upload\",\"language\":\"bash\",\"code\":\"curl -X POST \\\"https://api.my.anythink.cloud/org/{org_id}/files?isPublic=true\u0026folderId=3\\\" \\\\\\n -H \\\"Authorization: Bearer \u003caccess token\u003e\\\" \\\\\\n -F \\\"[email protected]\\\"\"},{\"label\":\"Read metadata\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/files/87\\nAuthorization: Bearer \u003caccess token\u003e\\n\\n{\\n \\\"id\\\": 87,\\n \\\"original_file_name\\\": \\\"episode-12.mp3\\\",\\n \\\"file_type\\\": \\\"audio/mpeg\\\",\\n \\\"file_size\\\": 48213904,\\n \\\"is_public\\\": true,\\n \\\"folder_path\\\": \\\"episodes\\\",\\n \\\"duration_seconds\\\": 1806.4,\\n \\\"bitrate\\\": 213000,\\n \\\"content_hash\\\": \\\"9f2câ¦\\\"\\n}\"},{\"label\":\"Private download\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/files/87/get\\nâ 302 to a signed storage link (valid for one minute)\\n\\nGET https://api.my.anythink.cloud/org/{org_id}/files/87/url\\nâ { \\\"url\\\": \\\"â¦\\\", \\\"expires_at\\\": \\\"â¦\\\" } (valid for five minutes)\"},{\"label\":\"Public file\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/files/87/public\\nâ 302 to the CDN URL, or 404 if the file is private\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an upload to a file your app can serve\",\"steps\":[{\"title\":\"Upload\",\"prose\":\"Send the file to /files from the dashboard, the CLI or your app. It streams into storage, after a check against your project's storage quota.\"},{\"title\":\"Choose who can see it\",\"prose\":\"Public files get a CDN URL. Private files stay behind your permissions and are served through signed links.\"},{\"title\":\"Let the worker probe it\",\"prose\":\"A background worker downloads the file to temporary disk, reads
14its media details and hash, and writes them back to the file record.\"},{\"title\":\"Attach it to a record\",\"prose\":\"Link the file to an entity through a file field, by hand, from your app or with a File Handler workflow step.\"},{\"title\":\"Serve it\",\"prose\":\"Your app requests the file and gets a redirect to the CDN or to a short-lived signed link. The bytes never pass through the API.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Public files, private files and CDN links\",\"body\":\"Upload through the dashboard or the CLI, and add file fields to your own entities.\",\"link\":{\"label\":\"Read the file management guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}}}}},{\"id\":12,\"slug\":\"subscriptions\",\"type\":\"product\",\"title\":\"Subscriptions\",\"status\":\"published\",\"hero\":{\"headline\":\"Subscriptions,/without the plumbing\",\"description\":\"\u003cp\u003eModel plans, trials and offers once, then take payment through Stripe or Apple in-app purchases without writing receipt-validation code.\u003c/p\u003e\",\"featurePills\":[\"Stripe subscriptions\",\"Stripe Connect\",\"Apple in-app purchases\",\"Trials and discount codes\",\"Entitlement checks via /me\",\"Admin recovery tools\"],\"image\":{\"url\":\"/cdn-assets/20804318/477506c2b42a48349e4279de1d8083bd.png\",\"alt\":\"Subscriptions\"},\"images\":[{\"id\":\"67\",\"url\":\"/cdn-assets/20804318/477506c2b42a48349e4279de1d8083bd.png\",\"alt\":\"Subscriptions\",\"original_file_name\":\"stripe.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/11b808bb83f944b4970daafc552b3f70.mp4\",\"alt\":\"Subscriptions\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/payments\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A subscription backend,/not a payment recipe\",\"description\":\"\u003cp\u003ePlans, trials, discount codes, Stripe and Apple in-app purchases, all on the same subscriber record.\u003c/p\u003e\",\"cards\":[{\"id\":250,\"type\":\"feature\",\"title\":\"Plans, trials and offers\",\"description\":\"\u003cp\u003eDefine subscription plans with billing intervals and trial periods, then layer on offer and discount codes for redemption and referral programmes.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":251,\"type\":\"feature\",\"title\":\"Stripe and Stripe Connect\",\"description\":\"\u003cp\u003eTake card payments and recurring billing through Stripe, or split funds across a marketplace's sellers with Stripe Connect. Webhooks are handled for you.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":252,\"type\":\"feature\",\"title\":\"Apple in-app purchases, verified server-side\",\"description\":\"\u003cp\u003eReceipts are verified against the real App Store Server API, not trusted from the device. Verification is idempotent, upserting by the transaction's original_transaction_id, so a renewal or a retried request never creates a duplicate subscription.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":253,\"type\":\"feature\",\"title\":\"Purchases bound to an account\",\"description\":\"\u003cp\u003eApple verification checks the purchase's appAccountToken against the account that submitted it. A receipt replayed against a different account is rejected, closing a common in-app purchase replay gap.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":254,\"type\":\"feature\",\"title\":\"Entitlement checks on /me\",\"description\":\"\u003cp\u003eYour app asks a subscriber-scoped /me endpoint whether the signed-in user has access, offer codes, referrals and balance. These routes use a subscriber permission, not an admin one, so you can call them directly from a client app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]},{\"id\":255,\"type\":\"feature\",\"title\":\"Admin recovery tools\",\"description\":\"\u003cp\u003eWhen a payment provider and your data disagree, an admin can override a subscription's status, relink it to the right subscriber, or resync it from Stripe, from the Anythink dashboard.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[12]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real subscription products\",\"description\":\"\u003cp\u003eThe same subscriber record, whether the purchase happened on the web or inside an iOS app.\u003c/p\u003e\",\"cards\":[]}
14,\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:5:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"subscription backend, Apple in-app purchase backend, RevenueCat alternative, Stripe subscriptions API, App Store server verification, entitlement checks, Stripe Connect\",\"seo_focus_keyword\":\"Subscription backend with Apple in-app purchases\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a monthly plan with a seven-day free trial.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Fill in the plan once. It syncs to Stripe when Connect onboarding is complete.\",\"example\":\"AnythinkPay â Plans â New plan\\nPlan name: Pro monthly\\nSubscription name: Pro monthly\\nAmount: 9.99, Billing period: Month, Bill every: 1\\nTrial period (days): 7\\nActive: on â Save\\n\\nâ the plan is live, with a seven-day trial\",\"clip\":\"dashboard/payments/create-plan\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Plans go through the AnythinkPay API, so a script can create them.\",\"example\":\"anythink fetch /integrations/anythinkpay/subscription-plans --method POST --body \\\\\\n '{\\\"plan_name\\\":\\\"Pro monthly\\\",\\\"name\\\":\\\"Pro monthly\\\",\\\"description\\\":\\\"Full access\\\",\\\"type\\\":\\\"recurring\\\",\\\"amount\\\":9.99,\\\"currency\\\":\\\"gbp\\\",\\\"billing_interval\\\":\\\"month\\\",\\\"interval_count\\\":1,\\\"trial_period_days\\\":7,\\\"is_active\\\":true}'\",\"result\":[\"Plan Pro monthly created with a seven-day trial\",\"Stripe ids stay empty until Connect onboarding is complete\"],\"clip\":\"cli/payments/create-plan\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the plan. It calls the same API and reports what it created.\",\"example\":\"âCreate an AnythinkPay subscription plan called Pro monthly at £9.99 a month with a 7-day trial.â\",\"result\":[\"Called the AnythinkPay plans API with your details\",\"Plan Pro monthly: £9.99 a month, seven-day trial\",\"It syncs to Stripe once Connect onboarding is finished\",\"The plan is listed under AnythinkPay â Plans\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why this holds up in production\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Idempotent by design\",\"title\":\"Verification upserts, it never duplicates\",\"body\":\"Apple receipt verification keys off the purchase's original_transaction_id. Re-verifying the same purchase, or a renewal coming back around, updates the existing row instead of creating a second subscription.\",\"points\":[\"Account-binding check rejects a receipt replayed against a different account\",\"Superseded purchases are marked explicitly, so entitlement for a product is never ambiguous\"]},{\"eyebrow\":\"A timely reason to avoid extensions\",\"title\":\"Firebase's Stripe and RevenueCat routes run on Extensions, which shut down 31 March 2027\",\"body\":\"After that date, Firebase Extensions can't be installed or edited, which pu
14shes Stripe and Apple IAP handling on Firebase into custom Cloud Functions. Anythink's payment handling is native, not an extension that can be deprecated.\",\"links\":[{\"label\":\"How payments work\",\"href\":\"https://docs.anythink.cloud/guides/payments/how-payments-work\"}]}]}},{\"type\":\"matrix\",\"heading\":\"Subscriptions, compared\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Supabase\",\"Firebase\"],\"rows\":[{\"capability\":\"Stripe subscriptions\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase: Stripe sync engine or a webhook recipe.\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"none\",\"addon\"],\"note\":\"Firebase: via the RevenueCat extension, which Extensions sunsets 31 March 2027.\"},{\"capability\":\"Server-side receipt verification\",\"values\":[\"native\",\"unknown\",\"addon\"]},{\"capability\":\"Admin recovery (status override, resync)\",\"values\":[\"native\",\"unknown\",\"unknown\"]}],\"footnote\":\"Sourced from each vendor's own docs as of 28 September 2026. \\\"Addon\\\" means an extension, plugin or code recipe rather than a feature of the core platform.\"}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"A plan, a trial, and a verified purchase\",\"tabs\":[{\"label\":\"Create a plan\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscription-plans\\nContent-Type: application/json\\n\\n{\\n \\\"plan_name\\\": \\\"pro-monthly\\\",\\n \\\"name\\\": \\\"Pro Monthly\\\",\\n \\\"description\\\": \\\"Full access, billed monthly\\\",\\n \\\"amount\\\": 19.00,\\n \\\"currency\\\": \\\"gbp\\\",\\n \\\"billing_interval\\\": \\\"month\\\",\\n \\\"trial_period_days\\\": 14\\n}\"},{\"label\":\"Check entitlement\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscriptions/me/entitlement\"},{\"label\":\"Verify an Apple purchase\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscriptions/apple/verify\\nContent-Type: application/json\\n\\n{\\n \\\"receipt\\\": \\\"\u003cbase64 App Store transaction\u003e\\\",\\n \\\"app_account_token\\\": \\\"\u003cthe signed-in user's token\u003e\\\"\\n}\"},{\"label\":\"Check Stripe Connect status\",\"language\":\"bash\",\"code\":\"anythink pay status\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"An iOS subscription app\",\"prose\":\"Sell a subscription through Apple in-app purchase. Anythink verifies the receipt against the App Store, binds it to the signed-in account, and keeps renewals from duplicating the entitlement. Your app just asks /me whether access is active.\"},{\"title\":\"A SaaS with a free trial\",\"prose\":\"Set a trial period on the plan, so new subscribers get full access for 14 days before the first Stripe charge. Offer codes extend a trial or discount the first invoice for a referral programme.\"},{\"title\":\"A marketplace with a platform fee\",\"prose\":\"Route a buyer's payment to a seller through Stripe Connect and take a percentage automatically. Configure the split once; every transaction after that follows it.\"}]},\"links\":[{\"label\":\"Apple in-app purchases\",\"url\":\"https://docs.anythink.cloud/guides/payments/apple-in-app-purchases\",\"description\":\"Server-side verification with the App Store Server API\"},{\"label\":\"Offers, trials and entitlements\",\"url\":\"https://docs.anythink.cloud/guides/payments/offers-trials-and-entitlements\",\"description\":\"Offer codes, free trials and access checks\"},{\"label\":\"Payments quick start\",\"url\":\"https://docs.anythink.cloud/guides/payments/quick-start\",\"description\":\"Your first plan in minutes\"}],\"linksHeading\":\"Related reading\"}},{\"id\":14,\"slug\":\"powerful-search-engine\",\"type\":\"product\",\"title\":\"Search\",\"status\":\"published\",\"hero\":{\"headline\":\"Search your data,/by text, filter or distance\",\"description\":\"\u003cp\u003eSearch any entity with typo-tolerant full-text queries, filters, facets and geo radius, backed by Meilisearch and indexed as your records change.\u003c/p\u003e\",\"featurePills\":[\"Meilisearch full-text\",\"Filters and facets\",\"Geo radius and bounding box\",\"Sort by distance\",\"Highlighting\",\"Similar items\",\"Public search\"],\"image\":{\"url\":\"/cdn-assets/20804318/66f82943ff4c4fdc9f71f21bae4988a4.png\",\"alt\":\"Search\"},\"images\":[{\"id\":\"70\",\"url\":\"/cdn-assets/20804318/66f82943ff4c4fdc9f71f21bae4988a4.png\",\"alt\":\"Search\",\"original_file_name\":\"Copy of User Name.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/6fba0fbb14c2443f94dcd4124186f82d.mp4\",\"alt\":\"Search\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database/search\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Search built into the backend,/not bolted on beside it\",\"description\":\"\u003cp\u003eFull-text, filters, facets, geo and similar items on one endpoint, indexed from the same entities your API serves.\u003c/p\u003e\",\"cards\":[{\"id\":26,\"type\":\"feature\",\"title\":\"Typo-tolerant full-text search\",\"description\":\"\u003cp\u003eMark fields searchable and records are indexed in Meilisearch as they're created, updated or deleted. Results rank by word matches, typos, proximity and field, with name fields weighted first.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":27,\"type\":\"feature\",\"title\":\"Filters, facets and highlighting\",\"description\":\"\u003cp\u003eFilter with expressions such as \u003ccode\u003estatus = published AND price \u0026lt; 200\u003c/code\u003e, count results per value with facets, sort on searchable fields or creation date, and highlight matched terms, all on one GET request.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":28,\"type\":\"feature\",\"title\":\"Results follow row-level security\",\"description\":\"\u003cp\u003eAuthenticated search f
14ilters hits through the same row-level security as the entity API, so users only find records they're allowed to open.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":96,\"type\":\"feature\",\"title\":\"Public search, field by field\",\"description\":\"\u003cp\u003ePublic search needs no credentials and returns only fields marked publicly searchable. \u003ccode\u003eanythink search audit\u003c/code\u003e compares what you configured with what public search actually returns.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":97,\"type\":\"feature\",\"title\":\"Geo radius and bounding box\",\"description\":\"\u003cp\u003eEntities with a geo field can be filtered by distance from a point or by a bounding box, and sorted nearest first. A store locator or a listings search needs no extra service.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]},{\"id\":241,\"type\":\"feature\",\"title\":\"Similar items\",\"description\":\"\u003cp\u003e\u003ccode\u003eGET /search/similar\u003c/code\u003e returns records that read like a given one, using embeddings Meilisearch creates as each record is indexed. There's no embedding provider or vector database for you to run.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[14]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:6:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"search API, full-text search API, geo search API, faceted search, Meilisearch backend, similar items API, site search for apps, Algolia alternative\",\"seo_focus_keyword\":\"Full-text, geo and similarity search API\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: make a listings entity searchable, then search it by place and bedrooms.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Choose which fields are searchable. Indexing follows.\",\"example\":\"Settings â Data Model â listings\\nOpen the title field â Searchable\\nOpen the description field â Searchable\\nOpen the bedrooms field â Searchable\\n\\nâ listings are indexed and kept in sync\",\"clip\":\"dashboard/search/searchable-fields\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Every search option is a flag on one command.\",\"example\":\"anythink fields update listings title --searchable\\nanythink fields update listings bedrooms --searchable\\n# garden flats within 5 km, two bedrooms or more, nearest first\\nanythink search query \\\"garden flat\\\" --entities listings \\\\\\n --filter \\\"_geoRadius(51.5072, -0.1276, 5000) AND bedrooms \u003e= 2\\\" \\\\\\n --sort \\\"_geoPoint(51.5072, -0.1276):asc\\\" \\\\\\n --facet bedrooms --highlight\\nanythink search similar listings 42\",\"result\":[\"Matching listings, with the search terms highlighted\",\"Counts for each bedroom number\",\"Listings similar to listing 42\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the search. It builds the filter and runs
14it.\",\"example\":\"âSearch listings for garden flats with at least two bedrooms within 5 km of central London, nearest first, and tell me how many results there are for each bedroom count.â\",\"result\":[\"Searched listings for garden flat\",\"Filtered to two or more bedrooms within 5 km\",\"Sorted nearest first\",\"Counted results for each bedroom number\"]}]}},{\"type\":\"proofs\",\"heading\":\"Search you don't have to run\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Kept in sync\",\"title\":\"The index follows your data\",\"body\":\"Creates, updates and deletes reach the index through a queue. If an index ever drifts, an admin can rehydrate it from the CLI or the API.\",\"links\":[{\"label\":\"Search guide\",\"href\":\"https://docs.anythink.cloud/guides/database/search\"}]},{\"eyebrow\":\"Safe to expose\",\"title\":\"Public search shows only what you choose\",\"body\":\"Only publicly searchable fields reach the public endpoint, and the audit command flags any difference between your settings and what it returns.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"}]},{\"eyebrow\":\"Location\",\"title\":\"Geo search on any entity with a geo field\",\"body\":\"Add a geo field in the data model and radius, bounding-box and nearest-first search work straight away. The same field plots records on the dashboard's map view.\",\"links\":[{\"label\":\"Visual database designer\",\"href\":\"/products/visual-database-designer\"},{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"}]},{\"eyebrow\":\"Recommendations\",\"title\":\"More like this, from the same index\",\"body\":\"The similar-items endpoint ranks records by meaning rather than shared words, for related products, articles or listings, on the authenticated and public endpoints.\",\"links\":[{\"label\":\"Search guide\",\"href\":\"https://docs.anythink.cloud/guides/database/search\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"One endpoint, a few query parameters\",\"tabs\":[{\"label\":\"Full-text\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/search?q=garden+flat\u0026e=listings\u0026hl=true\\nAuthorization: Bearer \u003caccess token\u003e\"},{\"label\":\"Filters and facets\",\"language\":\"bash\",\"code\":\"anythink search query \\\"*\\\" --entities listings \\\\\\n --filter \\\"bedrooms \u003e= 2\\\" \\\\\\n --facet bedrooms --sort \\\"created_at:desc\\\"\"},{\"label\":\"Public search\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/search/public?q=garden+flat\u0026e=listings\"},{\"label\":\"Similar items\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/search/similar?e=listings\u0026id=42\u0026limit=5\\nAuthorization: Bearer \u003caccess token\u003e\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From a data model to a search box\",\"steps\":[{\"title\":\"Choose searchable fields\",\"prose\":\"Tick Searchable on the fields people should find records by. Searchable fields can also be filtered and faceted.\"},{\"title\":\"Records index themselves\",\"prose\":\"Each create, update and delete is queued and applied to that entity's Meilisearch index. There's no search cluster for you to run.\"},{\"title\":\"Query one endpoint\",\"prose\":\"Call /search with a query, the entities to search, and any filters, facets, sorting or highlighting you need.\"},{\"title\":\"Open it to the public, carefully\",\"prose\":\"Tick Publicly Searchable on the fields visitors may see, then call /search/public from your website. Run the audit command before launch.\"},{\"title\":\"Add related items\",\"prose\":\"Call /search/similar with a record's ID to show more like it.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Searchable fields, filters and facets\",\"body\":\"Choose which fields are searchable, then query, filter and sort them over the API.\",\"link\":{\"label\":\"Read the search guide\",\"href\":\"https://docs.anythink.cloud/guides/database/search\"}}}}},{\"id\":19,\"slug\":\"access_control\",\"type\":\"product\",\"title\":\"Access Control\",\"status\":\"published\",\"hero\":{\"headline\":\"Who can see what,/down to the record\",\"description\":\"\u003cp\u003eRoles carry entity-scoped permissions, row-level security restricts which records a user can see, and group-scoped reads extend that to a team without opening every record to every teammate. All three are enforced at the API, not reimplemented in your app.\u003c/p\u003e\",\"featurePills\":[\"Entity-scoped permissions\",\"Row-level security\",\"Group-scoped reads\",\"Set automatically by a workflow\"],\"image\":{\"url\":\"/cdn-assets/20804318/ec8feaeb4e6d405a88237202c848ec1b.png\",\"alt\":\"Access Control\"},\"images\":[{\"id\":\"66\",\"url\":\"/cdn-assets/20804318/ec8feaeb4e6d405a88237202c848ec1b.png\",\"alt\":\"Access Control\",\"original_file_name\":\"permissions.png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/e6dacb08db5a476e9eec6b232e51c26c.mp4\",\"alt\":\"Access Control\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Access control that matches how teams actually share data\",\"description\":\"\u003cp\u003eRoles and permissions control what an action can do. Row-level security controls which records it can do it to.\u003c/p\u003e\",\"cards\":[{\"id\":110,\"type\":\"feature\",\"title\":\"Permissions named entity:action\",\"description\":\"\u003cp\u003eEvery permission follows the same shape â blog_posts:read, orders:update, anythink_group_data:read. Assign them to roles, assign a role to a user, and every API call, workflow step and dashboard view checks the same permission set.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]},{\"id\":111,\"type\":\"feature\",\"title\":\"Custom roles, entity-scoped\",\"description\":\"\u003cp\u003eCreate as many roles as your team structure needs. Each permission on a role is scoped to one entity and one action, so an editor role can read and update articles without being able to delete them.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]},{\"id\":112,\"type\":\"feature\",\"title\":\"Row-level security set at creation\",\"description\":\"\u003cp\u003eA Create Data workflow step can set row-level security on the record
14it just created â auto_set_rls plus the field that links it to a user â so a new record is scoped to its owner the moment it exists, not in a follow-up write.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/be8f04543cfb41d7a126876abee72c7c.mp4\",\"alt\":\"Row-level security set at creation\"},\"pageIds\":[19]},{\"id\":113,\"type\":\"feature\",\"title\":\"Managing access after the fact\",\"description\":\"\u003cp\u003eAn Update Data step manages RLS on an existing record with rls_mode: add, remove or set â grant a second user access, revoke it, or replace the access list outright, from inside a workflow.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/54daff0079ae48e09b953cab8686f324.mp4\",\"alt\":\"Managing access after the fact\"},\"pageIds\":[19]},{\"id\":114,\"type\":\"feature\",\"title\":\"Group-scoped reads\",\"description\":\"\u003cp\u003ePass ?group_scope=\u0026lt;group_id\u0026gt; on a read and a user sees records shared with that group, provided they hold a membership role in it with the anythink_group_data:read permission. Being a group's admin doesn't grant this by itself â membership and the read permission are checked separately.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]},{\"id\":115,\"type\":\"feature\",\"title\":\"Enforced at the API, not in your app\",\"description\":\"\u003cp\u003ePermissions, row-level security and group scope are all checked server-side on every request. There's no separate authorisation layer to keep in sync with your frontend â the same rules apply whether the call comes from the dashboard, the API, or a workflow.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[19]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for how teams actually share data\",\"description\":\"\u003cp\u003eThe three mechanisms combine for most of the access patterns a product needs\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":true,\"title\":\"Access Control in Practice\",\"description\":\"\u003cp\u003eHow roles, row-level security and group-scoped reads work together\u003c/p\u003e\",\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:7:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":\"\",\"relatedDoc\":{\"id\":11,\"slug\":\"authentication\",\"title\":\"Sign in users: email, tokens and API keys\"},\"seo_keywords\":\"row-level security, group-scoped reads, entity permissions, role-based access control backend\",\"seo_focus_keyword\":\"Row-level security for teams and groups\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a supp
14ort role that can read and update orders, with each person seeing only the orders they're given.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the role, switch on row-level security, then grant access record by record.\",\"example\":\"Settings â Roles and Permissions â New role\\nRole Name: support â Create Role\\nPermissions: orders â Read, Update\\nSettings â Data Model â orders â Edit\\nEnable Row-Level Security â Update Entity\\nEntities â orders â open an order â Row-Level Security\\nAdd User Access â pick a user â Add User\\n\\nâ that user sees only the orders they've been given\",\"clip\":\"dashboard/access/support-role-rls\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Scriptable, so the same access rules can go into every project.\",\"example\":\"anythink roles create support --description \\\"Support agents\\\"\\n# 12 is the id that roles list shows for support\\nanythink roles permissions add 12 orders --actions read,update\\nanythink entities update orders --rls true\\nanythink data rls orders 42 --user 72\",\"result\":[\"Role support can read and update orders\",\"Row-level security is on for orders\",\"User 72 can see and edit order 42, and no other order\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the access you want. It runs the same commands and tells you what it did; you can check every change in the dashboard.\",\"example\":\"âCreate a support role that can read and update orders. Turn on row-level security for orders, then give user 72 access to order 42 only.â\",\"result\":[\"Role support created with read and update on orders\",\"Row-level security switched on for orders\",\"User 72 granted access to order 42\",\"Administrators still see every order\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Permissions, row-level security and group reads as they're actually configured\",\"tabs\":[{\"label\":\"Set RLS at creation\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 33 create-ticket \\\\\\n --name \\\"Create ticket\\\" \\\\\\n --action CreateData \\\\\\n --params '{\\n \\\"entity\\\": \\\"support_tickets\\\",\\n \\\"data\\\": { \\\"subject\\\": \\\"{{ $anythink.trigger.data.subject }}\\\" },\\n \\\"auto_set_rls\\\": true,\\n \\\"rls_user_field\\\": \\\"created_by\\\"\\n }' \\\\\\n --start --enabled\"},{\"label\":\"Grant a second user access\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 33 grant-manager-access \\\\\\n --name \\\"Grant manager access\\\" \\\\\\n --action UpdateData \\\\\\n --params '{\\n \\\"entity\\\": \\\"support_tickets\\\",\\n \\\"id\\\": \\\"{{ $anythink.steps.create_ticket.data.id }}\\\",\\n \\\"_rls\\\": { \\\"mode\\\": \\\"add\\\", \\\"users\\\": [{ \\\"user_id\\\": 21, \\\"readonly\\\": false }] }\\n }' \\\\\\n --enabled\"},{\"label\":\"Read within a group's scope\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/support_tickets/items?group_scope=14\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Multi-team SaaS with per-user isolation\",\"prose\":\"Set row-level security on every record at creation, scoped to the user who created it. Eac
14h user sees only their own records, enforced at the API, with nothing to configure per request.\"},{\"title\":\"Team workspaces without opening every record to everyone\",\"prose\":\"Put teammates in a group, grant the group's members the anythink_group_data:read permission, and reads scoped with ?group_scope can return records shared with the group â distinct from the per-user grants a record might also carry.\"},{\"title\":\"Role-gated write paths\",\"prose\":\"An editor role gets articles:read, articles:create and articles:update, but not articles:delete. The same permission check runs whether the write comes from the dashboard, a direct API call, or a workflow step.\"}]}}},{\"id\":31,\"slug\":\"dashboards\",\"type\":\"product\",\"title\":\"Dashboards\",\"status\":\"published\",\"hero\":{\"headline\":\"Dashboards,/on data you already have\",\"description\":\"\u003cp\u003eBuild charts, grids, kanban boards and dashboards on the same data model your API already runs on, with no second database to keep in sync.\u003c/p\u003e\",\"featurePills\":[\"Bar\",\"pie\",\"line\",\"funnel and cohort charts\",\"Materialised views across entities\",\"Grid\",\"kanban\",\"calendar and map views\",\"Branded colours\",\"radius and logo\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/dashboards\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Internal dashboards/on your own data\",\"description\":\"\u003cp\u003eCharts, cross-entity grids and five ways to view your data, styled with your own colours and logo.\u003c/p\u003e\",\"cards\":[{\"id\":195,\"type\":\"feature\",\"title\":\"Five chart types, per entity\",\"description\":\"\u003cp\u003eBar, pie, line, funnel and cohort charts, each built on a single entity with a field, an aggregation, a timeframe preset and a compare-to-prior-period option.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":196,\"type\":\"feature\",\"title\":\"Materialised views across entities\",\"description\":\"\u003cp\u003eA materialised view joins another entity, or your payments and subscriptions data, in as columns, with a project-wide TOTAL row and server-side pagination, for the cross-entity grid a single chart can't show.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":197,\"type\":\"feature\",\"title\":\"Five views on every entity\",\"description\":\"\u003cp\u003eSwitch any entity between Grid, Kanban, Map, Calendar and Charts without building a separate screen. Kanban groups records by a status field with drag-and-drop; Map plots a geo field.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":198,\"type\":\"feature\",\"title\":\"Dashboards you assemble from widgets\",\"description\":\"\u003cp\u003eCombine charts and materialised views into a dashboard, with a live preview as you build it. Each dashboard has its own data endpoint, scoped by the same permissions as the rest of your API.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":199,\"type\":\"feature\",\"title\":\"Your colours, radius and logo\",\"description\":\"\u003cp\u003eSet a primary colour, grey palette and corner radius, and add your project's logo, so the Anythink dashboard reads as part of your product, not a generic admin panel.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]},{\"id\":200,\"type\":\"feature\",\"title\":\"Menus you configure\",\"description\":\"\u003cp\u003eDecide which entities, dashboards and pages show in the navigation, and in what order, instead of shipping every entity to every role by default.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[31]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real operations teams\",\"description\":\"\u003cp\u003eFrom a single chart on one entity to a project-wide revenue view that joins payments and subscriptions.\u003c/p\u003e\",\"cards\":[]}
14,\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:8:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"internal dashboards, Retool alternative, cross-entity reporting, materialised views, kanban view, admin dashboard builder, operations dashboard\",\"seo_focus_keyword\":\"Internal dashboards on your app data\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a bar chart of revenue by month, built from your orders.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Design the chart on screen and drop it onto a dashboard.\",\"example\":\"Dashboard â Customize â Add widget\\nWidget: Chart â Design chart\\nData source: orders\\nChart type: Bar Chart\\nX-Axis Field: created_at, Interval: Month\\nAggregation: Sum, Y Field: total\\nChart name: Revenue by month â Save Chart\\n\\nâ the chart is ready to add to your dashboard\",\"clip\":\"dashboard/dashboards/build-chart\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"A chart is a saved configuration, so you can create it from a script.\",\"example\":\"anythink fetch /charts --method POST --body \\\\\\n '{\\\"name\\\":\\\"Revenue by month\\\",\\\"dataSource\\\":\\\"entity\\\",\\\"chartType\\\":\\\"column\\\",\\\"entityName\\\":\\\"orders\\\",\\\"xField\\\":\\\"created_at\\\",\\\"xInterval\\\":\\\"month\\\",\\\"yField\\\":\\\"total\\\",\\\"yAgg\\\":\\\"sum\\\"}'\",\"result\":[\"Chart Revenue by month saved\",\"Sums orders.total for each month\",\"Pick it from Add widget â Chart on any dashboard\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the chart. It saves the configuration and tells you where to find it.\",\"example\":\"âMake a bar chart of revenue by month from the orders entity, summing the total field.â\",\"result\":[\"Chart configuration created on orders\",\"Bar chart: sum of total, grouped by month\",\"Saved as Revenue by month\",\"Ready to add from Add widget â Chart\"]}]}},{\"type\":\"matrix\",\"heading\":\"Dashboards, compared\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Directus\",\"Supabase\"],\"rows\":[{\"capability\":\"Charts on your data\",\"values\":[\"native\",\"native\",\"addon\"],\"note\":\"Directus: Insights dashboards. Supabase: charts appear in the AI assistant chat, not as a standalone builder.\"},{\"capability\":\"Cross-entity joined views\",\"values\":[\"native\",\"unknown\",\"none\"],\"note\":\"Anythink: materialised views, including payments/subscriptions as a join source.\"},{\"capability\":\"Kanban / map / calendar views\",\"values\":[\"native\",\"unknown\",\"none\"]},{\"capability\":\"Branding (colours, radius, logo)\",\"values\":[\"native\",\"native\",\"none\"]}],\"footnote\":\"Sourced from each vendor's own docs as of 28 September 2026. Anythink's branding is colours, corner radius, logos and menus, not a fully white-label product.\"}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"A chart, a materialised view, a branded dashboard\",\"tabs\":[{\"label\":\"Read a materialised view\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/materialised-views/{id}/data?page=1\u0026page_size=25\"},{\"label\":\"List entity items\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/orders/items?page=1\u0026pageSize=25\"},{\"label\":\"Read your project's theme\",\"language\":\"bash\",\"code\":\"anythink settings get --json\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"A revenue dashboard across payments and orders\",\"prose\":\"A materialised view joins your orders entity with subscriptions data, so finance can see revenue per plan without a separate BI pipeline or a hand-written join.\"},{\"title\":\"A support queue on Kanban\",\"prose\":\"Switch your tickets entity to Kanban, grouped by status. Agents drag a ticket from Open to In progress to Resolved, and the same records still power your API and workflows.\"},{\"title\":\"A branded ops panel for an agency's client\",\"prose\":\"Set the client's colours, logo and corner radius, and configure the menu to show only the entities and dashboards that client's team should see.\"}]}}},{\"id\":32,\"slug\":\"integrations\",\"type\":\"product\",\"title\":\"Integrations\",\"status\":\"published\",\"hero\":{\"headline\":\"Backend integrations,/called from a workflow\",\"description\":\"\u003cp\u003eConnect Slack, Google Calendar, GitHub, LinkedIn, X, Claude, OpenAI and Grok, then call any of them as a step in a workflow. Gemini powers the AI chat in the Anythink dashboard, and Calendly and Fireflies are coming soon.\u003c/p\u003e\",\"featurePills\":[\"Slack\",\"Google Calendar\",\"GitHub\",\"LinkedIn and X\",\"Claude\",\"OpenAI and Grok steps\",\"Per-user or per-project connections\",\"Bring your own OAuth app\",\"Dynamic pickers in the workflow editor\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/integrations\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Integrations,/wired into workflows\",\"description\":\"\u003cp\u003eEvery provider is callable as a workflow step, with per-user or per-project connections.\u003c/p\u003e\",\"cards\":[{\"id\":221,\"type\":\"feature\",\"title\":\"Providers ready in every project\",\"description\":\"\u003cp\u003eSlack, Google Calendar (with Meet), GitHub, LinkedIn (profile or company page), X, Claude, OpenAI and Grok as workflow steps, plus Google and Apple for sign-in, each with its own auth type and operations. Gemini is available in the dashboard AI chat. Calendly and Fireflies are coming soon.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":222,\"type\":\"feature\",\"title\":\"Per-user or per-project connections\",\"description\":\"\u003cp\u003eA connection can belong to the project, so every workflow run uses the same account, or to a single user, so each end-u
14ser of your app connects their own Slack, LinkedIn or X account.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":223,\"type\":\"feature\",\"title\":\"Bring your own OAuth app\",\"description\":\"\u003cp\u003eOverride a provider's OAuth app with your own client ID and secret at the project level, instead of connecting through Anythink's shared app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":224,\"type\":\"feature\",\"title\":\"Integration steps in any workflow\",\"description\":\"\u003cp\u003eCall any provider's operation as a workflow step: post to Slack, create a calendar event, read a repository's latest commits or releases, publish to LinkedIn or X, or generate, summarise and translate text with Claude, OpenAI or Grok.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":225,\"type\":\"feature\",\"title\":\"Dynamic pickers for the operation's inputs\",\"description\":\"\u003cp\u003eFields like a GitHub repository are searchable dropdowns of the connected account's actual repositories in the workflow editor, not free text you have to get exactly right.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]},{\"id\":226,\"type\":\"feature\",\"title\":\"Managed from the dashboard or the CLI\",\"description\":\"\u003cp\u003eList definitions, connect an API key or OAuth provider, and enable, disable or disconnect a connection from the dashboard or the anythink CLI.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[32]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real integration flows\",\"description\":\"\u003cp\u003eFrom a single Slack notification to a per-user publishing flow across LinkedIn and X.\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:9:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"backend integrations, Slack GitHub LinkedIn integration workflow, bring your own OAuth app, per-user integration connections, workflow automation integrations, Zapier inside your backend\",\"seo_focus_keyword\":\"Backend integrations: Slack, GitHub, LinkedIn\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"Connect Slack in a minute\",\"subheading\":\"The same connection, made from the dashboard or the CLI.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Pick Slack in Integrations, sign in and allow access.\",\"example\":\"Settings â Integrations â Integrations tab\\nSlack â Connect\\nSign in to Slack and allow access\\n\\nâ Slack shows as Connected\",\"clip\":\"dashboard/integrations/connect-slack\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"One command opens the OAuth flow and stores the connection.\",\"example\":\"anythink integrations oauth connect slack\\nanythink integrations connections list --provider slack\",\"result\":[\"Slack authorised in your browser\",\"Connection stored for the project\",\"Listed
14with your other connections\"],\"clip\":\"cli/integrations/connect-slack\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask the assistant to list connections or use one in a workflow.\",\"example\":\"âWhich integrations are connected in this project? Add a step to my new-order workflow that posts the order total to #sales on Slack.â\",\"result\":[\"Listed the project's connections, including Slack\",\"Added an Integration step to the new-order workflow\",\"The step posts the order total to #sales\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Connect a provider, then call it from a workflow\",\"tabs\":[{\"label\":\"List providers\",\"language\":\"bash\",\"code\":\"anythink integrations list\"},{\"label\":\"Connect over OAuth\",\"language\":\"bash\",\"code\":\"anythink integrations oauth connect slack\"},{\"label\":\"Workflow step\",\"language\":\"text\",\"code\":\"Trigger: EntityCreated on support_tickets\\n\\nSteps:\\n 1. Integration â Slack: Send Message\\n â channel: #support\\n â text: \\\"New ticket: {{ $anythink.trigger.data.subject }}\\\"\\n\\nNo webhook endpoint to write or host.\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"A per-user social publisher\",\"prose\":\"Each user connects their own LinkedIn and X account. When they publish a post from your app, a workflow posts it through their connection, not a shared company account.\"}
14,{\"title\":\"A Slack-notified support queue\",\"prose\":\"A new support ticket triggers a workflow that posts to Slack and opens a tracking entry. Your team never has to poll a dashboard for new tickets.\"},{\"title\":\"An AI-assisted triage step\",\"prose\":\"Summarise a long support ticket with Claude, Gemini, OpenAI or Grok as a workflow step, then route the summary into Slack or GitHub, without hand-rolling an API client for each provider.\"}]},\"links\":[{\"label\":\"Integrations reference: providers and operations\",\"url\":\"https://docs.anythink.cloud/guides/integrations/reference\"},{\"label\":\"Connect your first integration\",\"url\":\"https://docs.anythink.cloud/guides/integrations/quick-start\"},{\"label\":\"Workflows quick start\",\"url\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}],\"linksHeading\":\"Related reading\"}},{\"id\":35,\"slug\":\"push-notifications\",\"type\":\"product\",\"title\":\"Push Notifications\",\"status\":\"published\",\"hero\":{\"headline\":\"Push notifications/with action buttons\",\"description\":\"\u003cp\u003eSend push notifications with tappable action buttons, and route the tap back into a workflow.\u003c/p\u003e\u003cp\u003eAnythink sends through Firebase Cloud Messaging (Android and iOS) and web push (VAPID), templates the payload, and fans bulk sends out across a queue instead of a synchronous loop.\u003c/p\u003e\",\"featurePills\":[\"FCM for Android and iOS\",\"Web push (VAPID)\",\"iOS categories and action buttons\",\"Tap-to-workflow\",\"Templates\",\"Bulk fan-out via the queue\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows/push-notifications\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Push with action buttons,/not just a message\",\"description\":\"\u003cp\u003eCategories, action buttons and bulk sends, wired into the same workflow engine as the rest of Anythink.\u003c/p\u003e\",\"cards\":[{\"id\":242,\"type\":\"feature\",\"title\":\"FCM and web push\",\"description\":\"\u003cp\u003eRegistered devices are sent to through Firebase Cloud Messaging, which delivers to Android and iOS, or through web push with VAPID for browsers, from the same send call.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":243,\"type\":\"feature\",\"title\":\"iOS categories and action buttons\",\"description\":\"\u003cp\u003eDefine a notification category with an ordered set of action buttons and their labels, then attach it to a template. Categories sync to the device so the system notification renders the right buttons.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":244,\"type\":\"feature\",\"title\":\"A tap fires a real workflow\",\"description\":\"\u003cp\u003eWhen someone taps an action button, the tap is verified against a signed, category-scoped token and checked against the project's registered actions, then it triggers a workflow. A lock-screen button can start automation, not just open the app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":245,\"type\":\"feature\",\"title\":\"Templates with per-button actions\",\"description\":\"\u003cp\u003eBuild a push template once, with its own action buttons and click behaviour, then send it from a workflow step with templated fields instead of hand-building the payload each time.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]},{\"id\":246,\"type\":\"feature\",\"title\":\"Bulk sends over the queue\",\"description\":\"\u003cp\u003eSending to a list fans each recipient out as its own message on the queue, so a broadcast to thousands of devices doesn't run as a slow synchronous loop inside the workflow.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]}
14,{\"id\":247,\"type\":\"feature\",\"title\":\"Triggered from any workflow\",\"description\":\"\u003cp\u003eSend a push as a step in any workflow, using the same trigger types as the rest of Anythink: an entity change, a schedule, a manual run, or an API call.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[35]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Built for real notification flows\",\"description\":\"\u003cp\u003eFrom a one-off broadcast to a tap that re-triggers automation, modelled as a workflow step.\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:10:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"push notification backend, push notifications with action buttons, FCM backend, web push VAPID, iOS notification categories, notification workflow automation\",\"seo_focus_keyword\":\"Push notification backend with action buttons\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: a push notification with Start, Snooze and Skip buttons.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Android and web show the buttons as sent. On iOS the app registers the matching button group first.\",\"example\":\"Settings â Push Notifications â Send notification\\nTitle: Time for your workout\\nBody: Your session starts in 10 minutes\\nButtons: add Start, Snooze and Skip\\nRecipients: Specific users â pick a user\\nSend to 1 user\\n\\nâ the notification arrives with three action buttons\",\"clip\":\"dashboard/push/action-buttons\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same send, as one API call from a script or CI job.\",\"example\":\"anythink fetch /push/test --method POST --body \\\\\\n '{\\\"title\\\":\\\"Time for your workout\\\",\\\"body\\\":\\\"Your session starts in 10 minutes\\\",\\\"target_user_id\\\":72,\\\"buttons\\\":[{\\\"id\\\":\\\"start\\\",\\\"label\\\":\\\"Start\\\"},{\\\"id\\\":\\\"snooze\\\",\\\"label\\\":\\\"Snooze\\\"},{\\\"id\\\":\\\"skip\\\",\\\"label\\\":\\\"Skip\\\"}]}'\",\"result\":[\"Push sent to user 72's registered devices\",\"Buttons: Start, Snooze, Skip\",\"The delivery result is under Push Notifications â History\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Say who gets it and what the buttons are. It sends the push and reports the result.\",\"example\":\"âSend user 72 a push saying their workout starts in 10 minutes, with Start, Snooze and Skip buttons.â\",\"result\":[\"Sent through the project's push providers\",\"Added three action buttons: Start, Snooze, Skip\",\"Delivery result is in the History tab\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"A category, a template, and a triggered send\",\"tabs\":[{\"label\":\"Workflow step\",\"language\":\"text\",\"code\":\"Trigger: EntityUpdated on orders (changed_to: status = \\\"shipped\\\")\\n\\nSteps:\\n 1. SendPushNotification\\n â template: order-shipped\\n â recipients: {{ $anythink.trigger.data.customer_id }}\\n\\nThe order-shipped template carries its own\\naction buttons: \\\"Track package\\\", \\\"Contact support\\\".\"},{\"label\":\"Tap endpoint\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/push/action-events\\nContent-Type: application/json\\n\\n{\\n \\\"notification_id\\\": \\\"\u003csigned token issued at send time\u003e\\\",\\n \\\"category\\\": \\\"order-shipped\\\",\\n \\\"action_id\\\": \\\"track-package\\\",\\n \\\"received_at\\\": \\\"2026-10-02T09:00:00Z\\\",\\n \\\"responded_at\\\": \\\"2026-10-02T09:00:04Z\\\"\\n}\"},{\"label\":\"Register a device\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/push/vapid-public-key\"}]},\"narrative\":{\"heading\":\"What you can build\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Order status pushes with a tracking action\",\"prose\":\"When an order's status changes to shipped, a workflow sends a push with a \\\"Track package\\\" button. Tapping it fires a workflow that looks up the tracking link, instead of just deep-linking into the app.\"},{\"title\":\"A reminder with Snooze and Done buttons\",\"prose\":\"A scheduled workflow pushes a reminder with two actions. \\\"Done\\\" marks the task complete via a workflow step; \\\"Snooze\\\" re-queues the same reminder for later, all from the lock screen.\"},{\"title\":\"A broadcast to every subscriber\",\"prose\":\"A manual workflow loops over a list of recipients and sends through the queue, so a broadcast to a large group doesn't run as a slow, synchronous send inside the workflow.\"}]}}},{\"id\":64,\"slug\":\"secrets\",\"type\":\"product\",\"title\":\"Secrets\",\"status\":\"published\",\"hero\":{\"headline\":\"API keys and tokens,/encrypted and out of sight\",\"description\":\"\u003cp\u003eStore the API keys, tokens and credentials your backend needs as project secrets. They're encrypted at rest, never shown again after you save them, and decrypted only at the moment a workflow step uses them.\u003c/p\u003e\",\"featurePills\":[\"AES-256-GCM at rest\",\"Never displayed after saving\",\"{{ $anythink.secrets.KEY }} in workflows\",\"Shared with chosen users\",\"Role permissions\",\"CLI and MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows/secrets\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Secrets your workflows can use,/and nobody can read\",\"description\":\"\u003cp\u003eOne encrypted store for every credential your backend touches: AI provider keys, payment keys, webhook tokens and third-party API keys.\u003c/p\u003e\",\"cards\":[{\"id\":285,\"type\":\"feature\",\"title\":\"Encrypted at rest with AES-256-GCM\",\"description\":\"\u003cp\u003eEvery value is encrypted before it's stored, using AES-256-GCM with a key derived through PBKDF2 (600,000 iterations). The plaintext never sits in your database.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":286,\"type\":\"feature\",\"title\":\"Write once, never shown again\",\"description\":\"\u003cp\u003eAfter you save a secret, the dashboard, API and CLI show only its name and dates, never the value. To change it, you replace it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":287,\"type\":\"feature\",\"title\":\"Use them in any workflow step\",\"description\":\"\u003cp\u003eWrite \u003ccode\u003e{{ $anythink.secrets.STRIPE_SECRET_KEY }}\u003c/code\u003e in a Call an API header, a script or an integration step. The value is decrypted inside the workflow worker when that step runs, and nowhere else.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":288,\"type\":\"feature\",\"title\":\"Shared with the people who need them\",\"description\":\"\u003cp\u003eProject administrators see every secret. Everyone else sees only the secrets shared with them, either read-only or editable.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":289,\"type\":\"feature\",\"title\":\"Controlled by roles\",\"description\":\"\u003cp\u003eReading, creating, updating and deleting secrets are separate permissions, so a role can use the backend without ever managing its credentials.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]},{\"id\":290,\"type\":\"feature\",\"title\":\"Every stored credential, the same protection\",\"description\":\"\u003cp\u003eIntegration OAuth credentials, push notification service accounts and Apple in-app purchase keys are encrypted the same way, so nothing sensitive is stored in plain text.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[64]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:11:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"store API keys securely, encrypted secrets management, backend secrets, workflow secrets, environment variables alternative, API key storage, secrets manager for apps\",\"seo_focus_keyword\":\"Encrypted secrets for your backend and workflows\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: store a Stripe key and use it from a workflow.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"clip\":\"dashboard/workflows/secrets\",\"caption\":\"Save the key once, then reference it by name in a workflow step.\",\"example\":\"Settings â Secrets â Add Secret\\nKey: STRIPE_SECRET_KEY\\nValue: paste it, then Save\\n\\nWorkflows â Sync Stripe customers â Add Step â Call An API\\nHeader Authorization: Bearer {{ $anythink.secrets.STRIPE_SECRET_KEY }}\\n\\nâ the key is decrypted only when the step runs\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The value is prompted for, so it never lands in your shell history.\",\"example\":\"anythink secrets create STRIPE_SECRET_KEY\\nanythink secrets list\",\"result\":[\"STRIPE_SECRET_KEY stored, encrypted with AES-256-GCM\",\"list shows names and dates, never values\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Keep the value out of chat: store it in the dashboard or CLI, then ask the assistant to use it.\",\"example\":\"âAdd a step to the Sync Stripe customers workflow that calls the Stripe customers API, using the STRIPE_SECRET_KEY secret as a bearer token.â\",\"result\":[\"Added a Call An API step\",\"Authorization header references {{ $anythink.secrets.STRIPE_SECRET_KEY }}\",\"The secret's value was never read or shown\"]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"Store a key once, then use it from a workflow\",\"tabs\":[{\"label\":\"Store the secret\",\"language\":\"bash\",\"code\":\"anythink secrets create STRIPE_SECRET_KEY\\n# prompts for the value, so it never lands in your shell history\"},{\"label\":\"List what's stored\",\"language\":\"bash\",\"code\":\"anythink secrets list\\n# names and dates only; values are never shown\"},{\"label\":\"Use it in a workflow step\",\"language\":\"text\",\"code\":\"Call an API POST https://api.stripe.com/v1/refunds\\nHeader Authorization: Bearer {{ $anythink.secrets.STRIPE_SECRET_KEY }}\"}]},\"narrative\":{\"heading\":\"What teams keep in secrets\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"AI provider keys\",\"prose\":\"Keep a Claude, OpenAI or Grok key in one place and reference it from every workflow that summarises, translates or analyses. To rotate it, update the secret, not each workflow.\"},{\"title\":\"Payment and webhook credentials\",\"prose\":\"Stripe keys, webhook signing secrets and partner API tokens live in one place instead of being pasted into each workflow. Send them in a header or the body: Call an API logs header names, never the
14ir values.\"},{\"title\":\"Per-environment configuration\",\"prose\":\"Staging and production projects each hold their own secrets under the same names, so a workflow promoted with anythink migrate picks up the right credentials in each.\"}]}}},{\"id\":65,\"slug\":\"email\",\"type\":\"product\",\"title\":\"Email\",\"status\":\"published\",\"hero\":{\"headline\":\"Transactional email,/sent from your own domain\",\"description\":\"\u003cp\u003eSend sign-up confirmations, invites, password resets, magic links and any email your app needs, from your own verified domain and with your own templates. Workflows send email when a record changes, on a schedule, or when your API calls them.\u003c/p\u003e\",\"featurePills\":[\"Your own sending domain\",\"Editable templates\",\"Built-in auth emails\",\"Send from any workflow\",\"Attachments and inline images\",\"Gmail sender logo\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/workflows/email\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Email that comes from you,/not from your backend vendor\",\"description\":\"\u003cp\u003eEvery email your users receive carries your domain, your design and your sender name, without you running a separate email service.\u003c/p\u003e\",\"cards\":[{\"id\":291,\"type\":\"feature\",\"title\":\"Your own verified sending domain\",\"description\":\"\u003cp\u003eAdd your domain, publish the DNS records Anythink shows you, and verify it. Email then goes out from your addresses, authenticated for your domain rather than ours.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":292,\"type\":\"feature\",\"title\":\"Several sender addresses, one default\",\"description\":\"\u003cp\u003eSend support mail from support@ and receipts from billing@. Pick a default, and choose a different address per workflow step when you need to.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":293,\"type\":\"feature\",\"title\":\"Sign-up, invite and reset emails built in\",\"description\":\"\u003cp\u003eAccount confirmation, team invites, password resets and magic links are sent for you by Anythink's authentication, using templates you can restyle.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":294,\"type\":\"feature\",\"title\":\"Templates with a shared shell\",\"description\":\"\u003cp\u003eWrite each template once, wrap them all in one branded HTML shell, and preview the rendered result with real variables before anything is sent.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":295,\"type\":\"feature\",\"title\":\"Send from any workflow\",\"description\":\"\u003cp\u003eA Send an Email step addresses its recipient from the triggering record, a related user or a fixed address, fills the template from the record's data, and can attach files from your project as attachments or inline images.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]},{\"id\":296,\"type\":\"feature\",\"title\":\"Your logo next to your name in Gmail\",\"description\":\"\u003cp\u003eUpload a sender avatar and Anythink adds the Schema.org markup Gmail uses to show it beside your messages.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[65]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]}
14,\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:12:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"transactional email API, send email from backend, custom sending domain, email templates API, password reset email, magic link email, workflow email automation, SendGrid alternative backend\",\"seo_focus_keyword\":\"Transactional email API with your own domain\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"proofs\",\"heading\":\"Email that comes from you\",\"subheading\":\"Verify a domain, set a sender and preview a template, all in the Anythink dashboard.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Sending domains\",\"title\":\"Your domain, verified in a few clicks\",\"clip\":\"dashboard/email/sending-domain\",\"body\":\"Add mail.yourdomain.com, publish the DNS records the Anythink dashboard shows you, and verify. Set hello@ as your default sender and every email goes out under your name.\",\"links\":[{\"label\":\"Email in workflows\",\"href\":\"https://docs.anythink.cloud/guides/workflows/email\"}]},{\"eyebrow\":\"Templates\",\"title\":\"Preview with real variables before anything sends\",\"body\":\"Each template is rendered inside one shared, branded shell. Preview it with sample data, then send it from any workflow step.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"}]},{\"eyebrow\":\"Built in\",\"title\":\"Sign-up, invite, reset and magic-link emails\",\"body\":\"Authentication sends these for you, from your domain and in your design.\",\"links\":[{\"label\":\"Authentication\",\"href\":\"/products/authentication\"}]}]}}],\"narrative\":{\"heading\":\"What teams send\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Order and booking confirmations\",\"prose\":\"A new paid order triggers a workflow that emails the customer a templated receipt, with the invoice PDF from your file store attached, from billing@yourdomain.\"},{\"title\":\"Status changes your users care about\",\"prose\":\"When an application, ticket or delivery changes status, a workflow filtered on that change emails the right person, with the record's details already in the template.\"},{\"title\":\"Scheduled summaries\",\"prose\":\"A timed workflow reads the week's new records and emails your team a summary every Monday morning, without anyone running a report.\"}]}}}],\"for_me\":[{\"id\":2,\"slug\":\"for-founders\",\"type\":\"for_me\",\"title\":\"For Founders\",\"status\":\"published\",\"hero\":{\"headline\":\"From MVP to paying customers,/on one project\",\"description\":\"\u003cp\u003eAnythink gives founders sign-in, a REST API, subscriptions, workflows and an operations dashboard in one project, from first prototype to paying customers.\u003c/p\u003e\",\"featurePills\":[\"Apple\",\"Google and LinkedIn sign-in\",\"Stripe and Apple in-app purchases\",\"Visual workflows\",\"Operations dashboard\",\"Everything included in every plan\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What you'd otherwise/stitch together\",\"description\":\"\u003cp\u003eSign-in, payments, automation and an admin dashboard, all reading the same data model.\u003c/p\u003e\",\"cards\":[{\"id\":2
1412,\"type\":\"feature\",\"title\":\"Sign-in your users expect\",\"description\":\"\u003cp\u003eEmail and password, magic links, and Apple, Google and LinkedIn sign-in with tokens verified on the server. The open source React SDK handles sign-in and sessions in your web app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":213,\"type\":\"feature\",\"title\":\"Charge from the first release\",\"description\":\"\u003cp\u003ePlans, trials and offer codes with Stripe, plus Apple in-app purchases verified against the App Store. Your app asks a /me endpoint whether the signed-in user has access.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":214,\"type\":\"feature\",\"title\":\"Automate the busywork\",\"description\":\"\u003cp\u003eWorkflows run when a record changes, on a schedule or from an API call. Send a welcome email, push a reminder, post to Slack or ask Claude to draft a reply, without a separate automation tool.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":215,\"type\":\"feature\",\"title\":\"Run the business from the dashboard\",\"description\":\"\u003cp\u003eCharts, materialised views that join your data with subscriptions, and grid, kanban, calendar and map views. Your first hires work in the same project your app uses.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]},{\"id\":216,\"type\":\"feature\",\"title\":\"No rebuild at the next stage\",\"description\":\"\u003cp\u003eRoles, row-level security and group access are there when you need them, and the CLI promotes a staging project to production. The project you prototype on is the one you scale.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[2]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:for_me:0:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":4,\"slug\":\"my_anythink\",\"title\":\"Account, billing and projects\"},\"seo_keywords\":\"startup backend, MVP backend, backend with subscriptions, Apple in-app purchase backend, Firebase alternative for startups, Supabase alternative for startups\",\"seo_focus_keyword\":\"Backend for startup founders and MVPs\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Sell a monthly plan with a 14-day trial.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the plan. It syncs to Stripe once you have connected it.\",\"example\":\"Settings â Stripe â connect your Stripe account\\nCreate a plan: Pro Monthly, £9.99 a month, 14-day trial\\n\\nâ your app checks access on /me/entitlement\",\"clip\":\"dashboard/payments/create-plan\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Create the plan through the API, once Stripe onboarding is done.\",\"example\":\"anythink pay connect\\nanythink fetch /integrations/anythinkpay/subscription-plans \\\\\\n --method POST --body '{\\\"plan_name\\\":\\\"pro-monthly\\\",\\n \\\"name\\\":\\\"Pro Monthly\\\",\\\"description\\\":\\\"Full access\\\",\\n \\\"amount\\\":9.99,\\\"currency\\\":\\\"gbp\\\",\\n \\\"billing_interval\\\":\\\"month\\\",\\\"trial_period_days\\\":14}'\\nanythink pay status\",\"language\":\"bash\",\"result\":[\"Stripe onboarding started\",\"Plan Pro Monthly created: £9.99 a month, 14-day trial\",\"Stripe account status shown\"],\"clip\":\"cli/payments/create-plan\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the plan in plain English.\",\"example\":\"âSet up a Pro Monthly plan at £9.99 a month with a 14-d
14ay free trial, and tell me whether our Stripe account is ready to take payments.â\",\"result\":[\"Created plan Pro Monthly at £9.99 a month\",\"Added a 14-day trial\",\"Checked the Stripe account status\",\"Told you what is left to finish onboarding\"]}]}},{\"type\":\"proofs\",\"heading\":\"Built for the first paying customer\",\"subheading\":\"The pieces a startup needs before it hires a backend engineer.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Subscriptions\",\"title\":\"Web and iOS subscriptions on one record\",\"body\":\"Stripe plans and Apple in-app purchases land on the same subscriber. Re-verifying an Apple receipt never creates a duplicate subscription.\",\"links\":[{\"label\":\"Subscriptions\",\"href\":\"/products/subscriptions\"},{\"label\":\"Payments quick start\",\"href\":\"https://docs.anythink.cloud/guides/payments/quick-start\"}],\"clip\":\"dashboard/payments/apple-iap-setup\"},{\"eyebrow\":\"Sign-in\",\"title\":\"Apple and Google sign-in, checked on the server\",\"body\":\"Native sign-in tokens are verified by Anythink before a session is issued, and each user's provider is shown in the dashboard.\",\"links\":[{\"label\":\"Authentication\",\"href\":\"/products/authentication\"},{\"label\":\"Social sign-in\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}]},{\"eyebrow\":\"Workflows\",\"title\":\"Onboarding emails without another tool\",\"body\":\"Trigger a workflow when a record is created or changes, on a schedule or from an API call, then send email and push or call another service.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]},{\"eyebrow\":\"Pricing\",\"title\":\"Everything included in every plan\",\"body\":\"Workflows, payments and dashboards are in Free as well as paid plans. You pay for storage, users and usage, not features.\",\"links\":[{\"label\":\"Pricing\",\"href\":\"/pricing\"},{\"label\":\"Core concepts\",\"href\":\"https://docs.anythink.cloud/get-started/core-concepts\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Model your product\",\"prose\":\"Create entities for the things your product tracks. Each one gets a REST API straight away.\"},{\"title\":\"Let people sign in\",\"prose\":\"Turn on email, magic link, Apple, Google or LinkedIn sign-in, and use the open source SDK to add sign-in to your web app.\"},{\"title\":\"Charge for it\",\"prose\":\"Connect Stripe, create a plan with a trial, add Apple in-app purchases for iOS, and check entitlement from your app.\"},{\"title\":\"Automate it\",\"prose\":\"Add workflows for welcome emails, reminders and alerts that run when your data changes.\"},{\"title\":\"Run it\",\"prose\":\"Watch signups and revenue in the dashboard, and give your first hires a role that shows them what they need.\"}],\"aside\":{\"eyebrow\":\"Charge for it\",\"title\":\"Subscribe a user and check their access\",\"body\":\"Your app asks one endpoint whether a user is entitled, whether they paid through Stripe or Apple.\",\"clip\":\"dashboard/payments/subscribe-user\",\"link\":{\"label\":\"Payments quick start\",\"href\":\"https://docs.anythink.cloud/guides/payments/quick-start\"}}}}},{\"id\":6,\"slug\":\"for-enterprise\",\"type\":\"for_me\",\"title\":\"For Enterprise\",\"status\":\"published\",\"hero\":{\"headline\":\"A managed backend,/on a stack of your own\",\"description\":\"\u003cp\u003eAnythink gives enterprise teams a managed backend with roles, row-level security and encrypted secrets, on a dedicated Kubernetes cluster if you need one.\u003c/p\u003e\",\"featurePills\":[\"Dedicated stack on request\",\"Any DigitalOcean region\",\"Single sign-on (SSO)\",\"Custom SLA \u0026 compliance\",\"Row-level security and groups\",\"Encrypted secrets\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Contact sales\",\"action\":\"/contact\"},\"secondaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Controls your security team/will ask about\",\"description\":\"\u003cp\u003eThe access, secrets and environment c
14ontrols that come with every project, plus a dedicated stack when you need one.\u003c/p\u003e\",\"cards\":[{\"id\":206,\"type\":\"feature\",\"title\":\"A dedicated stack, on request\",\"description\":\"\u003cp\u003eEnterprise customers can run Anythink on their own Kubernetes cluster, separate from the shared platform. We build it for you on request; it isn't a self-serve option.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":207,\"type\":\"feature\",\"title\":\"Roles, row-level security and groups\",\"description\":\"\u003cp\u003ePermissions follow an entity:action pattern for every entity. Row-level security grants records to users or whole groups, and group members read their team's data while staff-only records stay private.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":208,\"type\":\"feature\",\"title\":\"Encrypted secrets\",\"description\":\"\u003cp\u003eAPI keys, tokens and secret fields are encrypted with AES-256-GCM and never shown again after they're saved. Workflows and integrations use them without exposing the value.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":209,\"type\":\"feature\",\"title\":\"Promotion between environments\",\"description\":\"\u003cp\u003eThe CLI's migrate command copies entities, workflows, roles and permissions, settings and menus from one project to another, with a dry run first.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":210,\"type\":\"feature\",\"title\":\"Integrations through your own OAuth apps\",\"description\":\"\u003cp\u003eSet your own client ID and secret per provider, so users approve your organisation's app rather than a shared one. Connections can belong to the project or to an individual user.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]},{\"id\":211,\"type\":\"feature\",\"title\":\"Scoped, expiring API keys\",\"description\":\"\u003cp\u003eEach key carries only the permissions you list and expires after a set number of days. The CLI checks that every permission exists and that you hold it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[6]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:for_me:1:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"dedicated backend infrastructure, enterprise backend as a service, row-level security, role-based access control, encrypted secrets, staging to production promotion, bring your own OAuth app\",\"seo_focus_keyword\":\"Enterprise backend with dedicated infrastructure\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Give a CI pipeline a scoped API key that expires.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"API keys live under My Account.\",\"example\":\"My Account â API Keys â Create API Key\\nName: github-actions, expires in 90 days\\nPermissions: orders:read, orders:update\\n\\nâ the key is shown once; store it in your CI secrets\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Permission names are checked before the key is created.\",\"example\":\"anythink fetch /permissions\\nanythink api-keys create github-actions \\\\\\n --permissions orders:read,orders:update \\\\\\n --expires-in 90 --save-as ci\",\"language\":\"bash\",\"result\":[\"Permission names checked against the project\",\"Key github-actions created, expires in 90 days\",\"Key shown once and saved to the ci profile\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the key and the permissions it needs.\",\"example\":\"âCreate a 90-day API key called github-actions that can only read and update orders, and tell me if any permission couldn't be granted.â\",\"result\":[\"Checked the permission names exist\",\"Created github-actions with orders:read and orders:update\",\"Set it to expire in 90 days\",\"Reported that every permission was granted\"]}]}},{\"type\":\"proofs\",\"heading\":\"What enterprise teams check first\",\"subheading\":\"Controls every project gets, plus infrastru
14cture of your own.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Infrastructure\",\"title\":\"A cluster of your own\",\"body\":\"A dedicated stack runs Anythink on its own Kubernetes cluster, separate from other customers. Anythink builds and runs it for you.\",\"links\":[{\"label\":\"Contact sales\",\"href\":\"/contact\"},{\"label\":\"Pricing\",\"href\":\"/pricing\"}]},{\"eyebrow\":\"Access\",\"title\":\"Group access that keeps staff data private\",\"body\":\"Row-level security separates group membership from group roles, so a customer's team can read its own records while staff-only records stay hidden.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}],\"clip\":\"dashboard/access/group-rls\"},{\"eyebrow\":\"Secrets\",\"title\":\"Encrypted once, never displayed\",\"body\":\"Secrets use AES-256-GCM with a per-secret salt and nonce. They're write-only through the API, the dashboard and the CLI.\",\"links\":[{\"label\":\"Secrets in workflows\",\"href\":\"https://docs.anythink.cloud/guides/workflows/secrets\"},{\"label\":\"Anythink CLI\",\"href\":\"/solutions/anythink-cli\"}]},{\"eyebrow\":\"Integrations\",\"title\":\"Your OAuth app, your consent screen\",\"body\":\"Configure your own client ID and secret for Slack, Google and other providers, so users approve your organisation's app.\",\"links\":[{\"label\":\"Integrations\",\"href\":\"/products/integrations\"},{\"label\":\"Integrations reference\",\"href\":\"https://docs.anythink.cloud/guides/integrations/reference\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Talk to us\",\"prose\":\"Tell us about your workload and integration needs. We'll agree whether a dedicated stack is right for you.\"},{\"title\":\"We build the stack\",\"prose\":\"Anythink provisions your dedicated Kubernetes cluster and runs it for you.\"},{\"title\":\"Model and secure\",\"prose\":\"Create entities, roles and permissions, set row-level security and groups, and store credentials as encrypted secrets.\"},{\"title\":\"Promote with the CLI\",\"prose\":\"Build in a staging project, preview with anythink migrate --dry-run, then promote to production.\"}],\"aside\":{\"eyebrow\":\"Dedicated stack\",\"title\":\"Need your own cluster?\",\"body\":\"A dedicated stack, with its own Kubernetes cluster, is built on request. It is not self-serve.\",\"link\":{\"label\":\"Talk to us\",\"href\":\"/contact\"}}}}},{\"id\":27,\"slug\":\"for-agencies\",\"type\":\"for_me\",\"title\":\"For Agencies\",\"status\":\"published\",\"hero\":{\"headline\":\"A project per client,/started from your template\",\"description\":\"\u003cp\u003eAnythink gives agencies a project per client, a branded dashboard to hand over, and a CLI that copies your template project into each new client project.\u003c/p\u003e\",\"featurePills\":[\"A project per client\",\"Template to client with migrate\",\"Branded dashboards\",\"Per-user connections\",\"Client-ready data views\",\"A plan per project\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Build it once,/deliver it to every client\",\"description\":\"\u003cp\u003eYour template becomes the starting point, and each client gets a project and a dashboard of their own.\u003c/p\u003e\",\"cards\":[{\"id\":201,\"type\":\"feature\",\"title\":\"A project per client\",\"description\":\"\u003cp\u003eEach client gets their own project with separate data, users, roles, API keys and integrations. Switch between them in the CLI with saved profiles.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]},{\"id\":202,\"type\":\"feature\",\"title\":\"Start every client from a template\",\"description\":\"\u003cp\u003eBuild your standard backend once. \u003ccode\u003eanythink migrate\u003c/code\u003e copies its entities, workflows, roles, settings and menus into each new client project, with a dry run first.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]},{\"id\":203,\"type\":\"feature\",\"title\":\"Dashboards in the client's brand\",\"description\":\"\u003cp\u003eSet the client's colours, grey palette, corner radius, logos and menus, and send their system email from their own verified domain.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]},{\"id\":204,\"type\":\"feature\",\"title\":\"Connections per user\",\"description\":\"\u003cp\u003eA client's users can each connect their own Slack, Google Calendar or AI account, so workflows post and book as them rather than as one shared login.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]}
14,{\"id\":205,\"type\":\"feature\",\"title\":\"A dashboard your client can run\",\"description\":\"\u003cp\u003eInvite the client's team with a role, and give them grid, kanban, calendar and map views and charts over their own data. They manage their business without a custom admin panel.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[27]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:for_me:2:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":\"\",\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"agency backend platform, backend for client projects, branded client dashboard, project template migration, per-user integrations, multi-project backend\",\"seo_focus_keyword\":\"Backend platform for agencies\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Start a client project from your template.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the project and invite the client. The template copy is not in the dashboard yet.\",\"example\":\"Create project: Acme Ltd\\nSettings â Users â invite the client's team, with a role\\n\\nâ copying your template runs from the CLI or MCP; the dashboard has no copy button yet\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Create, connect, preview the copy, then run it.\",\"example\":\"anythink projects create \\\"Acme Ltd\\\" --region lon1\\nanythink projects use \u003cproject-id\u003e\\n\\nanythink migrate --from agency-template --to acme-ltd \\\\\\n --include-workflows --include-roles \\\\\\n --include-settings --include-menus --dry-run\\n\\nanythink users invite [email protected] Jo Bloggs --role-id 3\",\"language\":\"bash\",\"result\":[\"Project Acme Ltd created in lon1\",\"Dry run lists entities, workflows, roles, settings and menus\",\"Jo Bloggs invited with role 3\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the client project in one request.\",\"example\":\"âCreate a project called Acme Ltd in London, copy our agency template's entities, workflows, roles, settings and menus into it, show me a dry run first, then invite [email protected] as an editor.â\",\"result\":[\"Created Acme Ltd in London\",\"Showed a dry run of the template copy\",\"Copied entities, workflows, roles, settings and menus\",\"Invited [email protected] as an editor\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why agencies standardise on Anythink\",\"subheading\":\"One template, many clients, each with a project of their own.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Templates\",\"title\":\"Your standard backend, copied in one command\",\"body\":\"migrate copies entities and fields, and when you ask, workflows, roles and permissions, settings, menus, files and data. Permissions are remapped to the client project's entities.\",\"links\":[{\"label\":\"Anythink CLI\",\"href\":\"/solutions/anythink-cli\"},{\"label\":\"Core concepts\",\"href\":\"https://docs.anythink.cloud/get-started/core-concepts\"}]},{\"eyebrow\":\"Branding\",\"title\":\"The client's colours, logos and email domain\",\"body\":\"Each project carries its own theme, menus and sending domain, so the dashboard y
14ou hand over looks like the client's.\",\"links\":[{\"label\":\"Branded dashboards\",\"href\":\"/solutions/white-label-platform\"},{\"label\":\"Branding and menus\",\"href\":\"https://docs.anythink.cloud/guides/dashboards/branding-and-menus\"}]},{\"eyebrow\":\"Integrations\",\"title\":\"Each user connects their own accounts\",\"body\":\"User-scoped connections let a client's staff connect their own calendar or Slack, and workflows act on their behalf.\",\"links\":[{\"label\":\"Integrations\",\"href\":\"/products/integrations\"},{\"label\":\"Integrations quick start\",\"href\":\"https://docs.anythink.cloud/guides/integrations/quick-start\"}],\"clip\":\"cli/integrations/user-scoped-connect\"},{\"eyebrow\":\"Handover\",\"title\":\"A dashboard, not a support ticket\",\"body\":\"Clients work in grid, kanban, calendar and map views with charts on their own data, under roles you set, so routine changes don't come back to you.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"},{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Build a template project\",\"prose\":\"Model your standard entities, roles, workflows and menus once, in a project you keep as the template.\"},{\"title\":\"Create the client project\",\"prose\":\"Create a project for the client and connect to it with anythink projects use. Each project picks its own plan.\"},{\"title\":\"Copy the template\",\"prose\":\"Run anythink migrate from the template to the client project with a dry run, then for real.\"},{\"title\":\"Brand it\",\"prose\":\"Set the client's colours, logos and menus, and verify their sending domain so system email comes from them.\"},{\"title\":\"Hand it over\",\"prose\":\"Invite the client's team with roles, and let each user connect their own integrations.\"}],\"aside\":{\"eyebrow\":\"Next\",\"title\":\"Brand each client project\",\"body\":\"Set colours, logos and menus, and send system email from the client's own domain.\",\"link\":{\"label\":\"White-label platform\",\"href\":\"/solutions/white-label-platform\"}}}}}],\"solution\":[{\"id\":3,\"slug\":\"content-manager\",\"type\":\"solution\",\"title\":\"Content Management\",\"status\":\"published\",\"hero\":{\"headline\":\"Your content model,/live as an API\",\"description\":\"\u003cp\u003eAnythink works as a headless CMS: model content types, edit them in the Anythink dashboard, and serve them to your website through a public REST API.\u003c/p\u003e\",\"featurePills\":[\"Custom content types\",\"Rich-text fields\",\"Media metadata\",\"Public read API\",\"Editorial kanban\",\"Full-text search\",\"Editor roles\"],\"image\":{\"url\":\"/cdn-assets/20804318/bc08731c67464edcb2ccfcbfc36c54c2.png\",\"alt\":\"Content Management\"},\"images\":[{\"id\":\"44\",\"url\":\"/cdn-assets/20804318/bc08731c67464edcb2ccfcbfc36c54c2.png\",\"alt\":\"Content Management\",\"original_file_name\":\"content management.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/use-cases/headless-cms\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"A CMS that is also/your backend\",\"description\":\"\u003cp\u003eContent types are ordinary Anythink entities, so the same project holds your content, your users and your app data.\u003c/p\u003e\",\"cards\":[{\"id\":158,\"type\":\"feature\",\"title\":\"Rich text next to structured fields\",\"description\":\"\u003cp\u003eGive a text field the rich-text display and editors write long-form copy in the dashboard. The body sits on the same record as its title, author, category and hero image, so your site can query on any of them.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/3a3f4bb75b4e4fdbab22b23b0e3ff77c.mp4\",\"alt\":\"Rich text next to structured fields\"},\"pageIds\":[3]},{\"id\":159,\"type\":\"feature\",\"title\":\"Files with their metadata\",\"description\":\"\u003cp\u003eUploads stream straight to object storage. Anythink then probes each image, audio or video file out of process and records its size, dimensions, duration and a SHA-256 hash. Downloads use short-lived signed URLs, and files marked public need no sign-in.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]},{\"id\":160,\"type\":\"feature\",\"title\":\"Content types you define\",\"description\":\"\u003cp\u003eCreate an entity for each content type and g
14ive it the fields it needs: text, rich text, dates, selects, relationships, files and JSON. Each type gets a REST API as soon as it's saved.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/f7b352ae05e04e0aa8bbc5f55a92e5a0.mp4\",\"alt\":\"Content types you define\"},\"pageIds\":[3]},{\"id\":192,\"type\":\"feature\",\"title\":\"An editorial board from your status field\",\"description\":\"\u003cp\u003eSwitch any content type to the kanban view and it groups records by a status field you choose. Editors drag an article from in review to published; grid and calendar views read the same records.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]},{\"id\":193,\"type\":\"feature\",\"title\":\"Search across your content\",\"description\":\"\u003cp\u003eMark fields as searchable and Anythink indexes them, with filters, facets, sorting and highlighting. Public search only ever returns fields you've marked public.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]},{\"id\":194,\"type\":\"feature\",\"title\":\"Roles for editors and writers\",\"description\":\"\u003cp\u003eCreate an editor role that can read, create and update articles but not delete them. Add row-level security when writers should only see their own drafts.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[3]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:0:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"headless CMS, API-first CMS, content modelling, Strapi alternative, Directus alternative, editorial kanban board, media library with metadata, public content API\",\"seo_focus_keyword\":\"Headless CMS with a REST API\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Create an articles content type your website can read.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Model the content type, then your editors write in the same place.\",\"example\":\"Data Model â Add Entity: articles (public)\\nAdd Field: title (varchar, required, searchable)\\nAdd Field: body (text, rich text)\\nAdd Field: hero_image (file)\\nAdd Field: status (select: draft, in_review, published)\\nCreate Entity\\n\\nâ GET /entities/articles/public/items is live\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same content type, scriptable and repeatable.\",\"example\":\"anythink entities create articles --public\\nanythink fields add articles title --type varchar \\\\\\n --required --public --searchable\\nanythink fields add articles body --type text \\\\\\n --display rich-text --public\\nanythink fields add articles hero_image --type file \\\\\\n --display file --public\\nanythink fields add articles status --type varchar \\\\\\n --display select --options draft,in_review,published --public\",\"language\":\"bash\",\"result\":[\"Entity articles created, public\",\"Fields added: title, body, hero_image, status\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the content type. The assistant runs the same commands.\",\"example\":\"âCreate an articles content type for our blog with a required, searchable title, a rich-text body, a hero image and a status of draft, in review or published. Make it publicly readable so our website can fetch published articles.â\",\"result\":[\"Entity articles, publicly readable\",\"Title is required and searchable\",\"Body is ric
14h text, with a hero image\",\"Status: draft, in review, published\"]}]}},{\"type\":\"proofs\",\"heading\":\"What makes it work as a CMS\",\"subheading\":\"Content types are entities, so every part of Anythink works with them.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Public API\",\"title\":\"Your website reads content without a key\",\"body\":\"Mark a content type and its fields public, and /entities/articles/public/items serves them without sign-in, with paging, sorting and field filters. Fields you don't mark public stay private.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"API reference\",\"href\":\"https://docs.anythink.cloud/reference\"}]},{\"eyebrow\":\"Media\",\"title\":\"Upload a video, get its duration\",\"body\":\"A worker probes each upload with ffprobe and writes duration, dimensions, bitrate, size and a hash back to the file record. Your site can show a running time without reading the file itself.\",\"links\":[{\"label\":\"File manager\",\"href\":\"/products/smart-file-manager\"},{\"label\":\"Files guide\",\"href\":\"https://docs.anythink.cloud/guides/database/files\"}]},{\"eyebrow\":\"Editorial\",\"title\":\"Kanban columns from your status field\",\"body\":\"The kanban view groups any content type by a status field. Moving a card updates the record, so the board and the API never disagree about what's published.\",\"links\":[{\"label\":\"Data views\",\"href\":\"/solutions/flexible-data-views\"},{\"label\":\"Model your data\",\"href\":\"https://docs.anythink.cloud/guides/database/model-your-data\"}],\"clip\":\"dashboard/database/switch-views\"},{\"eyebrow\":\"Automation\",\"title\":\"Publishing can start a workflow\",\"body\":\"Trigger a workflow when an article's status changes to published: post to Slack, email your subscribers or call a webhook to rebuild your site.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Model your content types\",\"prose\":\"Create an entity for articles, case studies or products and add the fields each one needs, including rich text, files and relationships to authors or categories.\"},{\"title\":\"Give editors a role\",\"prose\":\"Create an editor role with read, create and update permissions on your content types, then invite your writers to the Anythink dashboard.\"},{\"title\":\"Run the editorial board\",\"prose\":\"Editors write in the dashboard and move content through draft, in review and published on the kanban view.\"},{\"title\":\"Fetch it from your site\",\"prose\":\"Your website calls the public endpoint for each content type and asks for published records only. A field you add in the dashboard appears in the response straight away.\"}],\"aside\":{\"eyebrow\":\"Editorial board\",\"title\":\"Move content through draft, review and published\",\"body\":\"Switch the articles entity to Kanban View and drag cards between statuses.\",\"clip\":\"dashboard/database/switch-views\",\"link\":{\"label\":\"Flexible data views\",\"href\":\"/solutions/flexible-data-views\"}}},\"code\":{\"heading\":\"In practice\",\"subheading\":\"Read, search and secure your content\",\"tabs\":[{\"label\":\"Fetch published articles\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/entities/articles/public/items?status=published\u0026sortBy=id\u0026sortDirection=desc\u0026page=1\u0026pageSize=10\"},{\"label\":\"Search content\",\"language\":\"bash\",\"code\":\"anythink search query \\\"pricing\\\" --entities articles \\\\\\n --filter \\\"status=published\\\" --public --highlight\"},{\"label\":\"Add an editor role\",\"language\":\"bash\",\"code\":\"anythink roles create editor --description \\\"Writes and edits articles\\\"\\nanythink roles permissions add \u003crole-id\u003e articles \\\\\\n --actions read,create,update\"}]}}},{\"id\":15,\"slug\":\"flexible-data-views\",\"type\":\"solution\",\"title\":\"Flexible Data Views\",\"status\":\"published\",\"hero\":{\"headline\":\"One dataset,/five ways to work with it\",\"description\":\"\u003cp\u003eSwitch any entity between a grid, a kanban board, a calendar, a map and charts in the Anythink dashboard, all on the same records your API serves.\u003c/p\u003e\",\"featurePills\":[\"Grid with inline editing\",\"Kanban by status\",\"Calendar from date fields\",\"Map from geo fields\",\"Per-entity charts\",\"CSV import\"],\"image\":{\"url\":\"/cdn-assets/20804318/d7c0180c8aa645eb99b444a4922837e2.png\",\"alt\":\"Flexible Data Views\"},\"images\":[{\"id\":\"57\",\"url\":\"/cdn-assets/20804318/d7c0180c8aa645eb99b444a4922837e2.png\",\"alt\":\"Flexible Data Views\",\"original_file_name\":\"calender.png\"},{\"id\":\"58\",\"url\":\"/cdn-assets/20804318/9e4cee7da11449c38da0878055e80171.png\",\"alt\":\"Flexible Data Views\",\"original_file_name\":\"kanban.png\"},{\"id\":\"59\",\"url\":\"/cdn-assets/20804318/1e18fa29fea042989a93337d707c5ef6.png\",\"alt\":\"Flexible Data Views\",\"original_file_name\":\"grid view.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/database\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Five views,/one set of records\",\"description\":\"\u003cp\u003eEvery view reads and writes the same entity through the same API and permissions, so nothing is copied and nothing drifts.\u003c/p\u003e\",\"cards\":[{\"id\":164,\"type\":\"feature\",\"title\":\"Grid with inline editing\",\"description\":\"\u003cp\u003eA spreadsheet-style grid with column filters, sorting and pagination. Tur
14n on Instant Edit to change values in the cell, or import a CSV from the same screen.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/f7b352ae05e04e0aa8bbc5f55a92e5a0.mp4\",\"alt\":\"Grid with inline editing\"},\"pageIds\":[15]},{\"id\":165,\"type\":\"feature\",\"title\":\"Kanban by status\",\"description\":\"\u003cp\u003eGroup records into columns by a select field, such as status. Drag a card to another column and Anythink updates that record through the API.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]},{\"id\":166,\"type\":\"feature\",\"title\":\"Calendar from date fields\",\"description\":\"\u003cp\u003eLay records out on a calendar by a date or timestamp field to see bookings, deadlines and events at a glance.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/f44dcfc44f794d668673854ba05cf630.mp4\",\"alt\":\"Calendar from date fields\"},\"pageIds\":[15]},{\"id\":179,\"type\":\"feature\",\"title\":\"Charts per entity\",\"description\":\"\u003cp\u003eBuild column, bar, line, pie, funnel and cohort charts from an entity's fields, with counts or totals over time, then save them to use on dashboards.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]},{\"id\":180,\"type\":\"feature\",\"title\":\"Map from geo fields\",\"description\":\"\u003cp\u003ePlot every record with a geo field as a pin and click through to the record. Field service, deliveries and listings read better on a map.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]},{\"id\":183,\"type\":\"feature\",\"title\":\"The same data as your API\",\"description\":\"\u003cp\u003eViews read and write through the entity API with the signed-in user's permissions, so changes made in a view trigger the same workflows as changes from your app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[15]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:1:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"kanban view of database records, calendar view of records, map view of data, data grid with inline editing, admin panel views, internal tool views, charts from database\",\"seo_focus_keyword\":\"Grid, kanban, calendar and map views of your data\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Move order 1042 from packed to shipped.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Drag the card. The record updates.\",\"example\":\"orders â Kanban View\\nStatus Field: status\\nDrag order 1042 from Packed to Shipped\\n\\nâ status is now shipped, and workflows wat
14ching it run\",\"clip\":\"dashboard/database/switch-views\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same update, scriptable.\",\"example\":\"anythink data get orders 1042\\nanythink data update orders 1042 \\\\\\n --data '{\\\"status\\\":\\\"shipped\\\"}'\",\"language\":\"bash\",\"result\":[\"Order 1042 read\",\"status is now shipped\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask in plain text. The assistant runs the same commands.\",\"example\":\"âMark order 1042 as shipped, then tell me which orders are still packed.â\",\"result\":[\"Read order 1042\",\"Set its status to shipped\",\"Listed orders still packed\",\"Workflows watching status ran\"]}]}},{\"type\":\"proofs\",\"heading\":\"Views that do real work\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Kanban\",\"title\":\"A drag is a real update\",\"body\":\"Moving a card writes the new status through the entity API, so permissions apply and any workflow watching for the change runs.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"}]},{\"eyebrow\":\"Map\",\"title\":\"One geo field, a map and geo search\",\"body\":\"The geo field that puts records on the map also powers radius search and nearest-first sorting in the search API.\",\"links\":[{\"label\":\"Search\",\"href\":\"/products/powerful-search-engine\"}]},{\"eyebrow\":\"Charts\",\"title\":\"From an entity to a dashboard\",\"body\":\"Save a chart from an entity's Charts View and add it to a dashboard alongside materialised views and other widgets.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}],\"clip\":\"dashboard/dashboards/build-chart\"},{\"eyebrow\":\"Import\",\"title\":\"Bring your data with you\",\"body\":\"Import a CSV from the grid with a saved column mapping, then switch views on the new records straight away.\",\"links\":[{\"label\":\"Visual database designer\",\"href\":\"/products/visual-database-designer\"},{\"label\":\"Database guides\",\"href\":\"https://docs.anythink.cloud/guides/database\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an entity to the view that suits the job\",\"steps\":[{\"title\":\"Give the entity the right fields\",\"prose\":\"A select field for a kanban board, a date or timestamp for the calendar, a geo field for the map.\"},{\"title\":\"Open it in the dashboard\",\"prose\":\"Every entity opens in the grid. Switch with the view buttons above it: Grid, Kanban, Map, Calendar or Charts.\"},{\"title\":\"Work in the view\",\"prose\":\"Edit cells in the grid, drag cards on the board, or click a pin or an event to open the record.\"},{\"title\":\"Chart it\",\"prose\":\"Build charts in Charts View, save them, and add them to a dashboard for the rest of the team.\"}],\"aside\":{\"eyebrow\":\"See it switch\",\"title\":\"One entity, five views\",\"body\":\"Open the same records as a grid, kanban board, map, calendar or chart.\",\"clip\":\"dashboard/database/switch-views\",\"link\":{\"label\":\"Dashboards guide\",\"href\":\"https://docs.anythink.cloud/guides/dashboards\"}}}}},{\"id\":17,\"slug\":\"white-label-platform\",\"type\":\"solution\",\"title\":\"Branded dashboard\",\"status\":\"published\",\"hero\":{\"headline\":\"Your brand on the dashboard,/your domain on the email\",\"description\":\"\u003cp\u003eBrand the Anythink dashboard with your colours, logos, corner radius and menus, and send system email from your own verified domain and sender address.\u003c/p\u003e\",\"featurePills\":[\"Primary colour and grey palette\",\"Corner radius\",\"Square and standard logos\",\"Menu configuration\",\"Verified sending domains\",\"Branded system email\"],\"image\":{\"url\":\"/cdn-assets/20804318/1491ff7813e7422d8bca3889a3d1b903.png\",\"alt\":\"Branded dashboard\"},\"images\":[{\"id\":\"61\",\"url\":\"/cdn-assets/20804318/1491ff7813e7422d8bca3889a3d1b903.png\",\"alt\":\"Branded dashboard\",\"original_file_name\":\"Branding.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/dashboards/branding-and-menus\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Branding you set once,/per project\",\"description\":\"\u003cp\u003eEvery project carries its own theme, logos, menus, email templates and sending domains.\u003c/p\u003e\",\"cards\":[{\"id\":167,\"type\":\"feature\",\"title\":\"Colours, corner radius and logos\",\"description\":\"\u003cp\u003ePick a primary colour, a grey palette and a corner radius in \u003cstrong\u003eOrganisation Settings ⺠Branding\u003c/strong\u003e, and upload a square and a standard logo. The dashboard previews each change as you make it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":168,\"type\":\"feature\",\"title\":\"Branded system email\",\"description\":\"\u003cp\u003eSign-up confirmations, invitations, password resets and magic links use your email templates and a shared layout with your logo, header and footer. They go out from your default sender once its domain is verified.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":261,\"type\":\"feature\",\"title\":\"Sending domains you verify\",\"description\":\"\u003cp\u003eRegister a hostname, add the DNS records Anythink issues at your DNS provider, and verify it. You can then add sender addresses on that domain, choose a default, and set the avatar Gmail shows next to your messages.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":262,\"type\":\"feature\",\"title\":\"Menus shaped to the job\",\"description\":\"\u003cp\u003eChoose which entities appear in the dashboard's navigation and in what order, so a client or an operations team sees their data first, not the whole data model.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]},{\"id\":263,\"type\":\"feature\",\"title\":\"Copy a brand to another project\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink migrate --include-settings --include-menus\u003c/code\u003e copies the theme and menus from one project to another. Add \u003ccode\u003e--include-files\u003c/code\u003e and the logos come too.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[17]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Who sets up branding\",\"description\":\"\u003cp\u003eAgencies branding a client's project, and SaaS builders giving their own product a consistent look.\u003c/p\u003e\",\"cards\":[]}
14,\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:2:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"branded admin dashboard, custom dashboard theme, branded system email, custom sending domain, admin panel branding, agency client dashboard\",\"seo_focus_keyword\":\"Branded admin dashboard for your app\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Send system email from your own domain.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Settings ⺠Email Templates ⺠Sending Domains.\",\"example\":\"Settings â Email Templates â Sending Domains\\nAdd a sending domain: mail.acme.com\\nAdd the DNS records it issues at your DNS provider\\nVerify\\nAdd a sender address: [email protected], make default\\n\\nâ confirmation and invitation email now comes from [email protected]\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The same API calls through anythink fetch.\",\"example\":\"anythink fetch /tenant-domains --method POST \\\\\\n --body '{\\\"hostname\\\":\\\"mail.acme.com\\\"}'\\n\\n# add the DNS records it returns, then\\nanythink fetch /tenant-domains/12/verify --method POST\\n\\nanythink fetch /tenant-sender-addresses --method POST \\\\\\n --body '{\\\"address\\\":\\\"[email protected]\\\",\\\"display_name\\\":\\\"Acme\\\",\\\"make_default\\\":true}'\",\"language\":\"bash\",\"result\":[\"Domain mail.acme.com registered, DNS records returned\",\"Domain verified\",\"[email protected] is the default sender\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Ask for the domain and the records you need to add.\",\"example\":\"âRegister mail.acme.com as a sending domain for this project and show me the DNS records to add. When I say they're in place, verify the domain and make [email protected] the default sender.â\",\"result\":[\"Registered mail.acme.com\",\"Listed the DNS records to add\",\"Verified the domain once you confirmed\",\"Made [email protected] the default sender\"]}]}},{\"type\":\"proofs\",\"heading\":\"What you can brand, and what you can't\",\"subheading\":\"Every project carries its own brand settings.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Theme\",\"title\":\"Primary colour, grey palette and corner radius\",\"body\":\"Three settings restyle the whole dashboard, from buttons to tables. Square and standard logos replace the defaults in the navigation.\",\"links\":[{\"label\":\"Branding and menus\",\"href\":\"https://docs.anythink.cloud/guides/dashboards/branding-and-menus\"},{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}]},{\"eyebrow\":\"Email\",\"title\":\"Only verified domains send under your name\",\"body\":\"A Send an Email step can only use a From address on a domain you've verified. Anything else falls back to your default sender, so an unverified address never goes out as you.\",\"links\":[{\"label\":\"Email in workflows\",\"href\":\"https://docs.anythink.cloud/guides/workflows/email\"},{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"}]},{\"eyebrow\":\"Templates\",\"title\":\"System emails in your layout\",\"body\":\"Confirmation, invitation, password reset and magic link emails are templates you can edit, wrapped in one layout that carries your logo, header and footer.\",\"links\":[{\"label\":\"Authentication\",\"href\":\"/products/authentication\"},{\"label\":\"Email guide\",\"href\":\"https://docs.anythink.cloud/guides/workflows/email\"}]},{\"eyebrow\":\"Limits\",\"title\":\"Branding, not a full white-label\",\"body\":\"There's no custom domain for the dashboard and Anythink marks remain. For a customer-facing interface that is entirely yours, build a front end on the REST API.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"TypeScript SDK\",\"href\":\"/solutions/typescript-sdk\"}]}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Set the theme\",\"prose\":\"In Organisation Settings ⺠Branding, choose a primary colour, a grey palette and a corner radius, and upload your logos.\"},{\"title\":\"Shape the menus\",\"prose\":\"In Menu Configuration, choose which entities appear in the navigation and in what order.\"},{\"title\":\"Verify a sending domain\",\"prose\":\"Register your domain under Email Templates, add the DNS records it issues and verify it. Add a sender address and make it the default.\"},{\"title\":\"Edit the system emails\",\"prose\":\"Adjust the confirmation, invitation, password reset and magic link templates and the shared layout around them.\"},{\"title\":\"Reuse it\",\"prose\":\"Copy the theme and menus to another project with anythink migrate, so every client or environment starts with the same brand.\"}],\"aside\":{\"eyebrow\":\"Next\",\"title\":\"Start every client project from a template\",\"body\":\"Copy your theme, menus, roles and workflows into a new project with one command.\",\"link\":{\"label\":\"For agencies\",\"href\":\"/solutions/for-agencies\"}}}}},{\"id\":28,\"slug\":\"typescript-sdk\",\"type\":\"solution\",\"title\":\"TypeScript SDK\",\"status\":\"published\",\"hero\":{\"headline\":\"Sign-in and sessions,/without the boilerplate\",\"description\":\"\u003cp\u003eThe Anythink SDK is an open source React library for sign-in and sessions: an auth client, a provider, a useAuth hook, and a base class for authenticated requests. Data calls go through the REST API directly â there's no hidden query layer to learn.\u003c/p\u003e\",\"featurePills\":[\"Open source\",\"React\",\"Token refresh handled\",\"Multi-tab session isolation\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"View on GitHub\",\"action\":\"https://github.com/Anythink-Ltd/anythink-sdk\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/rest-api/sdk\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Auth and sessions, handled\",\"description\":\"\u003cp\u003eThe SDK is sign-in and sessions, done properly, so you're not hand-rolling token refresh in every project.\u003c/p\u003e\",\"cards\":[{\"id\":151,\"type\":\"feature\",\"title\":\"Silent, de-duplicated token refresh\",\"description\":\"\u003cp\u003eConcurrent requests that hit a 401 don't each fire their own refresh call. AuthenticatedBaseService registers a response interceptor that serialises and caches the refresh, then replays the original requests once it completes.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]},{\"id\":256,\"type\":\"feature\",\"title\":\"AuthProvider and useAuth\",\"description\":\"\u003cp\u003eWrap your app in AuthProvider, point authPrefix at your login route, and call useAuth anywhere for sign-in, sign-out and the current session. No manual token plumbing through your component tree.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]},{\"id\":257,\"type\":\"feature\",\"title\":\"Session storage you choose\",\"description\":\"\u003cp\u003ePick cookie, sessionStorage or localStorage per AuthClient instance. sessionStorage and localStorage isolate sessions per browser tab, which matters if your app opens multiple projects or environments side by side.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]},{\"id\":258,\"type\":\"feature\",\"title\":\"A base class for authenticated calls\",\"description\":\"\u003cp\u003eExtend AuthenticatedBaseService once, and every request through it carries the session token and handles refresh automatically. Data calls go through the standard Anythink REST API underneath, not a separate client-side query language.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[28]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:3:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"anythink sdk, react authentication sdk, token refresh react, auth provider react\",\"seo_focus_keyword\":\"Open source React SDK for sign-in and sessions\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"code\":{\"heading\":\"In practice\",\"subheading\":\"The SDK's actual surface\",\"tabs\":[{\"label\":\"Set up the auth client\",\"language\":\"typescript\",\"code\":\"import { AuthClient } from \\\"@anythink-cloud/sdk\\\";\\n\\nlet authClientInstance: AuthClient | null = null;\\n\\nexport const getAuthClient = (): AuthClient =\u003e {\\n if (!authClientInstance) {\\n authClientInstance = new AuthClient({\\n instanceUrl: \\\"https://api.my.anythink.cloud\\\",\\n orgId: 12345678,\\n storageType: \\\"sessionStorage\\\", // \\\"cookie\\\" (default), \\\"sessionStorage\\\" or \\\"localStorage\\\"\\n });\\n }\\n return authClientInstance;\\n};\"},{\"label\":\"Wrap your app\",\"language\":\"typescript\",\"code\":\"import { AuthProvider } from \\\"@anythink-cloud/sdk\\\";\\n\\n\u003cAuthProvider\\n authClient={getAuthClient()}\\n loginUrl=\\\"/auth/login\\\"\\n authPrefix=\\\"/auth\\\" // must match your login route prefix\\n\u003e\\n {children}\\n\u003c/AuthProvider\u003e\"},{\"label\":\"Sign in\",\"language\":\"typescript\",\"code\":\"import { useAuth } from \\\"@anythink-cloud/sdk\\\";\\n\\nconst auth = useAuth();\\n\\nconst handleLoginSubmit = async (values: { email: string; password: string }) =\u003e {\\n try {\\n await auth?.signIn(values.email, values.password);\\n } catch (err) {\\n setError(err?.toString() ?? \\\"An error occurred. Please try again.\\\");\\n }\\n};\"},{\"label\":\"Authenticated requests\",\"language\":\"typescript\",\"code\":\"import { AuthenticatedBaseService } from \\\"@anythink-cloud/sdk\\\";\\n\\nclass OrdersService extends AuthenticatedBaseService {\\n constructor() {\\n super(getAuthClient(), \\\"https://api.my.anythink.cloud\\\");\\n }\\n\\n // GET /org/{org_id}/entities/orders/items, with the session token attached\\n // and a 401 handled by a silent refresh â no extra code here.\\n listOrders() {\\n return this.get(\\\"/org/12345678/entities/orders/items\\\");\\n }\\n}\"}]},\"narrative\":{\"heading\":\"What it's for, and what it isn't\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Sign-in that works the same everywhere\",\"prose\":\"One AuthClient configuration covers email/password, session refresh and logout. Wire it into a React or Next.js app once, and every authenticated call through AuthenticatedBaseService carries a valid token.\"},{\"title\":\"Multiple sessions in the same browser\",\"prose\":\"sessionStorage or localStorage mode isolates a session per tab, which matters if your app, or your team, moves between projects or environments without wanting one login to bleed into another.\"},{\"title\":\"Data calls stay on the REST API\",\"prose\":\"The SDK doesn't wrap your entities in a query builder. You call the same REST endpoints documented in the API reference, through a service class that handles the auth header and token refresh for you.\"}]},\"links\":[{\"label\":\"npm install @anythink-cloud/sdk\",\"url\":\"https://www.npmjs.com/package/@anythink-cloud/sdk\",\"icon\":\"npm\",\"description\":\"Latest stable release on npm\"},{\"label\":\"github.com/Anythink-Ltd/anythink-sdk\",\"url\":\"https://github.com/Anythink-Ltd/anythink-sdk\",\"icon\":\"github\",\"description\":\"Star, fork, and contribute\"}],\"linksHeading\":\"Get the SDK · Get involved\"}},{\"id\":29,\"slug\":\"anythink-cli\",\"type\":\"solution\",\"title\":\"Anythink CLI\",\"status\":\"published\",\"hero\":{\"headline\":\"Your whole backend,/from the terminal\",\"description\":\"\u003cp\u003eThe open source Anythink CLI runs a whole project from the terminal: entities, fields, data, workflows, roles, users, files, search, secrets and integrations.\u003c/p\u003e\",\"featurePills\":[\"MIT licence\",\"Homebrew install\",\"migrate --dry-run\",\"Permission-checked API keys\",\"--json output\",\"Same commands over MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/reference/cli\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Every part of a project,/one command away\",\"description\":\"\u003cp\u003eThe CLI talks to the same API as the dashboard, so anything you script here shows up there straight away.\u003c/p\u003e\",\"cards\":[{\"id\":153,\"type\":\"feature\",\"title\":\"Workflows as files\",\"description\":\"\u003cp\u003eExport a workflow to JSON, keep it in your repository and seed it into another project with variables substituted. Add steps, trigger runs and read job history from the terminal.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":170,\"type\":\"feature\",\"title\":\"Schema from the command line\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink entities create\u003c/code\u003e and \u003ccode\u003eanythink fields add\u003c/code\u003e cover public and row-level-secured entities, relationships, selects with options, rich text, files, geo and secret fields.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":174,\"type\":\"feature\",\"title\":\"Promote staging to production\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink migrate --from staging --to prod --dry-run\u003c/code\u003e previews what will change. Then copy entities and fields, plus workflows, roles and permissions, settings, menus, files and data when you ask for them.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":175,\"type\":\"feature\",\"title\":\"JSON for scripts and CI\",\"description\":\"\u003cp\u003eData, search, integrations, API keys, \u003ccode\u003eapi\u003c/code\u003e and \u003ccode\u003edocs\u003c/code\u003e commands take \u
14003ccode\u003e--json\u003c/code\u003e, and \u003ccode\u003eanythink fetch\u003c/code\u003e calls any endpoint on the active project and prints its response.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":176,\"type\":\"feature\",\"title\":\"API keys that check their permissions\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink api-keys create\u003c/code\u003e requires a permission list, rejects names that don't exist and warns if the server dropped a permission you don't hold. Keys expire after 90 days unless you choose otherwise.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]},{\"id\":190,\"type\":\"feature\",\"title\":\"Integrations and secrets\",\"description\":\"\u003cp\u003eConnect Slack, Google Calendar, Claude or OpenAI through OAuth or an API key, at project or user level. Secrets are encrypted at rest and the CLI never displays their values.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[29]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:4:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"anythink cli, backend command line tool, open source cli, staging to production migration, CI/CD backend automation, API key permissions, homebrew cli\",\"seo_focus_keyword\":\"Open source CLI for your backend\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Connect Slack to a project.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for seeing what is connected.\",\"example\":\"Settings â Integrations â Slack â Connect\\nApprove access in Slack\\n\\nâ Slack steps appear in the workflow builder\",\"clip\":\"dashboard/integrations/connect-slack\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"One command opens the OAuth flow and saves the connection. Scriptable for any project.\",\"example\":\"anythink integrations oauth connect slack --name \\\"Team workspace\\\"\\nanythink integrations connections list\",\"language\":\"bash\",\"result\":[\"Browser opens to approve Slack access\",\"Connection Team workspace saved\"],\"clip\":\"cli/integrations/connect-slack\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"The assistant runs the same command and hands you the link to approve.\",\"example\":\"âConnect our Slack workspace to this project, name the connection Team workspace, and give me the link to approve it.â\",\"result\":[\"Started the Slack OAuth flow\",\"Named the connection Team workspace\",\"Sent you the link to approve\",\"Listed connections to confirm it saved\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why teams script Anythink\",\"subheading\":\"The CLI is a full client for the Anythink API, not a deploy helper.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Environments\",\"title\":\"Dry-run a promotion before it happens\",\"body\":\"migrate compares two projects and shows what it would create before it touches anything. It remaps entity-scoped permissions to the target project's entities.\",\"links\":[{\"label\":\"For agencies\",\"href\":\"/solutions/for-agencies\"},{\"label\":\"GitHub\",\"href\":\"https://github.com/anythink-cloud/anythink-cli\"}]},{\"eyebrow\":\"Access\",\"title\":\"The permission mistake, caught at creation\",\"body\":\"A missing permission is the most common reason an integration gets a 403. The CLI checks every n
14ame you pass and tells you when the server granted less than you asked for.\",\"links\":[{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"},{\"label\":\"Access control\",\"href\":\"/products/access-control\"}]},{\"eyebrow\":\"AI\",\"title\":\"MCP runs the same commands\",\"body\":\"The anythink-mcp server has a cli tool that runs any Anythink CLI command, so Claude, Cursor or another MCP client reaches everything the CLI does.\",\"links\":[{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"},{\"label\":\"Connect Claude with MCP\",\"href\":\"https://docs.anythink.cloud/guides/ai/connect-mcp\"}]},{\"eyebrow\":\"Integrations\",\"title\":\"Project-wide or per user\",\"body\":\"Connect a provider once for the whole project, or add --user-connection so the connection belongs to one user. Test, disable and disconnect connections from the terminal too.\",\"links\":[{\"label\":\"Integrations\",\"href\":\"/products/integrations\"},{\"label\":\"Integrations quick start\",\"href\":\"https://docs.anythink.cloud/guides/integrations/quick-start\"}],\"clip\":\"cli/integrations/user-scoped-connect\"}]}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Install\",\"prose\":\"Run brew install anythink-cloud/tap/anythink. You get the anythink CLI and the anythink-mcp server.\"},{\"title\":\"Sign in and pick a project\",\"prose\":\"Run anythink login, then anythink projects use \u003cid\u003e. Each project you connect is saved as a profile you can switch between with anythink config use.\"},{\"title\":\"Build\",\"prose\":\"Create entities and fields, add roles and permissions, connect integrations and set up workflows. Every change is live in the dashboard straight away.\"},{\"title\":\"Promote\",\"prose\":\"Run anythink migrate --dry-run from your staging profile to production, check the preview, then run it for real.\"}],\"aside\":{\"eyebrow\":\"Try it\",\"title\":\"Create an entity from the terminal\",\"body\":\"One command makes the entity and its REST API. Add fields with anythink fields add.\",\"clip\":\"cli/database/create-entity\",\"link\":{\"label\":\"Core concepts\",\"href\":\"https://docs.anythink.cloud/get-started/core-concepts\"}}},\"code\":{\"heading\":\"In practice\",\"subheading\":\"Real commands from anythink --help\",\"tabs\":[{\"label\":\"Schema\",\"language\":\"bash\",\"code\":\"anythink entities create products --rls\\nanythink fields add products price --type decimal --required\\nanythink fields add products status --type varchar \\\\\\n --display select --options draft,live\"},{\"label\":\"Data\",\"language\":\"bash\",\"code\":\"anythink data create products --data '{\\\"price\\\":19.99,\\\"status\\\":\\\"live\\\"}'\\nanythink data list products --limit 10 --json\\nanythink search query \\\"*\\\" --entities products --filter \\\"status=live\\\"\"},{\"label\":\"Workflows\",\"language\":\"bash\",\"code\":\"anythink workflows export 31 --output order-alerts.json\\nanythink config use acme-prod\\nanythink workflows seed order-alerts.json --var connection_id=abc-123\\nanythink workflows trigger 31 --payload '{\\\"order_id\\\":42}'\"},{\"label\":\"Promote\",\"language\":\"bash\",\"code\":\"anythink migrate --from acme-staging --to acme-prod \\\\\\n --include-workflows --include-roles --dry-run\"}]},\"links\":[{\"label\":\"brew install anythink-cloud/tap/anythink\",\"url\":\"https://github.com/anythink-cloud/homebrew-tap\",\"icon\":\"brew\",\"description\":\"macOS and Linux, installs the CLI and the MCP server\"},{\"label\":\"dotnet tool install --global anythink-cli\",\"url\":\"https://github.com/anythink-cloud/anythink-cli\",\"icon\":\"docs\",\"description\":\"Any platform with the .NET 8 SDK\"},{\"label\":\"github.com/anythink-cloud/anythink-cli\",\"url\":\"https://github.com/anythink-cloud/anythink-cli\",\"icon\":\"github\",\"description\":\"MIT-licensed. Star, fork and contribute\"}],\"linksHeading\":\"Get the CLI\"}},{\"id\":30,\"slug\":\"ai-and-mcp\",\"type\":\"solution\",\"title\":\"AI \u0026 MCP\",\"status\":\"published\",\"hero\":{\"headline\":\"AI that runs/your whole backend\",\"description\":\"\u003cp\u003eBuild your backend in a conversation, from Claude Code, Cursor or the AI chat in the Anythink dashboard. The same MCP tools reach the whole CLI, from entities and fields to workflows, roles, secrets and payments.\u003c/p\u003e\",\"featurePills\":[\"Public MCP server (stdio)\",\"Full CLI surface\",\"AI chat in the dashboard\",\"BYOK or platform key\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/ai\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"One backend, reachable from plain text\",\"description\":\"\u003cp\u003eThe dashboard is the simple interface. The API, CLI and MCP go further: text with an AI assistant is the interface, and the output is a working system.\u003c/p\u003e\",\"cards\":[{\"id\":155,\"type\":\"feature\",\"title\":\"A public MCP server, not a demo\",\"description\":\"\u003cp\u003e\u003ccode\u003eanythink-mcp\u003c/code\u003e is a published tool that speaks stdio, so it works with Claude Code, Cursor and any other MCP client. It isn't a cut-down preview: it reaches the same commands you'd run yourself.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":156,\"type\":\"feature\",\"title\":\"One tool reaches the whole CLI\",\"description\":\"\u003cp\u003eAlongside dedicated tools for accounts and projects, a generic \u003ccode\u003ecli\u003c/code\u003e tool runs any Anythink CLI command: entities, fields, data, workflows, roles, secrets, users, files, payments, integrations, migrate. An AI assistant isn't limited to a handful of pre-wired actions.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/3812e95409fd4b288aea790adcb5d37f.mp4\",\"alt\":\"One tool reaches the whole CLI\"},\"pageIds\":[30]},{\"id\":186,\"type\":\"feature\",\"title\":\"The dashboard's AI chat can build too\",\"description\":\"\u003cp\u003eThe AI chat in the dashboard uses the same MCP tools as an external assistant. Ask it a question about your data, or ask it to create an entity, add fields or set up a workflow, and it tells you what it did, the same way Claude does anywhere else. Every change is there to check in the dashboard.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":187,\"type\":\"feature\",\"title\":\"BYOK or a platform key\",\"description\":\"\u003cp\u003eEac
14h project chooses platform-managed AI usage, billed with quota tracking, or its own Claude connection for bring-your-own-key billing. Either way, the AI chat and Claude workflow steps use the project's chosen mode.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":188,\"type\":\"feature\",\"title\":\"Claude and Grok as workflow steps\",\"description\":\"\u003cp\u003eClaude and Grok are available as Integration steps inside a workflow, so a step can generate or transform text as part of a larger pipeline â a support ticket summarised before it's filed, a draft written before an email step sends it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]},{\"id\":189,\"type\":\"feature\",\"title\":\"Credential tools are blocked in hosted mode\",\"description\":\"\u003cp\u003eTools that mutate credentials â login, signup, logout, switching the active account or config â are explicitly blocked when the MCP server runs in the shared, multi-project HTTP deployment. They stay available over stdio, where the server runs as you, locally.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[30]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:5:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"AI that runs your backend, Claude Code backend MCP, Cursor backend MCP, AI chat in admin dashboard\",\"seo_focus_keyword\":\"MCP server for your backend\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Create a support_tickets entity and a workflow that emails the team when a ticket arrives.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for seeing exactly what was built.\",\"example\":\"Data Model â Add Entity: support_tickets\\nAdd Field: status (select)\\nCreate Entity\\nWorkflows â New Workflow: New ticket alert\\nTrigger: a support_tickets record is created\\nAdd step: Send an Email\\n\\nâ every new ticket emails [email protected]\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Scriptable and repeatable. Good for CI and for promoting staging to production.\",\"example\":\"anythink entities create support_tickets --rls\\nanythink fields add support_tickets status --type varchar \\\\\\n --display select --options new,open,closed\\n\\nanythink workflows create \\\"New ticket alert\\\" \\\\\\n --trigger Event --entity support_tickets \\\\\\n --event EntityCreated --enabled\\n\\nanythink workflows step-add 61 notify-team \\\\\\n --action SendAnEmail --start --enabled \\\\\\n --params '{\\\"to\\\":\\\"[email protected]\\\",\\\"template\\\":\\\"new-ticket\\\"}'\",\"language\":\"bash\",\"result\":[\"Entity support_tickets created, with row-level security\",\"Field status added\",\"Workflow New ticket alert created and enabled\",\"Step notify-team added\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe what you want, in Claude Code or the dashboard's AI chat. It runs the same commands and tells you what it did.\",\"example\":\"âCreate a support_tickets entity with row-level security and a status field. Then add a workflow that emails [email protected] whenever a new ticket is created.â\",\"result\":[\"Entity support_tickets, with row-level security\",\"Field status: new, open, closed\",\"Workflow: when a ticket is created, send an email\",\"Enabled, and ready to try with Test Workflow\"],\"clip\":\"dashboard/ai/chat-builds-entity\"}]}},{\"type\":\"principle\",\"heading\":\"Why the interface can be plain text\",\"subheading\":\"$undefined\",\"content\":{\"quote\":\"When the point of contact between the product and the people becomes a point of friction, then the industrial designer has failed.\",\"attribution\":\"Henry Dreyfuss, Designing for People, 1955\",\"body\":\"A dashboard has to be learned. An API has to be read. A conversation doesn't: you say
14what you want, and the Anythink MCP server carries it out, as real entities, fields and workflows. You don't have to learn Anythink before you can use it; you can describe the outcome, in your own words, and get a working system back.\"}}],\"links\":[{\"label\":\"MCP tools reference\",\"url\":\"https://docs.anythink.cloud/guides/ai/mcp-tools\",\"description\":\"Every tool the Anythink MCP server exposes\"},{\"label\":\"Connect the MCP server\",\"url\":\"https://docs.anythink.cloud/guides/ai/connect-mcp\",\"description\":\"Claude Code, Claude Desktop and other clients\"},{\"label\":\"AI recipes\",\"url\":\"https://docs.anythink.cloud/guides/ai/recipes\",\"description\":\"Worked examples with AI workflow steps\"}],\"linksHeading\":\"Related reading\"}},{\"id\":33,\"slug\":\"migrate-from-amazon-pinpoint\",\"type\":\"solution\",\"title\":\"Migrate from Amazon Pinpoint\",\"status\":\"published\",\"hero\":{\"headline\":\"Amazon Pinpoint is retiring./Your push notifications don't have to\",\"description\":\"\u003cp\u003eAmazon Pinpoint reaches end of support on 30 October 2026, and AWS Amplify's push notifications depend on it. Move device tokens, templates and campaign logic to Anythink: push built on FCM and web push, with taps that can trigger a workflow.\u003c/p\u003e\",\"featurePills\":[\"FCM and web push (VAPID)\",\"iOS action buttons\",\"Tap-to-workflow\",\"Bulk fan-out via the queue\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What moves, and what doesn't\",\"description\":\"\u003cp\u003eDevice tokens, templates and campaign logic all have a direct home in Anythink. Here is what each one becomes.\u003c/p\u003e\",\"cards\":[{\"id\":227,\"type\":\"feature\",\"title\":\"Device tokens, no separate service\",\"description\":\"\u003cp\u003eDevices register against your project's own push endpoint, not a third service you have to wire up. FCM and web push (VAPID) are both supported, with per-project credentials and per-device records you can list or revoke.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":228,\"type\":\"feature\",\"title\":\"Templates and iOS action categories\",\"description\":\"\u003cp\u003ePush templates hold the payload once and get reused across sends. iOS categories carry the action button order and labels, synced to the device, so a notification can offer Approve, Snooze or Reply without opening the app.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":229,\"type\":\"feature\",\"title\":\"A tap can trigger a workflow\",\"description\":\"\u003cp\u003eAction-button taps post to a signed, category-scoped endpoint that checks the action was actually registered for that notification before it fires. On a match, it triggers a real workflow â not just a logged event.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":230,\"type\":\"feature\",\"title\":\"Bulk sends run through the queue\",\"description\":\"\u003cp\u003eA Send Push step in a workflow can fan out over an array of recipients. Each one is published to a dedicated queue and sent independently, so a campaign to a segment doesn't run as a slow loop inside one job.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"What you're probably sending\",\"description\":\"\u003cp\u003eWhat Pinpoint-driven push is usually doing, and how it looks running on Anythink.\u003c/p\u003e\",\"cards\":[{\"id\":231,\"type\":\"use_case\",\"title\":\"Event-triggered transactional push\",\"description\":\"\u003cp\u003e\\\"Order shipped\\\" is a status change on a record, not a campaign you schedule.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eA workflow with an Event trigger on \u003ccode\u003eorders\u003c/code\u003e, filtered to \u003ccode\u003estatus changed_to \\\"shipped\\\"\u003c/code\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA Send Push step with the tracking link templated from the order record\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo polling, no separate campaign tool to keep in sync with your data\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":232,\"type\":\"use_case\",\"title\":\"Actionable notifications\",\"description\":\"\u003cp\u003eReplace a Pinpoint campaign that just opens the app with one that does something from the lock screen.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eA push category with Approve / Decline action buttons\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA tap on either button fires a workflow trigger with the choice attached\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe workflow updates the record and emails a confirmation, no app launch required\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]},{\"id\":233,\"type\":\"use_case\",\"title\":\"Scheduled digests and reminders\",\"description\":\"\u003cp\u003eThe campaigns Pinpoint would run on a schedule become a Timed trigger.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eA Timed workflow reads records matching a condition (for example, trials expiring in 3 days)\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA Send Push step fans the result set out to one notification per recipient\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eThe same workflow can also send an email in parallel steps of the pipeline\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[33]}]}
14,\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:6:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Pinpoint push notifications migration, Amplify push notifications alternative, FCM and web push backend, push notifications that trigger workflows\",\"seo_focus_keyword\":\"Amazon Pinpoint alternative\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Send a push notification when an order ships.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Build it in the workflow editor. The trigger and the push step replace a Pinpoint campaign.\",\"example\":\"Workflows â New Workflow: Order shipped push\\nTrigger: an orders record is updated, status changed to shipped\\nAdd step: Send a Push Notification\\nTitle: Your order shipped\\nSave and enable\\n\\nâ customers get a push when an order's status becomes shipped\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The trigger and the push step, scriptable and repeatable.\",\"example\":\"anythink workflows create \\\"Order shipped push\\\" \\\\\\n --trigger Event --entity orders --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"operator\\\":\\\"changed_to\\\",\\\"value\\\":\\\"shipped\\\"}' \\\\\\n --enabled\\n\\nanythink workflows step-add 42 send-tracking-push \\\\\\n --action SendPushNotification \\\\\\n --params '{\\\"to\\\":\\\"{{ $anythink.trigger.data.customer.device_token }}\\\",\\\"title\\\":\\\"Your order shipped\\\"}' \\\\\\n --start --enabled\",\"language\":\"bash\",\"result\":[\"Workflow Order shipped push created and enabled\",\"Step send-tracking-push added\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the campaign. The assistant builds the workflow.\",\"example\":\"âWhen an order's status changes to shipped, send a push notification to the customer saying their order shipped, with the tracking link.â\",\"result\":[\"Workflow: when an order's status changes to shipped\",\"Step: send a push notification to the customer's device\",\"Included the tracking link in the body\",\"Enabled, and ready to try with Test Workflow\"]}]}},{\"type\":\"matrix\",\"heading\":\"Anythink vs Pinpoint-dependent stacks\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Amplify / Pinpoint\"],\"rows\":[{\"capability\":\"Push notifications (FCM + web push)\",\"values\":[\"native\",\"addon\"],\"note\":\"Amplify's push notifications feature depends on Pinpoint, which reaches end of support 30 October 2026\"},{\"capability\":\"iOS action categories and buttons\",\"values\":[\"native\",\"unknown\"]},{\"capability\":\"Tap triggers a backend workflow\",\"values\":[\"native\",\"unknown\"]},{\"capability\":\"Bulk fan-out via a queue\",\"values\":[\"native\",\"unknown\"]}],\"footnote\":\"Amplify/Pinpoint column reflects published AWS documentation on the Pinpoint migration requirement, not a feature-by-feature audit of every Amplify configuration.\"}}],\"code\":{\"heading\":\"What a migrated send looks like\",\"subheading\":\"Real requests against the push API\",\"tabs\":[{\"label\":\"Register a device\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/push/devices\\n\\n{\\n \\\"provider\\\": \\\"fcm\\\",\\n \\\"token\\\": \\\"\u003cdevice-token\u003e\\\",\\n \\\"platform\\\": \\\"android\\\"\\n}\"},{\"label\":\"Create the workflow\",\"language\":\"bash\",\"code\":\"anythink workflows create \\\\\\n --name \\\"Order shipped push\\\" \\\\\\n --trigger Event \\\\\\n --entity orders \\\\\\n --event EntityUpdated \\\\\\n --filter '{\\\"field\\\":\\\"status\\\",\\\"o
14perator\\\":\\\"changed_to\\\",\\\"value\\\":\\\"shipped\\\"}' \\\\\\n --enabled\"},{\"label\":\"Add the push step\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 42 send-tracking-push \\\\\\n --name \\\"Send tracking push\\\" \\\\\\n --action SendPushNotification \\\\\\n --params '{\\n \\\"to\\\": \\\"{{ $anythink.trigger.data.customer.device_token }}\\\",\\n \\\"title\\\": \\\"Your order shipped\\\",\\n \\\"body\\\": \\\"Track it: {{ $anythink.trigger.data.tracking_url }}\\\"\\n }' \\\\\\n --start --enabled\"}]},\"narrative\":{\"heading\":\"Moving a Pinpoint setup\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Re-register your device tokens\",\"prose\":\"Export the endpoints from Pinpoint and re-register each device against your Anythink project's push endpoint, tagged with its provider (FCM or web push). This is a one-time batch job, not a new integration to maintain.\"},{\"title\":\"Turn campaign logic into workflow triggers\",\"prose\":\"A scheduled Pinpoint campaign becomes a Timed trigger. A behavioural campaign (send on an event) becomes an Event trigger with a filter, like status changed_to \\\"shipped\\\". Both are configured in the dashboard or with the CLI, not in campaign-definition JSON.\"},{\"title\":\"Rebuild message templates as push templates\",\"prose\":\"Recreate your Pinpoint message templates as Anythink push templates. If a campaign used custom data per recipient, the template variable syntax pulls fields straight from the triggering record or an earlier workflow step.\"},{\"title\":\"Wire up action buttons, if you used them\",\"prose\":\"iOS action categories carry the button order and labels to the device. Point each action at a workflow trigger instead of a Pinpoint event handler, and the tap does the same job it always did â just verified and triggered on your own backend.\"}],\"aside\":{\"eyebrow\":\"Next\",\"title\":\"Push with action buttons\",\"body\":\"Add buttons to a notification and point each tap at a workflow on your own backend.\",\"clip\":\"dashboard/push/action-buttons\",\"link\":{\"label\":\"Push notifications\",\"href\":\"/products/push-notifications\"}}}}},{\"id\":34,\"slug\":\"migrate-from-firebase-extensions\",\"type\":\"solution\",\"title\":\"Migrate from Firebase Extensions\",\"status\":\"published\",\"hero\":{\"headline\":\"Firebase Extensions is shutting down./Here's where each one goes\",\"description\":\"\u003cp\u003eFirebase Extensions shuts down on 31 March 2027, taking the Stripe payments extension and the RevenueCat in-app purchase extension with it. Anythink does both of those jobs natively, plus the workflow automation extensions normally fill in.\u003c/p\u003e\",\"featurePills\":[\"Native subscriptions\",\"Apple in-app purchases\",\"Workflow-driven email\",\"No extensions to reinstall\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"The job each extension did, built in\",\"description\":\"\u003cp\u003eFirebase Extensions wired third-party add-ons into Cloud Functions. Anythink does the same jobs natively, so there's nothing external to re-install after the shutdown.\u003c/p\u003e\",\"cards\":[{\"id\":234,\"type\":\"feature\",\"title\":\"Stripe payments, without the extension\",\"description\":\"\u003cp\u003eAnythinkPay handles subscription plans, offer codes, payment methods, charges, refunds and Stripe Connect directly â no extension to install, version, or lose when Extensions closes.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":235,\"type\":\"feature\",\"title\":\"Apple in-app purchases, natively\",\"description\":\"\u003cp\u003eApple IAP verification runs against the real App Store Server API, is idempotent on renewals, and binds each purchase to the buying user so a replayed transaction can't be claimed by someone else. This is the job the RevenueCat extension did.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]}
14,{\"id\":236,\"type\":\"feature\",\"title\":\"Trigger Email, as a workflow step\",\"description\":\"\u003cp\u003eThe Firebase \\\"Trigger Email\\\" extension watched a collection and sent an email on write. A Send an Email step on an Event-triggered workflow does the same thing, with the record's fields available to the template.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":237,\"type\":\"feature\",\"title\":\"Search, without an Algolia extension\",\"description\":\"\u003cp\u003eSearch is a built-in, Meilisearch-backed endpoint per entity, including facets, geo filters and vector similarity â not a third-party service wired up through an extension and kept in sync by a Cloud Function.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":true,\"title\":\"Common extension setups\",\"description\":\"\u003cp\u003eWhat these extensions were usually doing, and the Anythink equivalent.\u003c/p\u003e\",\"cards\":[{\"id\":238,\"type\":\"use_case\",\"title\":\"Subscription app, previously Stripe extension + Cloud Functions\",\"description\":\"\u003cp\u003ePlans and entitlement checks that used to span a Stripe extension and hand-written functions become one configuration.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eSubscription plans and offer codes managed in the dashboard\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eStripe Connect for split payments, if you need them\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e\u003ccode\u003e/me\u003c/code\u003e endpoints scoped to the signed-in subscriber for entitlement checks\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":239,\"type\":\"use_case\",\"title\":\"Mobile app with Apple in-app purchases\",\"description\":\"\u003cp\u003eReplacing the RevenueCat extension's verification step.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eThe app posts the App Store transaction for verification\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eAnythink verifies it against Apple's App Store Server API and records entitlement\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA renewal or restore re-verifies without creating a duplicate purchase\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]},{\"id\":240,\"type\":\"use_case\",\"title\":\"Notify on new document, previously Trigger Email\",\"description\":\"\u003cp\u003eThe most common Extensions use case: send an email when a record is created.\u003c/p\u003e\",\"examples\":\"\u003cul\u003e\u003cli\u003e\u003cp\u003eAn Event-triggered workflow on \u003ccode\u003eEntityCreated\u003c/code\u003e\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eA Send an Email step, templated from the new record's fields\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003eNo Cloud Function, no extension configuration to migrate before the shutdown\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[34]}]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:7:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Stripe Firebase extension replacement, RevenueCat Firebase extension alternative, Firebase trigger email alternative, Firebase Extensions shutdown\",\"seo_focus_keyword\":\"Firebase Extensions alternative\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Replace the Stripe extension: sell a monthly plan with a 14-d
14ay trial.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Create the plan. It syncs to Stripe once you have connected it.\",\"example\":\"Settings â Stripe â connect your Stripe account\\nCreate a plan: Pro Monthly, £9.99 a month, 14-day trial\\n\\nâ your app checks access on /me/entitlement\",\"clip\":\"dashboard/payments/create-plan\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Create the plan through the API, once Stripe onboarding is done.\",\"example\":\"anythink pay connect\\nanythink fetch /integrations/anythinkpay/subscription-plans \\\\\\n --method POST --body '{\\\"plan_name\\\":\\\"pro-monthly\\\",\\n \\\"name\\\":\\\"Pro Monthly\\\",\\\"description\\\":\\\"Full access\\\",\\n \\\"amount\\\":9.99,\\\"currency\\\":\\\"gbp\\\",\\n \\\"billing_interval\\\":\\\"month\\\",\\\"trial_period_days\\\":14}'\\nanythink pay status\",\"language\":\"bash\",\"result\":[\"Stripe onboarding started\",\"Plan Pro Monthly created: £9.99 a month, 14-day trial\",\"Stripe account status shown\"],\"clip\":\"cli/payments/create-plan\"},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe the plan in plain English.\",\"example\":\"âReplace our Firebase Stripe extension: set up a Pro Monthly plan at £9.99 a month with a 14-day free trial, and tell me whether our Stripe account is ready to take payments.â\",\"result\":[\"Created plan Pro Monthly at £9.99 a month\",\"Added a 14-day trial\",\"Checked the Stripe account status\",\"Told you what is left to finish onboarding\"]}]}},{\"type\":\"matrix\",\"heading\":\"Anythink vs Firebase + Extensions\",\"subheading\":\"$undefined\",\"content\":{\"columns\":[\"Anythink\",\"Firebase + Extensions\"],\"rows\":[{\"capability\":\"Subscription payments\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase's Stripe payments extension, shutting down 31 March 2027\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase relies on the RevenueCat extension\"},{\"capability\":\"Email on record write\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase's Trigger Email extension\"},{\"capability\":\"Search, including facets and geo\",\"values\":[\"native\",\"addon\"]}],\"footnote\":\"\\\"Addon\\\" reflects Firebase's own documented reliance on Extensions, a third-party marketplace, for these jobs rather than a native product feature.\"}}],\"code\":{\"heading\":\"Trigger Email, rebuilt as a workflow\",\"subheading\":\"The most common extension, as a workflow step\",\"tabs\":[{\"label\":\"Create the workflow\",\"language\":\"bash\",\"code\":\"anythink workflows create \\\\\\n --name \\\"Welcome email\\\" \\\\\\n --trigger Event \\\\\\n --entity users \\\\\\n --event EntityCreated \\\\\\n --enabled\"},{\"label\":\"Add the email step\",\"language\":\"bash\",\"code\":\"anythink workflows step-add 51 send-welcome-email \\\\\\n --name \\\"Send welcome email\\\" \\\\\\n --action SendAnEmail \\\\\\n --params '{\\n \\\"to\\\": \\\"{{ $anythink.trigger.data.email }}\\\",\\n \\\"template\\\": \\\"welcome\\\",\\n \\\"data\\\": { \\\"first_name\\\": \\\"{{ $anythink.trigger.data.first_name }}\\\" }\\n }' \\\\\\n --start --enabled\"},{\"label\":\"Check a purchase's entitlement\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/integrations/anythinkpay/subscriptions/me/entitlement\"}]},\"narrative\":{\"heading\":\"Moving off Extensions before March 2027\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Move payments off the Stripe extension\",\"prose\":\"Recreate your products and prices as AnythinkPay subscription plans. The extension's Firestore-synced subscription documents become AnythinkPay subscription records, and your app reads entitlement from the /me endpoints instead of a Firestore listener.\"},{\"title\":\"Move Apple IAP off the RevenueCat extension\",\"prose\":\"Point your app's purchase verification at Anythink instead of RevenueCat's endpoint. Verification, renewal handling and ownership binding are built in, so there's no separate service to keep paying for once Extensions closes.\"},{\"title\":\"Rebuild event-driven extensions as workflows\",\"prose\":\"Anything that used to run as \\\"on document write, do X\\\" â send an email, call an API, update a related record â becomes an Event-tr
14iggered workflow with the matching action step. No Cloud Functions runtime to provision or keep patched.\"}]}}},{\"id\":66,\"slug\":\"supabase-alternative\",\"type\":\"solution\",\"title\":\"Supabase alternative\",\"status\":\"published\",\"hero\":{\"headline\":\"A Supabase alternative,/with the rest of the backend built in\",\"description\":\"\u003cp\u003eSupabase gives you Postgres, auth and an API. Anythink gives you the database, REST API and sign-in too, plus the parts you'd otherwise bolt on: subscriptions with Apple in-app purchases, visual workflows, a dedicated search engine, push notifications and dashboards. All of it runs on one data model, in one project.\u003c/p\u003e\",\"featurePills\":[\"REST API and OpenAPI from your data model\",\"Stripe and Apple in-app purchases built in\",\"Visual workflows with AI steps\",\"Meilisearch with facets and geo\",\"Push with action buttons\",\"Run it from Claude through MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the full comparison\",\"action\":\"/articles/anythink-vs-supabase\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What you'd add to Supabase,/already in Anythink\",\"description\":\"\u003cp\u003eThe jobs that usually mean an extension, a webhook recipe or a second vendor alongside Supabase.\u003c/p\u003e\",\"cards\":[{\"id\":297,\"type\":\"feature\",\"title\":\"Subscriptions without a sync engine\",\"description\":\"\u003cp\u003ePlans, trials and offer codes on Stripe, and Apple in-app purchases verified on the server, land on the same subscriber record. No Stripe sync engine or webhook recipe to run.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":298,\"type\":\"feature\",\"title\":\"Workflows instead of edge-function glue\",\"description\":\"\u003cp\u003eTrigger on a record change, a schedule, a manual run or an API call, then send email or push, call an API, run a script or use Claude, OpenAI or Grok, all in a visual editor.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":299,\"type\":\"feature\",\"title\":\"A real search engine, not just full-text\",\"description\":\"\u003cp\u003eEvery project gets Meilisearch: typo tolerance, facets, highlighting, geo radius and distance sort, kept in step with your records. No PostGIS or separate search service.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":300,\"type\":\"feature\",\"title\":\"Access control down to the field\",\"description\":\"\u003cp\u003eRoles with per-entity permissions, field-level security per role, and row-level access for users and groups that workflows can set when a record is created.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":301,\"type\":\"feature\",\"title\":\"Dashboards on your app data\",\"description\":\"\u003cp\u003eBar, line, funnel and cohort charts, materialised views that join payment data, and grid, Kanban, map and calendar views for your team, without a separate BI tool.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]},{\"id\":302,\"type\":\"feature\",\"title\":\"Built for AI assistants\",\"description\":\"\u003cp\u003eThe Anythink MCP server and Claude Code skill let an assistant model your data, build workflows and query records. The dashboard's AI chat uses the same tools.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[66]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]}
14,\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:8:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Supabase alternative, Supabase alternatives 2026, backend as a service, BaaS, Supabase vs Anythink, Firebase alternative, managed backend with payments, backend with workflows\",\"seo_focus_keyword\":\"Supabase alternative with payments and workflows\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"matrix\",\"heading\":\"Anythink and Supabase, compared\",\"subheading\":\"What's built in, what needs an add-on, and where Supabase is the better fit.\",\"content\":{\"columns\":[\"Anythink\",\"Supabase\"],\"rows\":[{\"capability\":\"REST API generated from your data model\",\"values\":[\"native\",\"native\"]},{\"capability\":\"OpenAPI spec for your own data API\",\"values\":[\"native\",\"unknown\"],\"note\":\"Supabase generates TypeScript types and in-dashboard API docs instead.\"},{\"capability\":\"Social sign-in, including Apple and Google\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Row-level access for groups and teams\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase: Postgres RLS policies you write in SQL.\"},{\"capability\":\"Dedicated search engine: typo tolerance, facets\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase uses Postgres full-text search.\"},{\"capability\":\"Geo search: radius, bounding box, distance sort\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase needs the PostGIS extension.\"},{\"capability\":\"Visual workflow engine\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Stripe subscriptions\",\"values\":[\"native\",\"addon\"],\"note\":\"Supabase: Stripe sync engine or a webhook recipe.\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Push notifications\",\"values\":[\"native\",\"addon\"]},{\"capability\":\"Dashboards and charts on app data\",\"values\":[\"native\",\"none\"]},{\"capability\":\"MCP server for AI assistants\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Realtime subscriptions (planned for Anythink)\",\"values\":[\"none\",\"native\"]},{\"capability\":\"Direct SQL access to Postgres\",\"values\":[\"none\",\"native\"]},{\"capability\":\"Self-hosting\",\"values\":[\"none\",\"native\"],\"note\":\"Anythink is managed. Enterprise customers can have a dedicated stack in any DigitalOcean region.\"}],\"footnote\":\"Based on Supabase's public documentation, checked 28 September and 3 October 2026. An add-on means an extension, a partner integration or a recipe you build and run yourself.\"}}],\"narrative\":{\"heading\":\"Which one fits\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Choose Anythink if\",\"prose\":\"You're shipping a product that charges money, sends notifications and runs automations, and you'd rather configure those than assemble them. You want your data model to drive the API, the dashboard and the access rules, and you want an AI assistant to be able to run the whole backend.\"},{\"title\":\"Choose Supabase if\",\"prose\":\"You want direct SQL access to Postgres or to self-host, or you need realtime today; realtime is planned for Anythink. Those are real strengths, and Anythink doesn't offer them yet.\"},{\"title\":\"Moving across\",\"prose\":\"Model your tables as entities in the Anythink dashboard or with the CLI, import your rows from CSV with saved column mappings, then point your app at the generated REST API. Sign-in providers, roles and workflows are set up per project.\"}]},\"links\":[{\"label\":\"Build your first app\",\"url\":\"https://docs.anythink.cloud/get-started/first-app\",\"description\":\"Model data, get a REST API and sign users in\"},{\"label\":\"Model your data\",\"url\":\"https://docs.anythink.cloud/guides/database/model-your-data\",\"description\":\"Turn your tables into entities\"},{\"label\":\"Groups and row-level security\",\"url\":\"https://docs.anythink.cloud/guides/authentication/groups-and-row-level-security\",\"description\":\"Access rules without writing SQL policies\"},{\"label\":\"Plans and subscriptions\",\"url\":\"https://docs.anythink.cloud/guides/payments/plans-and-subscriptions\",\"description\":\"Stripe and Apple in-app purchases\"},{\"label\":\"Search\",\"url\":\"https://docs.anythink.cloud/guides/database/search\",\"description\":\"Typo tolerance, facets and geo\"}],\"linksHeading\":\"Related reading\"}},{\"id\":67,\"slug\":\"firebase-alternative\",\"type\":\"solution\",\"title\":\"Firebase alternative\",\"status\":\"published\",\"hero\":{\"headline\":\"A Firebase alternative,/without the extensions\",\"description\":\"\u003cp\u003eFirebase leans on Extensions for payments, in-app purchases, email and search, and Extensions shuts down on 31 March 2027. Anythink builds those in: a REST API generated from your data model, subscriptions with Apple in-app purchases, visual workflows, Meilisearch and push notifications with action buttons, in one project.\u003c/p\u003e\",\"featurePills\":[\"REST API and OpenAPI from your data model\",\"Stripe and Apple in-app purchases built in\",\"Visual workflows with AI steps\",\"Meilisearch with facets and geo\",\"Push through FCM with action buttons\",\"Run it from Claude through MCP\"],\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the full comparison\",\"action\":\"/articles/anythink-vs-firebase\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"What Firebase needs Extensions for,/built into Anythink\",\"description\":\"\u003cp\u003ePayments, purchases, email and search are core features here, not marketplace add-ons with a shutdown date.\u003c/p\u003e\",\"cards\":[{\"id\":303,\"type\":\"feature\",\"title\":\"Payments without the Stripe extension\",\"description\":\"\u003cp\u003ePlans, trials and offer codes on Stripe, with entitlement checks your app can call, built into the platform rather than
14installed from a marketplace.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":304,\"type\":\"feature\",\"title\":\"Apple in-app purchases without RevenueCat\",\"description\":\"\u003cp\u003eReceipts are verified on the server against the App Store, re-verifying never duplicates a subscription, and each purchase is bound to the account that made it.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":305,\"type\":\"feature\",\"title\":\"A REST API from your data model\",\"description\":\"\u003cp\u003eEvery entity gets list, filter, create, update and delete endpoints the moment you save it, with an OpenAPI spec for client generators and per-entity public or private access.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":306,\"type\":\"feature\",\"title\":\"Workflows instead of Cloud Functions glue\",\"description\":\"\u003cp\u003eReact to record changes, schedules, manual runs or API calls with steps for email, push, API calls, scripts and AI providers, in a visual editor.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":307,\"type\":\"feature\",\"title\":\"Search that Firestore doesn't do\",\"description\":\"\u003cp\u003eTypo-tolerant search, facets, highlighting and geo radius search on every project, indexed as records change, with no Algolia extension.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]},{\"id\":308,\"type\":\"feature\",\"title\":\"Push you can act on\",\"description\":\"\u003cp\u003eSend through FCM to Android and iOS and through web push, with iOS action buttons whose taps start a workflow on your backend.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[67]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"},\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":null,\"description\":null,\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":null,\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:solution:9:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Firebase alternative, Firebase alternatives 2026, Firebase Extensions replacement, RevenueCat alternative, backend as a service, BaaS, Firebase vs Anythink, Supabase alternative\",\"seo_focus_keyword\":\"Firebase alternative with payments built in\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"matrix\",\"heading\":\"Anythink and Firebase, compared\",\"subheading\":\"What's built in, what needs an extension, and where Firebase is the better fit.\",\"content\":{\"columns\":[\"Anythink\",\"Firebase\"],\"rows\":[{\"capability\":\"REST API generated from your data model\",\"values\":[\"native\",\"none\"]},{\"capability\":\"OpenAPI spec for your own data API\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Social sign-in, including Apple and Google\",\"values\":[\"native\",\"native\"]}
14,{\"capability\":\"Row-level access for groups and teams\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase: security rules you write and maintain.\"},{\"capability\":\"Full-text and faceted search\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase points to Algolia-style extensions.\"},{\"capability\":\"Geo search: radius, bounding box, distance sort\",\"values\":[\"native\",\"addon\"],\"note\":\"Firestore needs geohash libraries you implement.\"},{\"capability\":\"Visual workflow engine\",\"values\":[\"native\",\"none\"]},{\"capability\":\"Subscriptions and payments\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase's Stripe payments extension.\"},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"addon\"],\"note\":\"Firebase relies on the RevenueCat extension; Extensions shut down on 31 March 2027.\"},{\"capability\":\"Push notifications\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Dashboards and charts on app data\",\"values\":[\"native\",\"none\"]},{\"capability\":\"MCP server for AI assistants\",\"values\":[\"native\",\"native\"]},{\"capability\":\"Realtime sync and offline persistence\",\"values\":[\"none\",\"native\"],\"note\":\"Realtime is planned for Anythink.\"}],\"footnote\":\"Based on Firebase's public documentation, checked 28 September and 3 October 2026. An add-on means an extension, a partner integration or a recipe you build and run yourself.\"}}],\"narrative\":{\"heading\":\"Which one fits\",\"subheading\":\"$undefined\",\"steps\":[{\"title\":\"Choose Anythink if\",\"prose\":\"You take payments or in-app purchases, run automations and need search, and you don't want each of those to depend on an extension with a shutdown date. You want a REST API and an OpenAPI spec generated from your data model, and an AI assistant that can run the whole backend.\"},{\"title\":\"Choose Firebase if\",\"prose\":\"Your app depends on realtime sync and offline persistence on the device today, or you're invested in Google's wider tooling such as Analytics and Crashlytics. Those are real strengths, and Anythink doesn't offer realtime yet.\"},{\"title\":\"Moving across\",\"prose\":\"Model your collections as entities in the Anythink dashboard or with the CLI, export documents to CSV and import them with saved column mappings, then switch your app to the generated REST API. Keep FCM for delivery: Anythink sends push through it.\"}]},\"links\":[{\"label\":\"Build your first app\",\"url\":\"https://docs.anythink.cloud/get-started/first-app\",\"description\":\"Model data, get a REST API and sign users in\"},{\"label\":\"Apple in-app purchases\",\"url\":\"https://docs.anythink.cloud/guides/payments/apple-in-app-purchases\",\"description\":\"Server-side verification with the App Store Server API\"},{\"label\":\"Stripe payments\",\"url\":\"https://docs.anythink.cloud/guides/payments/stripe\",\"description\":\"Replace the Stripe payments extension\"},{\"label\":\"Push notifications\",\"url\":\"https://docs.anythink.cloud/guides/workflows/push-notifications\",\"description\":\"Send through FCM with action buttons\"},{\"label\":\"How workflows work\",\"url\":\"https://docs.anythink.cloud/guides/workflows/how-workflows-work\",\"description\":\"Instead of Cloud Functions glue\"}],\"linksHeading\":\"Related reading\"}}],\"pricing\":[{\"id\":4,\"slug\":\"pricing\",\"type\":\"pricing\",\"title\":\"Pricing\",\"status\":\"published\",\"hero\":{\"headline\":\"Every feature,/on every plan\",\"description\":\"\u003cp\u003eWorkflows, payments and dashboards come with every plan, including Free. Plans differ only in storage, users and usage, so you pay more as you grow.\u003c/p\u003e\",\"featurePills\":\"$undefined\",\"image\":\"$undefined\",\"images\":[],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Contact Sales\",\"action\":\"/contact\"}},\"sections\":{\"features\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"cards\":[]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":true,\"title\":\"Plans differ by usage, not features\",\"description\":\"\u003cp\u003eCreate a free account. Build as many projects as you want. Pick the right plan for each project.\u003c/p\u003e\",\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:pricing:0:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":\"\u003cp\u003eHave a promo code? Enter it when you sign up, or when you create a project.\u003c/p\u003e\",\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"Supabase pricing comparison, Auth0 pricing alternative, cost-effective BaaS, scalable backend pricing, start for free backend, Stripe Partner,\",\"seo_focus_keyword\":\"Pricing: everything included in every plan\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":\"$undefined\"}],\"home\":[{\"id\":5,\"slug\":\"home\",\"type\":\"home\",\"title\":\"Home\",\"status\":\"published\",\"hero\":{\"headline\":\"The whole backend,/in one project.\",\"description\":\"\u003cp\u003eA database with an instant REST API, sign-in, subscriptions, workflows and an operations dashboard, all built from your data model.\u003c/p\u003e\u003cp\u003eBuild it in the Anythink dashboard, from the terminal, or by asking Claude. You describe the system. Anythink runs it.\u003c/p\u003e\",\"featurePills\":[\"REST API from your data model\",\"Apple and Google sign-in\",\"Subscriptions and Apple in-app purchases\",\"Visual workflows\",\"Operations dashboard\",\"CLI and MCP\"],\"image\":{\"url\":\"/cdn-assets/20804318/e3522258d3b845fdbd21dad3c839b210.png\",\"alt\":\"Home\"},\"images\":[{\"id\":\"133\",\"url\":\"/cdn-assets/20804318/e3522258d3b845fdbd21dad3c839b210.png\",\"alt\":\"Home\",\"original_file_name\":\"Screenshot 2026-03-08 at 17.51.32.png\"}],\"video\":\"$undefined\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"@docs\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Everything a product needs /from one data model\",\"description\":\"\u003cp\u003eEach part of Anythink reads from the same entities, so your API, permissions, workflows, payments and dashboards never drift apart.\u003c/p\u003e\",\"cards\":[]},\"benefits\":{\"title\":\"Benefits\",\"description\":\"\u003cp\u003eGet an entire backend-tech stack with a click of a button. Built for speed.\u003c/p\u003e\"},\"useCases\":{\"enabled\":true,\"title\":\"Who is it for?\",\"description\":\"\u003cp\u003eFrom a weekend prototype to a product with paying customers, on the same project.\u003c/p\u003e\",\"cards\":[]},\"clients\":{\"enabled\":true,\"title\":\"Tried, Tested, Trusted\",\"description\":\"\u003cp\u003eWe build and test Anythink with our customers to create a platform that works for Everythink\u003c/p\u003e\",\"logos\":[]},\"pricing\":{\"enabled\":true,\"title\":\"Everything included in every plan\",\"description\":\"\u003cp\u003eWorkflows, payments and dashboards come with every plan, including Free. Plans differ in storage, monthly active users and usage, so you pay more only as your product grows.\u003c/p\u003e\",\"tiers\":[]},\"examples\":{\"enabled\":true,\"title\":\"What can I do with it?\",\"description\":\"\u003cp\u003eAnythink isn't just for building your backend, it's also for running your business. You and your team can use Anythink to keep track of all of your stuff, whether it's articles, products, stock, training courses, appointments or... well, anythink...\u003c/p\u003e\",\"items\":[]},\"articles\":{\"enabled\":true,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":true,\"title\":\"Partners\",\"description\":\"\u003cp\u003ePayments run on Stripe, where Anythink is a verified partner, and projects run on DigitalOcean.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[]},\"about\":{\"enabled\":\"$11:0:props:ssrData:home:0:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":true,\"content\":[]},\"ctaArea\":{\"enabled\":true}},\"additional_pricing_info\":null,\"relatedDoc\":{\"id\":3,\"slug\":\"quick_start\",\"title\":\"Quick Start\"}
14,\"seo_keywords\":\"backend as a service, BaaS, Supabase alternative, Firebase alternative, backend with subscriptions, Apple in-app purchase backend, workflow automation backend, MCP server backend, REST API from database\",\"seo_focus_keyword\":\"Backend as a service with built-in subscriptions\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":{\"story\":[{\"type\":\"tools\",\"heading\":\"Six tools. One project.\",\"subheading\":\"Most products end up stitching together a database, a CMS, an automation tool, a subscription service, search and an admin panel. Anythink does each of those jobs from one data model.\",\"content\":{\"tools\":[{\"name\":\"Supabase or Firebase\",\"job\":\"Database, REST API and sign-in\"},{\"name\":\"Strapi or Directus\",\"job\":\"Content management\"},{\"name\":\"Zapier\",\"job\":\"Automation and integrations\"},{\"name\":\"RevenueCat\",\"job\":\"Subscriptions and in-app purchases\"},{\"name\":\"Algolia\",\"job\":\"Search\"},{\"name\":\"Retool\",\"job\":\"Internal dashboards\"}],\"result\":{\"title\":\"One project, one data model, one bill.\",\"text\":\"Model your data once. The API, permissions, subscriptions, workflows, search and dashboards all read from it, so there's no glue code to write and nothing to keep in sync.\"},\"footnote\":\"Anythink covers the core job each tool does for a typical app. It isn't a feature-for-feature copy of each one: Zapier, for example, connects to thousands of apps, while Anythink has a set of built-in integrations plus a step that calls any HTTP API.\"}},{\"type\":\"principle\",\"heading\":\"Less interface. More system.\",\"subheading\":\"$undefined\",\"content\":{\"quote\":\"When the point of contact between the product and the people becomes a point of friction, then the industrial designer has failed.\",\"attribution\":\"Henry Dreyfuss, Designing for People, 1955\",\"body\":\"Dreyfuss designed the Western Electric 500 telephone and the Honeywell round thermostat, objects people used for decades without reading a manual. Anythink applies the same idea to building a business. The dashboard keeps the controls simple. The API, CLI and MCP server go further: the interface can be a sentence typed to Claude or any AI assistant, and the output is a working backend you can inspect, test and trust. You don't have to learn the product first.\"}},{\"type\":\"surfaces\",\"heading\":\"Use the dashboard. Or don't.\",\"subheading\":\"Every task works three ways, and they all change the same project. Here's one task: an orders table with a total and a status.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Point and click. Good for modelling data and seeing what's there.\",\"example\":\"Data Model â New entity: orders\\nAdd field: total (decimal, required)\\nAdd field: status (select: pending, paid)\\nSave\\n\\nâ /entities/orders/items is live\",\"clip\":\"dashboard/database/create-entity\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"Scriptable and repeatable. Good for CI and for promoting staging to production.\",\"example\":\"anythink entities create orders\\nanythink fields add orders total --type decimal --required\\nanythink fields add orders status --type varchar \\\\\\n --display select --options pending,paid\\nanythink data list orders\",\"clip\":\"cli/database/create-entity\",\"result\":[\"Entity orders created\",\"Field total added to orders\",\"Field status added to orders\",\"orders: 0 items, ready at /entities/orders/items\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Describe what you want, in Claude Code or the dashboard's AI chat. It runs the same commands and tells you what it did; you can check every change in the dashboard.\",\"example\":\"âCreate an orders entity with a required decimal total and a status of pending or paid. Then add a workflow that emails the customer when the status changes to paid.â\",\"result\":[\"Entity orders: total, status (pending, paid)\",\"GET /entities/orders/items is live\",\"Workflow: when status changes to paid, send an email\",\"Ready to try with Test Workflow\"]}]}},{\"type\":\"proofs\",\"heading\":\"Built in, not bolted on\",\"subheading\":\"Six things Anythink does natively that usually take an extension, a second vendor or a weekend of glue code.\",\"content\":{\"proofs\":[{\"eyebrow\":\"Subscriptions\",\"t
14itle\":\"Sell subscriptions on the web and in your iOS app\",\"body\":\"Plans, trials and offer codes with Stripe, plus Apple in-app purchases verified on the server. Receipts are checked against the App Store, re-verifying is safe, and each purchase is bound to the account that made it.\",\"links\":[{\"label\":\"Subscriptions\",\"href\":\"/products/subscriptions\"},{\"label\":\"Sell a subscription in 15 minutes\",\"href\":\"https://docs.anythink.cloud/guides/payments/quick-start\"}],\"clip\":\"dashboard/payments/create-plan\"},{\"eyebrow\":\"Workflows\",\"title\":\"Automation that lives next to your data\",\"body\":\"Trigger on a record change, a schedule, an API call or a button. Read and write data, call any HTTP API, run a script, send email and push, or ask Claude or OpenAI, without a separate automation tool.\",\"links\":[{\"label\":\"Workflows\",\"href\":\"/products/workflow-automation\"},{\"label\":\"Build your first workflow\",\"href\":\"https://docs.anythink.cloud/guides/workflows/quick-start\"}],\"clip\":\"dashboard/workflows/build-workflow\"},{\"eyebrow\":\"Access\",\"title\":\"Row-level security that understands teams\",\"body\":\"Grant records to users or whole groups when they're created, and let group members read their team's data while staff-only records stay private.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"}],\"clip\":\"dashboard/access/group-rls\"},{\"eyebrow\":\"Operations\",\"title\":\"An operations dashboard on the same data\",\"body\":\"Charts, materialised views that join entities with payments data, and grid, kanban and calendar views. Your team runs the business from the same project your app uses.\",\"links\":[{\"label\":\"Dashboards\",\"href\":\"/products/dashboards\"}],\"clip\":\"dashboard/database/switch-views\"},{\"eyebrow\":\"Push\",\"title\":\"Push notifications that trigger workflows\",\"body\":\"Send push from a workflow to one user or thousands, add action buttons, and run another workflow when someone taps one.\",\"links\":[{\"label\":\"Push notifications\",\"href\":\"/products/push-notifications\"}],\"clip\":\"dashboard/push/action-buttons\"},{\"eyebrow\":\"AI\",\"title\":\"An AI assistant can run the whole project\",\"body\":\"The Anythink MCP server reaches the whole CLI: entities, fields, data, workflows, roles, payments and more. Use it from Claude, Cursor or another MCP client, or from the AI chat in the dashboard, which has the same access.\",\"links\":[{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"},{\"label\":\"Connect Claude with MCP\",\"href\":\"https://docs.anythink.cloud/guides/ai/connect-mcp\"}],\"clip\":\"dashboard/ai/chat-builds-entity\"}]}},{\"type\":\"matrix\",\"heading\":\"How Anythink compares\",\"subheading\":\"What's built in, and where you'd need an add-on. Including the things we don't do.\",\"content\":{\"columns\":[\"Anythink\",\"Supabase\",\"Firebase\",\"Appwrite\"],\"rows\":[{\"capability\":\"REST API generated from your data model\",\"values\":[\"native\",\"native\",\"none\",\"native\"],\"note\":\"Anythink: public or private per entity, and rate-limited per project.\"},{\"capability\":\"Social sign-in, including Apple and Google\",\"values\":[\"native\",\"native\",\"native\",\"native\"]},{\"capability\":\"Row-level access for groups and teams\",\"values\":[\"native\",\"addon\",\"addon\",\"native\"]},{\"capability\":\"OpenAPI spec for your own data API\",\"values\":[\"native\",\"unknown\",\"none\",\"unknown\"],\"note\":\"Anythink publishes one for every project, ready for client generators. Supabase generates TypeScript types and in-dashboard API docs instead.\"},{\"capability\":\"Full-text search\",\"values\":[\"native\",\"native\",\"addon\",\"addon\"],\"note\":\"Supabase uses Postgres full-text search. Firebase and Appwrite point to Algolia-style extensions or integrations.\"},{\"capability\":\"Dedicated search engine: typo tolerance, facets, highlighting\",\"values\":[\"native\",\"addon\",\"addon\",\"addon\"],\"note\":\"Anythink runs Meilisearch for every project, indexed as your records change.\"},{\"capability\":\"Geo search: radius, bounding box, sort by distance\",\"values\":[\"native\",\"addon\",\"addon\",\"unknown\"],\"note\":\"Supabase needs the PostGIS extension; Firestore needs geohash libraries you implement.\"},{\"capability\":\"Visual workflow engine\",\"values\":[\"native\",\"none\",\"none\",\"none\"]}
14,{\"capability\":\"Push notifications\",\"values\":[\"native\",\"addon\",\"native\",\"native\"]},{\"capability\":\"Subscriptions and payments\",\"values\":[\"native\",\"addon\",\"addon\",\"addon\"]},{\"capability\":\"Apple in-app purchases\",\"values\":[\"native\",\"none\",\"addon\",\"none\"],\"note\":\"Firebase relies on the RevenueCat extension; Extensions shut down on 31 March 2027.\"},{\"capability\":\"Dashboards and charts on app data\",\"values\":[\"native\",\"none\",\"none\",\"none\"]},{\"capability\":\"MCP server for AI assistants\",\"values\":[\"native\",\"native\",\"native\",\"native\"]},{\"capability\":\"Realtime subscriptions\",\"values\":[\"none\",\"native\",\"native\",\"native\"]},{\"capability\":\"Self-hosting\",\"values\":[\"none\",\"native\",\"none\",\"native\"],\"note\":\"Anythink is a managed service. Enterprise customers can have a dedicated stack.\"}],\"footnote\":\"Based on each vendor's public documentation, checked 28 September and 3 October 2026. An add-on means an extension, a partner integration or a recipe you build and run yourself.\"}}],\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a product people pay for.\",\"steps\":[{\"title\":\"Model your data\",\"prose\":\"Create entities and fields in the dashboard, the CLI or by asking Claude. Every entity gets a REST API straight away, public or private as you choose.\"},{\"title\":\"Decide who sees what\",\"prose\":\"Set roles and permissions, then use row-level security so each user, or each group of users, only reaches their own records.\"},{\"title\":\"Automate it\",\"prose\":\"Add workflows that run when data changes, on a schedule or from an API call. Send email and push, call other services, or run a script.\"},{\"title\":\"Charge for it\",\"prose\":\"Create plans with trials and offers, take payment with Stripe or Apple in-app purchases, and check entitlements from your app.\"},{\"title\":\"Run it\",\"prose\":\"Watch it from the operations dashboard: charts, materialised views and grid, kanban, calendar and map views over the same data.\"}]}}}]}}]\n23:[\"$\",\"div\",null,{\"className\":\"min-h-screen bg-white dark:bg-black\",\"children\":[[\"$\",\"section\",null,{\"className\":\"bg-[#F8F7F4] dark:bg-[#111] grid-bg pt-32 pb-20 relative\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute top-0 left-0 right-0 h-1 bg-[#F97316]\"}],[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6 relative z-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col mb-8 md:mb-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full flex justify-start md:justify-end mb-4\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-2xl font-bold font-helvetica text-[#2C2C2C] dark:text-white\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block\",\"children\":\"Authentication\"}],[]]}]}],[\"$\",\"div\",null,{\"className\":\"w-full h-[1px] bg-[#F97316]\"}]]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 [\u0026\u003e*]:min-w-0 md:grid-cols-2 gap-12 items-center\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight font-helvetica mb-8 leading-[1.1] mt-[-20px] md:mt-[-30px]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block text-[#2C2C2C] dark:text-white\",\"children\":[\"Sign-in for web and mobile,\",\" \"]}],[[\"$\",\"span\",\"0\",{\"className\":\"block mt-2 text-[#666666] dark:text-gray-400\",\"children\":[\"verified on the server\",\" \"]}]]]}],[\"$\",\"div\",null,{\"className\":\"text-lg md:text-xl font-light leading-relaxed mb-8 max-w-[600px] text-[#666666] dark:text-gray-300 [\u0026_p]:mb-4 [\u0026_p:last-child]:mb-0\",\"dangerouslySetInnerHTML\":{\"__html\":\"\u003cp\u003eAdd email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\u003c/p\u003e\"}}],[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-3 max-w-[280px]\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://my.anythink.cloud/auth/register\",\"className\":\"px-7 py-3 bg-[#F97316] text-white font-medium hover:bg-[#ea6c0e] transition-colors text-center shadow-lg shadow-[#F97316]
14/25\",\"children\":\"Start free\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.anythink.cloud/guides/authentication\",\"className\":\"px-7 py-3 border border-gray-300 dark:border-gray-600 text-[#2C2C2C] dark:text-white hover:border-[#F97316] font-medium transition-all text-center\",\"children\":\"Read the docs\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"relative border border-gray-200 dark:border-gray-800 overflow-hidden bg-[#111] aspect-video\",\"children\":[\"$\",\"$L27\",null,{\"id\":\"dashboard/authentication/google-sign-in\",\"label\":\"Authentication in the Anythink dashboard\",\"className\":\"h-full object-cover\",\"fallback\":[\"$\",\"$L28\",null,{\"slug\":\"authentication\",\"className\":\"absolute inset-0\"}]}]}]]}]]}]]}],false,[[\"$\",\"section\",\"surfaces-The same task, three ways\",{\"data-story\":\"surfaces\",\"className\":\"py-20 md:py-24 border-b border-gray-200 dark:border-gray-800 bg-white dark:bg-[#0a0a0a]\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-[760px] mb-12\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl md:text-5xl font-bold tracking-tight font-helvetica leading-[1.1] text-[#2C2C2C] dark:text-white text-balance\",\"children\":\"The same task, three ways\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-lg md:text-xl font-light leading-relaxed text-[#5A5A5A] dark:text-gray-300\",\"children\":\"Every task works three ways, and all of them change the same project. Here's one: let people sign in with Google.\"}]]}],false,[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 md:grid-cols-3 gap-6\",\"children\":[[\"$\",\"figure\",\"dashboard\",{\"className\":\"min-w-0 flex flex-col border border-gray-200 dark:border-gray-800 bg-white dark:bg-[#111]\",\"children\":[[\"$\",\"figcaption\",null,{\"className\":\"px-5 pt-5\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"The Anythink dashboard\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"Add the Google credentials once per project.\"}]]}],\"$L29\"]}],\"$L2a\",\"$L2b\"]}],false,false,false]}]}],\"$L2c\"],false,\"$L2d\",\"$L2e\",false,false,false,false,\"$L2f\",\"$L30\",\"$L31\"]}]\n"])</script>
14<script>self.__next_f.push([1,"24:[\"$\",\"section\",null,{\"className\":\"bg-[#F8F7F4] dark:bg-[#1a1a1a] py-8 \",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6\",\"children\":[\"$\",\"$L32\",null,{\"pathname\":\"/products/authentication\"}]}]}]\n26:[\"$\",\"$L33\",null,{}]\n18:null\n1c:[[\"$\",\"title\",\"0\",{\"children\":\"Authentication API with Apple and Google sign-in | Anythink\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"Anythink\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"authentication API, Sign in with Apple backend, Google sign-in backend, LinkedIn sign-in API, magic link authentication, JWT refresh tokens, OAuth PKCE, Auth0 alternative, Authentication API with Apple and Google sign-in, email, password and magic links, users, native apple, google and linkedin sign-in, web oauth with pkce, user, jwt sessions with refresh, users are part of your data model, roles, security, workflows, one provider list per project, backend as a service, BaaS, cloud infrastructure, API development, database management, marketplace backend, scalable infrastructure, cloud computing, developer tools, no-code backend, rapid development, business automation, startup platform, app development\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"5\",{\"name\":\"googlebot\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://anythink.cloud/products/authentication\"}],[\"$\",\"link\",\"7\",{\"rel\":\"alternate\",\"type\":\"application/rss+xml\",\"href\":\"https://anythink.cloud/rss.xml\",\"title\":\"Anythink articles\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"Sign-in for web and mobile, verified on the server\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://anythink.cloud/products/authentication\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"Anythink\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:locale\",\"content\":\"en_GB\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image\",\"content\":\"https://anythink.cloud/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:alt\",\"content\":\"Authentication\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:site\",\"content\":\"@anythink\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:creator\",\"content\":\"@anythink\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:title\",\"content\":\"Sign-in for web and mobile, verified on the server\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:description\",\"content\":\"Add email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:image\",\"content\":\"https://anythink.cloud/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\"}],[\"$\",\"link\",\"24\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"25\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"26\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"$L34\",\"27\",{}]]\n"])</script>
14<script>self.__next_f.push([1,"35:I[722,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n39:I[57693,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n3a:I[38855,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n40:I[51383,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n41:I[72410,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n29:[\"$\",\"div\",null,{\"className\":\"mt-5 flex-1 flex items-center bg-[#1A1A1A]\",\"children\":[\"$\",\"$L27\",null,{\"id\":\"dashboard/authentication/google-sign-in\",\"label\":\"The Anythink dashboard: Settings â Social Sign-In â Google â Configure\\nWeb Client ID: paste it from Google Cloud\\nClient secret: paste it from Google Cloud\\niOS Client IDs: add them for native apps\\nSave\\n\\nâ Google is listed by /auth/v1/providers\",\"fallback\":[\"$\",\"$L35\",null,{\"className\":\"mt-5 flex-1 bg-[#1A1A1A] text-[#F5F3F0] p-5 text-[13px] leading-relaxed font-mono\",\"children\":[[\"$\",\"ol\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"0\",{\"className\":\"hero-demo-line flex gap-3 [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"0.2s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316]\",\"children\":\"âº\"}],[\"$\",\"span\",null,{\"children\":\"Settings â Social Sign-In â Google â Configure\"}]]}],[\"$\",\"li\",\"1\",{\"className\":\"hero-demo-line flex gap-3 [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"0.55s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316]\",\"children\":\"âº\"}],[\"$\",\"span\",null,{\"children\":\"Web Client ID: paste it from Google Cloud\"}]]}],[\"$\",\"li\",\"2\",{\"className\":\"hero-demo-line flex gap-3 [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"0.8999999999999999s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316]\",\"children\":\"âº\"}],[\"$\",\"span\",null,{\"children\":\"Client secret: paste it from Google Cloud\"}]]}],[\"$\",\"li\",\"3\",{\"className\":\"hero-demo-line flex gap-3 [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"1.2499999999999998s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316]\",\"children\":\"âº\"}],[\"$\",\"span\",null,{\"children\":\"iOS Client IDs: add them for native apps\"}]]}],[\"$\",\"li\",\"4\",{\"className\":\"hero-demo-line flex gap-3 [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"1.5999999999999999s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316]\",\"children\":\"âº\"}],[\"$\",\"span\",null,{\"children\":\"Save\"}]]}],[\"$\",\"li\",\"5\",{\"className\":\"hero-demo-line flex gap-3 [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"1.95s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"children\":\"Google is listed by /auth/v1/providers\"}]]}]]}],\"$undefined\"]}]}]}]\n2a:[\"$\",\"figure\",\"cli\",{\"className\":\"min-w-0 flex flex-col border border-gray-200 dark:border-gray-800 bg-white dark:bg-[#111]\",\"children\":[[\"$\",\"figcaption\",null,{\"className\":\"px-5 pt-5\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"The Anythink CLI\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"The client ID and secret are prompted for, not passed as flags, so they stay out of your shell history.\"}]]}],[\"$\",\"$L35\",null,{\"className\":\"mt-5 flex-1 bg-[#1A1A1A] text-[#F5F3F0] p-5 text-[13px] leading-relaxed font-mono overflow-x-auto md:text-[14px]\",\"children\":[[\"$\",\"code\",null,{\"className\":\"block\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"hero-demo-line block whitespace-pre-wrap [overflow-wrap:anywhere] \",\"style\":{\"animationDelay\":\"0.2s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316] select-none\",\"children\":\"$$ \"}],\"anythink oauth google configure\"]}],[\"$\",\"span\",\"1\",{\"className\":\"hero-demo-line block whitespace-pre-wrap [overflow-wrap:anywhere] \",\"style\":{\"animationDelay\":\"0.55s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316] select-none\",\"children\":\"$$ \"}],\"anythink oauth google status\"]}],[\"$\",\"span\",\"2\",{\"className\":\"hero-demo-line block whitespace-pre-wrap [overflow-wrap:anywhere] \",\"style\":{\"animationDelay\":\"0.8999999999999999s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316] select-none\",\"children\":\"$$ \"}],\"anythink fetch /auth/v1/providers\"]}]]}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-1.5 border-t border-white/10 pt-4\",\"children\":[[\"$\",\"li\",\"Google client ID and secret saved to the project\",{\"className\":\"hero-demo-line flex gap-3\",\"style\":{\"animationDelay\":\"1.65s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"className\":\"[overflow-wrap:anywhere]\",\"children\":\"Google client ID and secret saved to the project\"}]]}],[\"$\",\"li\",\"Status shows Google as configured\",{\"className\":\"hero-demo-line flex gap-3\",\"style\":{\"animationDelay\":\"2s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"className\":\"[overflow-wrap:anywhere]\",\"children\":\"Status shows Google as configured\"}]]}],[\"$\",\"li\",\"/auth/v1/providers lists Google\",{\"className\":\"hero-demo-line flex gap-3\",\"style\":{\"animationDelay\":\"2.3499999999999996s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"className\":\"[overflow-wrap:anywhere]\",\"children\":\"/auth/v1/providers lists Google\"}]]}]]}]]}]]}]\n2b:[\"$\",\"figure\",\"mcp\",{\"className\":\"min-w-0 flex flex-col border border-gray-200 dark:border-gray-800 bg-white dark:bg-[#111]\",\"children\":[[\"$\",\"figcaption\",null,{\"className\":\"px-5 pt-5\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"Claude, through MCP\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-sm text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"Keep the secret out of chat: set it in the dashboard or CLI, then ask the assistant to check the setup.\"}]]}],[\"$\",\"$L35\",null,{\"className\":\"mt-5 flex-1 bg-[#1A1A1A] text-[#F5F3F0] p-5 text-[13px] leading-relaxed font-mono\",\"children\":[[\"$\",\"p\",null,{\"className\":\"hero-demo-line [overflow-wrap:anywhere]\",\"style\":{\"animationDelay\":\"0.2s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#F97316]\",\"children\":\"you ⺠\"}],\"âIs Google sign-in configured on this project? Which sign-in buttons should my login page show?â\"]}],[\"$\",\"ul\",null,{\"className\":\"mt-4 space-y-1.5 border-t border-white/10 pt-4\",\"children\":[[\"$\",\"li\",\"Ran oauth google status: Google is configured\",{\"className\":\"hero-demo-line flex gap-3\",\"style\":{\"animationDelay\":\"1s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"className\":\"[overflow-wrap:anywhere]\",\"children\":\"Ran oauth google status: Google is configured\"}]]}],[\"$\",\"li\",\"Fetched /auth/v1/providers: Google is listed\",{\"className\":\"hero-demo-line flex gap-3\",\"style\":{\"animationDelay\":\"1.35s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"className\":\"[overflow-wrap:anywhere]\",\"children\":\"Fetched /auth/v1/providers: Google is listed\"}]]}],[\"$\",\"li\",\"Your login page should show a Google button\",{\"className\":\"hero-demo-line flex gap-3\",\"style\":{\"animationDelay\":\"1.7s\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"text-[#7FD3A0]\",\"children\":\"â\"}],[\"$\",\"span\",null,{\"className\":\"[overflow-wrap:anywhere]\",\"children\":\"Your login page should show a Google button\"}]]}]]}]]}]]}]\n2c:[\"$\",\"section\",\"proofs-Why it holds up\",{\"data-story\":\"proofs\",\"className\":\"py-20 md:py-24 border-b border-gray-200 dark:border-gray-800 bg-[#F8F7F4] dark:bg-[#0d0d0d]\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-[760px] mb-12\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl md:text-5xl font-bold tracking-tight font-helvetica leading-[1.1] text-[#2C2C2C] dark:text-white text-balance\",\"children\":\"Why it holds up\"}],\"$undefined\"]}],false,false,[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 md:grid-cols-2 gap-x-12 gap-y-14\",\"children\":[[\"$\",\"article\",\"Identity tokens are verified, not trusted\",{\"className\":\"min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":true,\"className\":\"mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]\",\"children\":[\"$\",\"$L28\",null,{\"variant\":\"network\",\"className\":\"absolute inset-0\"}]}],[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"Native sign-in\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug\",\"children\":\"Identity tokens are verified, not trusted\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"Apple, Google and LinkedIn tokens are checked against each provider's published keys, and the token's subject must match the user identifier your app sent. A forged or swapped token is rejected.\"}],\"$undefined\",[\"$\",\"div\",null,{\"className\":\"mt-5 flex flex-wrap gap-x-6 gap-y-2\",\"children\":[[\"$\",\"a\",\"https://docs.anythink.cloud/guides/authentication/social-sign-in\",{\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\",\"className\":\"text-sm font-medium text-[#F97316] hover:underline\",\"children\":[\"Social sign-in guide\",\" â\"]}]]}]]}],[\"$\",\"article\",\"The same user, even when the email changes\",{\"className\":\"min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":true,\"className\":\"mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]\",\"children\":[\"$\",\"$L28\",null,{\"variant\":\"dataflow\",\"className\":\"absolute inset-0\"}]}],[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"Stable identity\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug\",\"children\":\"The same user, even when the email changes\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"Anythink links each provider's stable subject ID to the user, so a returning user is matched behind Apple's private email relay or after changing their email address.\"}],\"$undefined\",[\"$\",\"div\",null,{\"className\":\"mt-5 flex flex-wrap gap-x-6 gap-y-2\",\"children\":[[\"$\",\"a\",\"https://docs.anythink.cloud/guides/authentication/users-and-teams\",{\"href\":\"https://docs.anythink.cloud/guides/authentication/users-and-teams\",\"className\":\"text-sm font-medium text-[#F97316] hover:underline\",\"children\":[\"Users and team
14s\",\" â\"]}]]}]]}],[\"$\",\"article\",\"One JWT for your app, the API and MCP\",{\"className\":\"min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":true,\"className\":\"mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]\",\"children\":[\"$\",\"$L28\",null,{\"variant\":\"pulse\",\"className\":\"absolute inset-0\"}]}],[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"One session\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug\",\"children\":\"One JWT for your app, the API and MCP\"}],\"$L36\",\"$undefined\",\"$L37\"]}],\"$L38\"]}],false,false]}]}]\n2d:[\"$\",\"section\",null,{\"className\":\"bg-white dark:bg-[#0a0a0a] py-24\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col mb-10 md:mb-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full flex justify-start mb-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-left max-w-[800px]\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-3xl md:text-5xl font-bold tracking-tight font-helvetica mb-3 leading-[1.1]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"block text-[#2C2C2C] dark:text-white\",\"children\":[\"Sign-in that ships\",\" \"]}],[[\"$\",\"span\",\"0\",{\"className\":\"block text-[#666666] dark:text-gray-400 mt-1\",\"children\":[\"with your backend\",\" \"]}]]]}],[\"$\",\"div\",null,{\"className\":\"text-xl text-[#5A5A5A] dark:text-gray-300 font-light leading-relaxed\",\"dangerouslySetInnerHTML\":{\"__html\":\"\u003cp\u003eEmail and password, magic links, native and web social sign-in, and JWT sessions, all on the same users your data model already links to.\u003c/p\u003e\"}}]]}]}],[\"$\",\"div\",null,{\"className\":\"w-full h-[1px] bg-[#F97316]\"}]]}],[\"$\",\"$L39\",null,{\"items\":[{\"id\":20,\"title\":\"Email, password and magic links\",\"description\":\"Register users, confirm their email, reset passwords and send one-time magic links from the built-in auth endpoints. Password sign-in waits until the email address is confirmed.\",\"videoUrl\":\"$undefined\",\"imageUrl\":\"/cdn-assets/20804318/53fd07ad0bdc4e91ab10bae3fed6b4af.png\",\"imageAlt\":\"Email, password and magic links\",\"bullets\":[]},{\"id\":21,\"title\":\"Native Apple, Google and LinkedIn sign-in\",\"description\":\"Your iOS or Android app sends Anythink the provider's identity token. Anythink checks it against the provider's published keys and cross-checks the subject ID before it signs anyone in. Native sign-in needs your app's client IDs, not a client secret.\",\"videoUrl\":\"$undefined\",\"imageUrl\":\"/cdn-assets/20804318/4c0513737e7f4e14878113d6c09389a9.png\",\"imageAlt\":\"Native Apple, Google and LinkedIn sign-in\",\"bullets\":[]},{\"id\":22,\"title\":\"Web OAuth with PKCE\",\"description\":\"For browser sign-in, Anythink runs the authorise and callback flow for each provider you enable, using PKCE where the provider supports it, and records UTM and referrer details when a user signs up.\",\"videoUrl\":\"/cdn-assets/20804318/be8f04543cfb41d7a126876abee72c7c.mp4\",\"imageUrl\":\"$undefined\",\"imageAlt\":\"$undefined\",\"bullets\":[]},{\"id\":69,\"title\":\"JWT sessions with refresh\",\"description\":\"Sign-in returns a JWT access token and a refresh token. Refreshing issues a new pair, logout revokes the refresh token, and transfer tokens hand a session from one app or device to another.\",\"videoUrl\":\"$undefined\",\"imageUrl\":\"$undefined\",\"imageAlt\":\"$undefined\",\"bullets\":[]},{\"id\":79,\"title\":\"Users are part of your data model\",\"description\":\"Every signed-in user is a record you can link to any entity with a user field, then use in roles, row-level security and workflows.\",\"videoUrl\":\"$undefined\",\"imageUrl\":\"/cdn-assets/20804318/fee6ede0ad8c4dc4a3e6096c80705ace.png\",\"imageAlt\":\"Users are part of your data model\",\"bullets\":[]},{\"id\":191,\"title\":\"One provider list per project\",\"description\":\"GET /auth/v1/providers returns the sign-in methods this project has configured, so your login page shows only the buttons that will work.\",\"videoUrl\":\"$undefined\",\"imageUrl\":\"$undefined\",\"imageAlt\":\"$undefined\",\"bullets\":[]}]}]]}]}]\n2e:[\"$\",\"$L3a\",null,{\"data\":{\"story\":[{\"type\":\"surfaces\",\"heading\":\"The same task, three ways\",\"subheading\":\"Every task works three ways, and all of them change the same project. Here's one: let people sign in with Google.\",\"content\":{\"surfaces\":[{\"key\":\"dashboard\",\"label\":\"The Anythink dashboard\",\"caption\":\"Add the Google credentials once per project.\",\"example\":\"Settings â Social Sign-In â Google â Configure\\nWeb Client ID: paste it from Google Cloud\\nClient secret: paste it from Google Cloud\\niOS Client IDs: add them for native apps\\nSave\\n\\nâ Google is listed by /auth/v1/providers\",\"clip\":\"dashboard/authentication/google-sign-in\"},{\"key\":\"cli\",\"label\":\"The Anythink CLI\",\"caption\":\"The client ID and secret are prompted for, not passed as flags, so they stay out of your shell history.\",\"example\":\"anythink oauth google configure\\nanythink oauth google status\\nanythink fetch /auth/v1/providers\",\"result\":[\"Google client ID and secret saved to the project\",\"Status shows Google as configured\",\"/auth/v1/providers lists Google\"]},{\"key\":\"mcp\",\"label\":\"Claude, through MCP\",\"caption\":\"Keep the secret out of chat: set it in the dashboard or CLI, then ask the assistant to check the setup.\",\"example\":\"âIs Google sign-in configured on this project? Which sign-in buttons should my login page show?â\",\"result\":[\"Ran oauth google status: Google is configured\",\"Fetched /auth/v1/providers: Google is listed\",\"Your login page should show a Google button\"]}]}},{\"type\":\"proofs\",\"heading\":\"Why it holds up\",\"subheading\":\"$undefined\",\"content\":{\"proofs\":[{\"eyebrow\":\"Native sign-in\",\"t
14itle\":\"Identity tokens are verified, not trusted\",\"body\":\"Apple, Google and LinkedIn tokens are checked against each provider's published keys, and the token's subject must match the user identifier your app sent. A forged or swapped token is rejected.\",\"links\":[{\"label\":\"Social sign-in guide\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}]},{\"eyebrow\":\"Stable identity\",\"title\":\"The same user, even when the email changes\",\"body\":\"Anythink links each provider's stable subject ID to the user, so a returning user is matched behind Apple's private email relay or after changing their email address.\",\"links\":[{\"label\":\"Users and teams\",\"href\":\"https://docs.anythink.cloud/guides/authentication/users-and-teams\"}]},{\"eyebrow\":\"One session\",\"title\":\"One JWT for your app, the API and MCP\",\"body\":\"The token your app receives works on every entity endpoint, and the Anythink MCP server authenticates with the same user JWT, so permissions apply the same way to people and assistants.\",\"links\":[{\"label\":\"Instant APIs\",\"href\":\"/products/instant-apis\"},{\"label\":\"AI and MCP\",\"href\":\"/solutions/ai-and-mcp\"}]},{\"eyebrow\":\"Access\",\"title\":\"Sign-in feeds roles and row-level security\",\"body\":\"Every user has a role with per-entity permissions, and row-level security limits which records they reach, including group-scoped reads for teams.\",\"links\":[{\"label\":\"Access control\",\"href\":\"/products/access-control\"},{\"label\":\"Roles and permissions\",\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\"}]}]}}],\"code\":{\"heading\":\"In practice\",\"subheading\":\"The REST calls behind each sign-in method\",\"tabs\":[{\"label\":\"Email and password\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/token\\nContent-Type: application/json\\n\\n{\\n \\\"email\\\": \\\"[email protected]\\\",\\n \\\"password\\\": \\\"\u003cpassword\u003e\\\"\\n}\"},{\"label\":\"Magic link\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/[email protected]\"},{\"label\":\"Native Apple\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/native/apple\\nContent-Type: application/json\\n\\n{\\n \\\"identity_token\\\": \\\"\u003cApple identityToken\u003e\\\",\\n \\\"user_identifier\\\": \\\"\u003cApple user ID\u003e\\\",\\n \\\"given_name\\\": \\\"Alice\\\",\\n \\\"family_name\\\": \\\"Smith\\\"\\n}\"},{\"label\":\"Refresh\",\"language\":\"http\",\"code\":\"POST https://api.my.anythink.cloud/org/{org_id}/auth/v1/refresh\\nContent-Type: application/json\\n\\n{\\n \\\"token\\\": \\\"\u003crefresh token\u003e\\\"\\n}\"},{\"label\":\"Provider list\",\"language\":\"http\",\"code\":\"GET https://api.my.anythink.cloud/org/{org_id}/auth/v1/providers\"}]},\"narrative\":{\"heading\":\"How it works\",\"subheading\":\"From an empty project to a signed-in user\",\"steps\":[{\"title\":\"Pick your sign-in methods\",\"prose\":\"Email and password and magic links use the built-in auth endpoints. Turn on Apple, Google or LinkedIn under Settings ⺠Social Sign-In with your client IDs.\"},{\"title\":\"Show the right buttons\",\"prose\":\"Your login page calls /auth/v1/providers and renders only the methods this project has configured.\"},{\"title\":\"Sign the user in\",\"prose\":\"Web apps run the OAuth redirect, with PKCE where the provider supports it. Mobile apps send the provider's identity token to /auth/v1/native/{provider}, which verifies it and creates the user on first sign-in.\"},{\"title\":\"Use the session\",\"prose\":\"Send the access token as a Bearer token on each API call and refresh it when it expires. In React, the open-source SDK's AuthProvider and useAuth handle this for you.\"},{\"title\":\"Decide what they can reach\",\"prose\":\"Give the user a role, link records to them, and let row-level security filter what they see.\"}],\"aside\":{\"eyebrow\":\"Follow the guide\",\"title\":\"Google sign-in, start to finish\",\"body\":\"Create the credentials in Google Cloud, add them to the project and people can sign in with Google.\",\"link\":{\"label\":\"Read the social sign-in guide\",\"href\":\"https://docs.anythink.cloud/guides/authentication/social-sign-in\"}}}},\"testimonials\":[]}]\n2f:[\"$\",\"section\",null,{\"className\":\"py-32 bg-white dark:bg-[#1a1a1a]\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-left mb-16\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-4xl md:text-5xl font-bold tracking-tight font-helvetica text-[#2C2C2C] dark:text-white mb-6 leading-[1.1]\",\"children\":\"Frequently Asked Questions\"}],\"\"]}],[\"$\",\"div\",null,{\"className\":\"space-y-0\",\"children\":[[\"$\",\"details\",\"21\",{\"className\":\"group border-b border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"summary\",null,{\"className\":\"w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [\u0026::-webkit-details-marker]:hidden\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]\",\"children\":\"What sign-in methods does Anythink support?\"}
14],[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 15 15\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"aria-hidden\":\"true\",\"className\":\"flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180\",\"ref\":\"$undefined\",\"children\":[\"$\",\"path\",null,{\"d\":\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\",\"fill\":\"currentColor\",\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"pb-6 text-[#666666] dark:text-gray-300 leading-relaxed\",\"style\":{\"lineHeight\":\"1.75\"},\"children\":[[\"$\",\"p\",\"0\",{\"className\":\"mb-3 last:mb-0\",\"children\":[\"Email and password (with email confirmation and password reset), magic links, native Apple, Google and LinkedIn sign-in for mobile apps, and web OAuth sign-in for the providers you enable. Every method ends with the same JWT access and refresh tokens.\"]}]]}]]}],[\"$\",\"details\",\"22\",{\"className\":\"group border-b border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"summary\",null,{\"className\":\"w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [\u0026::-webkit-details-marker]:hidden\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]\",\"children\":\"How do I add Sign in with Apple to an iOS app?\"}],[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 15 15\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"aria-hidden\":\"true\",\"className\":\"flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180\",\"ref\":\"$undefined\",\"children\":[\"$\",\"path\",null,{\"d\":\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\",\"fill\":\"currentColor\",\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"pb-6 text-[#666666] dark:text-gray-300 leading-relaxed\",\"style\":{\"lineHeight\":\"1.75\"},\"children\":[[\"$\",\"p\",\"0\",{\"className\":\"mb-3 last:mb-0\",\"children\":[\"Turn on Apple under \",[\"$\",\"strong\",\"20\",{\"className\":\"font-semibold text-[#2C2C2C] dark:text-white\",\"children\":\"Settings ⺠Social Sign-In\"}],\" in the Anythink dashboard and list your app's client IDs. Your app sends the identity token and user identifier from Sign in with Apple to POST /auth/v1/native/apple. Anythink verifies the token against Apple's published keys, checks the subject matches, and returns a session.\"]}],\"$L3b\"]}]]}],\"$L3c\",\"$L3d\"]}],\"$L3e\"]}]}]\n3f:[\"$\",\"section\",null,{\"className\":\"py-20 bg-[#F8F7F4] dark:bg-[#1a1a1a]\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto px-6\",\"children\":[[null,null,null,null],[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"text-2xl font-bold text-[#2C2C2C] dark:text-white mb-6\",\"children\":\"Documentation\"}],[\"$\",\"p\",null,{\"className\":\"text-gray-600 dark:text-gray-400 mb-8\",\"children\":\"Guides and reference at docs.anythink.cloud.\"}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\",\"children\":[[\"$\",\"div\",\"doc-0\",{\"className\":\"bg-white dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-bold text-[#2C2C2C] dark:text-white mb-3\",\"children\":\"Mobile app backend\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-gray-600 dark:text-gray-400 mb-4 line-clamp-2\",\"children\":\"A backend for a mobile app: sign-in, push notifications with action buttons, Apple in-app purchases and file uploads, all from one data model.\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.anythink.cloud\",\"className\":\"text-[#F97316] hover:underline text-sm font-medium\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Read More â\"}]]}],[\"$\",\"div\",\"doc-1\",{\"className\":\"bg-white dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-bold text-[#2C2C2C] dark:text-white mb-3\",\"children\":\"SaaS backend for teams\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-gray-600 dark:text-gray-400 mb-4 line-clamp-2\",\"children\":\"Multi-user projects with roles, permissions, groups and row-level security, so each team only ever sees its own records.\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.anythink.cloud\",\"className\":\"text-[#F97316] hover:underline text-sm font-medium\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Read More â\"}]]}],[\"$\",\"div\",\"doc-2\",{\"className\":\"bg-white dark:bg-gray-800 p-6 rounded border border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"h4\",null,{\"className\":\"font-bold text-[#2C2C2C] dark:text-white mb-3\",\"children\":\"Sign in users: email, tokens and API keys\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-gray-600 dark:text-gray-400 mb-4 line-clamp-2\",\"children\":\"Register and sign in users with email and password, manage sessions with access and refresh tokens, reset passwords, and know when to use an API key.\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.anythink.cloud/guides/authentication/sign-in\",\"className\":\"text-[#F97316] hover:underline text-sm font-medium\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Read More â\"}]]}]]}]]}]]}]}]\n30:[[\"$\",\"noscript\",null,{\"children\":\"$3f\"}],[\"$\",\"$L40\",null,{\"currentPage\":{\"id\":1,\"slug\":\"authentication\",\"type\":\"product\",\"title\":\"Authentication\",\"status\":\"published\",\"hero\":{\"headline\":\"Sign-in for web and mobile,/ver
14ified on the server\",\"description\":\"\u003cp\u003eAdd email and password, magic links, and Apple, Google or LinkedIn sign-in to your app, with every native token verified on the server.\u003c/p\u003e\",\"featurePills\":[\"Email and password\",\"Magic links\",\"Native Apple / Google / LinkedIn\",\"Web OAuth with PKCE\",\"JWT and refresh tokens\",\"Provider list per project\"],\"image\":{\"url\":\"/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\",\"alt\":\"Authentication\"},\"images\":[{\"id\":\"71\",\"url\":\"/cdn-assets/20804318/1990edc932a346d69c564e7af2f7db3e.png\",\"alt\":\"Authentication\",\"original_file_name\":\"Copy of User Name (1).png\"}],\"video\":{\"url\":\"/cdn-assets/20804318/ded73b0819e74c65886012108cee1456.mp4\",\"alt\":\"Authentication\"},\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":{\"text\":\"Read the docs\",\"action\":\"https://docs.anythink.cloud/guides/authentication\"}},\"sections\":{\"features\":{\"enabled\":true,\"title\":\"Sign-in that ships/with your backend\",\"description\":\"\u003cp\u003eEmail and password, magic links, native and web social sign-in, and JWT sessions, all on the same users your data model already links to.\u003c/p\u003e\",\"cards\":[{\"id\":20,\"type\":\"feature\",\"title\":\"Email, password and magic links\",\"description\":\"\u003cp\u003eRegister users, confirm their email, reset passwords and send one-time magic links from the built-in auth endpoints. Password sign-in waits until the email address is confirmed.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/53fd07ad0bdc4e91ab10bae3fed6b4af.png\",\"alt\":\"Email, password and magic links\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":21,\"type\":\"feature\",\"title\":\"Native Apple, Google and LinkedIn sign-in\",\"description\":\"\u003cp\u003eYour iOS or Android app sends Anythink the provider's identity token. Anythink checks it against the provider's published keys and cross-checks the subject ID before it signs anyone in. Native sign-in needs your app's client IDs, not a client secret.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/4c0513737e7f4e14878113d6c09389a9.png\",\"alt\":\"Native Apple, Google and LinkedIn sign-in\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":22,\"type\":\"feature\",\"title\":\"Web OAuth with PKCE\",\"description\":\"\u003cp\u003eFor browser sign-in, Anythink runs the authorise and callback flow for each provider you enable, using PKCE where the provider supports it, and records UTM and referrer details when a user signs up.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":{\"url\":\"/cdn-assets/20804318/be8f04543cfb41d7a126876abee72c7c.mp4\",\"alt\":\"Web OAuth with PKCE\"},\"pageIds\":[1]},{\"id\":69,\"type\":\"feature\",\"title\":\"JWT sessions with refresh\",\"description\":\"\u003cp\u003eSign-in returns a JWT access token and a refresh token. Refreshing issues a new pair, logout revokes the refresh token, and transfer tokens hand a session from one app or device to another.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":79,\"type\":\"feature\",\"title\":\"Users are part of your data model\",\"description\":\"\u003cp\u003eEvery signed-in user is a record you can link to any entity with a user field, then use in roles, row-level security and workflows.\u003c/p\u003e\",\"examples\":\"\",\"hero_image\":{\"url\":\"/cdn-assets/20804318/fee6ede0ad8c4dc4a3e6096c80705ace.png\",\"alt\":\"Users are part of your data model\"},\"video_demo\":\"$undefined\",\"pageIds\":[1]},{\"id\":191,\"type\":\"feature\",\"title\":\"One provider list per project\",\"description\":\"\u003cp\u003e\u003ccode\u003eGET /auth/v1/providers\u003c/code\u003e returns the sign-in methods this project has configured, so your login page shows only the buttons that will work.\u003c/p\u003e\",\"examples\":null,\"hero_image\":\"$undefined\",\"video_demo\":\"$undefined\",\"pageIds\":[1]}]},\"benefits\":{\"title\":\"Why Founders Choose Anythink\",\"description\":\"Replace your entire tech stack with one platform. Built for speed.\"}
14,\"useCases\":{\"enabled\":false,\"title\":null,\"description\":null,\"cards\":[]},\"clients\":{\"enabled\":false,\"title\":\"\",\"description\":\"\",\"logos\":[]},\"pricing\":{\"enabled\":false,\"title\":\"\",\"description\":null,\"tiers\":[]},\"examples\":{\"enabled\":false,\"title\":null,\"description\":null,\"items\":[]},\"articles\":{\"enabled\":false,\"type\":\"latest\",\"title\":\"Latest from Anythink\",\"description\":\"\u003cp\u003eRead about our latest updates and happenings\u003c/p\u003e\",\"items\":[]},\"partners\":{\"enabled\":false,\"title\":\"Partners\",\"description\":\"\u003cp\u003eThe companies Anythink is built with.\u003c/p\u003e\",\"logos\":[]},\"faq\":{\"enabled\":true,\"title\":\"Frequently Asked Questions\",\"description\":\"\",\"items\":[{\"id\":21,\"__name\":\"What sign-in methods does Anythink support?\",\"answer\":\"Email and password (with email confirmation and password reset), magic links, native Apple, Google and LinkedIn sign-in for mobile apps, and web OAuth sign-in for the providers you enable. Every method ends with the same JWT access and refresh tokens.\",\"locked\":false,\"question\":\"What sign-in methods does Anythink support?\"},{\"id\":22,\"__name\":\"How do I add Sign in with Apple to an iOS app?\",\"answer\":\"Turn on Apple under **Settings ⺠Social Sign-In** in the Anythink dashboard and list your app's client IDs. Your app sends the identity token and user identifier from Sign in with Apple to POST /auth/v1/native/apple. Anythink verifies the token against Apple's published keys, checks the subject matches, and returns a session.\\n\\nApple only shares the user's name on the first sign-in, so send given_name and family_name on that call.\",\"locked\":false,\"question\":\"How do I add Sign in with Apple to an iOS app?\"},{\"id\":23,\"__name\":\"How do access and refresh tokens work?\",\"answer\":\"Sign-in returns a JWT access token for API calls and a refresh token. Send the access token as a Bearer token. When it expires, POST the refresh token to /auth/v1/refresh for a new pair. Logging out revokes the refresh token.\",\"locked\":false,\"question\":\"How do access and refresh tokens work?\"},{\"id\":24,\"__name\":\"Can I control what each signed-in user can see?\",\"answer\":\"Yes. Every user has a role, and roles carry permissions per entity, such as orders:read. Row-level security then limits which records a user reaches. Users can also belong to groups, so team members can read their team's records while staff-only records stay private.\",\"locked\":false,\"question\":\"Can I control what each signed-in user can see?\"}]},\"about\":{\"enabled\":\"$11:0:props:ssrData:product:0:sections:about:enabled\",\"title\":\"Built with Experience\",\"description\":\"\"},\"testimonials\":{\"enabled\":false,\"content\":[]},\"ctaArea\":{\"enabled\":true,\"content\":{\"id\":2,\"headline\":\"Ready to go?\",\"description\":\"\u003cp\u003eCreate an account and start building\u003c/p\u003e\",\"primaryButton\":{\"text\":\"Start free\",\"action\":\"/login\"},\"secondaryButton\":\"$undefined\",\"relatedDoc\":\"$undefined\"}}},\"additional_pricing_info\":null,\"relatedDoc\":\"$undefined\",\"seo_keywords\":\"authentication API, Sign in with Apple backend, Google sign-in backend, LinkedIn sign-in API, magic link authentication, JWT refresh tokens, OAuth PKCE, Auth0 alternative\",\"seo_focus_keyword\":\"Authentication API with Apple and Google sign-in\",\"seo_description\":\"$undefined\",\"createdAt\":\"$undefined\",\"updatedAt\":\"$undefined\",\"deepDiveConfig\":\"$2e:props:data\"}}]]\n31:[\"$\",\"$L41\",null,{\"content\":\"$30:1:props:currentPage:sections:ctaArea:content\"}]\n"])</script>
14<script>self.__next_f.push([1,"36:[\"$\",\"p\",null,{\"className\":\"mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"The token your app receives works on every entity endpoint, and the Anythink MCP server authenticates with the same user JWT, so permissions apply the same way to people and assistants.\"}]\n37:[\"$\",\"div\",null,{\"className\":\"mt-5 flex flex-wrap gap-x-6 gap-y-2\",\"children\":[[\"$\",\"$L20\",\"/products/instant-apis\",{\"href\":\"/products/instant-apis\",\"className\":\"text-sm font-medium text-[#F97316] hover:underline\",\"children\":[\"Instant APIs\",\" â\"]}],[\"$\",\"$L20\",\"/solutions/ai-and-mcp\",{\"href\":\"/solutions/ai-and-mcp\",\"className\":\"text-sm font-medium text-[#F97316] hover:underline\",\"children\":[\"AI and MCP\",\" â\"]}]]}]\n38:[\"$\",\"article\",\"Sign-in feeds roles and row-level security\",{\"className\":\"min-w-0 border-t-2 border-[#2C2C2C] dark:border-gray-600 pt-6\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":true,\"className\":\"mb-6 aspect-video relative overflow-hidden border border-gray-200 dark:border-gray-800 bg-[#F4F3F0] dark:bg-[#111]\",\"children\":[\"$\",\"$L28\",null,{\"variant\":\"grid\",\"className\":\"absolute inset-0\"}]}],[\"$\",\"p\",null,{\"className\":\"font-mono text-xs uppercase tracking-widest text-[#F97316]\",\"children\":\"Access\"}],[\"$\",\"h3\",null,{\"className\":\"mt-3 text-2xl font-bold text-[#2C2C2C] dark:text-white leading-snug\",\"children\":\"Sign-in feeds roles and row-level security\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-[#5A5A5A] dark:text-gray-300 leading-relaxed\",\"children\":\"Every user has a role with per-entity permissions, and row-level security limits which records they reach, including group-scoped reads for teams.\"}],\"$undefined\",[\"$\",\"div\",null,{\"className\":\"mt-5 flex flex-wrap gap-x-6 gap-y-2\",\"children\":[[\"$\",\"$L20\",\"/products/access-control\",{\"href\":\"/products/access-control\",\"className\":\"text-sm font-medium text-[#F97316] hover:underline\",\"children\":[\"Access control\",\" â\"]}],[\"$\",\"a\",\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\",{\"href\":\"https://docs.anythink.cloud/guides/authentication/roles-and-permissions\",\"className\":\"text-sm font-medium text-[#F97316] hover:underline\",\"children\":[\"Roles and permissions\",\" â\"]}]]}]]}]\n3b:[\"$\",\"p\",\"1\",{\"className\":\"mb-3 last:mb-0\",\"children\":[\"Apple only shares the user's name on the first sign-in, so send given_name and family_name on that call.\"]}]\n3c:[\"$\",\"details\",\"23\",{\"className\":\"group border-b border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"summary\",null,{\"className\":\"w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [\u0026::-webkit-details-marker]:hidden\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]\",\"children\":\"How do access and refresh tokens work?\"}],[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 15 15\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"aria-hidden\":\"true\",\"className\":\"flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180\",\"ref\":\"$undefined\",\"children\":[\"$\",\"path\",null,{\"d\":\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\",\"fill\":\"currentColor\",\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"pb-6 text-[#666666] dark:text-gray-300 leading-relaxed\",\"style\":{\"lineHeight\":\"1.75\"},\"children\":[[\"$\",\"p\",\"0\",{\"className\":\"mb-3 last:mb-0\",\"children\":[\"Sign-in returns a JWT access token for API calls and a refresh token. Send the access token as a Bearer token. When it expires, POST the refresh token to /auth/v1/refresh for a new pair. Logging out revokes the refresh token.\"]}]]}]]}]\n3d:[\"$\",\"details\",\"24\",{\"className\":\"group border-b border-gray-200 dark:border-gray-700\",\"children\":[[\"$\",\"summary\",null,{\"className\":\"w-full py-6 flex items-start justify-between gap-4 text-left cursor-pointer list-none hover:text-[#F97316] transition-colors [\u0026::-webkit-details-marker]:hidden\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-lg font-medium text-[#2C2C2C] dark:text-white group-hover:text-[#F97316]\",\"children\":\"Can I control what each signed-in user can see?\"}
14],[\"$\",\"svg\",null,{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 15 15\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"aria-hidden\":\"true\",\"className\":\"flex-shrink-0 mt-1 w-5 h-5 text-[#666666] dark:text-gray-400 transition-transform duration-200 group-open:rotate-180\",\"ref\":\"$undefined\",\"children\":[\"$\",\"path\",null,{\"d\":\"M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z\",\"fill\":\"currentColor\",\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"pb-6 text-[#666666] dark:text-gray-300 leading-relaxed\",\"style\":{\"lineHeight\":\"1.75\"},\"children\":[[\"$\",\"p\",\"0\",{\"className\":\"mb-3 last:mb-0\",\"children\":[\"Yes. Every user has a role, and roles carry permissions per entity, such as orders:read. Row-level security then limits which records a user reaches. Users can also belong to groups, so team members can read their team's records while staff-only records stay private.\"]}]]}]]}]\n3e:[\"$\",\"div\",null,{\"className\":\"mt-16 text-left\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-[#666666] dark:text-gray-400 mb-4\",\"children\":\"Still have questions?\"}],[\"$\",\"a\",null,{\"href\":\"/contact\",\"className\":\"inline-block px-7 py-3 bg-[#F97316] text-white font-medium hover:bg-[#ea6c0e] transition-colors shadow-lg shadow-[#F97316]/25\",\"children\":\"Get in Touch\"}]]}]\n"])</script>
14<script>self.__next_f.push([1,"42:I[85437,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"Image\"]\n25:[\"$\",\"footer\",null,{\"className\":\"bg-black text-white\",\"children\":[\"$\",\"div\",null,{\"className\":\"px-8 py-20\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-[1200px] mx-auto\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col lg:flex-row justify-between gap-12 lg:gap-16 mb-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"space-y-6 flex-shrink-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"relative w-[180px] h-[120px]\",\"children\":[\"$\",\"$L42\",null,{\"src\":\"/anythink-rotating.gif\",\"alt\":\"Anythink\",\"fill\":true,\"sizes\":\"180px\",\"className\":\"object-contain brightness-0 invert\"}]}],[\"$\",\"p\",null,{\"className\":\"text-sm text-gray-300 max-w-[180px]\",\"children\":\"The whole backend, in one project.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex-1 flex flex-col lg:flex-row justify-end gap-8 lg:gap-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col sm:flex-row gap-8 lg:gap-12\",\"children\":[[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-bold mb-4 text-gray-100\",\"children\":\"Product\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"1\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/authentication\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Authentication\"}]}],[\"$\",\"li\",\"7\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/workflow-automation\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Workflows\"}]}],[\"$\",\"li\",\"8\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/instant-apis\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Instant APIs\"}]}],[\"$\",\"li\",\"10\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/visual-database-designer\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Visual Database Designer\"}]}],[\"$\",\"li\",\"11\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/smart-file-manager\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Smart File Manager\"}]}],[\"$\",\"li\",\"12\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/subscriptions\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Subscriptions\"}]}],[\"$\",\"li\",\"14\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/powerful-search-engine\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Search\"}]}],[\"$\",\"li\",\"19\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/access-control\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Access Control\"}]}],[\"$\",\"li\",\"31\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/dashboards\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Dashboards\"}]}],[\"$\",\"li\",\"32\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/integrations\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Integrations\"}]}],[\"$\",\"li\",\"35\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/push-notifications\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Push Notifications\"}]}],[\"$\",\"li\",\"64\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/secrets\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Secrets\"}]}],[\"$\",\"li\",\"65\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/products/email\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Email\"}]}]]}]]}]}],[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-bold mb-4 text-gray-100\",\"children\":\"Solutions\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"3\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/content-manager\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Content Management\"}]}],[\"$\",\"li\",\"15\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/flexible-data-views\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Flexible Data Views\"}]}],[\"$\",\"li\",\"17\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/white-label-platform\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Branded dashboard\"}]}],[\"$\",\"li\",\"28\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/typescript-sdk\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"TypeScript SDK\"}]}],\"$L43\",\"$L44\",\"$L45\",\"$L46\",\"$L47\",\"$L48\"]}]]}]}],\"$L49\",\"$L4a\"]}],\"$L4b\"]}]]}],\"$L4c\"]}]}]}]\n"])</script>
14<script>self.__next_f.push([1,"4d:I[82916,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"NewsletterSubscription\"]\n4e:I[94227,[\"/_next/static/immutable/chunks/1tf2pn9278k7y.js\",\"/_next/static/immutable/chunks/02fdmtrpe1j59.js\",\"/_next/static/immutable/chunks/1tejsfbbbtbet.js\",\"/_next/static/immutable/chunks/2lz67str4xv0d.js\",\"/_next/static/immutable/chunks/1gaxm1euvcjb0.js\",\"/_next/static/immutable/chunks/3a6ue4fmoufh-.js\",\"/_next/static/immutable/chunks/13_-s5u75pnmm.js\",\"/_next/static/immutable/chunks/325vyszgqblpc.js\",\"/_next/static/immutable/chunks/1ibk_c4qd8xp0.js\"],\"default\"]\n43:[\"$\",\"li\",\"29\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/anythink-cli\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Anythink CLI\"}]}]\n44:[\"$\",\"li\",\"30\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/ai-and-mcp\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"AI \u0026 MCP\"}]}]\n45:[\"$\",\"li\",\"33\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/migrate-from-amazon-pinpoint\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Migrate from Amazon Pinpoint\"}]}]\n46:[\"$\",\"li\",\"34\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/migrate-from-firebase-extensions\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Migrate from Firebase Extensions\"}]}]\n47:[\"$\",\"li\",\"66\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/supabase-alternative\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Supabase alternative\"}]}]\n48:[\"$\",\"li\",\"67\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/firebase-alternative\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Firebase alternative\"}]}]\n49:[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-bold mb-4 text-gray-100\",\"children\":\"Who it's for\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"2\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/for-founders\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"For Founders\"}]}],[\"$\",\"li\",\"6\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/for-enterprise\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"For Enterprise\"}]}],[\"$\",\"li\",\"27\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/solutions/for-agencies\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"For Agencies\"}]}]]}]]}]}]\n4a:[\"$\",\"div\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-3\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-bold mb-4 text-gray-100\",\"children\":\"Get Started\"}],[\"$\",\"ul\",null,{\"className\":\"space-y-2\",\"children\":[[\"$\",\"li\",\"2001\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://docs.anythink.cloud/\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Documentation\"}]}],[\"$\",\"li\",\"2002\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://my.anythink.cloud/auth/register\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Sign Up Free\"}]}],[\"$\",\"li\",\"2003\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/pricing\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Pricing\"}]}],[\"$\",\"li\",\"2004\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/articles\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"All Articles\"}]}],[\"$\",\"li\",\"2006\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/comparisons\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Comparisons\"}]}],[\"$\",\"li\",\"2005\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/careers\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Careers\"}]}],[\"$\",\"li\",\"2\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/policy/terms-of-service\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Terms of Service\"}]}],[\"$\",\"li\",\"1\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/policy/privacy-policy\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Privacy Policy\"}]}],[\"$\",\"li\",\"3\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/policy/cookie-policy\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Cookie Policy\"}]}],[\"$\",\"li\",\"1000\",{\"children\":[\"$\",\"$L20\",null,{\"href\":\"/contact\",\"className\":\"text-sm text-gray-400 hover:text-gray-200 transition-colors\",\"children\":\"Contact\"}]}]]}]]}]}]\n4b:[\"$\",\"div\",null,{\"className\":\"space-y-6 flex-shrink-0\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-bold mb-4 text-white\",\"children\":\"Subscribe\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-gray-300 mb-4 max-w-[220px]\",\"children\":\"Get new features and releases by email.\"}],[\"$\",\"div\",null,{\"className\":\"max-w-[220px]\",\"children\":[\"$\",\"$L4d\",null,{}]}],[\"$\",\"p\",null,{\"className\":\"text-xs text-gray-400 max-w-[220px] mt-4\",\"children\":\"By subscribing you agree to our Privacy Policy.\"}]]}]\n4f:T50e,M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109
14-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z4c:[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row justify-between items-center gap-6 pt-8 border-t border-gray-700\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-sm text-gray-400 text-center md:text-left flex flex-col sm:flex-row items-center gap-2 sm:gap-6\",\"children\":[[\"$\",\"p\",null,{\"children\":\"© 2026 Anythink®. All rights reserved.\"}],[\"$\",\"$L4e\",null,{\"className\":\"text-sm text-gray-400 hover:text-gray-200 underline-offset-2 hover:underline transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[#F97316]\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col sm:flex-row items-center gap-6\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://discord.gg/B2VxUja95S\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"flex items-center gap-2.5 group\",\"children\":[[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 640 512\",\"className\":\"w-5 h-5 text-gray-400 group-hover:text-[#5865F2] transition-colors flex-shrink-0\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"$4f\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"block text-sm font-medium text-gray-300 group-hover:text-white transition-colors leading-tight\",\"children\":\"Join the community\"}],[\"$\",\"span\",null,{\"className\":\"block text-xs text-gray-400 leading-tight\",\"children\":\"Get help · share what you're building\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"hidden sm:block w-px h-8 bg-gray-700\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xs text-gray-400 mr-2 font-mono uppercase tracking-wider\",\"children\":\"Company\"}],[[\"$\",\"a\",\"1\",{\"href\":\"https://x.com/anythink_cloud\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"Twitter\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 512 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}],\"$L50\",\"$L51\",\"$L52\",\"$L53\",\"$L54\",\"$L55\"]]}],\"$L56\"]}]]}]\n"])</script>
14<script>self.__next_f.push([1,"50:[\"$\",\"a\",\"2\",{\"href\":\"https://www.linkedin.com/company/anythink-cloud\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"LinkedIn\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 448 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]\n51:[\"$\",\"a\",\"3\",{\"href\":\"https://bsky.app/profile/anythink-uk.bsky.social\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"BlueSky\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 512 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]\n52:[\"$\",\"a\",\"5\",{\"href\":\"https://www.youtube.com/@anythink_cloud\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"YouTube\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 576 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]\n53:[\"$\",\"a\",\"6\",{\"href\":\"https://www.producthunt.com/products/anythink?launch=anythink\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"Product Hunt\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 512 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M326.3 218.8c0 20.5-16.7 37.2-37.2 37.2h-70.3v-74.4h70.3c20.5 0 37.2 16.7 37.2 37.2zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-128.1-37.2c0-47.9-38.9-86.8-86.8-86.8H169.2v248h49.6v-74.4h70.3c47.9 0 86.8-38.9 86.8-86.8z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]\n54:[\"$\",\"a\",\"7\",{\"href\":\"https://www.npmjs.com/package/@anythink-cloud/sdk\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"Open Source Typescript SDK - NPM Package\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 576 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"}
14,\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]\n57:T518,M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z55:[\"$\",\"a\",\"8\",{\"href\":\"https://github.com/Anythink-Ltd\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"Github - Link to open source projects including our TypeScript SDK\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 496 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"$57\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]\n56:[[\"$\",\"div\",null,{\"className\":\"hidden sm:block w-px h-8 bg-gray-700\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xs text-gray-400 mr-2 font-mono uppercase tracking-wider\",\"children\":\"Founder\"}],[[\"$\",\"a\",\"4\",{\"href\":\"https://www.tiktok.com/@chris.addams\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"p-1.5 text-gray-400 hover:text-white transition-colors\",\"title\":\"TikTok\",\"children\":[\"$\",\"svg\",null,{\"stroke\":\"currentColor\",\"fill\":\"currentColor\",\"strokeWidth\":\"0\",\"viewBox\":\"0 0 448 512\",\"className\":\"w-5 h-5\",\"children\":[\"$undefined\",[[\"$\",\"path\",\"0\",{\"d\":\"M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z\",\"children\":[]}]]],\"style\":{\"color\":\"$undefined\"},\"height\":\"1em\",\"width\":\"1em\",\"xmlns\":\"http://www.w3.org/2000/svg\"}]}]]]}]]\n"])</script>
14</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.