{"openapi":"3.1.0","info":{"title":"SubmitForBacklinks Agent API","version":"1.1.0","summary":"Scan a public product site and submit a reviewed directory listing.","description":"A versioned API for AI agents and terminal clients. Public scanning does not require authentication. Terminal setup obtains and stores a bearer credential automatically after domain proof; manually created keys remain available for CI and teams. Sending a listing for review requires explicit attestations.","termsOfService":"https://submitforbacklinks.com/terms","contact":{"name":"SubmitForBacklinks support","url":"https://submitforbacklinks.com/support","email":"pfcteam@prepforcerts.org"}},"servers":[{"url":"https://submitforbacklinks.com","description":"SubmitForBacklinks"}],"externalDocs":{"description":"Developer documentation","url":"https://submitforbacklinks.com/docs"},"tags":[{"name":"Capabilities","description":"Machine-readable service discovery."},{"name":"Setup","description":"Terminal enrollment, domain proof, recovery, and dashboard handoff."},{"name":"Scan","description":"Extract a proposed listing draft from a public site."},{"name":"Submissions","description":"Create, revise, and retrieve owner-scoped listing submissions."},{"name":"Badges","description":"Issue and verify reciprocal-link badges for owner-scoped free listings."}],"paths":{"/api/v1/agent/capabilities":{"get":{"operationId":"getAgentCapabilities","tags":["Capabilities"],"summary":"Discover agent capabilities","description":"Returns current authentication, scope, rate-limit, submission, and endpoint capabilities.","security":[],"responses":{"200":{"description":"Current agent capabilities.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capabilities"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/setup":{"post":{"operationId":"startTerminalSetup","tags":["Setup"],"summary":"Start terminal setup","description":"Creates a short-lived domain challenge. No account, copied API key, password, or email code is required. The contact email receives submission notices but is not used as a setup challenge.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["websiteUrl","contactEmail"],"properties":{"websiteUrl":{"type":"string","format":"uri"},"contactEmail":{"type":"string","format":"email"}}}}}},"responses":{"201":{"description":"Domain challenge created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalSetup"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/setup/verify":{"post":{"operationId":"verifyTerminalSetup","tags":["Setup"],"summary":"Verify domain proof and issue the terminal credential","description":"Fetches the exact .well-known challenge from the product domain. The CLI stores the returned credential in an owner-only config file and does not print it.","security":[{"setupToken":[]}],"responses":{"200":{"description":"Domain verified and terminal credential issued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminalSetupVerified"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"410":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/account-claim":{"post":{"operationId":"createDashboardClaim","tags":["Setup"],"summary":"Create a one-use dashboard claim link","description":"Returns a 15-minute link. Opening it and signing in transfers terminal-owned submissions into that dashboard while preserving terminal access.","x-required-scopes":["submissions:read"],"security":[{"bearerAuth":[]}],"responses":{"201":{"description":"One-use dashboard claim link created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardClaim"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/scan":{"post":{"operationId":"scanWebsite","tags":["Scan"],"summary":"Scan a public product website","description":"Fetches a public HTTP(S) site and returns a proposed listing draft. The caller must review the generated content before submitting it. When a bearer token is supplied, it must include sites:scan.","x-optional-bearer-scopes":["sites:scan"],"security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanRequest"}}}},"responses":{"200":{"description":"Proposed listing draft and scan provenance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanResponse"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"When present, whole seconds before retrying this temporary conflict.","schema":{"type":"integer","minimum":1}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/submissions":{"get":{"operationId":"listAgentSubmissions","tags":["Submissions"],"summary":"List the authenticated owner's submissions","description":"Requires the submissions:read scope.","x-required-scopes":["submissions:read"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Number of owner-scoped submissions to return. Defaults to 50.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Opaque nextCursor from the previous response.","schema":{"type":"string","maxLength":512}}],"responses":{"200":{"description":"Owner-scoped submissions, newest first.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submissions","nextCursor"],"properties":{"submissions":{"type":"array","items":{"$ref":"#/components/schemas/SubmissionSummary"}},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page, or null when this is the final page."}}}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createAgentSubmission","tags":["Submissions"],"summary":"Create a draft or submit a listing for review","description":"Creates an owner-scoped free listing. Complete reviewed overrides are persisted directly; partial or absent overrides trigger a public website scan. A UUID Idempotency-Key and submissions:write are always required. Scan-derived drafts additionally require sites:scan. action=submit additionally requires submissions:submit, all nine reviewed listing fields under overrides, and all four attestations to be true.","x-required-scopes":["submissions:write"],"x-conditional-scopes":{"completeReviewedOverrides=false":["sites:scan"],"action=submit":["submissions:submit"]},"security":[{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A caller-generated UUID. Reusing the same key returns the original submission instead of creating a duplicate.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionRequest"}}}},"responses":{"201":{"description":"Draft created.","headers":{"idempotency-replayed":{"description":"true when this response replays the stored result for the supplied Idempotency-Key.","schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionDraftCreated"}}}},"202":{"description":"Submission created and queued for review.","headers":{"idempotency-replayed":{"description":"true when this response replays the stored result for the supplied Idempotency-Key.","schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionQueued"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"When present, whole seconds before retrying this temporary conflict.","schema":{"type":"integer","minimum":1}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/submissions/{id}":{"get":{"operationId":"getAgentSubmission","tags":["Submissions"],"summary":"Get one owner-scoped submission","description":"Requires the submissions:read scope.","x-required-scopes":["submissions:read"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Submission detail.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["submission"],"properties":{"submission":{"$ref":"#/components/schemas/SubmissionDetail"}}}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"updateAgentSubmission","tags":["Submissions"],"summary":"Replace the editable content in an owner-scoped submission","description":"Replaces all nine reviewed listing fields and optionally updates founder contact fields. Website, domain, tier, launch reservation, and attestations cannot be changed here. The revision returns to draft review state when required and is screened again for blocked content.","x-required-scopes":["submissions:write"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A caller-generated UUID. Preserve it when retrying the same update.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionUpdateRequest"}}}},"responses":{"200":{"description":"Submission content updated.","headers":{"idempotency-replayed":{"description":"true when this response replays the stored result for the supplied Idempotency-Key.","schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionUpdated"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/submissions/{id}/submit":{"post":{"operationId":"submitAgentDraft","tags":["Submissions"],"summary":"Submit an existing draft for review","description":"Finalizes an owner-scoped draft. The submissions:write and submissions:submit scopes, a UUID Idempotency-Key, and all four explicit attestations are required.","x-required-scopes":["submissions:write","submissions:submit"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A caller-generated UUID. Preserve it when retrying the same finalization request.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinalizeSubmissionRequest"}}}},"responses":{"202":{"description":"Draft sent for editorial review.","headers":{"idempotency-replayed":{"description":"true when this response replays the stored result for the supplied Idempotency-Key.","schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionQueued"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/submissions/{id}/badge":{"get":{"operationId":"getAgentBadge","tags":["Badges"],"summary":"Get badge and follow-link status","description":"Returns actionable badge state for an owner-scoped free listing without creating a badge.","x-required-scopes":["submissions:read"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Current badge state and installation markup.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeEnvelope"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"issueAgentBadge","tags":["Badges"],"summary":"Issue an installation badge","description":"Creates or returns the badge for an owner-scoped free listing. Issuing a badge is idempotent and does not verify installation.","x-required-scopes":["submissions:write"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A caller-generated UUID. Preserve it when retrying the same issuance request.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeIssueRequest"}}}},"responses":{"200":{"description":"Badge issued or returned.","headers":{"idempotency-replayed":{"description":"true when this response replays the stored result for the supplied Idempotency-Key.","schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeEnvelope"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/agent/submissions/{id}/badge/verify":{"post":{"operationId":"verifyAgentBadge","tags":["Badges"],"summary":"Verify badge installation","description":"Fetches an HTTPS page on the submitted product domain using SSRF-safe verification and checks for valid badge markup and follow-link attribution.","x-required-scopes":["submissions:write"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"A caller-generated UUID. Preserve it when retrying the same verification request.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeVerifyRequest"}}}},"responses":{"200":{"description":"Badge verification completed.","headers":{"idempotency-replayed":{"description":"true when this response replays the stored result for the supplied Idempotency-Key.","schema":{"type":"string","enum":["true","false"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadgeEnvelope"}}}},"400":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"WWW-Authenticate":{"description":"Bearer challenge for the Agent API.","schema":{"type":"string","const":"Bearer realm=\"SubmitForBacklinks Agent API\""}}}},"403":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"Retry-After":{"description":"Whole seconds until the specific request or operation window resets.","schema":{"type":"integer","minimum":1}}}},"500":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"The request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"sfb_live_…","description":"The CLI obtains and stores this credential automatically after domain proof. Dashboard-created scoped keys remain available for CI and teams."},"setupToken":{"type":"http","scheme":"bearer","bearerFormat":"sfb_setup_…","description":"Short-lived setup token returned by POST /api/v1/agent/setup and stored by the CLI until verification completes."}},"schemas":{"TerminalSetup":{"type":"object","additionalProperties":false,"required":["setupId","setupToken","status","expiresAt","verification"],"properties":{"setupId":{"type":"string","format":"uuid"},"setupToken":{"type":"string","pattern":"^sfb_setup_"},"status":{"type":"string","const":"PENDING"},"expiresAt":{"type":"string","format":"date-time"},"verification":{"type":"object","additionalProperties":false,"required":["method","url","content","instructions"],"properties":{"method":{"type":"string","const":"well-known-file"},"url":{"type":"string","format":"uri"},"content":{"type":"string"},"instructions":{"type":"array","items":{"type":"string"}}}}}},"TerminalSetupVerified":{"type":"object","additionalProperties":false,"required":["status","domain","apiKey","apiKeyPrefix","recovery","dashboard"],"properties":{"status":{"type":"string","const":"VERIFIED"},"domain":{"type":"string"},"apiKey":{"type":"string","pattern":"^sfb_live_"},"apiKeyPrefix":{"type":"string"},"recovery":{"type":"string"},"dashboard":{"type":"string"}}},"DashboardClaim":{"type":"object","additionalProperties":false,"required":["claimUrl","expiresAt","instructions"],"properties":{"claimUrl":{"type":"string","format":"uri"},"expiresAt":{"type":"string","format":"date-time"},"instructions":{"type":"string"}}},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","examples":["VALIDATION_ERROR"]},"message":{"type":"string","examples":["Review the highlighted fields."]},"fields":{"type":"object","description":"Machine-readable validation, scope, launch-week, recovery, or retry details.","additionalProperties":true}}}}},"Capabilities":{"type":"object","additionalProperties":false,"required":["service","apiVersion","authentication","idempotency","limits","submission","endpoints","links"],"properties":{"service":{"type":"string","const":"SubmitForBacklinks Agent API"},"apiVersion":{"type":"string","const":"v1"},"authentication":{"type":"object","additionalProperties":false,"required":["type","tokenPrefix","keyManagement","scanWithoutAuthentication","scopes","keyLifetimeDays"],"properties":{"type":{"type":"string","const":"bearer"},"tokenPrefix":{"type":"string","const":"sfb_live_"},"keyManagement":{"type":"object","additionalProperties":false,"required":["browserUrl","sessionApiPath","authentication","bearerBootstrapSupported","terminalSetupPath","terminalVerificationPath","dashboardClaimPath","emailCodeRequired","manualKeyRequired","metadataRetentionDaysAfterInvalidation"],"properties":{"browserUrl":{"type":"string","format":"uri"},"sessionApiPath":{"type":"string","const":"/api/agent-keys"},"authentication":{"type":"string","const":"same-origin-session"},"bearerBootstrapSupported":{"type":"boolean","const":true},"terminalSetupPath":{"type":"string","const":"/api/v1/agent/setup"},"terminalVerificationPath":{"type":"string","const":"/api/v1/agent/setup/verify"},"dashboardClaimPath":{"type":"string","const":"/api/v1/agent/account-claim"},"emailCodeRequired":{"type":"boolean","const":false},"manualKeyRequired":{"type":"boolean","const":false},"metadataRetentionDaysAfterInvalidation":{"type":"integer","const":30}}},"scanWithoutAuthentication":{"type":"boolean","const":true},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/AgentScope"}},"keyLifetimeDays":{"type":"integer","const":180}}},"idempotency":{"type":"object","additionalProperties":false,"required":["terminalOperationRetentionDays"],"properties":{"terminalOperationRetentionDays":{"type":"integer","const":30}}},"limits":{"type":"object","additionalProperties":false,"required":["maxRequestBytes","maxActiveKeys","anonymousScansPerDay","authenticatedScansPerDay","submissionsPerDay","submissionListDefaultLimit","submissionListMaximumLimit","requests"],"properties":{"maxRequestBytes":{"type":"integer","const":32768},"maxActiveKeys":{"type":"integer","const":5},"anonymousScansPerDay":{"type":"integer","const":3},"authenticatedScansPerDay":{"type":"integer","const":5},"submissionsPerDay":{"type":"integer","const":5},"submissionListDefaultLimit":{"type":"integer","const":50},"submissionListMaximumLimit":{"type":"integer","const":100},"requests":{"type":"object","additionalProperties":false,"required":["general","badgeVerification"],"properties":{"general":{"type":"object","additionalProperties":false,"required":["windowSeconds","perIp","perApiKey","perUser"],"properties":{"windowSeconds":{"type":"integer","const":60},"perIp":{"type":"integer","const":120},"perApiKey":{"type":"integer","const":120},"perUser":{"type":"integer","const":240}}},"badgeVerification":{"type":"object","additionalProperties":false,"required":["windowSeconds","perIp","perApiKey","perUser"],"properties":{"windowSeconds":{"type":"integer","const":3600},"perIp":{"type":"integer","const":20},"perApiKey":{"type":"integer","const":10},"perUser":{"type":"integer","const":15}}}}}}},"submission":{"type":"object","additionalProperties":false,"required":["listingTypes","actions","directPublication","moderationRequired","mediaUploadSupported","mediaRequired","mediaManagement","maximumScreenshots","requiredSubmitAttestations"],"properties":{"listingTypes":{"type":"array","items":{"type":"string","const":"FREE"}},"actions":{"type":"array","items":{"type":"string","enum":["draft","submit"]}},"directPublication":{"type":"boolean","const":false},"moderationRequired":{"type":"boolean","const":true},"mediaUploadSupported":{"type":"boolean","const":false},"mediaRequired":{"type":"boolean","const":false},"mediaManagement":{"type":"string","const":"browser-dashboard"},"maximumScreenshots":{"type":"integer","const":3},"requiredSubmitAttestations":{"type":"array","items":{"$ref":"#/components/schemas/AttestationName"}}}},"endpoints":{"type":"object","additionalProperties":false,"required":["capabilities","terminalSetup","terminalSetupVerification","dashboardClaim","scan","submissions","submission","finalizeSubmission","badge","verifyBadge"],"properties":{"capabilities":{"$ref":"#/components/schemas/EndpointDescriptor"},"terminalSetup":{"$ref":"#/components/schemas/EndpointDescriptor"},"terminalSetupVerification":{"$ref":"#/components/schemas/EndpointDescriptor"},"dashboardClaim":{"$ref":"#/components/schemas/EndpointDescriptor"},"scan":{"$ref":"#/components/schemas/EndpointDescriptor"},"submissions":{"$ref":"#/components/schemas/EndpointDescriptor"},"submission":{"$ref":"#/components/schemas/EndpointDescriptor"},"finalizeSubmission":{"$ref":"#/components/schemas/EndpointDescriptor"},"badge":{"$ref":"#/components/schemas/EndpointDescriptor"},"verifyBadge":{"$ref":"#/components/schemas/EndpointDescriptor"}}},"links":{"type":"object","additionalProperties":false,"required":["documentation","openapi","mcp"],"properties":{"documentation":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"mcp":{"type":"string","format":"uri"}}}}},"AgentScope":{"type":"string","enum":["sites:scan","submissions:read","submissions:write","submissions:submit"]},"AttestationName":{"type":"string","enum":["guidelinesAccepted","badgeRequirementAcknowledged","canRepresentProduct","reviewedGeneratedContent"]},"EndpointDescriptor":{"type":"object","additionalProperties":false,"required":["path","authentication"],"properties":{"method":{"type":"string","enum":["GET","POST","PATCH"]},"methods":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["GET","POST","PATCH"]}},"path":{"type":"string"},"authentication":{"type":"string","enum":["none","optional","bearer"]}},"oneOf":[{"required":["method"],"not":{"required":["methods"]}},{"required":["methods"],"not":{"required":["method"]}}]},"ScanRequest":{"type":"object","additionalProperties":false,"required":["websiteUrl"],"properties":{"websiteUrl":{"$ref":"#/components/schemas/PublicWebsiteInput"}}},"ListingDraft":{"type":"object","additionalProperties":false,"required":["name","tagline","shortDescription","fullDescription","primaryCategorySlug","tags","pricingModel","platformType","productType","companyName","confidence","sourceUrls","warnings"],"properties":{"name":{"type":"string","minLength":2,"maxLength":80},"tagline":{"type":"string","minLength":10,"maxLength":120},"shortDescription":{"type":"string","minLength":40,"maxLength":240},"fullDescription":{"type":"string","minLength":120,"maxLength":5000},"primaryCategorySlug":{"type":"string","enum":["ai-automation","developer-tools","productivity","design","marketing","finance","analytics-data","sales-crm","customer-support","cybersecurity-privacy","ecommerce","education-learning","health-wellness","hr-recruiting","no-code-low-code","collaboration-communication","business-operations","seo-content","legal-compliance"]},"tags":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"string","minLength":2,"maxLength":30}},"pricingModel":{"$ref":"#/components/schemas/PricingModel"},"platformType":{"$ref":"#/components/schemas/PlatformType"},"productType":{"$ref":"#/components/schemas/ProductType"},"companyName":{"type":"string","maxLength":100},"confidence":{"type":"number","minimum":0,"maximum":1},"sourceUrls":{"type":"array","minItems":1,"maxItems":3,"items":{"type":"string","format":"uri"}},"warnings":{"type":"array","maxItems":4,"items":{"type":"string","maxLength":180}}}},"ScanResponse":{"type":"object","additionalProperties":false,"required":["draft"],"properties":{"draft":{"$ref":"#/components/schemas/ListingDraft"}}},"SubmissionOverrides":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","minLength":2,"maxLength":80},"tagline":{"type":"string","minLength":10,"maxLength":120},"shortDescription":{"type":"string","minLength":40,"maxLength":240},"fullDescription":{"type":"string","minLength":120,"maxLength":5000},"primaryCategorySlug":{"type":"string","enum":["ai-automation","developer-tools","productivity","design","marketing","finance","analytics-data","sales-crm","customer-support","cybersecurity-privacy","ecommerce","education-learning","health-wellness","hr-recruiting","no-code-low-code","collaboration-communication","business-operations","seo-content","legal-compliance"]},"tags":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"string","minLength":2,"maxLength":30}},"pricingModel":{"$ref":"#/components/schemas/PricingModel"},"platformType":{"$ref":"#/components/schemas/PlatformType"},"productType":{"$ref":"#/components/schemas/ProductType"}}},"SubmissionAttestations":{"type":"object","additionalProperties":false,"required":["guidelinesAccepted","badgeRequirementAcknowledged","canRepresentProduct","reviewedGeneratedContent"],"properties":{"guidelinesAccepted":{"const":true,"description":"The owner accepts the Terms and Submission Guidelines."},"badgeRequirementAcknowledged":{"const":true,"description":"The owner understands that a free listing needs badge verification for dofollow treatment."},"canRepresentProduct":{"const":true,"description":"The caller is authorized to represent the submitted product."},"reviewedGeneratedContent":{"const":true,"description":"The caller reviewed the generated listing content for accuracy."}}},"ReviewedSubmissionOverrides":{"allOf":[{"$ref":"#/components/schemas/SubmissionOverrides"},{"type":"object","required":["name","tagline","shortDescription","fullDescription","primaryCategorySlug","tags","pricingModel","platformType","productType"]}]},"SubmissionRequest":{"type":"object","additionalProperties":false,"required":["websiteUrl","action"],"properties":{"websiteUrl":{"$ref":"#/components/schemas/PublicWebsiteInput"},"action":{"type":"string","enum":["draft","submit"]},"listingType":{"type":"string","const":"FREE","default":"FREE"},"launchWeekStart":{"type":"string","format":"date","description":"An available free launch week. If omitted, the service selects the next available week."},"founderName":{"type":"string","minLength":2,"maxLength":80},"contactEmail":{"type":"string","format":"email"},"companyName":{"type":"string","maxLength":100},"overrides":{"$ref":"#/components/schemas/SubmissionOverrides"},"attestations":{"$ref":"#/components/schemas/SubmissionAttestations"}},"allOf":[{"if":{"properties":{"action":{"const":"submit"}},"required":["action"]},"then":{"required":["attestations","overrides"],"properties":{"attestations":{"$ref":"#/components/schemas/SubmissionAttestations"},"overrides":{"$ref":"#/components/schemas/ReviewedSubmissionOverrides"}}}}]},"FinalizeSubmissionRequest":{"type":"object","additionalProperties":false,"required":["attestations"],"properties":{"launchWeekStart":{"type":"string","format":"date","description":"An available free launch week. If omitted, the service selects the next available week."},"attestations":{"$ref":"#/components/schemas/SubmissionAttestations"}}},"SubmissionUpdateRequest":{"type":"object","additionalProperties":false,"required":["overrides"],"properties":{"overrides":{"$ref":"#/components/schemas/ReviewedSubmissionOverrides"},"founderName":{"type":"string","minLength":2,"maxLength":80},"contactEmail":{"type":"string","format":"email"},"companyName":{"type":"string","maxLength":100}}},"BadgeIssueRequest":{"type":"object","additionalProperties":false,"required":["action"],"properties":{"action":{"type":"string","const":"issue"}}},"BadgeVerifyRequest":{"type":"object","additionalProperties":false,"required":["targetUrl"],"properties":{"targetUrl":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048,"description":"An HTTPS page on the submitted product domain or one of its subdomains.","examples":["https://yourproduct.com/about"]}}},"SubmissionDraftCreated":{"type":"object","additionalProperties":false,"required":["submissionId","status","action"],"properties":{"submissionId":{"type":"string","format":"uuid"},"status":{"type":"string","const":"DRAFT"},"action":{"type":"string","const":"draft"}}},"SubmissionUpdated":{"type":"object","additionalProperties":false,"required":["submissionId","status","action","updatedAt"],"properties":{"submissionId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["DRAFT","NEEDS_CHANGES"]},"action":{"type":"string","const":"update"},"updatedAt":{"type":"string","format":"date-time"}}},"SubmissionQueued":{"type":"object","additionalProperties":false,"required":["submissionId","status","action","launchWeekStart","automatedReview"],"properties":{"submissionId":{"type":"string","format":"uuid"},"status":{"type":"string","const":"SUBMITTED"},"action":{"type":"string","const":"submit"},"launchWeekStart":{"type":"string","format":"date"},"automatedReview":{"$ref":"#/components/schemas/AutomatedReview"}}},"BadgeEnvelope":{"type":"object","additionalProperties":false,"required":["badge"],"properties":{"badge":{"$ref":"#/components/schemas/Badge"}}},"Badge":{"type":"object","additionalProperties":false,"required":["issued","token","status","targetUrl","verifiedAt","followStartedAt","lastCheckedAt","expiresAt","failureReason","followActive","followExpired","followPending","followWindowDays","backlink","themes"],"properties":{"issued":{"type":"boolean","const":true},"token":{"type":"string"},"status":{"type":"string","enum":["PENDING","VERIFIED","FAILED","EXPIRED","OVERRIDDEN"]},"targetUrl":{"type":["string","null"],"format":"uri"},"verifiedAt":{"type":["string","null"],"format":"date-time"},"followStartedAt":{"type":["string","null"],"format":"date-time"},"lastCheckedAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"failureReason":{"type":["string","null"]},"followActive":{"type":"boolean"},"followExpired":{"type":"boolean"},"followPending":{"type":"boolean"},"followWindowDays":{"type":"integer","minimum":1},"backlink":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/BadgeBacklink"}]},"themes":{"type":"array","minItems":2,"maxItems":2,"items":{"$ref":"#/components/schemas/BadgeTheme"}}}},"BadgeBacklink":{"type":"object","additionalProperties":false,"required":["listingUrl","destinationUrl","linkPolicy"],"properties":{"listingUrl":{"type":"string","format":"uri"},"destinationUrl":{"type":"string","format":"uri"},"linkPolicy":{"type":"string","enum":["FOLLOW","NOFOLLOW"]}}},"BadgeTheme":{"type":"object","additionalProperties":false,"required":["id","label","imageUrl","markup"],"properties":{"id":{"type":"string","enum":["dark","light"]},"label":{"type":"string","enum":["Dark","Light"]},"imageUrl":{"type":"string","format":"uri"},"markup":{"type":"string"}}},"SubmissionSummary":{"type":"object","required":["id","name","tagline","status","updatedAt","tier","isPublished"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"tagline":{"type":"string"},"status":{"$ref":"#/components/schemas/ListingStatus"},"updatedAt":{"type":"string","format":"date-time"},"tier":{"type":"string","enum":["Free","Featured"]},"isPublished":{"type":"boolean"},"feedback":{"type":"string"}}},"SubmissionDetail":{"allOf":[{"$ref":"#/components/schemas/SubmissionSummary"},{"type":"object","required":["websiteUrl","domain","shortDescription","fullDescription","primaryCategory","pricingModel","platformType","productType","founderName","contactEmail","listingType","tags","media","reviews","automatedReviews","agreementAccepted","badgeRequirementAcknowledged","representationAttested","generatedContentReviewed","canEdit","canCheckout"],"properties":{"websiteUrl":{"type":"string","format":"uri"},"domain":{"type":"string"},"shortDescription":{"type":"string"},"fullDescription":{"type":"string"},"primaryCategory":{"type":"string"},"primaryCategoryId":{"type":"string","format":"uuid"},"primaryCategorySlug":{"type":"string"},"secondaryCategory":{"type":"string"},"secondaryCategoryId":{"type":"string","format":"uuid"},"pricingModel":{"type":"string"},"platformType":{"type":"string"},"productType":{"type":"string"},"founderName":{"type":"string"},"companyName":{"type":"string"},"contactEmail":{"type":"string","format":"email"},"twitterUrl":{"type":"string","format":"uri"},"launchDate":{"type":"string","format":"date"},"backlinkTargetUrl":{"type":"string","format":"uri"},"listingType":{"type":"string","enum":["FREE","FEATURED","EDITORIAL"]},"liveListingType":{"type":"string","enum":["FREE","FEATURED","EDITORIAL"]},"listingSlug":{"type":"string"},"launchWeekStart":{"type":"string","format":"date"},"submittedAt":{"type":"string","format":"date-time"},"agreementAccepted":{"type":"boolean"},"badgeRequirementAcknowledged":{"type":"boolean"},"representationAttested":{"type":"boolean"},"generatedContentReviewed":{"type":"boolean"},"submissionPolicyVersion":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"media":{"type":"array","items":{"$ref":"#/components/schemas/SubmissionMedia"}},"reviews":{"type":"array","items":{"$ref":"#/components/schemas/SubmissionReview"}},"automatedReviews":{"type":"array","items":{"$ref":"#/components/schemas/AutomatedReviewResult"}},"automatedReviewJob":{"$ref":"#/components/schemas/AutomatedReviewJob"},"canEdit":{"type":"boolean"},"canCheckout":{"type":"boolean"}}}]},"SubmissionMedia":{"type":"object","additionalProperties":false,"required":["id","type","publicUrl","altText"],"properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["LOGO","SCREENSHOT"]},"publicUrl":{"type":"string","format":"uri"},"altText":{"type":"string"}}},"SubmissionReview":{"type":"object","additionalProperties":false,"required":["id","action","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"action":{"type":"string","enum":["CLAIM","APPROVE","REJECT","REQUEST_CHANGES","FLAG_SPAM","FLAG_DUPLICATE","EDIT"]},"publicNote":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"AutomatedReviewResult":{"type":"object","additionalProperties":false,"required":["id","decision","riskLevel","confidence","summary","flags","checks","model","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"decision":{"type":"string","enum":["APPROVE","MANUAL_REVIEW"]},"riskLevel":{"type":"string","enum":["LOW","MEDIUM","HIGH"]},"confidence":{"type":"number","minimum":0,"maximum":1},"summary":{"type":"string"},"flags":{"type":"array","items":{"type":"string"}},"checks":{"type":"object","additionalProperties":{"type":"boolean"}},"model":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}},"AutomatedReviewJob":{"type":"object","additionalProperties":false,"required":["status","attempts"],"properties":{"status":{"type":"string","enum":["QUEUED","PROCESSING","COMPLETED","MANUAL_REVIEW"]},"attempts":{"type":"integer","minimum":0},"completedAt":{"type":"string","format":"date-time"}}},"AutomatedReview":{"type":"object","additionalProperties":false,"required":["status","queued"],"properties":{"status":{"type":"string","enum":["QUEUED","PROCESSING","COMPLETED","MANUAL_REVIEW"]},"queued":{"type":"boolean"}}},"ListingStatus":{"type":"string","enum":["Draft","Submitted","Under review","Needs changes","Approved","Featured","Rejected","Changes draft","Changes submitted","Changes under review","Changes requested"]},"PricingModel":{"type":"string","enum":["FREE","FREEMIUM","PAID","SUBSCRIPTION","USAGE_BASED","OPEN_SOURCE","ONE_TIME"]},"PlatformType":{"type":"string","enum":["WEB","IOS","ANDROID","DESKTOP","BROWSER_EXTENSION","API","MULTI_PLATFORM"]},"ProductType":{"type":"string","enum":["SAAS","AI_TOOL","DEVELOPER_TOOL","BROWSER_EXTENSION","MOBILE_APP","DESKTOP_APP","API","TEMPLATE","MARKETPLACE","OPEN_SOURCE_TOOL"]},"PublicWebsiteInput":{"type":"string","maxLength":2048,"description":"A public HTTP(S) product website. A bare domain is accepted and normalized to HTTPS.","examples":["https://yourproduct.com","yourproduct.com"]}}}}