13 letters. Mix to taste.
A pattern is a line of letters, left to right. Each letter is one step. FLE spells Fetch → LLM → Email. Brackets mean "run these at the same time": F[LW]E does L and W in parallel between F and E.
Four ways to kick a flow off
- On a schedule — every morning at 9, every Monday, every 15 minutes. Pick manual, once, interval, or a cron expression.
- Drop a file — drag a PDF, CSV, or image into the editor. The flow fires with the file as its first input.
- Send data to a private link — each flow gets a webhook URL. Stripe, GitHub, or your own script can POST and trigger a run.
- Press ▶ — manual trigger from the UI or the
/triggerAPI.
Turn the link + drop zone on in the editor under Ways to start this flow. You can turn it off anytime.
Never runs twice by accident
Every scheduled tick is stamped with an ID that's a fingerprint of this flow at this exact minute. The database lets exactly one run claim it. If two servers try at once, one wins; the other quietly skips.
If the server crashes mid-run, the next startup notices the stalled claim and marks it failed — so the schedule isn't blocked and nothing runs twice when you bring things back up.
Plain-English version: you can deploy, restart, scale horizontally, whatever — scheduled work fires once. Always.
Pay only for what you actually do
1 credit ≈ $0.001. A typical gpt-4o-mini call is 1–5 credits. A dall-e-3 image is 40 credits. Local HLM and local Ollama models are free.
Every AI step checks your balance before it calls the provider — if you'd go negative, the step fails cleanly and nothing is billed. No surprise bills.
Top up from Account → Credits & Packages: Trial (100 free on signup), Starter (5K), Pro (50K), Ultimate (500K).
Everything a run makes is yours
Each run has its own folder with the log, the files it generated (emails, mp3s, images, markdown, CSV), and a summary. The editor previews them inline — audio player, image, Mermaid diagram, text.
Each file has a stable link you can paste anywhere — into a Slack message, an iframe, a podcast feed, or another flow. Or get /latest/<slug>/<file> to always point at the newest.
Publish a flow, fork someone else's
Every flow is private until you decide otherwise. You can switch it to unlisted (anyone with the link can see it) or public (shows up in the Community tab). Publishing automatically redacts detected secrets — API keys, tokens, the usual.
When someone forks your flow, it's a copy in their account. They run it on their own credits. Your credits are never touched.
Everything is scriptable
Get your API key from Account → API Key & Usage. Send it as x-api-key: <key> on any /api/* endpoint. JWT tokens from the web session work too via Authorization: Bearer <jwt>.
curl -X POST \ https://flow.qriton.com/api/orchestrations \ -H "x-api-key: <key>" \ -H "content-type: application/json" \ -d '{"name":"demo", "pattern":"F", "schedule_type":"manual", "pattern_config":{ "0":{"url":"https://..."}}}'
curl -X POST \ https://flow.qriton.com/api/orchestrations/<id>/trigger \ -H "x-api-key: <key>" # → { runId, status }
curl \ https://flow.qriton.com/api/executions \ -H "x-api-key: <key>" # → [{..., cost_credits, ...}, ...]
/api/orchestrations, /api/executions, /api/credits, /api/community, /api/schedule/preview.
Qriton Flow · flow.qriton.com · part of qriton.com
| Name | Pattern | Schedule | Visibility | Runs | Last | |
|---|---|---|---|---|---|---|
|
{{ o.name }}
{{ o.description }}
|
{{ o.pattern }} | {{ o.schedule_type }} {{ formatSchedule(o) }} | {{ o.visibility || 'private' }} | {{ o.execution_count }} → 0 | {{ o.last_execution || '—' }} |
| Started | Orchestration | Status | Credits | Summary |
|---|---|---|---|---|
| {{ e.started_at }} | {{ e.orchestration_name }} | {{ e.effective_status }} | {{ (e.cost_credits || Math.ceil((e.cost_usd||0)*1000)) }} | {{ e.summary }} |
{{ selectedExecution.run_id.slice(0, 8) }}…{{ a.raw || a.preview }}
{{ a.raw || a.preview }}
No public workflows yet. Be the first — set Visibility: Public on one of your workflows in the editor.
{{ communityDetail.name }}
{{ communityDetail.description || '(no description)' }}
{{ JSON.stringify(communityDetail.pattern_config_scrubbed, null, 2) }}
-
{{ d.path }}— {{ d.reason }}
Credits & Billing
1 credit ≈ $0.001 · typical gpt-4o-mini call = 1–5 credits · HLM (local) is free · image generation is flat-priced (dall-e-3 standard = 40 credits, hd = 80)
Top up with a package
🔒 Secure checkout via Stripe. Credits are credited automatically once payment clears.
⚙ Dev mode — Stripe isn't configured, so "Get credits" runs the dev stub (instant grant, no payment). Set STRIPE_SECRET_KEY in .env to enable real payments.
Billing is currently unavailable on this server. Please contact the admin.
Transaction history
| When | Amount | Reason |
|---|---|---|
| {{ t.created_at }} | {{ t.delta > 0 ? '+' : '' }}{{ t.delta.toLocaleString() }} | {{ t.reason }} |
Account
Profile
Email is immutable (it's your account identity). To change, create a new account.
Credits & Packages
🔒 Secure checkout via Stripe. Credits are credited automatically once payment clears.
Dev mode — "Get credits" grants immediately without payment. Set STRIPE_SECRET_KEY in .env to enable real payments.
Billing is currently unavailable on this server. Please contact the admin.
| When | Amount | Reason |
|---|---|---|
| {{ t.created_at }} | {{ t.delta > 0 ? '+' : '' }}{{ t.delta.toLocaleString() }} | {{ t.reason }} |
Notifications
Delivered via SMTP if configured, else logged to console.
API Key & Usage
Use x-api-key: <key> for programmatic access.
Connected services
OAuth-connected accounts. Workflows reference the token via {{connection.<provider>.access_token}} — auto-refreshed when expired.
Pick scopes + connect →
{{ p.user_configured ? 'Your OAuth app is saved' : 'Use your own OAuth app' }}
Register an OAuth app with {{ p.name }}, add this redirect URI:
{{ p.redirect_uri }}
Danger Zone
Permanently delete this account and all its orchestrations, executions, artifacts, and cost history. This cannot be undone.
How to improve this workflow
{{ testResult.statusText }}
{{ testResult.status }}{{ testResult.runId }}
· elapsed {{ (liveElapsedMs / 1000).toFixed(1) }}s
· {{ (testResult.durationMs / 1000).toFixed(2) }}s
· {{ testResult.credits }} credit{{ testResult.credits === 1 ? '' : 's' }}
· state.json
· log file
{{ a.preview }}
Final step output ({{ typeof testResult.finalOutput === 'object' ? 'object' : typeof testResult.finalOutput }})
{{ typeof testResult.finalOutput === 'string' ? testResult.finalOutput : JSON.stringify(testResult.finalOutput, null, 2) }}
Let AI draft the flow
{{ selectedStep.code }} #{{ selectedStepIdx }} · {{ stepMeta(selectedStep.code)?.name }}
{{ stepMeta(selectedStep.code)?.description }}
Pick a trigger or first step
Or pick a template above, or describe the flow in plain English.