Docs

Dart: Full API (api.*)

Every Sovaria API operation as a typed call, grouped by module, with the Dart and Flutter SDK.

Updated Oct 24, 2026

Every Sovaria API operation is also available as api.<module>.<method>(…), generated from the same API specification as the other SDKs. Use it for anything the client areas don't cover yet. api.call(method, path, …) reaches any path with the client's session, scope headers and retries. Each operation links to its HTTP reference entry, which lists the request fields, the response and errors.

#api.ai

api.ai.gatewayOverview

Model-gateway routes, the models they may use, plan limits and cache size.

Future<dynamic> gatewayOverview()

api.ai.saveGatewayRoute

Create or change a route: models in order (fallbacks), retry_on, cache {enabled, ttl_s}, access, daily_requests_per_user.

Future<dynamic> saveGatewayRoute({required String name, required Map<String, Object?> body})

api.ai.deleteGatewayRoute

Delete a route (refused while an agent uses it).

Future<dynamic> deleteGatewayRoute({required String name})

api.ai.gatewayComplete

One completion on a route: the first model that answers (fallbacks), or the cache.

Future<dynamic> gatewayComplete({required String route, required Object messages, Object? system, Object? maxTokens, Object? cache})

api.ai.gatewayUsage

Requests, errors, fallbacks, cache hits, tokens and latency per model and route.

Future<dynamic> gatewayUsage({Object? days})

api.ai.clearGatewayCache

Drop every cached model response of the project.

Future<dynamic> clearGatewayCache()

api.ai.listAgentVersions

An agent's published version and kept versions.

Future<dynamic> listAgentVersions({required String agentId})

api.ai.publishAgentVersion

Publish the agent's draft as its next version.

Future<dynamic> publishAgentVersion({required String agentId, Object? note})

api.ai.getAgentVersion

One version's definition (secrets hidden).

Future<dynamic> getAgentVersion({required String agentId, required String version})

api.ai.compareAgentVersions

What changed between two versions (or a version and the draft).

Future<dynamic> compareAgentVersions({required String agentId, required Object a, Object? b})

api.ai.rollbackAgentVersion

Republish an older version as a new version and make it the draft.

Future<dynamic> rollbackAgentVersion({required String agentId, required String version, Object? note})

#api.attestation

api.attestation.getConfig

App attestation settings, credentials (metadata only), debug tokens and the last 7 days.

Future<dynamic> getConfig({String? projectId})

api.attestation.updateConfig

Set mode (off | monitor | enforce), tokenTtlSeconds, providers, playIntegrity, appAttest.

Future<dynamic> updateConfig({String? projectId, required Map<String, Object?> body})

api.attestation.setGoogleCredentials

Google service account for Play Integrity (encrypted, write-only).

Future<dynamic> setGoogleCredentials({String? projectId, required Object serviceAccount})

api.attestation.setAppleCredentials

Apple key with DeviceCheck enabled (encrypted, write-only).

Future<dynamic> setAppleCredentials({String? projectId, required Object p8, required Object keyId, required Object teamId})

api.attestation.deleteCredentials

Remove the google or apple attestation credentials.

Future<dynamic> deleteCredentials({String? projectId, required String which})

api.attestation.createDebugToken

Create a debug token for simulators and CI (shown once).

Future<dynamic> createDebugToken({String? projectId, Object? name})

api.attestation.deleteDebugToken

Delete a debug token.

Future<dynamic> deleteDebugToken({String? projectId, required String tokenId})

api.attestation.challenge

One-time challenge to bind attestation evidence to (anon key).

Future<dynamic> challenge()

api.attestation.exchange

Exchange Play Integrity / App Attest / DeviceCheck / debug evidence for an attestation token.

Future<dynamic> exchange({required Object provider, Object? appId, Object? challenge, Object? token, Object? keyId, Object? attestation, Object? assertion, Object? development})

#api.auth

api.auth.confirmVerificationEmail

Confirm an email verification token.

Future<dynamic> confirmVerificationEmail({required Object token})

api.auth.disableMfa

Future<dynamic> disableMfa({required Object totpCode})

api.auth.enrollMfa

Future<dynamic> enrollMfa()

api.auth.getMfaStatus

Future<dynamic> getMfaStatus()

api.auth.getProvidersConfig

Future<dynamic> getProvidersConfig()

api.auth.getSessionsConfig

Future<dynamic> getSessionsConfig()

api.auth.listConsoleProductUsers

Future<dynamic> listConsoleProductUsers()

api.auth.listSessions

Future<dynamic> listSessions()

api.auth.revokeOtherSessions

Future<dynamic> revokeOtherSessions()

api.auth.revokeSession

Future<dynamic> revokeSession({required String sessionId})

api.auth.sendVerificationEmail

Trigger a verification email for the authenticated user.

Future<dynamic> sendVerificationEmail()

api.auth.updateProvidersConfig

Future<dynamic> updateProvidersConfig({required Map<String, Object?> body})

api.auth.updateSessionsConfig

Future<dynamic> updateSessionsConfig({required Map<String, Object?> body})

api.auth.listDevices

Devices the signed-in user is signed in on (current = this one).

Future<dynamic> listDevices()

api.auth.signOutDevice

Sign one device out: its sessions end and push tokens are removed.

Future<dynamic> signOutDevice({required String deviceId})

api.auth.passkeyRegisterStart

Registration options for a new passkey for the signed-in user.

Future<dynamic> passkeyRegisterStart({Object? name})

api.auth.passkeyRegisterFinish

Save a passkey from the authenticator's WebAuthn JSON.

Future<dynamic> passkeyRegisterFinish({required Object credential, Object? name})

api.auth.passkeyAuthenticateStart

Passkey sign-in options: challenge_id and options.

Future<dynamic> passkeyAuthenticateStart({Object? userId})

api.auth.passkeyAuthenticateFinish

Verify a signed passkey challenge and return a session.

Future<dynamic> passkeyAuthenticateFinish({required Object challengeId, required Object credential})

api.auth.listPasskeys

The signed-in user's passkeys.

Future<dynamic> listPasskeys()

api.auth.deletePasskey

Remove one of the signed-in user's passkeys.

Future<dynamic> deletePasskey({required String passkeyId})

#api.billing

api.billing.buildInvoice

Future<dynamic> buildInvoice({String? orgId, Object? period})

api.billing.cancelAccount

Future<dynamic> cancelAccount({required String accountId})

api.billing.checkout

Future<dynamic> checkout({required Map<String, Object?> body})

