Skip to content
GridCraft
FeaturesPricingGamesDocsEditor
FeaturesPricingGamesDocsEditor
GridCraft

A tile map editor for game developers.

Product

  • Features
  • Pricing
  • Editor

Resources

  • Documentation
  • Get Started
  • Sign In
  • Dashboard

Community

  • Send feedback
  • Discord

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
© 2026 GridCraft. A product of OmniaDev Inc.
Documentation menu
  • Getting started

    • Introduction
  • Editor concepts

    • Tile layers
    • Object layers
    • Tilesets
    • Variable-sized tiles
    • Terrain brushes
    • AutoMap rules
    • Plugins
  • Workflows

    • Open a Tiled file
    • Convert to GridCraft
    • Real-time collaboration
    • Edit with AI agents
    • Save to cloud
    • Use the desktop app
  • Export formats

    • Tiled JSON
    • LDtk
    • Godot 4
    • GameMaker
    • Defold
    • LOVE2D (Lua)
    • CSV
    • Binary (server-ready)
  • Account & cloud

    • Cloud sync, devices, Discord
  • Admin

    • Audit log
  • API reference

    • Overview
    • Auth
    • Maps
    • Billing
    • Admin
    • Discord linking
    • Devices
  • Legal

    • Legal index
  • Getting started

    • Introduction
  • Editor concepts

    • Tile layers
    • Object layers
    • Tilesets
    • Variable-sized tiles
    • Terrain brushes
    • AutoMap rules
    • Plugins
  • Workflows

    • Open a Tiled file
    • Convert to GridCraft
    • Real-time collaboration
    • Edit with AI agents
    • Save to cloud
    • Use the desktop app
  • Export formats

    • Tiled JSON
    • LDtk
    • Godot 4
    • GameMaker
    • Defold
    • LOVE2D (Lua)
    • CSV
    • Binary (server-ready)
  • Account & cloud

    • Cloud sync, devices, Discord
  • Admin

    • Audit log
  • API reference

    • Overview
    • Auth
    • Maps
    • Billing
    • Admin
    • Discord linking
    • Devices
  • Legal

    • Legal index

Billing

All billing endpoints require authentication. They're thin wrappers around Stripe Checkout and the customer portal; we don't touch card details ourselves.

POST /billing/checkout

Start a Stripe Checkout session for a tier upgrade. Returns the URL to redirect the user to.

Body
{ "tierId": "desktop" | "cloud" | "team" }

200 OK
{ "url": "https://checkout.stripe.com/..." }

Errors
  400 VALIDATION_ERROR
  400 ALREADY_OWNED
  400 ALREADY_SUBSCRIBED

POST /billing/portal

Open the Stripe customer portal for the signed-in user (update card, cancel, switch plans, download invoices).

200 OK
{ "url": "https://billing.stripe.com/..." }

GET /billing/status

Return the current subscription state.

200 OK
{
  "tier": "free" | "desktop" | "cloud" | "team",
  "ownsDesktop": boolean,
  "subscription": null | {
    "status":             string,    // Stripe status
    "currentPeriodStart": string,    // ISO timestamp
    "currentPeriodEnd":   string,
    "canceledAt":         string | null
  }
}

GET /billing/invoices

Return recent Stripe invoices for the signed-in user. Empty array when billing isn't configured or the user has no Stripe customer yet.

200 OK
{ "invoices": [ { ...Stripe invoice fields... } ] }