Docs

Public compliance API for location launches.

The public surface stays focused: requirements lookup, authenticated monitors, access requests, and deployment health. Founder ops tooling stays secondary so the product remains easy to evaluate.

Coverage
12 markets
Mapped obligations
72
AI research
configured
Founder ops
draft

Health contract

This is the fastest way to verify deployment posture before anyone touches a monitor flow. It reports coverage, product state, and optional runtime capabilities without leaking credentials.

{
  "status": "ok",
  "checkedAt": "2026-04-13T19:00:00.000Z",
  "product": {
    "verticals": [
      "fast-casual-restaurant"
    ],
    "mappedMarkets": 12,
    "mappedRequirements": 72,
    "monitoredAccounts": 0
  },
  "runtime": {
    "database": "ready",
    "monitors": "ready",
    "aiResearch": "configured",
    "githubResearch": "optional",
    "founderOpsMode": "draft"
  }
}

Product surface

POST/api/v1/requirements

Return mapped obligations, cost ranges, and renewal lead times for one supported market.

GET/api/v1/requirements

Query the same contract with URL params when you want a quick smoke test or simple integration.

POST/api/v1/access-requests

Capture an access request from the public site or a lightweight external intake flow.

GET/api/v1/health

Read deployment and coverage status for the current runtime without exposing secrets.

GET/api/v1/monitors

List monitored accounts with upcoming deadlines and health score for customer renewal workflows. Requires X-API-Key.

POST/api/v1/monitors

Create a monitored account and compute the first upcoming deadline immediately. Requires X-API-Key.

GET/api/v1/monitors/:id

Inspect a single monitored account and its current renewal posture. Requires X-API-Key.

GET/api/v1/account

Read the authenticated customer account, plan, and billing state. Requires X-API-Key.

POST/api/v1/billing/portal

Create a hosted Stripe billing portal session for the authenticated customer account. Requires X-API-Key.

Auth model
Requirements lookup and health checks are public.
Starter and Growth can subscribe directly, then generate a customer API key immediately.
Send the key in X-API-Key or Authorization: Bearer <key>.
Billing portal sessions can be created from the authenticated account context.

Quickstart flow

Look up requirements

Request
curl -s https://launchpermit.com/api/v1/requirements \
  -H "content-type: application/json" \
  -d '{
    "vertical": "fast-casual-restaurant",
    "city": "Austin",
    "state": "TX"
  }'
Response
{
  "market": "Austin, TX",
  "vertical": "fast-casual-restaurant",
  "summary": "Good pilot market because the path is still annoying but clean enough to prove requirement mapping and renewals.",
  "requirementCount": 6,
  "annualCostLow": 805,
  "annualCostHigh": 2295,
  "requirements": [
    {
      "id": "aus-assumed-name",
      "name": "Local business registration / DBA confirmation",
      "category": "entity",
      "authority": "Travis County + Texas Secretary of State workflow",
      "level": "county",
      "cadence": "one_time",
      "costRange": "$25 - $90",
      "leadDays": 20,
      "notes": "Needed when the operating name and legal entity structure drift apart during expansion."
    },
    {
      "id": "aus-sales-tax",
      "name": "Texas sales tax permit",
      "category": "tax",
      "authority": "Texas Comptroller",
      "level": "state",
      "cadence": "one_time",
      "costRange": "$0 - $50",
      "leadDays": 14,
      "notes": "Usually simple on paper, but still a dependency for launch accounting and POS setup."
    }
  ]
}

Read authenticated account

Request
curl -s https://launchpermit.com/api/v1/account \
  -H "x-api-key: lp_live_your_key_here"
Response
{
  "account": {
    "id": "generated-id",
    "name": "LaunchLane",
    "contactEmail": "maya@launchlane.example",
    "plan": "design-partner",
    "status": "active",
    "billingStatus": "active",
    "currentPeriodEnd": "2026-05-14T12:00:00.000Z",
    "accessOrigin": "stripe-checkout"
  }
}

Create a monitored account

Request
curl -s https://launchpermit.com/api/v1/monitors \
  -H "x-api-key: lp_live_your_key_here" \
  -H "content-type: application/json" \
  -d '{
    "businessName": "South Congress Bowls",
    "city": "Austin",
    "state": "TX",
    "locationCount": 3
  }'
Response
{
  "status": "ok",
  "monitorId": "generated-id",
  "nextDeadline": "2026-05-04"
}

Open billing portal

Request
curl -s https://launchpermit.com/api/v1/billing/portal \
  -H "x-api-key: lp_live_your_key_here" \
  -H "content-type: application/json" \
  -d '{
    "returnPath": "/pricing"
  }'
Response
{
  "status": "ok",
  "url": "https://billing.stripe.com/p/session/example"
}

Read runtime health

