tenant167 ops

Tenant API

Tenant configuration, branding, regional settings, and onboarding state.

Queries

QUERY

adminAddonBreakdown

#

Add-on usage breakdown (PlatformAdmin only).

Returns[!]!
QUERY

adminBillingEvents

#

List billing events for a tenant (PlatformAdmin only).

Arguments

  • tenantId!
  • pagination
Returns!
QUERY

adminChurnMetrics

#

Churn metrics over a given number of months (PlatformAdmin only).

Arguments

  • monthsInt!

    Default

    1
Returns!
QUERY

adminGetTenant

#

Get a single tenant by ID (PlatformAdmin only).

Arguments

  • id!
Returns
QUERY

adminListCountryExclusivities

#

List all active country exclusivity agreements. PlatformAdmin only.

Arguments

  • pagination!

    Default

    {
      "limit": 10,
      "page": 1,
      "after": null
    }
Returns!
QUERY

adminListPlatformNotificationChannels

#

List every configured channel. PlatformAdmin only.

Returns[!]!
QUERY

adminListRegionExclusivities

#

List all active region (city) exclusivity agreements. PlatformAdmin only.

Arguments

  • pagination!

    Default

    {
      "limit": 10,
      "page": 1,
      "after": null
    }
Returns!
QUERY

adminListRegistrations

#

List tenant registrations with optional status filter (PlatformAdmin only).

Arguments

  • input!

    Default

    {
      "status": null,
      "pagination": {
        "limit": 10,
        "page": 1,
        "after": null
      }
    }
Returns!
QUERY

adminListTenants

#

List tenants with optional search and status filter (PlatformAdmin only).

Arguments

  • input!

    Default

    {
      "search": null,
      "status": null,
      "pagination": {
        "limit": 10,
        "page": 1,
        "after": null
      }
    }
Returns!
QUERY

adminPlatformNotificationEventKinds

#

Enumerate every event kind the platform can fire — the UI uses this to populate the subscription checkbox list so new events appear automatically after a migration.

Returns[!]!
QUERY

adminPlatformUsage

#

Overall platform usage metrics (PlatformAdmin only).

Returns!
QUERY

adminRevenueMetrics

#

Platform-wide revenue metrics (PlatformAdmin only).

Returns!
QUERY

adminSubscriptions

#

List all subscriptions (PlatformAdmin only).

Arguments

  • status
  • pagination
Returns!
QUERY

adminSubscriptionsByPlan

#

Subscription breakdown by plan (PlatformAdmin only).

Returns[!]!
QUERY

adminSubscriptionsByStatus

#

Subscription breakdown by status (PlatformAdmin only).

Returns[!]!
QUERY

adminTenantActivity

#

Operational activity snapshot for a specific tenant (PlatformAdmin only). Returns total account counts broken down by role, total order counts broken down by kind and lifecycle status, and a 30-day daily series of new accounts + orders so the admin console can visualize how an individual tenant is tracking through its setup.

Arguments

  • tenantId!
Returns!
QUERY

adminTenantBranding

#

Get the current branding configuration for a specific tenant (PlatformAdmin only).

Arguments

  • tenantId!
Returns
QUERY

adminTenantOnboardingStatus

#

Get onboarding status for any tenant (PlatformAdmin only).

Arguments

  • tenantId!
Returns!
QUERY

adminTenantOperationCities

#

List the *active* operation cities for a tenant (PlatformAdmin only). Backward-compatible shape: returns only ACTIVE rows so existing admin console clients reading this field keep working. Use adminTenantOperationCityList when the admin needs to see paused (DISABLED_BY_PLAN / DISABLED_BY_TENANT) rows too.

Arguments

  • tenantId!
Returns[!]!
QUERY

adminTenantOperationCityList

#

Full operation-city allow-list for a tenant — active and disabled rows — for the platform-admin tenant detail UI (PlatformAdmin only). Mirrors the tenant-side myOperationCityList so support staff see the same picture the tenant sees, including cities that were auto-shrunk on a plan downgrade.

Arguments

  • tenantId!
Returns[!]!
QUERY

adminTenantPlatformAddons

#