api.billing.getAccount

Future<dynamic> getAccount({required String accountId})

api.billing.getAccountOverage

Future<dynamic> getAccountOverage({required String accountId})

api.billing.getAccountOveragePrefs

Future<dynamic> getAccountOveragePrefs({required String accountId})

api.billing.getOrgOveragePrefs

The org's overage switches (one setting for the whole org)

Future<dynamic> getOrgOveragePrefs({String? orgId})

api.billing.getCompute

Future<dynamic> getCompute({String? orgId, Object? period})

api.billing.getFx

Future<dynamic> getFx()

api.billing.getOpenInvoice

Future<dynamic> getOpenInvoice()

api.billing.getOverage

Future<dynamic> getOverage({String? orgId})

api.billing.getPlan

Fetch a billing plan by name.

Future<dynamic> getPlan({required String name})

api.billing.getProvider

Future<dynamic> getProvider()

api.billing.getSubscription

Fetch the active subscription for an organisation.

Future<dynamic> getSubscription({String? orgId})

api.billing.getUsage

Fetch usage counters for an organisation.

Future<dynamic> getUsage({String? orgId, Object? period})

api.billing.getUsageHistory

Fetch historical usage for an organisation.

Future<dynamic> getUsageHistory({String? orgId, Object? months})

api.billing.listInvoices

Future<dynamic> listInvoices({String? orgId})

api.billing.listPlans

List public billing plans.

Future<dynamic> listPlans()

api.billing.listSubscriptions

List subscriptions visible to the authenticated caller.

Future<dynamic> listSubscriptions()

api.billing.payInvoice

Future<dynamic> payInvoice({String? orgId, required String period})

api.billing.razorpayCreateOrder

Future<dynamic> razorpayCreateOrder({required Map<String, Object?> body})

api.billing.razorpayVerifyPayment

Future<dynamic> razorpayVerifyPayment({required Map<String, Object?> body})

api.billing.resumeAccount

Future<dynamic> resumeAccount({required String accountId})

api.billing.setAccountOveragePrefs

Future<dynamic> setAccountOveragePrefs({required String accountId, required Object services})

api.billing.setOrgOveragePrefs

Change the org's overage switches (org owners and admins)

Future<dynamic> setOrgOveragePrefs({String? orgId, required Object services})

api.billing.listAccountAddons

Add-ons on the billing account: price, paid units, what renews, paid-through date, and the autopay mandate

Future<dynamic> listAccountAddons({required String accountId})

api.billing.addonCheckout

Start paying for more add-on units (prorated to the period end); they count once the payment is verified

Future<dynamic> addonCheckout({required String accountId, required String addonId, required Object quantity, Object? projectId})

api.billing.setAddonRenewal

How many units renew at the period end (0 cancels); paid units keep working until then

Future<dynamic> setAddonRenewal({required String accountId, required String addonId, required Object renewQuantity})

api.billing.setAccountAddon

Older switch: lowering schedules at the period end; more units than are paid for answer 402 (use addonCheckout)

Future<dynamic> setAccountAddon({required String accountId, required String addonId, required Object enabled, Object? quantity})

api.billing.setAccountAutopay

Renew automatically (true) or end the plan with the paid period (false)

Future<dynamic> setAccountAutopay({required String accountId, required Object enabled})

api.billing.autopaySetup

Start a ₹1 (refunded) authorisation that saves a card or UPI mandate for automatic renewals

Future<dynamic> autopaySetup({required String accountId, Object? customerEmail, Object? name})

api.billing.removeAutopayMandate

Remove the saved mandate; renewals become invoices to pay by hand

Future<dynamic> removeAutopayMandate({required String accountId})

api.billing.billingListAddonPrices

Add-on prices (USD per month per unit) and the plans each is sold on, as staff set them.

Future<dynamic> billingListAddonPrices()

#api.builds

api.builds.check

Check an app build Sovariq wrote (title, description, migration {name, up_sql, down_sql}, policies [{id, spl}], functions [{name, runtime, files}], tests [rules test cases]) against the project — nothing changes: the migration is dry-run up, down and up again, rules are simulated, rules tests run with the build's rules.

Future<dynamic> check({required Object build})

Returns the build id and the report.

api.builds.list

Recent app builds of the project: title, status (checked, failed, pr_opened), each check's result and the pull request.

Future<dynamic> list({Object? limit})

api.builds.get

One app build: its files (the bundle), the check report and the pull request.

Future<dynamic> get({required String buildId})

api.builds.pullRequest

Check the build again and open it as a pull request on the project's linked GitHub repository (one commit on a new branch; dev.app_build_prs_month).

Future<dynamic> pullRequest({required String buildId, Object? token})

GitHub needs repository access: connect it with repository access or pass a token with repo scope.

api.builds.delete

Forget an app build (its pull request, if opened, stays on GitHub).

Future<dynamic> delete({required String buildId})

#api.byok

api.byok.get

