Permissions & access
Typillar acts on your behalf in the accounts you connect — Cloudflare, GitHub, and, if your app takes payments, Stripe — so it’s worth being precise about what that access is, what it’s used for, and how to withdraw it. This page is the reference for all of that.
How access is granted
Section titled “How access is granted”Cloudflare and GitHub are OAuth connections.
- You approve each one on the provider’s own screen, not inside Typillar.
- Typillar receives a revocable token, never your password.
- You can withdraw the grant at any time, from either side.
Stripe is not. Stripe has no OAuth flow here: if your app takes payments, you paste a Stripe secret key into the project’s Payments settings, and it goes straight into a Cloudflare Secrets Store in your own account — Typillar keeps the key’s address, never its value. That’s a long-lived credential you created, so it’s yours to scope and yours to roll — see Stripe below.
What each connection allows
Section titled “What each connection allows”Cloudflare
Section titled “Cloudflare”Used to build and run your project on your account: deploy Workers, create the resources a feature needs, publish live URLs, run the agent’s model, and read the live app’s request counts for the console. Everything created is in your account and visible in your Cloudflare dashboard. See Connect Cloudflare.
Cloudflare scopes are granted incrementally. Connecting grants the baseline below and nothing more. The first time a feature needs storage, email or a domain, Typillar returns you to Cloudflare’s screen to grant that one extra permission.
Baseline — granted when you connect:
| Scope | What it’s for |
|---|---|
account-settings.read |
Read the account and its workers.dev subdomain |
account-analytics.read |
Read the live app’s request and error counts, for the console |
workers-scripts.write |
Deploy and manage your project’s Workers |
ai.write |
Run the agent’s model on Workers AI |
aig.run |
Reach the frontier models (Claude, GPT, Gemini) through AI Gateway, on your Cloudflare billing |
browser-rendering.write |
Render pages headlessly for the Render capability |
offline_access |
Refresh the token silently, so the connection doesn’t expire mid-build |
Incremental — asked for the first time a feature needs it:
| Feature | Scopes | What it’s for |
|---|---|---|
| Data and sign-in | d1.write, vectorize.write |
Create the project’s D1 database, and the vector index when a collection ranks by meaning |
| Sign-in with Google or GitHub | secrets-store.write |
Hold the OAuth client secret you paste in your account’s own Secrets Store |
| Payments | secrets-store.write |
Hold your Stripe secret key in your account’s own Secrets Store |
| Outside APIs | secrets-store.write |
Hold each connection’s API key in your account’s own Secrets Store |
| Files, and project assets | workers-r2.write |
Create and manage the project’s R2 buckets |
| AI | ai.write |
Already in the baseline — no second consent needed |
email-sending.write, email-routing-rule.write, zone.read, zone-settings.read, zone-settings.write, dns.read |
Send mail, receive mail, and find and read the zone it attaches to | |
| Calls | calls.read, calls.write, stream.write |
Find and create the SFU app a call joins |
| Queue | queues.write |
Create and manage the project’s Cloudflare Queue |
| Video | stream.write |
Upload and manage video on Cloudflare Stream |
| Bot check | challenge-widgets.write |
Create the project’s Turnstile widget |
| Custom domains | zone.write, dns.write, workers-routes.write |
Read the zone’s status, write the DNS record, route the app to it |
The domain must already be a zone on your Cloudflare account. Typillar does not create zones.
GitHub
Section titled “GitHub”Used to commit generated code to a repository you own and maintain its
history. Be aware that this grant is not repository-scoped: Typillar connects
through a GitHub OAuth app and requests the repo scope, which GitHub defines as
full control of your public and private repositories. GitHub does not offer a
per-repository choice for that scope.
Typillar only ever writes to the repositories it creates for your projects, and it creates them on the account that authorized the connection — not in an organization. But the grant is broader than that, and you should size it accordingly — if you want a hard boundary, authorize from a GitHub account that holds nothing else. GitHub is optional; see Connect GitHub.
Stripe (only if your app takes payments)
Section titled “Stripe (only if your app takes payments)”If a project uses payments, you paste your Stripe secret key into the project’s Payments settings. It is not kept by Typillar at all, encrypted or otherwise — it goes straight into a Cloudflare Secrets Store in your own account, and is used from there to register the project’s webhook endpoint and create checkout sessions on your Stripe account. Money moves through your account, never Typillar’s. The signing secret Stripe returns for that endpoint is stored the same way — you never handle it, and Typillar never holds it.
Because this is a key you issue rather than a grant you approve, the bounding is yours to do: Stripe lets you create a restricted key, and the Payments tab tests the one you save against exactly the permissions it needs, naming anything missing. Roll the key in your Stripe dashboard to kill it.
Typillar never touches a resource it didn’t create
Section titled “Typillar never touches a resource it didn’t create”Everything Typillar creates in your Cloudflare account — a Worker, a D1 database, an R2 bucket, a Vectorize index — is written into that project’s resource registry at the moment it is created. That registry is the only claim of ownership Typillar has, and it is checked before every write to an existing resource: if the resource isn’t in the registry, Typillar treats it as someone else’s and refuses to touch it.
The check has no permissive default. A client that comes up without a registry doesn’t get the benefit of the doubt — it fails closed and can write to nothing at all. Removal works the same way: a Worker is only taken down or un-routed if it carries Typillar’s own marker for that project. A Worker of the same name that you deployed yourself is left alone.
So an account with existing Workers, databases and zones is safe to connect. Typillar builds beside what’s already there. It does not adopt it, rename it, or delete it.
Every write is logged
Section titled “Every write is logged”Settings → Activity lists every call Typillar has made against your Cloudflare and GitHub accounts on your behalf: what it did, to which resource, and whether it succeeded. Nothing Typillar does to your accounts is invisible to you.
Who has access inside your organization
Section titled “Who has access inside your organization”Connections belong to your organization, not to a single login — everyone in the organization builds against the same connected accounts. Owners and admins connect, disconnect, and rebind accounts, and manage billing; members build against those connections but cannot change them. Remove a member and their access to the organization’s accounts goes with them.
The trust boundary
Section titled “The trust boundary”The simplest way to reason about Typillar’s access is the ownership split:
- Typillar’s control plane coordinates work.
- Your infrastructure executes and stores it.
Typillar does not host your project, store your application data, or run your inference — so its access exists to act on your resources, not to copy them into ours. See What you own.
Fail-closed by design
Section titled “Fail-closed by design”The resource guard above is one instance of a rule that holds throughout: the default is “deny unless explicitly allowed,” never the reverse. Operator access to Typillar’s own back-office is gated the same way — if the gate can’t positively verify an authorized operator, it serves nothing.
How to revoke access
Section titled “How to revoke access”You can revoke at any time, and from either end:
| Connection | Revoke from Typillar | Revoke from the provider |
|---|---|---|
| Cloudflare | Settings → Connections → Disconnect | Remove the app in Cloudflare settings |
| GitHub | Settings → Connections → Disconnect | Remove the app in GitHub settings |
| Stripe | Turn Payments off for the project | Roll the key in your Stripe dashboard |
Disconnecting deletes Typillar’s stored token for that account, so it can make no further calls on your behalf. It does not tell the provider to invalidate the token — for that, revoke on the provider’s side too. Turning Payments off stops Typillar using your Stripe key, but the key itself stays in your Secrets Store until you replace it; roll it in Stripe if you need it dead.
Revoking stops further changes immediately. Anything already deployed keeps running — it lives in your account, so disconnecting Typillar never tears your project down.