Organization Activation and Billing
Activate a new organization through Stripe Checkout, inspect webhook-derived subscription status, and understand manually managed enterprise organizations.
Creating an organization and activating it are separate operations. A newly created organization has its protected owner and an exact PixAtlas Free entitlement pin, but ordinary organization features remain unavailable until its billing activation is complete.
Existing organizations from before the billing rollout remain
GrandfatheredActive. They keep their exact entitlement version and do not
need to add a payment method during the rollout.
Read the activation state
Call:
GET /v1/orgs/{organizationId}/billingThe response requires OrganizationBillingView and contains:
activationState, such asPendingSubscription,Active,BillingSuspended, orGrandfatheredActive;activationSource, which distinguishesStripeSubscription,ManualEnterprise,Grandfathered, and a subscription that is still required;- the safe local subscription status and current plan key, when present;
- the organization billing email and its concurrency version, when a Stripe Customer has collected one;
- trial and current-period boundaries;
- the current subscription's
effectiveUnitAmountMinorand activediscounts, including percentage or fixed reduction, duration, and end date when Stripe applies a Coupon; - the available server-configured plans.
effectiveUnitAmountMinor is the recurring catalog amount after the returned
discounts, in the Price currency's minor unit. It is null when no discount is
active. Selectable plan amounts remain the undiscounted catalog prices.
The response never contains card details, Stripe secrets, raw webhook events, or an entitlement permission matrix.
Activate with Stripe Checkout
The protected owner receives these organization billing capabilities by default:
OrganizationBillingViewOrganizationPaymentMethodsManageOrganizationSubscriptionManage
They are administrative, organization-scoped permissions. They are not controlled by an entitlement ceiling, so the owner can complete activation or payment recovery while the rest of the organization is blocked. They can be delegated explicitly after activation; ordinary members do not receive them by default.
The billing overview can first preview a customer offer code without reserving or consuming it:
POST /v1/orgs/{organizationId}/billing/promotion-code/preview
Content-Type: application/json
{
"promotionCode": "FELIX20"
}The response contains only display-safe terms and the matching local plan key, so clients can update that tier's trial length or effective price. Checkout and plan-change creation always revalidate the plaintext code; the preview is never commercial authority.
When an operator has marked a public custom code for suggestion, its use remains
available, and the requesting owner and organization are still eligible for
their first trial, GET /v1/orgs/{organizationId}/billing also
returns suggestedPromotionCode. It contains the custom code, an opaque
promotionCodeId, and the same display terms. The property is null when no
suggestion applies, so clients should keep their ordinary manual-code layout.
To apply the suggestion without copying it into the manual field, submit its
ID as suggestedPromotionCodeId; the server revalidates it before opening
Stripe.
Start Checkout with a local plan key and a client-generated idempotency key:
POST /v1/orgs/{organizationId}/billing/checkout-session
Content-Type: application/json
{
"planKey": "pixatlas-pro-monthly",
"idempotencyKey": "org-create-018f61e5-8bb2-7f10-b847-f5a355241584",
"promotionCode": "ABCD-EFGH-JKLM-NPQR",
"suggestedPromotionCodeId": null
}Use the returned Stripe-hosted URL. The request does not accept a caller-owned
Price ID, amount, success URL, cancel URL, Stripe Coupon ID, or Stripe Promotion
Code ID. promotionCode is an optional PixAtlas customer offer code;
suggestedPromotionCodeId is the mutually exclusive opaque ID supplied by the
billing overview. Repeating the same request with
the same organization, plan, and idempotency key returns the durable Checkout
Session instead of creating another subscription.
An environment can attach an organization-and-plan-specific server discount to Checkout. Clients cannot submit, select, or override Stripe Coupon identifiers. An offer code may set the total eligible trial length or a percentage discount for an exact number of paid monthly periods or for the subscription lifetime. Codes can be configured for one, a fixed number, or unlimited successful uses. Checkout reserves one use; failed Session creation or a signed Checkout-expired event releases it, while signed completion reconciliation records the use.
Keep only the returned opaque sessionId in same-tab browser storage while
navigating to Checkout. When the user explicitly returns without completing,
reconcile that exact Session before reloading the plan list:
POST /v1/orgs/{organizationId}/billing/checkout-session/abandon
Content-Type: application/json
{
"sessionId": "cs_..."
}The server verifies organization ownership and asks Stripe to expire the open Session before releasing its trial and code reservations. A completed Session is not released and remains subject to signed webhook reconciliation. Clients must not persist the customer-entered offer code.
PixAtlas Free is a real recurring €0 Stripe subscription and still requires a
reusable payment method. PixAtlas Pro uses the configured €99 monthly Price
with 30 standard trial days from subscription creation. Checkout sends this as
Stripe's relative trial_period_days=30 value only when both the
organization and its initiating owner are eligible. The trial can be consumed
once per organization and once per user. A user who already initiated a trial,
or who owns another organization that has reserved or consumed one, receives a
normal paid Pro Checkout without a second trial. The billing overview reports
trialMonths: 0 for that user and organization so clients do not advertise an
unavailable trial. Checkout repeats the eligibility check transactionally and
does not trust the value previously displayed by a client. An eligible
trial-duration code can replace 30 with a configured total such as 90 days; it
never bypasses the organization-and-user trial rule. A finite percentage code
starts after any trial and lasts exactly its configured paid-month duration;
an unlimited percentage code remains discounted for the subscription lifetime.
An active subscription can carry a validated percentage code into Stripe's
hosted plan-change confirmation. Trial-duration codes remain limited to the
first subscription Checkout because Stripe's hosted subscription-update flow
cannot add a trial.
The Pro entitlement's seeded policy enables all current product capabilities except personal access token (PAT) API access; it allows ten accepted 3D-model Jobs per UTC month, 500 GiB default Document storage, Unlimited building capacity, integrated chat, and Whiteboards. The Price and exact entitlement version are selected by an environment-local server binding, not by the displayed euro amount.
Checkout does not copy the initiating PixAtlas user's email into Stripe. The email field remains editable so a company can enter its accounting address. After Checkout, current-object reconciliation stores that address as the organization billing email without changing any PixAtlas user account.
Wait for authoritative activation
The browser success redirect does not activate the organization. PixService verifies a signed Stripe event, stores it in a durable inbox, retrieves the current Stripe subscription, and then reconciles local state.
trialing, active, and past_due provision the exact entitlement version
only when a reusable payment method is present. past_due remains usable while
Stripe retry policy is in progress. Terminal, paused, incomplete, missing-card,
or unknown-Price states do not provision ordinary use.
Poll the billing read endpoint after Checkout. A client should treat
activationState: Active as authoritative. Until then, ordinary protected
operations fail with the stable reason
organization_subscription_required; billing activation and recovery remain
available to authorized billing principals.
Manage a payment method
Create a short-lived Customer Portal session with:
POST /v1/orgs/{organizationId}/billing/portal-sessionThis requires OrganizationPaymentMethodsManage. The return URL is configured
by the server, and the API returns only the Stripe-hosted session identifier,
URL, and optional expiry.
Change the current plan
An organization with a current Stripe subscription can switch between active server-configured plans through a hosted Stripe confirmation flow:
POST /v1/orgs/{organizationId}/billing/plan-change-session
Content-Type: application/json
{
"planKey": "pixatlas-free-monthly"
}This requires OrganizationSubscriptionManage. The request accepts only the
local plan key; PixService resolves the target Price and the organization's
current Stripe subscription. Use the returned Customer Portal URL to let the
customer review and confirm the change. Stripe applies the configured tax,
proration, and invoice behavior. The return redirect is informational: wait
for webhook reconciliation and read GET /v1/orgs/{organizationId}/billing
until its planKey reflects the target plan.
Manage the billing contact
The organization billing email is intended for transactional invoice and
subscription communication. A principal with
OrganizationPaymentMethodsManage can update it in both PixAtlas and Stripe:
PUT /v1/orgs/{organizationId}/billing/contact
Content-Type: application/json
{
"billingEmail": "rechnung@example.com",
"expectedConcurrencyVersion": 1
}Read the current version from billingEmailConcurrencyVersion in the billing
status response. A stale version returns a conflict instead of overwriting a
newer change. Stripe customer.updated events also synchronize later external
changes. The raw address is not copied into webhook inbox, permission audit, or
permission-change outbox payloads.
Understand manual enterprise organizations
A negotiated enterprise organization can be activated by a full PixService
platform administrator without Stripe and without a payment method. Its
activation source is ManualEnterprise, and the administrator assigns its
customer-specific exact published entitlement version through the platform
administration workflow.
While this source is current, Stripe Checkout and the Customer Portal are not available for the organization. Delayed Stripe events cannot replace its activation or entitlement. Contact PixService support to enter or leave manual enterprise management; changing an entitlement pin alone does not activate a pending organization.
Organization Permission Management
Manage protected owners, permission groups, group membership, direct assignments, and authorized policy reads.
Entitlements and Operational Limits
Understand organization-wide permission ceilings, versioned tier policy, storage, resource counts, and monthly and lifetime Job limits.