Dart: Full API (api.*)
Every Sovaria API operation as a typed call, grouped by module, with the Dart and Flutter SDK.
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()- HTTP
- GET /api/v1/byok
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.
- HTTP
- PUT /api/v1/byok
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.knowledge.search
Passages for a question with numbered citations: query, k, mode (vector | keyword | hybrid), metadata_filter.
Future<dynamic> search({required String name, required Map<String, Object?> body})Only passages the caller may read.
#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})- HTTP
- GET /api/v1/org
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})