Crossdeck Docs
Dashboard

Create a project

Getting started 3 min read · Updated May 7, 2025

A project is the home for one app business. It contains your apps, payment rails, products, entitlements, customers, and revenue history. Everything in Crossdeck resolves through a project.

Mental model

One project per product business — not per platform. Your iOS app, Android app, and web app all live inside the same Crossdeck project so customers and entitlements stay unified.

What a project contains

A project is the top-level container for everything Crossdeck verifies and reports on. The objects inside it cross-reference each other through Crossdeck's identity graph.

Object What it is Example
App A client surface where users interact with your product. iOS app, web app
Payment rail A provider that verifies money movement. App Store, Stripe, Google Play
Product A purchasable item sold by a rail. monthly_pro, annual_pro_web
Entitlement A platform-independent access right your app unlocks. pro, unlimited_exports
Customer The unified user across every app and payment rail. cust_8a2e1c

Before you start

You only need a Crossdeck account to create a project. Payment-rail credentials and SDK installs come later — you can wire them in any order.

Step 1 · Create the project

From the dashboard, click + New project and fill in the three fields. The information here defines the mental model Crossdeck will use for every screen, query, and webhook downstream.

1
Name your project

Use your product name, not your company name. This is what appears in the workspace switcher and on every dashboard surface.

2
Pick your business model

subscription, one-time, or hybrid. Crossdeck uses this to preselect setup paths and surface the right dashboard widgets — you can change it later.

3
Choose your platforms

iOS, Android, and web. Crossdeck only generates SDK keys and surfaces setup steps for the platforms you select. Add or remove platforms whenever you ship new ones.

You can also create a project via the API

Use the @cross-deck/node (coming soon) server SDK if you're scripting workspace setup. The example below assumes you've already exported your account-level secret as CROSSDECK_SECRET_KEY.

node
import { CrossdeckServer } from "@cross-deck/node (coming soon)"

const cd = new CrossdeckServer({
  secretKey: process.env.CROSSDECK_SECRET_KEY
})

const project = await cd.projects.create({
  name: "Acme Inc.",
  businessModel: "subscription",
  platforms: ["ios", "web"]
})

console.log(project.projectId)

Step 2 · Project keys

Crossdeck issues two key types per environment. Public keys are safe to embed in client apps. Secret keys are server-only and never recoverable in plaintext after the first time they're shown.

Public SDK key cd_pub_live_a1f43b8e9c2d

Embed in iOS, Android, and web apps. Used for telemetry and entitlement reads. Cannot grant access on its own.

Secret server key cd_sk_live_•••••••••••••••

Use only on your backend. Required for server-side aliasing, manual entitlement grants, and bulk imports. Treat like a database password.

Secrets are shown once

Crossdeck stores the hash of every secret key — not the value. If you lose a secret, rotate it from the dashboard. Existing rotations don't break in-flight requests.

Step 3 · Environments

Every project ships with two environments out of the box: sandbox and production. They have separate keys, separate webhook endpoints, and separate dashboard data — sandbox events never contaminate production metrics.

Environment Public key prefix Use for
sandbox cd_pub_test_… Local development, App Store sandbox, Stripe test mode
production cd_pub_live_… Real customer traffic and verified revenue events

Step 4 · Add platforms

Inside the project, each platform is its own app with its own SDK key and metadata. You can add platforms now or later — Crossdeck only surfaces setup steps for the ones you've enabled.

Continue with the platform-specific guides:

Reference

The complete project shape returned by the API.

Field Type Description
projectId string Stable identifier, e.g. proj_8a2e1c
name string Display name shown in the dashboard
businessModel "subscription" | "one-time" | "hybrid" Drives default setup and dashboard widgets
platforms { ios, android, web } Boolean per platform — controls which apps you can register
environments ("sandbox" | "production")[] Always returns both — Crossdeck creates sandbox + production by default
status "draft" | "live" A project becomes live when at least one rail is verified and a sandbox purchase passes

What's next

Now that the project exists and your keys are in hand, set up a client surface and connect a payment rail.