{"data":{"discoveryVersion":1,"protocol":"commish-cli-setup-v2","configurationVersion":1,"defaultMode":"test","modes":["test","live"],"configuration":{"filename":"commish.setup.json","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"version":{"type":"number","const":1},"mode":{"default":"test","type":"string","enum":["test","live"]},"workspace":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"existing"},"id":{"type":"string","pattern":"^wrk_[A-Za-z0-9_-]{12,}$"}},"required":["kind","id"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"new"},"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":3,"maxLength":48,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"}},"required":["kind","name","slug"],"additionalProperties":false}]},"application":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100}},"required":["name"],"additionalProperties":false},"destination":{"type":"object","properties":{"origin":{"description":"HTTPS origin only, without credentials, path, query or fragment. Public DNS and ownership are checked during provisioning.","type":"string"},"proofFile":{"type":"string","minLength":1,"maxLength":1024,"pattern":"^(?![A-Za-z]:)(?!.*\\\\)(?!.*\\x00)(?!(?:.*\\/)?\\.(?:git|commish)(?:\\/|$))(?!\\.?\\.(?:\\/|$))(?!.*\\/\\.?\\.(?:\\/|$))[^/]+(?:\\/[^/]+)*$","description":"Repository-relative proof file; no traversal, symlinks, .git or .commish components. Existing differing files are preserved."}},"required":["origin","proofFile"],"additionalProperties":false},"program":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"slug":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"description":{"default":"","type":"string","maxLength":2000},"category":{"type":"string","minLength":1,"maxLength":50},"visibility":{"default":"private","type":"string","enum":["public","unlisted","private"]},"joinPolicy":{"default":"approval","type":"string","enum":["instant","approval"]},"attributionPolicy":{"default":"last_click","type":"string","enum":["first_click","last_click"]},"eligibleStripeProductIds":{"maxItems":100,"type":"array","items":{"type":"string","pattern":"^prod_[A-Za-z0-9_-]+$"}},"creatorKit":{"default":{"summary":"","talkingPoints":[],"assets":[]},"type":"object","properties":{"summary":{"type":"string","maxLength":1000},"talkingPoints":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":280}},"assets":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":100},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["label","url"],"additionalProperties":false}}},"required":["summary","talkingPoints","assets"],"additionalProperties":false}},"required":["name","slug","category","eligibleStripeProductIds"],"additionalProperties":false},"terms":{"type":"object","properties":{"version":{"default":1,"type":"integer","minimum":1,"maximum":1000000},"commission":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"percentage"},"basisPoints":{"type":"integer","minimum":1,"maximum":10000}},"required":["type","basisPoints"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"fixed"},"amount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","const":"usd"}},"required":["type","amount","currency"],"additionalProperties":false}]},"recurrence":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"first_payment"}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"fixed_months"},"months":{"type":"integer","minimum":1,"maximum":120}},"required":["kind","months"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"lifetime"}},"required":["kind"],"additionalProperties":false}]},"perSaleCap":{"anyOf":[{"type":"object","properties":{"amount":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"currency":{"type":"string","const":"usd"}},"required":["amount","currency"],"additionalProperties":false},{"type":"null"}]},"returnWindowDays":{"type":"integer","minimum":0,"maximum":180},"disclosureText":{"type":"string","maxLength":2000},"prohibitedClaims":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":280}},"effectiveAt":{"type":"string","allOf":[{"pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$"}],"description":"Canonical UTC timestamp with milliseconds, such as 2026-10-04T00:00:00.000Z. Omit to use server time."}},"required":["commission","recurrence","perSaleCap","disclosureText"],"additionalProperties":false},"participantConsent":{"type":"string","const":"commish_hosted","description":"Participants must accept their own terms through Commish; setup cannot accept on their behalf."},"webhook":{"anyOf":[{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri"},"eventTypes":{"minItems":1,"maxItems":17,"type":"array","items":{"type":"string","enum":["invitation.created","invitation.accepted","membership.activated","conversion.created","conversion.refunded","commission.pending","commission.unfunded","commission.payable","commission.reversed","commission.disputed","sale.dispute_opened","sale.dispute_recovery_required","funding.failed","payout.processing","payout.paid","payout.failed","payout.canceled"]}}},"required":["url","eventTypes"],"additionalProperties":false},{"type":"null"}]},"stripe":{"type":"string","enum":["connect","later"]}},"required":["version","application","destination","program","terms","participantConsent","webhook","stripe"],"additionalProperties":false},"validation":"cli_and_server_authoritative","businessInputs":["program.eligibleStripeProductIds","terms.commission","terms.recurrence","terms.perSaleCap","terms.disclosureText","participantConsent","webhook","stripe"]},"authorization":{"kind":"browser_pairing","sessionPath":"/api/cli/setup-sessions","reviewedBusinessChoices":{"version":1,"sessionPath":"/api/cli/setup-sessions/reviewed","fields":["program","terms"],"maximumIntentBytes":262144,"maximumEnvelopeBytes":266240,"writesMustMatchReview":true},"credential":"setup_session_bearer","requirements":["authenticated_business_account","workspace_owner_or_admin","recent_totp","explicit_scope_approval"],"grantMaximumSeconds":600,"onboardingGrant":{"field":"onboarding","sessionPath":"/api/cli/setup-sessions/reviewed","credential":"delegated_management_grant","modes":["test"],"maximumSeconds":86400,"excludedScopes":["invitations.write"],"browserSessionRequired":false},"sessionMustBeRevokedOnExit":true,"applicationKeysAccepted":false},"stripeHandoff":{"path":"/api/cli/setup/stripe","focusedInput":{"flow":"setup"},"browserPath":"/cli/setup/workspace/{workspaceId}/stripe?mode={mode}","legacyEmptyBody":"workspace_settings","providerCredentials":"browser_only"},"operations":["workspace.read","application.write","destination.write","credential.write","program.write","terms.write","webhook.write","stripe.connect","readiness.read"],"routes":[{"path":"/api/cli/setup-sessions/reviewed","methods":["POST"],"authorization":"none","purpose":"request_business_choice_review"},{"path":"/api/cli/setup-sessions","methods":["POST"],"authorization":"none","purpose":"request_browser_pairing"},{"path":"/api/cli/setup-sessions","methods":["GET","DELETE"],"authorization":"setup_session_bearer","purpose":"poll_or_revoke"},{"path":"/api/cli/setup/applications","methods":["POST"],"operation":"application.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/destinations","methods":["POST","PUT"],"operation":"destination.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/programs","methods":["POST"],"operation":"program.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/terms","methods":["POST"],"operation":"terms.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/credentials","methods":["POST"],"operation":"credential.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/webhooks","methods":["POST"],"operation":"webhook.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/webhooks/secret","methods":["POST"],"operation":"webhook.write","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/stripe","methods":["POST"],"operation":"stripe.connect","authorization":"setup_session_bearer"},{"path":"/api/cli/setup/readiness","methods":["POST"],"operation":"readiness.read","authorization":"setup_session_bearer"}],"errors":[{"code":"invalid_request","status":422,"message":"Setup details are invalid.","retryable":false},{"code":"authentication_required","status":401,"message":"Sign in to continue.","retryable":false},{"code":"authorization_required","status":401,"message":"Authorize this CLI setup session.","retryable":false},{"code":"access_denied","status":403,"message":"Setup access is unavailable.","retryable":false},{"code":"live_access_required","status":403,"message":"Enable LIVE access for this workspace before continuing.","retryable":false},{"code":"mfa_required","status":403,"message":"Verify your authenticator to continue.","retryable":false},{"code":"recent_auth_required","status":403,"message":"Verify your authenticator again.","retryable":false},{"code":"setup_expired","status":410,"message":"This setup session expired. Authorize again to resume.","retryable":false},{"code":"setup_conflict","status":409,"message":"Setup details conflict with the existing request.","retryable":false},{"code":"setup_not_found","status":404,"message":"Setup request not found.","retryable":false},{"code":"challenge_mismatch","status":409,"message":"Publish the destination challenge and verify again.","retryable":false},{"code":"origin_not_public","status":422,"message":"The destination must resolve only to public addresses.","retryable":false},{"code":"verification_unavailable","status":502,"message":"The destination challenge could not be fetched. Try again.","retryable":true},{"code":"rate_limited","status":429,"message":"Too many setup requests. Try again later.","retryable":true},{"code":"service_unavailable","status":503,"message":"Setup is temporarily unavailable.","retryable":true}],"completion":{"configurationIsIntegrationVerification":false,"testEvidenceRequired":"attributed_conversion_and_commission","liveRequiresSeparateEligibility":true},"unavailable":["anonymous_provisioning","automatic_participant_consent","setup_program_activation","setup_integration_verification"]}}