Your organization's own encryption key (Enterprise): whether it's on, the key, its data key version, whether it is usable now, what it covers, and setup (Sovaria's AWS principal and the key policy statement).

Future<dynamic> get()

api.byok.set

Use your AWS KMS key (its ARN) for the organization's storage files and backups.

Future<dynamic> set({Object? provider, required Object keyRef})

Checked end to end first (wrap, unwrap, a file written and read with it). Organization owners.

api.byok.rotate

A new data key version under the same KMS key; older versions stay to decrypt what they encrypted.

Future<dynamic> rotate()

Organization owners.

api.byok.check

Ask your KMS now whether Sovaria can still use the key.

Future<dynamic> check()

api.byok.reencryptStorage

Rewrite the organization's existing storage files under its key (in the background; progress in byok.get).

Future<dynamic> reencryptStorage()

Organization owners.

#api.crashes

api.crashes.listIssues

App crash issues of the project (grouped reports from sov.crashes), newest first, with the plan's limits.

Future<dynamic> listIssues({Object? status, Object? limit})

api.crashes.getIssue

One crash issue: sample report (stack, breadcrumbs, device, release) and its last 50 reports.

Future<dynamic> getIssue({required String fingerprint})

api.crashes.setIssueStatus

Mark a crash issue open, resolved (reopens if it happens again) or ignored.

Future<dynamic> setIssueStatus({required String fingerprint, required Object status})

api.crashes.usage

Crash reports accepted and dropped this month, and the plan's limits.

Future<dynamic> usage()

#api.data

api.data.addColumn

Add a column to an existing table.

Future<dynamic> addColumn({required Object tableName, required Object columnName, required Object dataType, Object? isNullable, Object? isUnique, Object? defaultValue})

api.data.addForeignKey

Add a foreign-key relation.

Future<dynamic> addForeignKey({required Object tableName, required Object columnName, required Object referencedTable, required Object referencedColumn})

api.data.beginTransaction

Start a table transaction and receive tx/snapshot IDs.

Future<dynamic> beginTransaction()

api.data.commitTransaction

Commit a previously opened table transaction.

Future<dynamic> commitTransaction({required Object txid})

api.data.dropColumn

Drop a column from a table.

Future<dynamic> dropColumn({required Object tableName, required Object columnName})

api.data.dropForeignKey

Drop a foreign-key relation.

Future<dynamic> dropForeignKey({required Object tableName, required Object columnName, required Object referencedTable, required Object referencedColumn})

api.data.dropTable

Drop a relational table.

Future<dynamic> dropTable({required Object tableName})

api.data.rollbackTransaction

Future<dynamic> rollbackTransaction({required Object txid})

api.data.tableHistory

Tables that keep history (versions, oldest, retention) and the plan's db.history_* limits.

Future<dynamic> tableHistory()

api.data.setTableHistory

Turn a table's history on (every row version kept; read with sov_as_of(NULL::table, time)) or off (versions dropped).

Future<dynamic> setTableHistory({required Object tableName, required Object enabled, Object? keepDays})

api.data.schemaDigest

The schema as one short line per table: columns with types, keys, →references, allowed values, indexes and owner-only rows.

Future<dynamic> schemaDigest({Object? tables, Object? maxChars, Object? since})

tables (comma-separated) expands only those in a big schema; since=<version> answers unchanged when nothing changed.

api.data.applySchemaPlan

Create or extend tables from one declarative plan ([{name, columns, patterns, unique, indexes}]; columns as objects or short form like "status text!='draft' in(draft|live)" or "customer_id →customers cascade").

Future<dynamic> applySchemaPlan({required Object tables, Object? dryRun, Object? name})

Checked first (422 lists every problem, nothing changes), then applied as one reversible migration and verified. dry_run returns the SQL without applying.

api.data.applyMigration

Apply a migration and record it in the project's history, in one transaction (all or nothing).

Future<dynamic> applyMigration({required Object name, required Object upSql, Object? downSql, Object? version})

down_sql makes it reversible; the same version with the same SQL again does nothing, with different SQL it is refused (409).

api.data.dryRunMigration

Run a migration inside a transaction and roll it back: whether it would apply.

Future<dynamic> dryRunMigration({required Object name, required Object upSql, Object? downSql})

Nothing is kept.

api.data.dryRunMigrations

Check several migrations ([{name, up_sql}], up to 500 and 5 MB of SQL) in order inside one transaction that is rolled back, so later ones see what earlier ones create.

Future<dynamic> dryRunMigrations({required Object migrations})

Returns status dry_run_ok, or failed with failed.index, name and error for the first that fails.

api.data.rollbackMigration

Undo the most recent migration with its down SQL (or version, with force when it isn't the latest).

Future<dynamic> rollbackMigration({Object? version, Object? force})

api.data.resetMigrations

Drop every user table and forget the migration history, in one transaction (what sov db reset runs).

Future<dynamic> resetMigrations({Object? dryRun})

dry_run lists what would be dropped.

api.data.docPipeline

Run a document pipeline: where, aggregate, distinct, sort, offset, limit, select, remove_fields, sample.

Future<dynamic> docPipeline({required String collection, required Object stages, Object? collectionGroup})

#api.e2ee

api.e2ee.bootstrapKey

Create (or fetch) the active e2ee channel key.

Future<dynamic> bootstrapKey({required Object channel, Object? ttlSeconds, Object? forceNew})

api.e2ee.getActiveKey

Get the active e2ee key for a channel, wrapped for client_public_key.

Future<dynamic> getActiveKey({required String channel, Object? clientPublicKey})

api.e2ee.getKey

Get key material by channel/key_id, wrapped for client_public_key.

Future<dynamic> getKey({required String channel, required String keyId, Object? clientPublicKey})

api.e2ee.listKeys

List key metadata for a channel.

Future<dynamic> listKeys({required String channel})

api.e2ee.revokeKey

Revoke an active or historical channel key.

Future<dynamic> revokeKey({required Object channel, Object? keyId, Object? reason})

api.e2ee.rotateKey

Rotate e2ee key material for a channel.

Future<dynamic> rotateKey({required Object channel, Object? ttlSeconds})

#api.embeddings

api.embeddings.getSettings

The project's embedding model, who pays (managed | own_key), dimensions and list price.

Future<dynamic> getSettings()

api.embeddings.setSettings

Use the project's own provider key: provider (openai | gemini | openai_compatible), model, dimensions, base_url, api_key.

Future<dynamic> setSettings({required Map<String, Object?> body})

Tested before it is saved.

api.embeddings.clearSettings

Go back to Sovaria's managed embedding model.

Future<dynamic> clearSettings()

api.embeddings.usage

Texts, tokens and estimated cost per month, model and who paid.

Future<dynamic> usage({Object? months})

#api.functions

api.functions.delete

Future<dynamic> delete({required String functionName})

api.functions.get

Future<dynamic> get({required String functionName, Object? projectId})

api.functions.getBindings

Future<dynamic> getBindings({required String functionName})

api.functions.getPolicy

Future<dynamic> getPolicy({required String functionName})

api.functions.getSource

Future<dynamic> getSource({required String functionName, Object? projectId})

api.functions.githubCommit

Future<dynamic> githubCommit({required Map<String, Object?> body})

api.functions.githubImport

Future<dynamic> githubImport({required Map<String, Object?> body})

api.functions.invocationStatus

Get status for an async Forge invocation id.

Future<dynamic> invocationStatus({required String invocationId, Object? projectId})

api.functions.list

List Forge functions with active version and queue summary.

Future<dynamic> list({Object? projectId, Object? limit, Object? offset})

api.functions.simulationDiff

Diff two simulation invocation outputs.

Future<dynamic> simulationDiff({required String functionName, Object? projectId, Object? leftInvocationId, Object? rightInvocationId})

api.functions.status

Get forge deployment status by deploy id.

Future<dynamic> status({required String deployId, Object? projectId})

api.functions.update

Future<dynamic> update({required String functionName, required Map<String, Object?> body, Object? projectId})

api.functions.updateBindings

Future<dynamic> updateBindings({required String functionName, required Object bindings})

api.functions.updatePolicy

Future<dynamic> updatePolicy({required String functionName, required Map<String, Object?> policy})

api.functions.versions

List deployment versions for a Forge function.

Future<dynamic> versions({required String functionName, Object? projectId, Object? limit, Object? offset})

api.functions.listGithubPreviews

Preview environments of the linked GitHub repository's open pull requests: PR number and title, status (creating, deploying, ready, partial, error), API URL, functions and migrations applied.

Future<dynamic> listGithubPreviews()

api.functions.getFunctionLimits

A function's own memory, timeout and minimum-instances settings, what it runs with (effective) and the plan's maximums.

Future<dynamic> getFunctionLimits({required String functionName})

api.functions.setFunctionLimits

Lower a function's timeout or memory (never above the plan; null = plan maximum) and set its minimum instances: pre-started sandboxes kept for it so its calls start warm (plan fn.min_instances; left out = unchanged).

Future<dynamic> setFunctionLimits({required String functionName, Object? timeoutSec, Object? memoryMb, Object? minInstances})

#api.governance

api.governance.adminDatabases

Future<dynamic> adminDatabases()

api.governance.getTenant

Future<dynamic> getTenant({String? orgId})

api.governance.getTenantDatabaseConnection

Future<dynamic> getTenantDatabaseConnection({String? orgId, String? projectId})

api.governance.listHosts

Future<dynamic> listHosts({Object? regionId})

api.governance.listRegions

Future<dynamic> listRegions()

api.governance.listTenantDatabaseBackups

Future<dynamic> listTenantDatabaseBackups({String? orgId, String? projectId, Object? limit})

api.governance.listTenantDatabases

Future<dynamic> listTenantDatabases({String? orgId})

api.governance.listTenants

Future<dynamic> listTenants()

api.governance.metricsOverview

Future<dynamic> metricsOverview()

api.governance.patchHost

Future<dynamic> patchHost({required String hostId, required Map<String, Object?> body})

api.governance.patchRegion

Future<dynamic> patchRegion({required String regionId, required Map<String, Object?> body})

api.governance.pauseTenantDatabase

Future<dynamic> pauseTenantDatabase({String? orgId, String? projectId})

api.governance.resizeTenantDatabase

Future<dynamic> resizeTenantDatabase({String? orgId, String? projectId, required Object computeSize})

api.governance.resumeTenantDatabase

Future<dynamic> resumeTenantDatabase({String? orgId, String? projectId})

api.governance.revealTenantDatabaseConnection

Reveal a database connection string (staff, with an active access grant).

Future<dynamic> revealTenantDatabaseConnection({String? orgId, String? projectId, required Object grantId})

api.governance.setTenantStatus

Future<dynamic> setTenantStatus({String? orgId, required Object status})

api.governance.triggerTenantDatabaseBackup

Future<dynamic> triggerTenantDatabaseBackup({String? orgId, String? projectId})

api.governance.listDatabaseReplicas

Read replicas of the project's dedicated database: status, connection string, lag behind the primary, plan limit.

Future<dynamic> listDatabaseReplicas({String? orgId, String? projectId})

api.governance.createDatabaseReplica

Start a streaming read replica (status provisioning until its base backup is done, then ready).

Future<dynamic> createDatabaseReplica({String? orgId, String? projectId})

api.governance.deleteDatabaseReplica

Remove a read replica and its copy of the data.

Future<dynamic> deleteDatabaseReplica({String? orgId, String? projectId, required String replicaId})

api.governance.compareDatabaseMoments

What changed between two moments of the database — a backup id or "now" on each side: schema objects added, removed or changed (with a diff) and rows per table.

Future<dynamic> compareDatabaseMoments({String? orgId, String? projectId, required Object fromMoment, Object? toMoment, Object? includePlatform})

api.governance.restoreDatabaseBackup

Replace the project's database with a backup (dedicated databases): a safety backup is taken first, the backup loads beside production in one transaction and is swapped in; undo within 7 days.

Future<dynamic> restoreDatabaseBackup({String? orgId, String? projectId, required String backupId, required Object confirm})

Org owners and admins.

api.governance.listDatabaseRestores

Database restores of the project: status, the backup used, the safety backup and until when it can be undone.

Future<dynamic> listDatabaseRestores({String? orgId, String? projectId})

api.governance.undoDatabaseRestore

Put back the database exactly as it was right before a restore (within the undo window).

Future<dynamic> undoDatabaseRestore({String? orgId, String? projectId, required String restoreId})

api.governance.getPitrStatus

Point-in-time recovery of the project's database: whether it is on, the earliest and latest moment that can be restored, base backups and archived WAL.

Future<dynamic> getPitrStatus({String? orgId, String? projectId})

api.governance.enablePitr

Turn on point-in-time recovery (WAL archiving; Pro and higher).

Future<dynamic> enablePitr({String? orgId, String? projectId, Object? restart})

If the database needs one restart for it (a few seconds), it restarts only with restart=true; otherwise the answer says state=restart_required.

api.governance.disablePitr

Stop point-in-time recovery archiving (no restart).

Future<dynamic> disablePitr({String? orgId, String? projectId})

What was archived stays restorable until it leaves the plan's window.

api.governance.restoreDatabaseToTime

Restore the project's database to a moment (ISO-8601 target_time).

Future<dynamic> restoreDatabaseToTime({String? orgId, String? projectId, required Object targetTime, Object? confirm, Object? verifyOnly})

It is recovered in a new container beside production and checked; with confirm=true it is then swapped in (safety backup first, undo for 7 days). verify_only=true only checks the moment restores. Returns a job; poll get_restore_job.

api.governance.getRestoreJob

A database restore job (point-in-time or from a backup): status (running, done, verified, failed, undone), the step it is on, the moment, and until when it can be undone.

Future<dynamic> getRestoreJob({String? orgId, String? projectId, required String jobId})

api.governance.listEnvironments

Production plus the project's environments (staging ones and API versions): database status, what each database started with (database, copy_state) and its own API URL; limit is how many the plan allows.

Future<dynamic> listEnvironments({String? orgId, String? projectId})

api.governance.createEnvironment

Create an environment with its own database in the project's container.

Future<dynamic> createEnvironment({String? orgId, String? projectId, required Object envId, required Object name, Object? kind, Object? label, Object? fromEnvId, Object? database, Object? sampleRows, Object? includeTables, Object? excludeTables, Object? mask, Object? maskAdd, Object? maskSkip})

database: empty | schema (default: production's structure, no rows) | sample (plus up to sample_rows newest rows per table and every row they reference; plan env.branch_data, Pro and higher) | all (every row, up to env.branch_data_max_gb; Ultra and higher). Personal columns are masked unless mask=false (owners/admins, audited). Rows are copied as a job: poll get_environment_copy.

api.governance.getEnvironmentCopy

What an environment's database started with and how its row copy is going: state copying | done | failed, tables and rows copied, masked columns, size, or why it failed.

Future<dynamic> getEnvironmentCopy({String? orgId, String? projectId, required String envId})

api.governance.deleteEnvironment

Delete an environment and its database (a snapshot is kept first).

Future<dynamic> deleteEnvironment({String? orgId, String? projectId, required String envId})

api.governance.queryInsights

The project's SQL statements (pg_stat_statements) by total time, average, calls, worst run or rows.

Future<dynamic> queryInsights({String? orgId, String? projectId, Object? sort, Object? limit})

api.governance.resetQueryInsights

Clear this database's query statistics.

Future<dynamic> resetQueryInsights({String? orgId, String? projectId})

api.governance.indexAdvisor

Indexes that would speed up the slowest statements, tested as hypothetical indexes (hypopg).

Future<dynamic> indexAdvisor({String? orgId, String? projectId, Object? queryid})

api.governance.indexAdvisorForQuery

Index recommendations for one statement (only EXPLAINed, never run).

Future<dynamic> indexAdvisorForQuery({String? orgId, String? projectId, required Object query})

api.governance.applyIndex

Build a recommended index with CREATE INDEX CONCURRENTLY (background; poll index_status).

Future<dynamic> applyIndex({String? orgId, String? projectId, Object? schema, required Object table, required Object columns})

api.governance.indexStatus

Whether an index the advisor started is building, ready, failed or invalid.

Future<dynamic> indexStatus({String? orgId, String? projectId, required String indexName})

#api.history

api.history.commit

Create a Chrono commit.

Future<dynamic> commit({Object? timeline, required Object message, Object? author, Object? eventType})

api.history.converge

Converge source timeline into target timeline.

Future<dynamic> converge({required Object target, required Object source, required Object author, Object? message})

api.history.createSnapshot

Create a system snapshot.

Future<dynamic> createSnapshot({required Object message})

api.history.deleteTimeline

Delete a timeline.

Future<dynamic> deleteTimeline({required String name})

api.history.jumpTimeline

Force-jump a timeline head.

Future<dynamic> jumpTimeline({required String name, required Object targetHex})

api.history.listSnapshots

List known snapshots.

Future<dynamic> listSnapshots()

api.history.listTimelines

List available timelines.

Future<dynamic> listTimelines()

api.history.restoreSnapshot

Restore a snapshot by id.

Future<dynamic> restoreSnapshot({required String snapshotId})

api.history.spawnTimeline

Spawn a new timeline from a source chronon.

Future<dynamic> spawnTimeline({required Object name, Object? sourceHexId})

api.history.timelineHistory

Fetch timeline history chronons.

Future<dynamic> timelineHistory({required String name, Object? limit, Object? offset})

api.history.topology

Return timeline graph topology.

Future<dynamic> topology({Object? timeline, Object? limit})

api.history.variance

Calculate variance between two chronons.

Future<dynamic> variance({required Object oldChrononHex, required Object newChrononHex, Object? domainFilter})

#api.knowledge

api.knowledge.list

Knowledge bases (RAG) with documents, chunks, tokens, the embedding model and estimated cost.

Future<dynamic> list()

api.knowledge.create

Create a knowledge base: name, description, access (team | app_users), user_uploads, chunk_tokens.

Future<dynamic> create({required Map<String, Object?> body})

api.knowledge.update

Change a knowledge base's description, access or user_uploads.

Future<dynamic> update({required String name, required Map<String, Object?> body})

api.knowledge.delete

Delete a knowledge base with all its documents.

Future<dynamic> delete({required String name})

api.knowledge.listDocuments

Documents the caller may read: title, source, chunks, tokens, status.

Future<dynamic> listDocuments({required String name, Object? limit, Object? offset})

api.knowledge.addDocument

Add or replace a document: text (+format), content_base64 + filename (PDF, DOCX, HTML, Markdown, TXT, CSV, JSON) or url; optional document_id, title, metadata.

Future<dynamic> addDocument({required String name, required Map<String, Object?> body})

api.knowledge.deleteDocument

Remove a document (its owner or the team).

Future<dynamic> deleteDocument({required String name, required String documentId})

#api.mcp

api.mcp.listConnections

AI assistants you connected over Sovaria's MCP server: the app, its organization and project, read-only or not, when it was connected and last used.

Future<dynamic> listConnections()

api.mcp.disconnect

Disconnect one of your AI assistants: its tokens stop working at once.

Future<dynamic> disconnect({required String grantId})

api.mcp.orgSettings

Whether members may connect AI assistants to this organization, the MCP server URL, and (owners and admins) every member's connection.

Future<dynamic> orgSettings({String? orgId})

api.mcp.setOrgAllowed

Allow or stop AI assistants for the organization (owners and admins).

Future<dynamic> setOrgAllowed({String? orgId, required Object allowed})

Turning it off ends every member's connection.

api.mcp.orgDisconnect

Disconnect a member's AI assistant from the organization (owners and admins).

Future<dynamic> orgDisconnect({String? orgId, required String grantId})

#api.messaging

api.messaging.listTemplates

Message templates of the project (push and/or email content with {{ variables }}).

Future<dynamic> listTemplates({String? projectId})

api.messaging.getTemplate

One message template.

Future<dynamic> getTemplate({String? projectId, required String name})

api.messaging.putTemplate

Create or replace a template: push {title, body, image?, data?}, email {subject, html?, text?}; category transactional or marketing (marketing skips opted-out users and adds an unsubscribe link).

Future<dynamic> putTemplate({String? projectId, required String name, Object? description, Object? category, Object? push, Object? email})

api.messaging.deleteTemplate

Delete a message template.

Future<dynamic> deleteTemplate({String? projectId, required String name})

api.messaging.listAudiences

Saved audiences: read-only SQL queries returning user_id (other columns become per-user variables).

Future<dynamic> listAudiences({String? projectId})

api.messaging.getAudience

One audience and its last count.

Future<dynamic> getAudience({String? projectId, required String name})

api.messaging.putAudience

Create or replace an audience: a SELECT on the project database returning user_id (e.g.

Future<dynamic> putAudience({String? projectId, required String name, required Object sql, Object? description})

select user_id, first_name from profiles where plan = 'pro').

api.messaging.deleteAudience

Delete an audience.

Future<dynamic> deleteAudience({String? projectId, required String name})

api.messaging.previewAudience

Run a saved audience: how many app users it reaches, columns and a sample of 10.

Future<dynamic> previewAudience({String? projectId, required String name})

api.messaging.previewSql

Try an audience query before saving it: app users reached, columns and a sample.

Future<dynamic> previewSql({String? projectId, required Object sql})

api.messaging.send

Send a template (or content {push, email}) to {user_ids | audience | sql | topic | all_users} on push and/or email, with variables; dry_run reports who would get it and renders a preview.

Future<dynamic> send({String? projectId, Object? template, Object? content, required Object to, Object? channels, Object? variables, Object? category, Object? dryRun})

Runs in the background; poll getSend.

api.messaging.listSends

Recent sends with status and per-channel counts.

Future<dynamic> listSends({String? projectId, Object? limit})

api.messaging.getSend

One send: status (sending, done, failed) and counts per channel and outcome.

Future<dynamic> getSend({String? projectId, required String sendId})

api.messaging.listDeliveries

Delivery log: per recipient and channel, sent / failed / no_device / no_email / opted_out with an error code (never content).

Future<dynamic> listDeliveries({String? projectId, Object? sendId, Object? userId, Object? status, Object? limit, Object? offset})

api.messaging.usage

Messages sent this month per channel and the plan's messaging limits.

Future<dynamic> usage({String? projectId})

api.messaging.setUserOptout

Record an app user's marketing choice (channel push, email or all) from your own UI.

Future<dynamic> setUserOptout({String? projectId, required String userId, required Object channel, required Object optedOut})

api.messaging.getPreferences

The signed-in app user's marketing preferences per channel.

Future<dynamic> getPreferences()

api.messaging.setPreferences

The signed-in app user turns marketing push/email on or off: { marketing: { email: false } }.

Future<dynamic> setPreferences({required Object marketing})

#api.mobile

api.mobile.listApps

Registered iOS/Android apps (bundle/package ids, redirect URIs).

Future<dynamic> listApps({String? projectId})

api.mobile.createApp

Register an app: platform, bundle_id+team_id (iOS) or package_name+sha256_cert_fingerprints (Android), redirect_uris.

Future<dynamic> createApp({String? projectId, required Map<String, Object?> body})

api.mobile.updateApp

Change a registered app (name, ids, fingerprints, redirect URIs).

Future<dynamic> updateApp({String? projectId, required String appId, required Map<String, Object?> body})

api.mobile.deleteApp

Remove a registered app.

Future<dynamic> deleteApp({String? projectId, required String appId})

api.mobile.listUserDevices

An app user's signed-in devices and push tokens.

Future<dynamic> listUserDevices({String? projectId, required String userId})

api.mobile.revokeUserDevice

Sign one of an app user's devices out (sessions and push tokens).

Future<dynamic> revokeUserDevice({String? projectId, required String userId, required String deviceId})

#api.observability

api.observability.metrics

Requests, 4xx/5xx errors, latency (avg, p50, p95, p99) and bytes over time for the project, per gateway service.

Future<dynamic> metrics({Object? hours, Object? service, Object? points, Object? byService})

History by plan (obs.retention_days).

api.observability.logs

Recent requests, newest first (method, path, status, duration, service, trace_id, env_id).

Future<dynamic> logs({Object? limit, Object? service, Object? status, Object? q, Object? after, Object? before, Object? source, Object? env})

after = live tail, before = older page.

api.observability.routes

Latency (p50, p95, p99) and 4xx/5xx per route (method + path with ids collapsed), busiest first; env = comma-separated environment ids (main = none named), default all; route adds that route's series.

Future<dynamic> routes({Object? hours, Object? env, Object? route, Object? limit})

api.observability.alertsList

SLO alert rules with their state (ok, firing, no_data, paused), the plan limit (obs.alert_rules), the metric catalog and recent events.

Future<dynamic> alertsList()

api.observability.alertsCreate

Create an alert rule: metric latency_p95_ms, latency_p99_ms, error_rate (5xx %), function_failures or db_connections; threshold; window 5-60 min; optional route/function target; team email and/or a signed HTTPS webhook (signing_secret returned once).

Future<dynamic> alertsCreate({required Object metric, required Object threshold, Object? windowMinutes, Object? name, Object? target, Object? env, Object? minRequests, Object? email, Object? webhookUrl})

Owners and admins.

api.observability.alertsUpdate

Change an alert rule (any create field) or pause/resume it ({enabled: false}).

Future<dynamic> alertsUpdate({required String ruleId, required Map<String, Object?> body})

api.observability.alertsDelete

Delete an alert rule.

Future<dynamic> alertsDelete({required String ruleId})

api.observability.alertsTest

Measure the rule now (value, would_fire) and send an alert.test to its webhook.

Future<dynamic> alertsTest({required String ruleId})

api.observability.alertsEvents

Fired and resolved alerts, newest first.

Future<dynamic> alertsEvents({Object? limit})

#api.org

api.org.acceptOrgInvite

Future<dynamic> acceptOrgInvite({required Object token})

api.org.addMember

Add a user as a member of an org/project node.

Future<dynamic> addMember({String? orgId, required Object userId, required Object role})

api.org.createEdge

Connect two DAPG nodes with a typed relationship.

Future<dynamic> createEdge({required Object sourceNodeId, required Object targetNodeId, required Object relationType, Object? role})

api.org.createOrgInvite

Future<dynamic> createOrgInvite({String? orgId, required Object email, required Object role})

api.org.deleteOrg

Future<dynamic> deleteOrg({String? orgId})

api.org.ensureDefaultApiKeys

Future<dynamic> ensureDefaultApiKeys()

api.org.getChildren

List child nodes attached by a relation (e.g.

Future<dynamic> getChildren({required String parentId, Object? relation})

OWNS, HAS_ENV).

api.org.getContext

Resolve a user's roles on a resource by walking the DAPG.

Future<dynamic> getContext({required String userId, required String resourceId})

api.org.getNode

Fetch a single graph node by ID.

Future<dynamic> getNode({required String nodeId})

api.org.getProjectRef

Future<dynamic> getProjectRef({String? projectId})

api.org.getProjectSettings

Future<dynamic> getProjectSettings()

api.org.getRoleCatalog

Future<dynamic> getRoleCatalog()

api.org.getRoleMatrix

Future<dynamic> getRoleMatrix()

api.org.listApiKeys

Future<dynamic> listApiKeys()

api.org.listNodes

List graph nodes; when provided, node_type filters by type.

Future<dynamic> listNodes({Object? nodeType})

api.org.listOrgMembers

Future<dynamic> listOrgMembers({String? orgId})

api.org.removeOrgMember

Future<dynamic> removeOrgMember({String? orgId, required String userId})

api.org.revokeApiKey

Future<dynamic> revokeApiKey({required String keyId})

api.org.setOrgPlan

Future<dynamic> setOrgPlan({String? orgId, required Object plan})

api.org.updateMemberRole

Future<dynamic> updateMemberRole({String? orgId, required String userId, required Object role})

api.org.updateOrg

Future<dynamic> updateOrg({String? orgId, required Map<String, Object?> body})

api.org.updateProjectSettings

Future<dynamic> updateProjectSettings({required Object settings})

api.org.updateRoleMatrix

Future<dynamic> updateRoleMatrix({required Object matrix})

api.org.transferOrgOwnership

Hand the organization and its billing to another admin (owner only).

Future<dynamic> transferOrgOwnership({String? orgId, required Object newOwnerId, Object? reason})

409 ONE_OWNED_ORG when they already own one.

#api.platform

api.platform.createEventHook

Future<dynamic> createEventHook({required Map<String, Object?> body})

api.platform.deleteEventHook

Future<dynamic> deleteEventHook({required String hookId})

api.platform.disconnectGithub

Future<dynamic> disconnectGithub({Object? projectId})

api.platform.gatewayHealth

Future<dynamic> gatewayHealth()

api.platform.getEnginesHealth

Return aggregate gateway health for downstream engines.

Future<dynamic> getEnginesHealth()

api.platform.getErrorTrace

Future<dynamic> getErrorTrace({required String traceId})

api.platform.getGithubConnectionState

Future<dynamic> getGithubConnectionState({Object? projectId})

api.platform.listEventHooks

Future<dynamic> listEventHooks()

api.platform.resolveErrorTrace

Future<dynamic> resolveErrorTrace({required String traceId, required Object resolved})

#api.policy

api.policy.auditCount

Return current audit-entry count.

Future<dynamic> auditCount()

api.policy.auditVerify

Verify audit hash-chain integrity.

Future<dynamic> auditVerify()

api.policy.policyCreate

Create and compile a policy.

Future<dynamic> policyCreate({required Object policyId, required Object name, required Object splSource, required Object orgId})

api.policy.policyDelete

Delete (deactivate) a policy.

Future<dynamic> policyDelete({required String policyId})

api.policy.policyEvaluate

Evaluate a policy against an explicit debug context.

Future<dynamic> policyEvaluate({required String policyId, required Object context})

api.policy.policyGet

Get a single policy by ID.

Future<dynamic> policyGet({required String policyId})

api.policy.policyHistory

Return version history for a policy.

Future<dynamic> policyHistory({required String policyId})

api.policy.policyList

List active policies visible in current tenant scope.

Future<dynamic> policyList()

api.policy.policyRollback

Rollback a policy to a historical version.

Future<dynamic> policyRollback({required String policyId, required Object version})

api.policy.policyTemplates

List server-authoritative SPL templates.

Future<dynamic> policyTemplates()

#api.push

api.push.getCredentials

Which push providers are set up (never the keys).

Future<dynamic> getCredentials({String? projectId})

api.push.setFcmCredentials

Upload the Firebase service account JSON (encrypted, write-only).

Future<dynamic> setFcmCredentials({String? projectId, required Object serviceAccount})

api.push.setApnsCredentials

Upload the APNs .p8 key (encrypted, write-only).

Future<dynamic> setApnsCredentials({String? projectId, required Object p8, required Object keyId, required Object teamId, required Object bundleId, Object? environment})

api.push.deleteCredentials

Remove FCM or APNs credentials.

Future<dynamic> deleteCredentials({String? projectId, required String provider})

api.push.listDevices

Push devices registered in the project (tokens are never returned).

Future<dynamic> listDevices({String? projectId, Object? userId, Object? limit, Object? before})

api.push.send

Send a push: to {user_ids|device_ids|topic}, notification {title, body, image}, data, badge, priority, ttl_seconds, dry_run.

Future<dynamic> send({String? projectId, required Map<String, Object?> message})

api.push.listSends

Recent sends (counts and error codes) and this month's total.

Future<dynamic> listSends({String? projectId, Object? limit})

api.push.registerDevice

Register the signed-in app user's push token (FCM or APNs).

Future<dynamic> registerDevice({required Object token, required Object platform, Object? provider, Object? deviceId, Object? appId, Object? topics, Object? locale})

api.push.myDevices

The signed-in app user's push tokens.

Future<dynamic> myDevices()

api.push.updateTopics

Subscribe a device to topics or unsubscribe it.

Future<dynamic> updateTopics({required String deviceRowId, Object? subscribe, Object? unsubscribe, Object? replace})

api.push.deleteDevice

Remove one of the signed-in user's push devices.

Future<dynamic> deleteDevice({required String deviceRowId})

api.push.unregisterToken

Drop a push token (sign-out, notifications turned off).

Future<dynamic> unregisterToken({required Object token})

#api.realtime

api.realtime.channels

List active realtime channels.

Future<dynamic> channels()

api.realtime.presence

Fetch presence for a realtime channel.

Future<dynamic> presence({required String channel})

api.realtime.replay

Replay events for a realtime channel.

Future<dynamic> replay({required String channel, Object? after, Object? limit})

api.realtime.subscribe

Subscribe a client ID to a realtime channel.

Future<dynamic> subscribe({required Object channel, required Object clientId})

api.realtime.unsubscribe

Unsubscribe a client ID from a realtime channel.

Future<dynamic> unsubscribe({required Object channel, required Object clientId})

#api.simulation

api.simulation.compareRuns

Compare two simulation runs of the project: regressions, improvements and new failures.

Future<dynamic> compareRuns({required String targetRunId, required String baselineRunId})

api.simulation.discover

What a simulation would test (user types, resources, rules), redacted by what you may read; pass its manifest_id to a run.

Future<dynamic> discover()

api.simulation.getRun

One simulation run with every case's result (history keeps no rule source or user ids).

Future<dynamic> getRun({required String runId})

api.simulation.listRuns

The project's simulation runs, newest first; limit 1-100 (default 50) and offset page through them.

Future<dynamic> listRuns({Object? limit, Object? offset})

api.simulation.quota

Real simulation runs used and allowed today (UTC) and this month; reading it uses nothing.

Future<dynamic> quota()

api.simulation.listIntended

Outcomes the team marked as intended for this project (shown green on every run, left out of findings).

Future<dynamic> listIntended()

api.simulation.markIntended

Mark an outcome as intended (role, action, resource, outcome ALLOW or DENY, optional note); needs policies.write.

Future<dynamic> markIntended({required Object role, required Object action, required Object resource, required Object outcome, Object? note})

Marking the same role/action/resource again replaces it.

api.simulation.unmarkIntended

Remove an intended-outcome mark; matching cases show as measured again.

Future<dynamic> unmarkIntended({required String markId})

Needs policies.write.

api.simulation.topology

Callers, gateway checks, sign-in, resources and connectors of the project (platform defences as one 'Platform protection' node).

Future<dynamic> topology()

api.simulation.limits

Every limit the project lives under, with its value and how it is counted.

Future<dynamic> limits()

api.simulation.integrationRun

Run one integration flow under a programmed outcome: modelled (free, nothing sent) or sealed (real code path, recorded, one single-request check).

Future<dynamic> integrationRun({required Object connectorId, required Object flowId, Object? outcome, Object? mode})

api.simulation.drillsRun

Judge the 14 security drills from the project's configuration (optionally with a what-if draft that is never saved).

Future<dynamic> drillsRun({Object? drillIds, Object? overrides})

api.simulation.runArtifacts

What a run's sealed send points would have sent (secrets masked; message bodies need settings.manage).

Future<dynamic> runArtifacts({required String runId})

api.simulation.snapshot

A project snapshot for offline simulation (sov simulate offline): tables, row policies, functions, every case with the rules' verdict.

Future<dynamic> snapshot({Object? includeRows})

#api.storage

api.storage.createBucket

Future<dynamic> createBucket({required Map<String, Object?> body})

api.storage.deleteBucket

Future<dynamic> deleteBucket({required String name})

api.storage.getBucket

Future<dynamic> getBucket({required String name})

api.storage.listBuckets

Future<dynamic> listBuckets()

api.storage.moveObject

Future<dynamic> moveObject({required Object fromPath, required Object toPath})

api.storage.updateBucket

Future<dynamic> updateBucket({required String name, required Map<String, Object?> body})

#api.templates

api.templates.list

App templates (SaaS, marketplace, chat): what each creates, the tables it adds and its steps.

Future<dynamic> list()

Project team only.

api.templates.get

One app template, including the SQL its migration runs.

Future<dynamic> get({required String name})

api.templates.apply

Apply a template to the project: its migration (tables + row-level security), buckets and their rules, realtime — each step with your own permissions, stopping at the first refusal.

Future<dynamic> apply({String? orgId, String? projectId, required String name, Object? dryRun})

dry_run checks for tables that already exist and changes nothing. Needs database.admin.

#api.traces

api.traces.list

The project's recent refused (4xx) and failed (5xx) requests, each with who refused it, why and what to do (kind: denied, failed or all).

Future<dynamic> list({Object? kind, Object? before, Object? limit})

Project team only.

api.traces.get

One request by its trace id (SovariaError.traceId, the X-Request-ID header): every hop — gateway checks, engine, SQL — and the explanation.

Future<dynamic> get({required String traceId})

#api.vector

api.vector.deleteCollection

Delete an entire vector collection.

Future<dynamic> deleteCollection({required String collection})

api.vector.deleteRecord

Delete a record from a vector collection.

Future<dynamic> deleteRecord({required String collection, required String recordId})

api.vector.embed

Generate embeddings for one or more texts.

Future<dynamic> embed({required Object texts})

api.vector.listCollections

List vector collections in the current project scope.

Future<dynamic> listCollections()

api.vector.upsert

Embed and upsert documents into a vector collection.

Future<dynamic> upsert({required Object collection, required Object docs})

api.vector.setCollection

Collection settings.

Future<dynamic> setCollection({required String collection, Object? appSearch})

app_search: true lets the project's apps (anon key, signed-in users) search it; they can never write or list it.

api.vector.reembedCollection

Embed every stored text again with the project's current model (large collections need this after a model change).

Future<dynamic> reembedCollection({required String collection, Object? force})

api.vector.sqlSearch

Search a SQL table: mode vector (nearest embeddings), keyword (full text) or hybrid (both, reciprocal rank fusion).

Future<dynamic> sqlSearch({required Object tableName, Object? columnName, Object? vector, Object? text, Object? mode, Object? textColumns, Object? language, Object? k, Object? metric, Object? select, Object? filter, Object? maxDistance})

text is embedded with the project's model when no vector is given. Only rows the caller may read.

api.vector.sqlAutoStatus

Tables whose vector column Sovaria keeps embedded, rows embedded and waiting, last error, and the project's model.

Future<dynamic> sqlAutoStatus()

api.vector.sqlAutoEnable

Keep a vector column (created if missing) filled with embeddings of the source columns; edited rows are embedded again automatically.

Future<dynamic> sqlAutoEnable({required Object tableName, Object? columnName, required Object sourceColumns, Object? rebuild})

rebuild re-embeds the whole table.

api.vector.sqlAutoDisable

Stop keeping a table's vectors up to date (the column and its vectors stay).

Future<dynamic> sqlAutoDisable({required String tableName})

api.vector.sqlAutoSync

Embed waiting rows now instead of on the next background pass (up to limit per table).

Future<dynamic> sqlAutoSync({Object? tableName, Object? limit})

#api.workflows

api.workflows.start

Start a durable workflow run of a function that uses context.step; key makes the start idempotent.

Future<dynamic> start({required Object functionName, Object? input, Object? key})

api.workflows.list

Workflow runs, newest first, with the plan's workflow limits.

Future<dynamic> list({Object? functionName, Object? status, Object? before, Object? limit})

api.workflows.get

One run: status, input, output or error, and every finished step with its result.

Future<dynamic> get({required String runId})

api.workflows.signal

Wake step.waitForSignal(name) with data (kept until the run waits for it).

Future<dynamic> signal({required String runId, required Object name, Object? data})

api.workflows.cancel

Stop an unfinished run for good.

Future<dynamic> cancel({required String runId})

api.workflows.retry

Resume a failed run from its failed step; latest moves it to the live function version.

Future<dynamic> retry({required String runId, Object? latest})