Privacy and analytics

We use necessary technical cookies and, only with your consent, analytics and marketing pixels to improve the website and measure campaigns.

Privacy policyCookie policy
Docs
English
EspañolEnglishFrançaisDeutschItalianoPortuguês

Getting started

  • What is Nömad?
  • Getting started with Nömad
  • Create your brand and complete the Genome
  • Invite your team
  • Glossary

Brand OS

  • What is inside Brand OS
  • What is the Genome?
  • Who is Nödo?
  • Messages: your team and Nödo
  • What does a Brand Manager do?
  • Brand Kit and Library
  • Posts and calendar
  • Connections
  • Meetings
  • Files we send you with NödoTransfer

Work

  • Work and tasks
  • Ordering work
  • Following, reviewing and approving deliveries
  • Approving the posts Nömad prepares
  • Custom quotes
  • Brand history
  • Yes, there are humans behind it

Account and billing

  • Plans and pricing
  • Billing and payments
  • People and access
  • Organization and brand roles
  • Workspaces and multiple brands
  • Your name and @username
  • Languages, apps and data
  • Leave, close or delete: account, brands and workspaces
  • Notifications: how we let you know
  • Push notifications on your phone and browser
  • Nömad emails and your preferences

Help

  • How to get help

API

  • Brand API
    • Errors
    • Permissions and roles
    • Brand
    • Genome
    • Brand Kit
    • Library
    • Works
    • Calendar
    • Connections
    • Publishing
    • Inbox
    • Team
    • Account and team
    • Conversation
    • Memory
    • Questions
    • Media
    • Store
    • Plan
    • Orders
    • Activity
    • Workspace
    • Your account
    • Billing
    • Website and domains

MCP

  • MCP server

Connectors

  • Brand connectors

Nödo and agents

  • Nödo in the brand

Genome

  • Genome specification
API/Brand API
Reference8 min read

Billing

Payment methods, subscriptions and purchases. Anything that charges is confirmed by a person.

On this page
  • billing.quotes.save · Save a quote
  • billing.quotes.transition · Change a quote's status
  • billing.quotes.convert · Turn into an order
  • billing.orders.create_manual · Create a manual order