Request
curl -s https://launchpermit.com/api/v1/health
Response
{
  "status": "ok",
  "checkedAt": "2026-04-13T19:00:00.000Z",
  "product": {
    "verticals": [
      "fast-casual-restaurant"
    ],
    "mappedMarkets": 12,
    "mappedRequirements": 72,
    "monitoredAccounts": 0
  },
  "runtime": {
    "database": "ready",
    "monitors": "ready",
    "aiResearch": "configured",
    "githubResearch": "optional",
    "founderOpsMode": "draft"
  }
}

Launch posture

Requirements lookup is public. Monitor APIs are customer-key gated after self-serve signup or enterprise onboarding.
Coverage is intentionally focused: 12 launch markets and one operating vertical.
Discovery files ship with the public app at /robots.txt, /sitemap.xml, and /llms.txt.
Access requests can trigger an internal alert when ACCESS_ALERT_EMAILS plus either Gmail SMTP or Resend are configured.
Stripe Checkout, webhook sync, and billing portal flows can run without the dashboard.
AI research is optional and should not block a public integration.
Founder ops remains admin-gated and draft-first by default.
Sample market
Austin opening checklist

6 mapped obligations. Estimated annual permit cost range: $805 to $2295.

Environment shape

Public launch only needs the product env. AI and founder ops stay optional. The app still runs cleanly without GitHub enrichment or outbound sending configured.

OUTREACH_MODE=draft

APP_ADMIN_PASSWORD=""
APP_SESSION_SECRET=""
APP_BASE_URL="https://launchpermit.com"

AI_API_KEY=""
AI_BASE_URL=""
AI_MODEL="gpt-5-mini"

GITHUB_TOKEN=""
GITHUB_API_BASE_URL=""
OUTREACH_FROM_NAME="Your Name"
OUTREACH_FROM_EMAIL="you@yourdomain.com"
OUTREACH_REPLY_TO="you@yourdomain.com"
GMAIL_USER=""
GMAIL_APP_PASSWORD=""
RESEND_API_KEY=""
RESEND_WEBHOOK_SECRET=""
ACCESS_ALERT_EMAILS=""

STRIPE_SECRET_KEY=""
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=""
STRIPE_WEBHOOK_SECRET=""
STRIPE_PORTAL_CONFIGURATION_ID=""
STRIPE_PRICE_STARTER_MONTHLY=""
STRIPE_PRICE_GROWTH_MONTHLY=""

Internal founder ops surface

This is deliberately below the public product contract. It is useful for finding target accounts, researching them, and drafting outreach, but it should not confuse someone evaluating the API itself.

GET/api/v1/outreach/campaigns

Return internal campaign state, leads, research metadata, and stored draft content.

POST/api/v1/outreach/import

Import leads from CSV with website, public GitHub, or private/internal GitHub source URLs.

POST/api/v1/outreach/research/generate

Research a lead from its source URL, score ICP fit, and store factual hooks for review.

POST/api/v1/outreach/preview

Preview the deterministic sequence template before AI drafting happens.

POST/api/v1/outreach/drafts/generate

Generate personalized draft content using the configured AI provider.

GET/api/v1/outreach/export?scope=due

Download the next approved outreach queue as CSV for manual sending and spreadsheet handoff.

Private or internal GitHub research uses GITHUB_TOKEN. When APP_ADMIN_PASSWORD is set, founder ops routes and the dashboard require an admin session.
Manual outreach is a first-class path now: export the due queue as CSV, send from your own inbox, then mark steps sent, replied, or bounced back in the dashboard.

Founder ops examples

CSV import shape
trimmed preview
companyName,contactName,contactEmail,city,state,stack,segment,sourceKind,sourceUrl,companyWebsite,companySummary,researchNotes
OrbitOps,Jordan,jordan@orbitops.io,Austin,TX,location rollout automation,franchise-software,website,https://orbitops.io,https://orbitops.io,,Already owns rollout workflows but not permit logic
RepoRail,Avery,avery@reporail.dev,Miami,FL,developer workflow platform,location-ops-saas,github-public,https://github.com/octokit/octokit.js,,,Public GitHub example for source-driven research

Import leads

Request
curl -s https://launchpermit.com/api/v1/outreach/import \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "csv": "<paste rows from the CSV import template>"
}
JSON
Response
{
  "status": "ok",
  "importedCount": 3,
  "leadIds": [
    "uuid-1",
    "uuid-2",
    "uuid-3"
  ]
}

Research one lead

Request
curl -s https://launchpermit.com/api/v1/outreach/research/generate \
  -H "content-type: application/json" \
  -d '{
    "leadId": "existing-lead-uuid"
  }'
Response
{
  "status": "ok",
  "leadId": "existing-lead-uuid",
  "researchStatus": "researched",
  "icpScore": 86
}

Generate personalized drafts

Request
curl -s https://launchpermit.com/api/v1/outreach/drafts/generate \
  -H "content-type: application/json" \
  -d '{
    "leadId": "existing-lead-uuid"
  }'
Response
{
  "status": "ok",
  "leadId": "existing-lead-uuid",
  "draftStatus": "generated",
  "stepsGenerated": 4
}