Admin view of any tenant's platform addons. Includes audit fields (granted_by, granted_at, note) and revoked-but-retained rows (enabled = false). PlatformAdmin only.

Arguments

  • tenantId!
Returns[!]!
QUERY

adminTenantStats

#

Quick dashboard aggregation of tenant and registration counts (PlatformAdmin only).

Returns!
QUERY

adminTenantSubscription

#

Get a specific tenant's subscription (PlatformAdmin only).

Arguments

  • tenantId!
Returns
QUERY

adminTenantWallet

#

Read any tenant's plan-credit wallet (PlatformAdmin only).

Arguments

  • tenantId!
  • currencyString!
Returns!
QUERY

adminTenantWalletEntries

#

Recent ledger entries for a tenant wallet, newest first (PlatformAdmin only). Capped at limit (default 50, max 200).

Arguments

  • tenantId!
  • currencyString!
  • limitInt
Returns[!]!
QUERY

adminTopTenants

#

Top tenants by transaction volume (PlatformAdmin only).

Arguments

  • limitInt!

    Default

    10
Returns[!]!
QUERY

adminTrialConversion

#

Trial-to-paid conversion metrics (PlatformAdmin only).

Returns!
QUERY

adminVerticalDistribution

#

Distribution of tenants across verticals (PlatformAdmin only).

Returns[!]!
QUERY

apiKeyAuditLog

#

Get the audit log for API key events. Can filter by specific API key ID or get all events for the tenant. Requires TenantAdmin role.

Arguments

  • input!
Returns!
QUERY

apiKeys

#

List all API keys for the current tenant. By default, only active (non-revoked) keys are returned. Set includeRevoked to true to include revoked keys. Requires TenantAdmin role.

Arguments

  • includeRevokedBoolean!

    Default

    false
Returns[!]!
QUERY

availablePlans

#

Browse available plans (public, no auth required).

Returns[!]!
QUERY

branding

#

Get the current branding configuration. Returns the active branding for the current tenant.

Returns
QUERY

brandingRevisions

#

Get all branding configuration revisions. Returns the history of branding changes for this tenant.

Returns[!]!
QUERY

brandingVersion

#

Get branding configuration by version. Useful for previewing or rolling back to a previous version.

Arguments

  • versionInt!
Returns
QUERY

citiesByCountry

#

List all cities in a country (for admin dropdowns).

Arguments

  • countryCodeString!
Returns[!]!
QUERY

clientBootstrap

#

One-shot tenant bootstrap. Returns the tenant identity + every client-facing config slice in a single round-trip. Read by the client SDK at app startup; per-domain queries (branding, mapProviderConfig, …) stay available for admin tools.

Returns!
QUERY

countryExclusivityTiers

#

Get all country exclusivity tier definitions with pricing.

Returns[!]!
QUERY

currentTenantStoreReviewer

#

The tenant's auto-provisioned store-review account. Returns null if the reviewer hasn't been provisioned yet — the frontend should surface a "Provision" CTA in that case.

Returns
QUERY

discoverTenantByCode

#

Discover a tenant by its join code (public, no auth required). The code is case-insensitive. Returns null if no active tenant matches.

Arguments

  • codeString!
Returns
QUERY

discoverTenantByDomain

#

Discover a tenant by its domain (public, no auth required). Resolves the tenant from a custom or system domain string (e.g., "acme-rides.bettersuite.io" or "ride.acmetaxi.com"). Returns null if no active tenant matches the domain.

Arguments

  • domainString!
Returns
QUERY

discoverTenantsByCity

#

Discover active tenants operating in a specific city (public, no auth required).

Arguments

  • cityId!
Returns[!]!
QUERY

discoverTenantsByCountry

#

Discover active tenants operating in a country (public, no auth required). Returns tenants that have at least one operation city in the given country.

Arguments

  • countryCodeString!
Returns[!]!
QUERY

discoverTenantsNearby

#

Discover tenants near a geographic location (public, no auth required). Searches via operation cities within the given radius, ordered by distance to the nearest city.

Arguments

  • input!
Returns[!]!
QUERY

exclusivityPriceForCities

#

Get exclusivity pricing for specific cities. Returns per-city pricing based on population, along with availability (whether the city is already locked by another tenant). Call this after the tenant has selected their operation cities.