Русский
한국어
日本語
中文
हिन्दी
Open the app
  • billing.payment_methods.start_setup · Start saving a payment method
  • billing.payment_methods.confirm_setup · Save the payment method
  • billing.plan.change · Change plan
  • billing.plan.cancel_scheduled_change · Undo the scheduled change
  • billing.plan.set_auto_renewal · Auto-renewal
  • billing.plan.downgrade_to_free · Move to Free now
  • billing.plan.cancel · Cancel the paid plan
  • billing.plan.start_checkout · Pay for a plan
  • billing.portal.open · Open the billing portal
  • billing.credits.start_checkout · Buy Nödo credits
  • billing.store.start_checkout · Pay for a Store product
  • billing.orders.pay_remaining · Pay the rest of an order
  • billing.usage.ask_for_more · Ask for more usage
  • billing.quotes.save · Save a quote

    Nömad team only: creates a draft quote for the brand (createKey makes a retry return the same one) or saves changes to a draft (id and the version that was read).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.quotes.save
    MCP toolbilling_quotes_save
    Scopebilling.write
    Minimum roleBilling
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps
    StatusAvailable

    Input

    {
      id?: string  // uuid
      version?: integer  // –9007199254740991
      createKey?: string  // uuid
      name: string  // ≤ 200
      currency: "eur" | "usd" | "gbp"
      validUntil: string | null
      items: Array<{
        id: string  // uuid
        productId: string  // ≤ 120
        title: string  // ≤ 240
        quantity: integer  // –1000000
        unitAmount: integer  // 0–2147483647
        components: Array<{
          serviceId: string  // uuid
          title: string  // ≤ 240
          quantity: number  // –1000000
          unit: string  // ≤ 30
          unitPrice: integer | null
        }>  // ≤ 100 items
      }>  // ≤ 100 items
    }

    Output

    {
      id: string  // uuid
    }

    billing.quotes.transition · Change a quote's status

    Nömad team only: marks a draft or sent quote as sent, accepted, rejected or expired (version is the one that was read).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.quotes.transition
    MCP toolbilling_quotes_transition
    Scopebilling.write
    Minimum roleBilling
    Human confirmationNo
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      quoteId: string  // uuid
      version: integer  // -9007199254740991–9007199254740991
      status: "sent" | "accepted" | "rejected" | "expired"
    }

    Output

    {
      id: string  // uuid
    }

    billing.quotes.convert · Turn into an order

    Nömad team only: turns an accepted quote into an order and returns the order id.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.quotes.convert
    MCP toolbilling_quotes_convert
    Scopebilling.write
    Minimum roleBilling
    Human confirmationNo
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      quoteId: string  // uuid
    }

    Output

    {
      orderId: string
    }

    billing.orders.create_manual · Create a manual order

    Nömad team only: creates an order for the brand from the given lines, without a quote (createKey makes a retry return the same order).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.orders.create_manual
    MCP toolbilling_orders_create_manual
    Scopebilling.write
    Minimum roleBilling
    Human confirmationNo
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      id?: string  // uuid
      version?: integer  // –9007199254740991
      createKey?: string  // uuid
      name: string  // ≤ 200
      currency: "eur" | "usd" | "gbp"
      validUntil: string | null
      items: Array<{
        id: string  // uuid
        productId: string  // ≤ 120
        title: string  // ≤ 240
        quantity: integer  // –1000000
        unitAmount: integer  // 0–2147483647
        components: Array<{
          serviceId: string  // uuid
          title: string  // ≤ 240
          quantity: number  // –1000000
          unit: string  // ≤ 30
          unitPrice: integer | null
        }>  // ≤ 100 items
      }>  // ≤ 100 items
    }

    Output

    {
      orderId: string
    }

    billing.payment_methods.start_setup · Start saving a payment method

    Opens a Stripe SetupIntent for the brand's payer (card or SEPA debit) and returns the client secret the browser completes it with. Only brand members with billing access; Nömad staff never change a client's card. Never charges anything by itself.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.payment_methods.start_setup
    MCP toolbilling_payment_methods_start_setup
    Scopebilling.write
    Minimum roleBilling
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {}

    Output

    {
      clientSecret: string
      publishableKey: string
      preferSepa: boolean
    }

    billing.payment_methods.confirm_setup · Save the payment method

    After the browser completes the SetupIntent, saves the method as the default of the brand's payer and returns the saved method. Only accepts a SetupIntent created for that payer (forbidden otherwise).

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.payment_methods.confirm_setup
    MCP toolbilling_payment_methods_confirm_setup
    Scopebilling.write
    Minimum roleBilling
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      setupIntentId: string
    }

    Output

    {
      method: {
        id: string
        methodType: "card" | "sepa_debit" | "other"
        displayBrand: string | null
        last4: string | null
        expMonth: integer | null
        expYear: integer | null
        wallet: string | null
        createdAt: string
      }
      | null
    }

    billing.plan.change · Change plan

    Changes the brand's paid plan or its billing interval. An upgrade is charged now with proration (it may return requiresAction with a client secret for 3DS); a downgrade is scheduled for the renewal and returns its effectiveDate.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.plan.change
    MCP toolbilling_plan_change
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      productId: string  // ≤ 80
      interval: "month" | "year"
    }

    Output

    {
      type: "upgrade" | "downgrade" | "interval_change"
      effectiveDate?: string
      requiresAction?: boolean
      clientSecret?: string
    }

    billing.plan.cancel_scheduled_change · Undo the scheduled change

    Undoes the downgrade or the move to Free scheduled for the renewal, so the current paid plan keeps renewing. Fails with not_found when the brand has no Stripe subscription.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.plan.cancel_scheduled_change
    MCP toolbilling_plan_cancel_scheduled_change
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {}

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    billing.plan.set_auto_renewal · Auto-renewal

    Turns automatic renewal of the paid plan at the end of the period on or off. Fails with not_found when the brand has no Stripe subscription.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.plan.set_auto_renewal
    MCP toolbilling_plan_set_auto_renewal
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      enabled: boolean
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    billing.plan.downgrade_to_free · Move to Free now

    Cancels the paid Stripe subscription right away and puts the brand on the Free plan, with its Nödo budget. Not reversible from here: going back to a paid plan is a new checkout.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.plan.downgrade_to_free
    MCP toolbilling_plan_downgrade_to_free
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {}

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    billing.plan.cancel · Cancel the paid plan

    Schedules the move to Free at the end of the paid period (or moves to Free now when there is no Stripe subscription). Returns the date it takes effect, when known; billing.plan.cancel_scheduled_change undoes it.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.plan.cancel
    MCP toolbilling_plan_cancel
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {}

    Output

    {
      effectiveDate: string | null
    }

    billing.plan.start_checkout · Pay for a plan

    Opens hosted Stripe Checkout for a paid plan for the brand (after the Genome, or from «Plan») and returns its address. The plan only starts when Stripe confirms the payment through its webhook.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.plan.start_checkout
    MCP toolbilling_plan_start_checkout
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      brandShortId: string  // ≤ 40 · The brand's short id, checked against the brand being paid for.
      productId: string  // ≤ 80
      interval: "month" | "year"
    }

    Output

    {
      url: string  // uri · The Stripe page to send the person to.
    }

    billing.portal.open · Open the billing portal

    Opens the Stripe customer portal of the brand's payer (plan, payment method, invoices) and returns its address. Fails with not_found when the payer has no Stripe customer yet.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.portal.open
    MCP toolbilling_portal_open
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      brandShortId: string  // ≤ 40
    }

    Output

    {
      url: string  // uri · The Stripe page to send the person to.
    }

    billing.credits.start_checkout · Buy Nödo credits

    Opens Stripe Checkout for a Nödo credit pack and returns its address. The credits only arrive when Stripe confirms the payment; fails with unavailable (purchase_disabled) while purchases are off.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.credits.start_checkout
    MCP toolbilling_credits_start_checkout
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      packId: string  // ≤ 80
      returnTo?: string | null  // A path inside this brand's app to come back to.
      checkoutAttemptId?: string | null  // Same id on a retry: the same Stripe page comes back.
    }

    Output

    {
      url: string  // uri · The Stripe page to send the person to.
    }

    billing.store.start_checkout · Pay for a Store product

    Freezes the accepted contract of a Store product (price and optional extras) and opens its Stripe Checkout, one-time or as a subscription. Returns the page address; prices always come from the catalogue, never from the caller.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.store.start_checkout
    MCP toolbilling_store_start_checkout
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      productId: string  // ≤ 120
      successUrl: string  // ≤ 2000 · An address inside the app; the session id is appended.
      cancelUrl: string  // ≤ 2000 · An address inside the app.
      paymentType?: "full" | "remaining"  // default "full"
      billingMode?: "auto" | "one_time" | "recurring"  // default "auto"
      selectedPriceId?: string  // ≤ 120
      checkoutAttemptId?: string  // ≤ 64
      selectedExtras?: Array<{
        lineKey: string  // ≤ 120
        quantity: integer  // -9007199254740991–9007199254740991
      }>  // ≤ 50 items
      attribution?: unknown  // Campaign attribution the browser consented to; analytics only.
    }

    Output

    {
      url: string | null
    }

    billing.orders.pay_remaining · Pay the rest of an order

    Opens Stripe Checkout for the amount still due on one of the brand's orders and returns its address. Fails with conflict (nothing_remaining) when nothing is due; the return page is always the brand's orders page.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.orders.pay_remaining
    MCP toolbilling_orders_pay_remaining
    Scopebilling.write
    Minimum roleAdmin
    Human confirmationYes
    DoorsAPI, Screens, Apps
    StatusAvailable

    Input

    {
      orderId: string  // uuid
    }

    Output

    {
      url: string | null
    }

    billing.usage.ask_for_more · Ask for more usage

    Someone who hit a usage limit without billing rights notifies the brand's payers, with a direct link to the plan. One notice per person and day; the asker is never notified. Changes nothing by itself.

    FieldValue
    KindWrite
    HTTP methodPOST /api/v1/billing.usage.ask_for_more
    MCP toolbilling_usage_ask_for_more
    Scopebilling.write
    Minimum roleViewer
    Human confirmationNo
    DoorsAPI, MCP, Screens, Apps
    StatusAvailable

    Input

    {
      reason: "feature_not_in_plan" | "allowance_exhausted" | "spend_cap_reached" | "payment_required" | "operation_too_large" | "ai_paused" | "rate_limited" | "provider_unavailable"
      feature: "chat" | "voice" | "image" | "video" | "research" | "brand_setup" | "publishing" | "heartbeat" | "embedding" | "capability" | "library_export"
    }

    Output

    {
      ok: true
      id?: string
      revision?: integer  // -9007199254740991–9007199254740991
    }

    Updated on January 1, 1970

    PreviousYour accountNextWebsite and domains

    In this section

    • Errors
    • Permissions and roles
    • Brand
    • Genome
    • Brand Kit
    • Library
    • Works
    • Calendar
    Can't find what you need? Write to usWrite to usGo to the app
    © 2026 Nömad · Nömad documentationLinkedInInstagramThreadsFacebookTikTokYouTubeX
    Go to nomad.oooBack to top

    On this page

    • billing.quotes.save · Save a quote
    • billing.quotes.transition · Change a quote's status
    • billing.quotes.convert · Turn into an order
    • billing.orders.create_manual · Create a manual order
    • billing.payment_methods.start_setup · Start saving a payment method
    • billing.payment_methods.confirm_setup · Save the payment method
    • billing.plan.change · Change plan
    • billing.plan.cancel_scheduled_change · Undo the scheduled change
    • billing.plan.set_auto_renewal · Auto-renewal
    • billing.plan.downgrade_to_free · Move to Free now
    • billing.plan.cancel · Cancel the paid plan
    • billing.plan.start_checkout · Pay for a plan
    • billing.portal.open · Open the billing portal
    • billing.credits.start_checkout · Buy Nödo credits
    • billing.store.start_checkout · Pay for a Store product
    • billing.orders.pay_remaining · Pay the rest of an order
    • billing.usage.ask_for_more · Ask for more usage