{"openapi":"3.1.0","info":{"title":"DigitalPublic Commercial API","version":"2026-09-10-trial-active-projects-v1","description":"Public API for discovering DigitalPublic operational marketing capabilities, legal identity, trust, data processing, plans, connection requirements, illustrative use cases, time-value ROI, service status, and human-authorized onboarding. It contains no customer data and makes no marketing performance guarantees."},"servers":[{"url":"https://platform.digitalpublic.com/api/commercial"}],"components":{"securitySchemes":{"portalSession":{"type":"apiKey","in":"cookie","name":"authjs.session-token","description":"Authenticated DigitalPublic portal session. OWNER or ADMIN membership is required."},"statusToken":{"type":"http","scheme":"bearer","description":"Limited live-trial status token. It cannot access projects, provider data, or operational DigitalPublic tools."}}},"paths":{"/catalog":{"get":{"operationId":"getCommercialCatalog","summary":"Get the canonical bilingual EUR/USD catalog","responses":{"200":{"description":"Catalog"}}}},"/catalog-validation":{"get":{"operationId":"validateCommercialCatalogPricing","summary":"Validate that public plan prices match active monthly Stripe prices without exposing Stripe identifiers","responses":{"200":{"description":"All prices match"},"503":{"description":"At least one price is missing or differs"}}}},"/company":{"get":{"operationId":"getCompanyProfile","summary":"Get verified legal identity, contacts, version and evidence URLs","responses":{"200":{"description":"Company profile"}}}},"/capabilities":{"get":{"operationId":"getCapabilityMatrix","summary":"Get read, preparation, write, approval, module and plan capabilities","responses":{"200":{"description":"Capability matrix"}}}},"/trust":{"get":{"operationId":"getTrustProfile","summary":"Get security, data handling, provider verification and explicit limitation facts","responses":{"200":{"description":"Trust profile"}}}},"/use-cases":{"get":{"operationId":"listUseCases","summary":"List illustrative use cases that do not claim customer results","responses":{"200":{"description":"Illustrative use cases"}}}},"/status":{"get":{"operationId":"getServiceStatus","summary":"Get current component status and timestamp without historical SLA claims","responses":{"200":{"description":"Current status"}}}},"/roi":{"post":{"operationId":"estimateTimeValueRoi","summary":"Calculate time value, plan cost, net value and break-even hours only","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["hoursSavedPerMonth","hourlyCost","planId","currency"],"properties":{"hoursSavedPerMonth":{"type":"number","minimum":0},"hourlyCost":{"type":"number","minimum":0},"planId":{"type":"string"},"currency":{"type":"string","enum":["EUR","USD"]}}},"example":{"hoursSavedPerMonth":12,"hourlyCost":45,"planId":"operator","currency":"EUR"}}}},"responses":{"200":{"description":"Deterministic time-value calculation"},"400":{"description":"Invalid input or unavailable plan price"}}}},"/connections":{"get":{"operationId":"getConnectionCatalog","summary":"Get providers, authentication modes, scopes and human connection requirements","responses":{"200":{"description":"Connection catalog"}}}},"/readiness":{"get":{"operationId":"getCommercialReadiness","summary":"Get current checkout and onboarding availability","responses":{"200":{"description":"Readiness"}}}},"/trials":{"post":{"operationId":"startLiveTrial","summary":"Start a 14-day real-data trial with supervised writing and no card","description":"Creates an idempotent pending trial with an initial real project (up to three active projects), 2,000 total units, one user, and up to five connected tools. One passwordless email verifies identity, establishes the session and resumes provisioning.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","runtime","idempotencyKey"],"properties":{"email":{"type":"string","format":"email"},"company":{"type":"string","maxLength":160},"projectName":{"type":"string","maxLength":160},"projectUrl":{"type":"string","maxLength":2000,"description":"Optional domain or HTTP(S) URL. Bare domains are normalized to HTTPS."},"channels":{"type":"array","items":{"type":"string"},"default":[]},"locale":{"type":"string","enum":["es","en"]},"runtime":{"type":"string","maxLength":80},"idempotencyKey":{"type":"string","minLength":8,"maxLength":160}}}}}},"responses":{"201":{"description":"Trial created with a limited status token and HUMAN_VERIFY_EMAIL next action"},"409":{"description":"Trial already used or idempotency conflict"},"429":{"description":"IP, email, or domain rate limit reached"}}}},"/trials/{trialId}":{"get":{"operationId":"getLiveTrialStatus","summary":"Get non-sensitive live-trial state and next action","parameters":[{"in":"path","name":"trialId","required":true,"schema":{"type":"string"}}],"security":[{"statusToken":[]}],"responses":{"200":{"description":"State, expiry, unit and connection limits, modules and safe human links"},"401":{"description":"Status token required"},"404":{"description":"Unknown trial or invalid token"}}}},"/trials/{trialId}/upgrade":{"post":{"operationId":"upgradeLiveTrial","summary":"Create a human Stripe checkout that preserves the trial account and project","parameters":[{"in":"path","name":"trialId","required":true,"schema":{"type":"string"}}],"security":[{"statusToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["plan"],"properties":{"plan":{"type":"string","enum":["observer","operator","partner"]}}}}}},"responses":{"200":{"description":"Human checkout URL"},"409":{"description":"Email verification or trial account is incomplete"}}}},"/fit-assessments":{"post":{"operationId":"assessCommercialFit","summary":"Recommend a plan deterministically","responses":{"200":{"description":"Assessment"}}}},"/navigator":{"post":{"operationId":"askCommercialNavigator","summary":"Match a prospective need with public capabilities, illustrative use cases and plans","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","maxLength":8000},"locale":{"type":"string","enum":["es","en"]}}}}}},"responses":{"200":{"description":"Public Navigator result without customer data"}}}},"/checkout-intents":{"post":{"operationId":"startCommercialCheckout","summary":"Start direct paid enrollment or an Enterprise proposal","description":"Persists project and channel enrollment context across one passwordless identity email and Stripe.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","planId","market","currency","idempotencyKey"],"properties":{"email":{"type":"string","format":"email"},"companyName":{"type":"string","maxLength":160},"projectName":{"type":"string","maxLength":160},"websiteUrl":{"type":"string","maxLength":2048},"channels":{"type":"array","items":{"type":"string"},"default":[]},"agentRuntime":{"type":"string","maxLength":80},"planId":{"type":"string","enum":["observer","operator","partner","enterprise"]},"market":{"type":"string","enum":["europe","global"]},"currency":{"type":"string","enum":["EUR","USD"]},"locale":{"type":"string","enum":["es","en"]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":160}}}}}},"responses":{"201":{"description":"Paid checkout or proposal intent created"},"429":{"description":"Rate limited"}}}},"/checkout-intents/{id}":{"get":{"operationId":"getCommercialCheckoutStatus","summary":"Get non-sensitive checkout status including nextAction (AGENT_CLAIM_CREDENTIALS when the credential can be claimed), claimable and credentialClaimed","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Status"}}}},"/checkout-intents/claim":{"post":{"operationId":"claimLegacyCommercialAgentCredential","summary":"Legacy claim flow for still-valid historical paid checkout intents; live trials never return an operational credential in chat","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["intentId","claimSecret"],"properties":{"intentId":{"type":"string"},"claimSecret":{"type":"string","minLength":20}}}}}},"responses":{"201":{"description":"One-time legacy credential delivery"},"404":{"description":"Unknown intent or claim secret"},"409":{"description":"Credential already claimed or human step pending"},"410":{"description":"Claim expired or canceled"},"429":{"description":"Rate limited"}}}},"/projects/{projectId}/api-keys":{"get":{"operationId":"listProjectApiKeys","summary":"List active and revoked project API keys without returning secrets","security":[{"portalSession":[]}],"parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Project key metadata"},"403":{"description":"OWNER or ADMIN membership required"}}},"post":{"operationId":"createProjectApiKey","summary":"Create a dpk_ key whose secret is returned exactly once","description":"Trial and eligible paid plans can issue supervised write keys. Existing read-only keys keep their original scopes. Store the returned secret directly in the client credential store; never paste it into a chat.","security":[{"portalSession":[]}],"parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":120},"scopes":{"type":"array","items":{"type":"string","enum":["read","write"]},"default":["read"]}}}}}},"responses":{"201":{"description":"One-time dpk_ secret and MCP configuration"},"403":{"description":"OWNER/ADMIN or active plan required"}}}},"/projects/{projectId}/api-keys/{keyId}":{"delete":{"operationId":"revokeProjectApiKey","summary":"Revoke a project API key idempotently","security":[{"portalSession":[]}],"parameters":[{"in":"path","name":"projectId","required":true,"schema":{"type":"string"}},{"in":"path","name":"keyId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Key revoked"},"403":{"description":"OWNER or ADMIN membership required"},"404":{"description":"Key not found"}}}}}}