Arguments

  • cityIds[!]!
Returns[!]!
QUERY

exclusivityPriceForCountries

#

Get exclusivity pricing for specific countries.

Arguments

  • countryCodes[String!]!
Returns[!]!
QUERY

exclusivityTiers

#

Get all exclusivity tier definitions with pricing. Useful for displaying a pricing table in the UI.

Returns[!]!
QUERY

isSlugAvailable

#

Check if a slug is available

Arguments

  • slugString!
ReturnsBoolean!
QUERY

mapProviderConfig

#

Get the current map provider configuration. Returns the active map provider settings for the current tenant, including configured providers (Google Maps, Mapbox, etc.) and their services.

Returns
QUERY

meTenant

#

Get the current tenant (based on JWT token)

Returns
QUERY

meTenantPlatformAddons

#

Returns the platform-controlled addons granted to the caller's tenant. Tenants use this to drive UI gates (showing the "Star members" tab only when the StarTier addon is effective, etc.).

Returns[!]!
QUERY

myActiveOperationCount

#

Count of currently-active cities for the tenant. Useful for UI gauges next to the plan's locations limit without round-tripping the full list.

ReturnsInt!
QUERY

myAddons

#

Get the current tenant's active add-ons.

Returns[!]!
QUERY

myCountryExclusivities

#

List the current tenant's active country exclusivities.

Returns[!]!
QUERY

myDomains

#

List all domains (system + custom) for the current tenant.

Returns[!]!
QUERY

myInvoices

#

Get the current tenant's invoice history (upcoming and past).

Arguments

  • pagination
Returns!
QUERY

myOperationCities

#

List the *active* cities assigned to the current tenant. Backward-compatible shape: returns only ACTIVE rows so existing clients reading this field continue to see what they did before. Use myOperationCityList for the full allow-list including disabled rows.

Returns[!]!
QUERY

myOperationCityList

#

Full allow-list: active and disabled rows. Disabled rows stay in the list with their status/disabledReason so the UI can show reactivate affordances without rediscovering cities.

Returns[!]!
QUERY

myOperationFootprint

#

Aggregated footprint of where the tenant operates: distinct countries, admin regions, and cities, joined with the shared geo reference tables. One round trip for cascading dropdowns (tax zone editor, region setup, dashboard summaries) so each surface doesn't re-derive the dedupe / join logic.

Returns!
QUERY

myRegionExclusivities

#

List the current tenant's active region exclusivities.

Returns[!]!
QUERY

mySubscription

#

Get the current tenant's active subscription.

Returns
QUERY

myUsage

#

Get the current tenant's usage meters. Event-counter meters (e.g. monthly_transactions) come from the usage-meter store, written by record_usage. State counters (verticals, locations) are synthesized here from their authoritative sources — the active subscription and the operation-area repo — so they can't drift from reality.

Returns[!]!
QUERY

notificationSettings

#

Get the current notification settings configuration. Returns the active notification settings for the current tenant.

Returns
QUERY

parkingConfig

#

Get the current parking configuration. Returns the active parking config for the current tenant.

Returns
QUERY

paymentGatewayConfig

#

Get the current payment gateway configuration. Returns the active payment gateway config for the current tenant.

Returns
QUERY

planAddons

#

Get available add-ons for a plan (public).

Arguments

  • planIdString!
Returns[!]!
QUERY

planDetails

#

Get details for a specific plan (public).

Arguments

  • planIdString!
Returns
QUERY

platformConnectedApps

#

All platform-owned connected apps (shared by every tenant). Callable by tenant admins too — they need to see what they're inheriting (and opt out of) on the domain-admin UI.

Returns[!]!
QUERY

regionalSettings

#

Get the current regional settings configuration. Returns locale, measurement system, time format, map defaults, wallet top-up presets, and support contact for the current tenant.

Returns
QUERY

searchCities

#

Search reference cities by name prefix (for admin UI dropdowns).

Arguments

  • queryString!
  • countryCodeString
  • limitInt
Returns[!]!
QUERY

serviceConfig

#

Get the current service configuration. Returns the active service config for the current tenant.

Returns
QUERY

shopSettings

#

Get the current shop settings configuration. Returns the active shop settings for the current tenant.

Returns
QUERY

tenant

#

Get a tenant by ID (admin operation)

Arguments

  • id!
Returns
QUERY

tenantAuthPolicy

#

Resolve the tenant's effective AuthPolicy. Never returns null — falls back to the platform default when the tenant has no revision stored.

Returns!
QUERY

tenantConnectedApps

#

Connected apps owned by a tenant. Tenant admins omit tenantId (defaults to their own); platform admins may pass any tenantId.

Arguments

  • tenantIdID
Returns[!]!
QUERY

tenantDisabledPlatformAppIds

#

IDs of platform apps the tenant has opted out of. Tenant admins omit tenantId; platform admins may pass any tenantId.

Arguments

  • tenantIdID
Returns[ID!]!
QUERY

tenantInfo

#

Get public tenant information. Returns tenant info including branding, current plan details, available upgrades, and add-ons. Accessible to all authenticated users within the tenant.

Returns!
QUERY

tenantOnboardingStatus

#

Get the onboarding completion status for the current tenant.

Returns!
QUERY

tenants

#

Get all tenants (admin operation)

Returns[!]!
QUERY

tenantTierPolicy

#

Get the public tier policy for the current tenant. Apps read this unauthenticated to decide whether to allow guest order creation or pop the registration sheet.

Returns
QUERY

tenantWallet

#

Return the current tenant's plan-credit wallet balance for the given currency. Returns a wallet with exists=false (and zero balances) when the tenant has never been credited — callers should still treat this as a valid empty wallet rather than an error.

Arguments

  • currencyString!
Returns!

Mutations

MUTATION

addAddon

#

Add an addon to the current subscription.

Arguments

  • input!
Returns!
MUTATION

addCustomDomain

#

Add a custom domain for a tenant app. The domain must be globally unique. After adding, the tenant must set up a CNAME record pointing to the system subdomain (returned in the entity's cname_target field) and then call verifyCustomDomain.

Arguments

  • input!
Returns!
MUTATION

addOperationCity

#

Add a city to the current tenant's operation areas. If the city is already in the allow-list (any status), the row is reactivated rather than re-inserted. Reactivation and net-new adds both consume one slot of the plan's locations limit.

Arguments

  • cityId!
ReturnsBoolean!
MUTATION

adminActivateTenant

#

Re-activate a suspended or cancelled tenant (PlatformAdmin only). Blocked tenants cannot be activated — use adminUnblockTenant instead.

Arguments

  • id!
Returns!
MUTATION

adminAddOperationCity

#

Add a city to a tenant's operation areas (PlatformAdmin only).

Arguments

  • tenantId!
  • cityId!
ReturnsBoolean!
MUTATION

adminAssignPlan

#

Force-assign a plan to a tenant (PlatformAdmin only, bypasses Stripe).

Arguments

  • tenantId!
  • planIdString!
  • periodDaysInt

    Number of days for the subscription period (None = indefinite).

Returns!
MUTATION

adminBlockTenant

#

Block a tenant immediately (PlatformAdmin only). Blocked tenants cannot be auto-reactivated by billing events. Use adminUnblockTenant to restore access.

Arguments

  • id!
  • reasonString!
Returns!
MUTATION

adminCancelRegistration

#

Cancel a pending registration (PlatformAdmin only).

Arguments

  • idString!
ReturnsBoolean!
MUTATION

adminCreateCountryExclusivity

#

Create a country exclusivity agreement for a tenant. PlatformAdmin only. If monthly_price_minor is omitted the price is auto-calculated from the country's GDP-based value tier.

Arguments

  • input!
Returns!
MUTATION

adminCreatePlatformNotificationChannel

#

Create a new notification channel. PlatformAdmin only.

Arguments

  • input!
Returns!
MUTATION

adminCreateRegionExclusivity

#

Create a region exclusivity agreement for a tenant. PlatformAdmin only. If monthly_price_minor is omitted the price is auto-calculated from the city's population tier and country GDP data.

Arguments

  • input!
Returns!
MUTATION

adminCreateTenant

#

Create a new tenant as PlatformAdmin. When skip_verification is true, tenant + admin account are created immediately. When false, an invitation email is sent with a 7-day verification link.

Arguments

  • input!
Returns!
MUTATION

adminCreditTenantWallet

#

Grant credit to a tenant's plan-credit wallet (PlatformAdmin only). Records an AdminGiftCredit ledger transaction; idempotency is on the caller — every call adds another grant.

Arguments

  • input!
Returns!
MUTATION

adminDeletePlatformNotificationChannel

#

Delete a channel. PlatformAdmin only. Returns true on success.

Arguments

  • idString!
ReturnsBoolean!
MUTATION

adminDeleteTenant

#

Soft-delete a tenant (PlatformAdmin only). Step-up gated — the platform admin must re-enter their password to mint an elevation token before this mutation will proceed. Tenant deletion is irreversible from the tenant's side, so a stolen platform-admin session cannot wipe a tenant without the password too.

Arguments

  • id!
ReturnsBoolean!
MUTATION

adminExtendSubscription

#

Extend a subscription's period (PlatformAdmin only).

Arguments

  • subscriptionId!
  • extendDaysInt!
Returns!
MUTATION

adminGrantPlatformAddon

#

Grant a platform-controlled addon to a tenant. PlatformAdmin only. expires_at = None makes the grant indefinite. Re-granting an existing addon overwrites the previous record (new granted_by and granted_at stamps; new expiry).

Arguments

  • input!
Returns!
MUTATION

adminProvisionRegistration

#

Force-create a tenant from a pending or email-verified registration. Admin picks a plan — the tenant, account, and subscription are created immediately, bypassing the user's onboarding flow. PlatformAdmin only. Force-create with a specific plan. Falls back to the registration's plan or the default trial.

Arguments

  • input!
ReturnsBoolean!
MUTATION

adminReactivateSubscription

#

Reactivate a cancelled (or cancel-at-period-end) subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
Returns!
MUTATION

adminRemoveOperationCity

#

Remove a city from a tenant's operation areas (PlatformAdmin only).

Arguments

  • tenantId!
  • cityId!
ReturnsBoolean!
MUTATION

adminRevokeCountryExclusivity

#

Revoke (deactivate) a country exclusivity agreement. PlatformAdmin only.

Arguments

  • id!
ReturnsBoolean!
MUTATION

adminRevokePlatformAddon

#

Revoke a previously granted addon. PlatformAdmin only. The grant record is kept (with enabled = false) so the audit trail of past activations is recoverable from the config history. A subsequent grant will overwrite it.

Arguments

  • input!
ReturnsBoolean!
MUTATION

adminRevokeRegionExclusivity

#

Revoke (deactivate) a region exclusivity agreement. PlatformAdmin only.

Arguments

  • id!
ReturnsBoolean!
MUTATION

adminSetBillingEmail

#

Set or clear the billing email override on a subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
  • billingEmailString

    New billing email; null falls back to the tenant admin email.

Returns!
MUTATION

adminSetCancelAtPeriodEnd

#

Toggle cancel-at-period-end on a subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
  • cancelAtPeriodEndBoolean!
Returns!
MUTATION

adminSetGraceUntil

#

Set or clear the grace-period end on a subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
  • graceUntil

    New grace-until; null clears the grace period.

Returns!
MUTATION

adminSetPauseUntil

#

Set or clear the pause end on a subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
  • pauseUntil

    New pause-until; null clears the pause.

Returns!
MUTATION

adminSetSubscriptionCustomLimits

#

Set or clear custom per-subscription limit overrides (PlatformAdmin only). Input must be a JSON object keyed by limit_id (e.g. {"max_drivers": 250}).

Arguments

  • subscriptionId!
  • customLimitsJsonString

    JSON object keyed by limit_id; null clears all overrides.

Returns!
MUTATION

adminSetSubscriptionVerticals

#

Replace the selected verticals on a subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
  • verticals[!]!
Returns!
MUTATION

adminSetTrialEnd

#

Set or clear the trial end date on a subscription (PlatformAdmin only).

Arguments

  • subscriptionId!
  • trialEnd

    New trial end; null clears the trial end.

Returns!
MUTATION

adminSuspendTenant

#

Suspend a tenant (PlatformAdmin only).

Arguments

  • id!
Returns!
MUTATION

adminTestPlatformNotificationChannel

#

Send a synchronous test notification to a channel. PlatformAdmin only. Returns true when the underlying HTTP call succeeded.

Arguments

  • idString!
ReturnsBoolean!
MUTATION

adminUnblockTenant

#

Unblock a blocked tenant (PlatformAdmin only). Restores the tenant to Active status.

Arguments

  • id!
Returns!
MUTATION

adminUpdateCountryExclusivity

#

Update a country exclusivity agreement. PlatformAdmin only.

Arguments

  • input!
Returns!
MUTATION

adminUpdatePlatformNotificationChannel

#

Update an existing channel. PlatformAdmin only.

Arguments

  • input!
Returns!
MUTATION

adminUpdateRegionExclusivity

#

Update a region exclusivity agreement. PlatformAdmin only.

Arguments

  • input!
Returns!
MUTATION

adminUpdateSubscriptionStatus

#

Override a subscription's status (PlatformAdmin only).

Arguments

  • subscriptionId!
  • status!
Returns!
MUTATION

adminUpdateTenant

#

Update tenant fields (PlatformAdmin only).

Arguments

  • input!
Returns!
MUTATION

adminVerifyRegistrationEmail

#

Verify a pending registration's email. Moves status to EmailVerified so the user can log in and complete onboarding (plan selection + payment) themselves. Bypasses email token and expiry. PlatformAdmin only.

Arguments

  • idString!
ReturnsBoolean!
MUTATION

applyTenantWalletToBilling

#

Forward the tenant wallet's credit (in currency) to the active subscription's PSP customer balance. Idempotent in the sense that repeated calls when the wallet is empty are no-ops.

Arguments

  • currencyString!
Returns!
MUTATION

cancelAllRegionExclusivities

#

Cancel all region exclusivities for the current tenant.

ReturnsInt!
MUTATION

cancelCountryExclusivity

#

Cancel country exclusivity for a specific country.

Arguments

  • countryCodeString!
ReturnsBoolean!
MUTATION

cancelRegionExclusivity

#

Cancel region exclusivity for a specific city.

Arguments

  • cityId!
ReturnsBoolean!
MUTATION

cancelSubscription

#

Cancel the current subscription.

Arguments

  • input!
Returns!
MUTATION

changePlan

#

Upgrade or downgrade the subscription plan.

Arguments

  • input!
Returns!
MUTATION

completeOnboarding

#

Complete onboarding by subscribing to a plan. Creates the tenant, admin account, and subscription. Returns new authentication tokens for the created tenant admin.

Arguments

  • input!
Returns!
MUTATION

confirmCheckoutSession

#

Finalize a Stripe checkout without waiting for the webhook. The client calls this on return from checkout. We retrieve the session from Stripe, reject it if it hasn't completed + paid, then run the same provisioning the webhook does. If the webhook already processed it, this returns alreadyProcessed = true instead of double-provisioning. No GraphQL authentication required — the registration flow calls this before the tenant exists, so there's no session to bind to. The session_id itself is the authenticator: it's unguessable and Stripe only hands it out to the paying user, and the mutation can only produce side effects if the PSP confirms the session is complete + paid.

Arguments

  • input!
Returns!
MUTATION

createApiKey

#

Create a new API key for the tenant. The plaintext key is returned only once. Store it securely. Requires Owner-tier (TenantOwner or PlatformAdmin) — issuing a long-lived backend credential is a danger-zone action.

Arguments

  • input!
Returns!
MUTATION

createBillingPortalSession

#

Create a Stripe Billing Portal session. Returns the portal URL.

Arguments

  • returnUrlString!
ReturnsString!
MUTATION

createConnectedApp

#

Create a connected app. * ownership = Platform — PlatformAdmin only, tenantId must be null. * ownership = Tenant — any admin, tenantId must be set (tenant admins may only create rows for their own tenant).

Arguments

  • input!
Returns!
MUTATION

createRegistrationCheckout

#

Create a Stripe checkout session for an email-verified registration. No tenant exists yet — the webhook will create it after payment. No authentication required (the registration_id serves as the identifier).

Arguments

  • input!
Returns!
MUTATION

deleteConnectedApp

#

Soft-delete a connected app. Same authorization rules as update.

Arguments

  • idID!
ReturnsBoolean!
MUTATION

disablePlatformConnectedApp

#

Opt the tenant out of a platform-owned app — it stops appearing in AASA / assetlinks for that tenant's domains.

Arguments

  • connectedAppIdID!
  • tenantIdID
ReturnsBoolean!
MUTATION

enablePlatformConnectedApp

#

Re-enable (i.e., remove from the opt-out set) a previously-disabled platform app for the tenant.

Arguments

  • connectedAppIdID!
  • tenantIdID
ReturnsBoolean!
MUTATION

previewLegacyPurchaseCode

#

Validate a code without consuming it. Surfaces "already redeemed" so the UI can warn the user before they commit.

Arguments

  • input!
Returns!
MUTATION

provisionTenantStoreReviewer

#

Provision (or sync) the store-review account. Three branches, see StoreReviewManagementUseCase docs: 1. Account missing → returns credentials (one-time plaintext). 2. Account exists, roles drifted → returns info + synced_roles. 3. Account exists, roles current → errors. Caller should switch to the password reset action.

Returns!
MUTATION

purchaseCountryExclusivity

#

Purchase country-level exclusivity for one or more countries.

Arguments

  • countryCodes[String!]!
Returns[!]!
MUTATION

purchaseRegionExclusivity

#

Purchase region exclusivity for one or more cities. The tenant must have an active subscription and the cities must be in their operation areas. The exclusivity covers all verticals on the tenant's current subscription and lasts until cancelled or the subscription ends.

Arguments

  • cityIds[!]!
Returns[!]!
MUTATION

reactivateSubscription

#

Reactivate a cancelled subscription (before period end).

Returns!
MUTATION

redeemLegacyPurchaseCode

#

Redeem a legacy purchase code, crediting the tenant wallet by the exact amount the customer originally paid. Single-use per code.

Arguments

  • input!
Returns!
MUTATION

registerTenant

#

Register a new tenant. Sends a verification email to the admin. No authentication required.

Arguments

  • input!
Returns!
MUTATION

removeAddon

#

Remove an addon from the current subscription.

Arguments

  • addonIdString!
ReturnsBoolean!
MUTATION

removeCustomDomain

#

Remove a custom domain. Only custom domains can be removed; system domains are managed automatically.

Arguments

  • idString!
ReturnsBoolean!
MUTATION

removeOperationCity

#

Remove a city from the current tenant's operation areas. This permanently drops the row from the allow-list. Use setOperationCityActive to soft-disable instead — disabled rows stay parked for one-click reactivation.

Arguments

  • cityId!
ReturnsBoolean!
MUTATION

removeVerticalBrand

#

Remove branding for a specific vertical. Requires TenantAdmin role.

Arguments

  • vertical!
Returns!
MUTATION

resendVerificationEmail

#

Resend the verification email for a pending registration. Rate limited: max 5 resends, 60s cooldown between resends. No authentication required.

Arguments

  • emailString!
Returns!
MUTATION

resetTenantStoreReviewerPassword

#

Rotate the reviewer's password and return the new plaintext once. Errors with "store-review account not found" if the reviewer hasn't been provisioned yet.

Returns!
MUTATION

revokeAllApiKeys

#

Revoke all API keys for the tenant. All keys will immediately become invalid. Use with caution! Requires Owner-tier (TenantOwner or PlatformAdmin).

Arguments

  • input!
Returns!
MUTATION

revokeApiKey

#

Revoke a single API key. The key will immediately become invalid for authentication. Requires Owner-tier (TenantOwner or PlatformAdmin).

Arguments

  • input!
Returns!
MUTATION

rollbackBranding

#

Rollback branding to a previous version. Creates a new version with the content from the specified version. Requires TenantAdmin role.

Arguments

  • versionInt!
Returns!
MUTATION

rotateApiKey

#

Rotate an API key (revoke old and create new in one operation). This enables zero-downtime key rotation by creating the new key before revoking the old one. Requires Owner-tier (TenantOwner or PlatformAdmin) **and** a fresh step-up elevation token — rotation is a destructive security action that should be paired with a re-auth so a stolen Owner session can't quietly mint a long-lived key.

Arguments

  • input!
Returns!
MUTATION

saveTenantConfig

#

Save a tenant configuration (TenantAdmin for own tenant, PlatformAdmin for any). Creates a new versioned revision and sets it as current. Provide exactly one config variant via the @oneOf input.

Arguments

  • tenantId

    Target tenant ID. Required for PlatformAdmin; uses own tenant for TenantAdmin.

  • config!
ReturnsBoolean!
MUTATION

setOperationCityActive

#

Toggle the active state of an existing operation city. Activating a row enforces the plan locations limit (it consumes a slot). Deactivating frees the slot but keeps the row in the allow-list so the tenant can flip it back without rediscovering the city.

Arguments

  • cityId!
  • activeBoolean!
ReturnsBoolean!
MUTATION

setTenantDiscoverable

#

Toggle whether a tenant is publicly discoverable. Accessible by: - **TenantAdmin**: can toggle discoverability of their own tenant. - **PlatformAdmin**: can toggle discoverability of any tenant (pass tenant_id).

Arguments

  • tenantId

    Target tenant. Required for PlatformAdmin; ignored for TenantAdmin (uses own tenant).

  • discoverableBoolean!
Returns!
MUTATION

setTenantIsDemo

#

Toggle whether a tenant is a demo/test tenant. Demo tenants get relaxed auth and extra UI features. This is a platform-level setting and can only be changed by PlatformAdmin.

Arguments

  • tenantId!
  • isDemoBoolean!
Returns!
MUTATION

setVerticalAppBrand

#

Set or update branding for a specific app within a vertical. Requires TenantAdmin role.

Arguments

  • vertical!
  • app!
  • input!
Returns!
MUTATION

setVerticalBrand

#

Set or update branding for a specific vertical. Requires TenantAdmin role.

Arguments

  • vertical!
  • input!
Returns!
MUTATION

subscribeToPlan

#

Start the subscription flow. Creates a Stripe Checkout Session and returns the checkout URL. No subscription is saved until the checkout completes and the webhook fires.

Arguments

  • input!
Returns!
MUTATION

updateAddonQuantity

#

Update the quantity of an existing addon.

Arguments

  • input!
Returns!
MUTATION

updateAuthPolicy

#

Save a new revision of the tenant's AuthPolicy. Requires TenantAdmin (or PlatformAdmin impersonation). The payload replaces the rule set in full — there's no merge semantics, the version-bump-per-save pattern matches update_tier_config.

Arguments

  • input!
Returns!
MUTATION

updateBranding

#

Update the entire branding configuration. Creates a new version and sets it as current. Requires TenantAdmin role.

Arguments

  • input!
Returns!
MUTATION

updateCompanyBrand

#

Update only the company brand. Preserves existing vertical brands. Requires TenantAdmin role.

Arguments

  • input!
Returns!
MUTATION

updateConnectedApp

#

Update mutable fields on a connected app. Ownership and platform are immutable — delete + recreate if those need to change.

Arguments

  • input!
Returns!
MUTATION

updateRegionalSettings

#

Update regional settings configuration. Sets locale, measurement system, time format, map defaults, wallet top-up presets, and support contact for the tenant. Creates a new version and sets it as current. Requires TenantAdmin role.

Arguments

  • input!
Returns!
MUTATION

updateTierConfig

#

Save a new revision of the tenant's tier policy (display names, verification ladder, expiry days, strike thresholds, payment-method requirement). Requires TenantAdmin role.

Arguments

  • input!
Returns!
MUTATION

verifyCustomDomain

#

Verify DNS for a custom domain by checking host resolution. The tenant must have already set up a CNAME record pointing the custom domain to the system subdomain. This mutation performs a basic DNS lookup to confirm the domain resolves. Full CNAME chain verification may be added later.

Arguments

  • idString!
Returns!
MUTATION

verifyTenantRegistration

#

Verify a tenant registration email token. Marks the registration as EmailVerified — no tenant is created yet. The user must log in and complete onboarding (plan subscription) to become a real tenant. No authentication required.

Arguments

  • tokenString!
Returns!

Build the foundation once. Expand without limits.

BetterSuite is built for teams who see on-demand as a business — not a feature.