{"openapi":"3.1.0","info":{"title":"Mintfluence API","version":"1.0.0","description":"REST API for the Mintfluence AI-influencer launchpad: wallet auth, AI provider connections (bring your own account), characters, studio generation, publishing, automation, spending policy, and non-custodial Solana token launches. The MCP endpoint and OAuth endpoints are documented separately in docs/mcp-and-oauth.md."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"solanaOwnerKey":{"type":"http","scheme":"bearer","description":"Dedicated mfa_ owner-panel key; not a wallet session or Solana signing key."},"session":{"type":"http","scheme":"bearer","description":"Session token from /v1/auth/verify (or the mf_session cookie)."}},"schemas":{"WalletChallenge":{"type":"object","properties":{"nonce":{"type":"string"},"message":{"type":"string"},"expiresAt":{"type":"string"},"domain":{"type":"string"},"chainId":{"type":"string","description":"Present for chain-bound ownership proofs; omitted for network-neutral account sign-in."}},"required":["nonce","message","expiresAt","domain"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"VALIDATION_ERROR"},"message":{"type":"string"},"details":{"type":"object","additionalProperties":{}},"requestId":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"Session":{"type":"object","properties":{"token":{"type":"string"},"expiresAt":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"walletAddress":{"type":"string"},"isAdmin":{"type":"boolean"}},"required":["id","walletAddress","isAdmin"]}},"required":["token","expiresAt","user"]},"Me":{"type":"object","properties":{"id":{"type":"string"},"walletAddress":{"type":"string"},"isAdmin":{"type":"boolean"},"killSwitch":{"type":"boolean"}},"required":["id","walletAddress","isAdmin","killSwitch"]},"WalletProof":{"type":"object","properties":{"proofId":{"type":"string"},"address":{"type":"string"}},"required":["proofId","address"]},"ProviderConnection":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"providerName":{"type":"string"},"providerLabel":{"type":"string"},"isMock":{"type":"boolean"},"label":{"type":["string","null"]},"authType":{"type":"string"},"config":{"type":"object","additionalProperties":{}},"status":{"type":"string","enum":["active","invalid","revoked","out_of_credit","disconnected"]},"statusReason":{"type":["string","null"]},"credentialHint":{"type":"string"},"lastValidatedAt":{"type":["string","null"]},"lastErrorCode":{"type":["string","null"]},"observedSpendUsd":{"type":"string"},"balance":{"type":"object","properties":{"status":{"type":"string","enum":["known","unknown"]},"usd":{"type":"string"},"kind":{"type":"string"},"usageUsd":{"type":"string"},"note":{"type":"string"},"checkedAt":{"type":"string"}},"required":["status"]},"spendingLimitAdvice":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","provider","providerName","providerLabel","isMock","label","authType","config","status","statusReason","credentialHint","lastValidatedAt","lastErrorCode","observedSpendUsd","balance","spendingLimitAdvice","createdAt"]},"ModelCards":{"type":"object","properties":{"cards":{"type":"array","items":{"type":"object","additionalProperties":{}}},"trends":{"type":"array","items":{"type":"object","additionalProperties":{}}},"billingModes":{"type":"object","properties":{"byok":{"type":"boolean"},"platformCredits":{"type":"boolean"},"aiTreasury":{"type":"boolean"}},"required":["byok","platformCredits","aiTreasury"]}},"required":["cards","trends","billingModes"]},"RoutingPreferences":{"type":"object","properties":{"maxCostUsd":{"type":["string","null"]},"allow":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string"}},"required":["provider","modelId"]}},"updatedAt":{"type":["string","null"]}},"required":["maxCostUsd","allow","updatedAt"]},"ProviderInfo":{"type":"object","properties":{"id":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"displayName":{"type":"string"},"kind":{"type":"string","enum":["direct","aggregator","custom"]},"connect":{"type":"string","enum":["oauth_pkce","api_key"]},"oauthStartPath":{"type":["string","null"]},"credentialFields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"label":{"type":"string"},"help":{"type":["string","null"]}},"required":["name","label","help"]}},"keyUrl":{"type":["string","null"]},"docsUrl":{"type":"string"},"spendingLimitAdvice":{"type":"string"},"multipleConnections":{"type":"boolean"},"dynamicModels":{"type":"boolean"},"llm":{"type":"boolean"},"billing":{"type":"object","properties":{"byok":{"type":"boolean","enum":[true]},"platformCredits":{"type":"boolean"}},"required":["byok","platformCredits"]},"capabilities":{"type":"array","items":{"type":"string"}},"models":{"type":"integer"},"families":{"type":"array","items":{"type":"string"}},"maxDurationSec":{"type":["number","null"]},"nativeAudio":{"type":"boolean"}},"required":["id","displayName","kind","connect","oauthStartPath","credentialFields","keyUrl","docsUrl","spendingLimitAdvice","multipleConnections","dynamicModels","llm","billing","capabilities","models","families","maxDurationSec","nativeAudio"]},"Model":{"type":"object","properties":{"key":{"type":"string"},"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string"},"capability":{"type":"string"},"displayName":{"type":"string"},"verification":{"type":"string","enum":["documented","generic_schema","shape_unverified"]},"enabled":{"type":"boolean"},"verifiedAt":{"type":"string"},"docs":{"type":"string"},"async":{"type":"boolean"},"costReporting":{"type":"string"},"pricing":{"type":"object","properties":{"unit":{"type":"string"},"usd":{"type":"number"},"source":{"type":"string"},"note":{"type":["string","null"]}},"required":["unit","usd","source","note"]},"limits":{"type":"object","additionalProperties":{}},"accepts":{"type":"array","items":{"type":"string"}},"required":{"type":"array","items":{"type":"string"}},"family":{"type":["string","null"]},"vendor":{"type":["string","null"]},"nativeAudio":{"type":"boolean"},"maxDurationSec":{"type":["number","null"]},"dynamic":{"type":"boolean"}},"required":["key","provider","modelId","capability","displayName","verification","enabled","verifiedAt","docs","async","costReporting","pricing","limits","accepts","required","family","vendor","nativeAudio","maxDurationSec","dynamic"]},"Media":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["image","video","audio","subtitle","other"]},"source":{"type":"string"},"purpose":{"type":["string","null"]},"mimeType":{"type":"string"},"sizeBytes":{"type":"number"},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"durationMs":{"type":["number","null"]},"fps":{"type":["number","null"]},"hasAudio":{"type":["boolean","null"]},"characterId":{"type":["string","null"]},"identityVersionId":{"type":["string","null"]},"aiGenerated":{"type":"boolean"},"isMock":{"type":"boolean"},"providerLabel":{"type":["string","null"]},"createdAt":{"type":"string"},"verification":{"type":"object","additionalProperties":{}},"urls":{"type":"object","properties":{"previewUrl":{"type":"string"},"downloadUrl":{"type":"string"},"thumbnailUrl":{"type":["string","null"]},"expiresAt":{"type":"string"}},"required":["previewUrl","downloadUrl","thumbnailUrl","expiresAt"]}},"required":["id","kind","source","purpose","mimeType","sizeBytes","width","height","durationMs","fps","hasAudio","characterId","identityVersionId","aiGenerated","isMock","providerLabel","createdAt","verification"]},"LookCatalog":{"type":"object","properties":{"version":{"type":"string"},"looks":{"type":"array","items":{"$ref":"#/components/schemas/LookPreset"}},"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"}},"required":["id","label","count"]}},"characterTypes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"]},"label":{"type":"string"},"description":{"type":"string"},"humanoid":{"type":"boolean"}},"required":["id","label","description","humanoid"]}},"intensities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["average","bold","extreme"]},"label":{"type":"string"},"description":{"type":"string"},"default":{"type":"boolean"}},"required":["id","label","description","default"]}},"genders":{"type":"array","items":{"type":"string"}},"ageRanges":{"type":"array","items":{"type":"string","enum":["18-24","25-34","35-44","45-54","55-64","65+"]}}},"required":["version","looks","categories","characterTypes","intensities","genders","ageRanges"]},"LookPreset":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"integer"},"name":{"type":"string"},"category":{"type":"string","enum":["street","glam","sporty","business","artsy","music","retro","outdoors","lifestyle","gaming","fantasy","sci_fi"]},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"]},"tagline":{"type":"string"},"appearance":{"type":"object","properties":{"summary":{"type":"string"},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"]},"gender":{"type":"string"},"ageRange":{"type":"string","enum":["18-24","25-34","35-44","45-54","55-64","65+"]},"bodyType":{"type":"string"},"skinTone":{"type":"string"},"faceDetails":{"type":"string"},"hair":{"type":"string"},"eyeColor":{"type":"string"},"distinctiveFeatures":{"type":"string"}},"required":["summary","characterType","gender","ageRange","bodyType","skinTone","faceDetails","hair","eyeColor","distinctiveFeatures"]},"visualStyle":{"type":"string"},"defaultWardrobe":{"type":"array","items":{"type":"string"}},"scenePreferences":{"type":"array","items":{"type":"string"}},"suggested":{"type":"object","properties":{"niche":{"type":"string"},"tone":{"type":"string"}},"required":["niche","tone"]}},"required":["id","version","name","category","characterType","tagline","appearance","visualStyle","defaultWardrobe","scenePreferences","suggested"]},"Character":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"},"niche":{"type":"string"},"status":{"type":"string","enum":["draft","approved","archived"]},"lifecycle":{"type":"string","enum":["draft","ready","active","paused"],"description":"draft (no approved look) → ready (approved, page off) → active (public page live) ⇄ paused."},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"]},"intensity":{"type":"string","enum":["average","bold","extreme"]},"lookId":{"type":["string","null"]},"contentLanguage":{"type":"string"},"currentIdentityVersionId":{"type":["string","null"]},"headshot":{},"isPublic":{"type":"boolean"},"aiDisclosure":{"type":"string"},"createdAt":{"type":"string"},"look":{"type":["object","null"],"properties":{"id":{"type":"string"},"version":{"type":["number","null"]},"name":{"type":["string","null"]}},"required":["id","version","name"],"description":"Detail only: the preset look the influencer started from."},"lifecycleDetails":{"$ref":"#/components/schemas/CharacterLifecycleDetails"},"candidateQuota":{"$ref":"#/components/schemas/CandidateQuota"},"voiceDescription":{"type":"string","description":"Detail only: owner-written one-line voice description shown on the public profile (\"\" when unset)."},"publicActivityLog":{"type":"boolean","description":"Detail only: whether the public transparency log is on (off by default)."}},"required":["id","name","username","niche","status","lifecycle","characterType","intensity","lookId","contentLanguage","currentIdentityVersionId","isPublic","aiDisclosure","createdAt"],"additionalProperties":{}},"CharacterLifecycleDetails":{"type":"object","properties":{"lifecycle":{"type":"string","enum":["draft","ready","active","paused"]},"isPublic":{"type":"boolean"},"activatedAt":{"type":["string","null"]},"firstActivatedAt":{"type":["string","null"]},"pausedAt":{"type":["string","null"]},"deactivatedAt":{"type":["string","null"]},"agent":{"type":"object","properties":{"mode":{"type":"string","enum":["off","approval_only","paused","frozen"]},"aiOperationEnabled":{"type":"boolean"},"autoPublishEnabled":{"type":"boolean"},"paused":{"type":"boolean"},"frozen":{"type":"boolean"}},"required":["mode","aiOperationEnabled","autoPublishEnabled","paused","frozen"]},"aiPostingEnabled":{"type":"boolean","description":"Retained for compatibility; always false because direct social posting is removed."},"tokenStatus":{"$ref":"#/components/schemas/CharacterTokenStatus"}},"required":["lifecycle","isPublic","activatedAt","firstActivatedAt","pausedAt","deactivatedAt","agent","aiPostingEnabled","tokenStatus"],"description":"Detail only."},"CharacterTokenStatus":{"type":"object","properties":{"stage":{"type":"string","enum":["none","launch_draft","launch_in_progress","launch_failed","launched","linked"]},"token":{"type":["object","null"],"properties":{"id":{"type":"string"},"origin":{"type":"string","enum":["launch","link"]},"cluster":{"type":"string"},"mint":{"type":"string"},"status":{"type":"string"},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]},"graduated":{"type":"boolean"},"isMock":{"type":"boolean"},"providerLabel":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","origin","cluster","mint","status","name","symbol","graduated","isMock","providerLabel","createdAt"]},"launch":{"type":["object","null"],"properties":{"id":{"type":"string"},"state":{"type":"string"},"symbol":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","state","symbol","updatedAt"]}},"required":["stage","token","launch"],"description":"Read-only summary of a launched or linked token (identity and state only; no market data)."},"CandidateQuota":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"period":{"type":"string","enum":["utc_day"]},"resetsAt":{"type":"string"}},"required":["used","limit","remaining","period","resetsAt"],"description":"Detail only: the caller’s remaining candidate looks today."},"CharacterLifecycleResult":{"allOf":[{"$ref":"#/components/schemas/CharacterLifecycleDetails"},{"type":"object","properties":{"characterId":{"type":"string"},"action":{"type":"string","enum":["activate","pause","resume","deactivate"]},"changed":{"type":"boolean","description":"False when the influencer was already in the target state (idempotent; no new event)."},"previousLifecycle":{"type":"string","enum":["draft","ready","active","paused"]}},"required":["characterId","action","changed","previousLifecycle"]}]},"AutoRouting":{"type":"object","properties":{"maxCostUsd":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"string","maxLength":20}],"description":"Price cap per request in USD; only models quoted at or under it are candidates."},"allow":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string","maxLength":200}},"required":["provider","modelId"]},"maxItems":50,"description":"Only these curated models are considered."}},"required":["maxCostUsd"],"description":"Opt-in auto router (provider \"auto\"): candidates are models on your connected providers (or the billing mode’s coverage) that accept the parameters as sent and are quoted at or under maxCostUsd, cheapest first."},"GenerationParams":{"type":"object","properties":{"prompt":{"type":"string","maxLength":4000},"negativePrompt":{"type":"string","maxLength":2000},"aspectRatio":{"type":"string","maxLength":10},"resolution":{"type":"string","maxLength":10},"durationSec":{"type":"number","exclusiveMinimum":0,"description":"Seconds. No Mintfluence limit: the documented range of the chosen model decides (out-of-range values are rejected with the allowed range)."},"numImages":{"type":"integer","minimum":1,"maximum":6},"seed":{"type":"integer"},"generateAudio":{"type":"boolean"},"outputFormat":{"type":"string","enum":["png","jpeg","webp"]},"options":{"type":"object","additionalProperties":{"type":"string","maxLength":120},"description":"Model-specific options the chosen model declares (for example a camera-movement preset). Unknown names or values are rejected, never dropped."},"text":{"type":"string","maxLength":10000},"voiceId":{"type":"string","maxLength":120},"language":{"type":"string","maxLength":16},"speed":{"type":"number","minimum":0.25,"maximum":4},"orientation":{"type":"string","enum":["image","video"]},"keepOriginalSound":{"type":"boolean"},"upscaleFactor":{"type":"number","minimum":1,"maximum":4}},"default":{},"additionalProperties":false},"GenerationInputs":{"type":"object","properties":{"image":{"type":"string","format":"uuid"},"endImage":{"type":"string","format":"uuid"},"referenceImages":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":16},"video":{"type":"string","format":"uuid"},"motionVideo":{"type":"string","format":"uuid"},"audio":{"type":"string","format":"uuid"}},"additionalProperties":false},"GenerationJob":{"type":"object","properties":{"id":{"type":"string"},"state":{"type":"string","enum":["validating","reserving","submitting","processing","completed","failed","cancelled","outcome_unknown"]},"kind":{"type":"string"},"capability":{"type":"string"},"provider":{"type":"string"},"providerLabel":{"type":"string"},"modelId":{"type":"string"},"isMock":{"type":"boolean"},"estimatedCostUsd":{"type":["string","null"]},"actualCostUsd":{"type":["string","null"]},"costStatus":{"type":"string"},"awaitingApproval":{"type":"boolean"},"results":{"type":"array","items":{}}},"required":["id","state","kind","capability","provider","providerLabel","modelId","isMock","estimatedCostUsd","actualCostUsd","costStatus","awaitingApproval","results"],"additionalProperties":{}},"PolicyDecision":{"type":"object","properties":{"decision":{"type":"string","enum":["approved","denied","pending"]},"reasons":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"decisionId":{"type":["string","null"],"format":"uuid"},"approvalId":{"type":["string","null"],"format":"uuid"},"estimateUsd":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"headroom":{"type":"object","properties":{"dailyRemainingUsd":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"monthlyRemainingUsd":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."}}}},"required":["decision","reasons","decisionId","approvalId","estimateUsd","headroom"]},"CreditAccount":{"type":"object","properties":{"enabled":{"type":"boolean"},"balanceUsd":{"type":"string"},"heldUsd":{"type":"string"},"availableUsd":{"type":"string"},"generationsUsed30d":{"type":"integer"},"generationsLimit30d":{"type":"integer"},"maxJobUsd":{"type":"string"},"coveredProviders":{"type":"array","items":{"type":"string"}},"notes":{"type":"array","items":{"type":"string"}}},"required":["enabled","balanceUsd","heldUsd","availableUsd","generationsUsed30d","generationsLimit30d","maxJobUsd","coveredProviders","notes"]},"CreditLedgerEntry":{"type":"object","properties":{"id":{"type":"integer"},"kind":{"type":"string"},"amountUsd":{"type":"string"},"jobId":{"type":["string","null"]},"provider":{"type":["string","null"]},"funding":{"type":["string","null"]},"fundingRef":{"type":["string","null"]},"note":{"type":["string","null"]},"createdAt":{"type":"string"}},"required":["id","kind","amountUsd","jobId","provider","funding","fundingRef","note","createdAt"]},"CustomModel":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"provider":{"type":"string","enum":["custom_http"]},"connectionId":{"type":"string"},"connection":{"type":["object","null"],"properties":{"id":{"type":"string"},"label":{"type":["string","null"]},"status":{"type":"string"},"baseUrl":{"type":["string","null"]},"isMock":{"type":"boolean"}},"required":["id","label","status","baseUrl","isMock"]},"displayName":{"type":"string"},"capability":{"type":"string","enum":["image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"async":{"type":"boolean"},"request":{"$ref":"#/components/schemas/CustomModelRequest"},"response":{"$ref":"#/components/schemas/CustomModelResponse"},"limits":{"$ref":"#/components/schemas/CustomModelLimits"},"required":{"type":"array","items":{"type":"string"}},"accepts":{"type":"array","items":{"type":"string"}},"maxDurationSec":{"type":["number","null"]},"pricing":{"type":["object","null"],"properties":{"unit":{"type":"string"},"usd":{"type":"string"},"source":{"type":"string","enum":["estimate"]},"note":{"type":"string"}},"required":["unit","usd","source","note"]},"pricingNote":{"type":"string"},"usage":{"type":"object","properties":{"provider":{"type":"string","enum":["custom_http"]},"modelId":{"type":"string"},"capability":{"type":"string"}},"required":["provider","modelId","capability"],"description":"Pass these to POST /v1/generations to run the model."},"archived":{"type":"boolean"},"archivedAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","key","provider","connectionId","connection","displayName","capability","async","request","response","limits","required","accepts","maxDurationSec","pricing","pricingNote","usage","archived","archivedAt","createdAt","updatedAt"]},"CustomModelRequest":{"type":"object","properties":{"method":{"type":"string","enum":["POST","GET"],"default":"POST"},"path":{"type":"string","minLength":1,"maxLength":300,"description":"Relative to the connection base URL, e.g. \"/v1/generate\". Scalar placeholders allowed: \"/v1/voices/{{voiceId}}\"."},"body":{"type":["object","null"],"additionalProperties":{},"description":"JSON body template. A string that is exactly \"{{param}}\" is replaced by the typed value; absent params are removed."},"timeoutSec":{"type":"integer","minimum":1,"maximum":120,"description":"Request timeout (default 60 s)."}},"required":["path"],"additionalProperties":false},"CustomModelResponse":{"type":"object","properties":{"mode":{"type":"string","enum":["sync","async"]},"outputUrlPaths":{"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"minItems":1,"maxItems":5,"description":"JSON paths to output URLs, e.g. [\"data.outputs[0].url\"] or [\"images[*].url\"]."},"outputBase64Path":{"type":"string","minLength":1,"maxLength":200,"description":"JSON path to base64 output data (alternative to URLs)."},"outputMime":{"type":"string","maxLength":60},"outputTextPath":{"type":"string","minLength":1,"maxLength":200,"description":"audio.stt only: JSON path to the transcript text."},"outputAuth":{"type":"boolean","description":"Download output URLs with your key. Only honored when the output URL has the same origin as the base URL."},"jobIdPath":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST"],"default":"GET"},"path":{"type":"string","minLength":1,"maxLength":300,"description":"Status request path with the provider job id, e.g. \"/v1/tasks/{{id}}\"."},"body":{"type":["object","null"],"additionalProperties":{}}},"required":["path"],"additionalProperties":false},"statusPath":{"type":"string","minLength":1,"maxLength":200},"completedValues":{"type":"array","items":{"type":"string","minLength":1,"maxLength":60},"minItems":1,"maxItems":10},"failedValues":{"type":"array","items":{"type":"string","minLength":1,"maxLength":60},"maxItems":10},"errorMessagePath":{"type":"string","minLength":1,"maxLength":200},"cancel":{"type":"object","properties":{"method":{"type":"string","enum":["POST","DELETE"],"default":"POST"},"path":{"type":"string","minLength":1,"maxLength":300}},"required":["path"],"additionalProperties":false}},"required":["mode"],"additionalProperties":false},"CustomModelLimits":{"type":"object","properties":{"durations":{"anyOf":[{"type":"array","items":{"type":"number","exclusiveMinimum":0,"maximum":3600},"minItems":1,"maxItems":20},{"type":"object","properties":{"min":{"type":"number","exclusiveMinimum":0,"maximum":3600},"max":{"type":"number","exclusiveMinimum":0,"maximum":3600}},"required":["min","max"],"additionalProperties":false}],"description":"Allowed durations in seconds (list or {min,max}); at most 20 s."},"aspectRatios":{"type":"array","items":{"type":"string","minLength":1,"maxLength":10},"minItems":1,"maxItems":20},"resolutions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":10},"minItems":1,"maxItems":20},"numImages":{"type":"object","properties":{"min":{"type":"integer","minimum":1,"maximum":6},"max":{"type":"integer","minimum":1,"maximum":6}},"required":["min","max"],"additionalProperties":false},"maxReferenceImages":{"type":"integer","minimum":0,"maximum":16},"textMaxChars":{"type":"integer","minimum":1,"maximum":10000}},"additionalProperties":false},"CustomModelPricingInput":{"type":["object","null"],"properties":{"unit":{"type":"string","enum":["second","video","image","request"]},"usd":{"anyOf":[{"type":"number"},{"type":"string","maxLength":20}],"description":"Price per unit in USD, e.g. 0.05 or \"0.05\" (up to 6 decimals)."}},"required":["unit","usd"],"additionalProperties":false},"CustomModelPreview":{"type":"object","properties":{"method":{"type":"string"},"url":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"body":{},"statusRequest":{"type":["object","null"],"properties":{"method":{"type":"string"},"urlTemplate":{"type":"string"},"bodyTemplate":{}},"required":["method","urlTemplate"]},"estimateUsd":{"type":["string","null"]},"pricingNote":{"type":"string"},"accepts":{"type":"array","items":{"type":"string"}},"required":{"type":"array","items":{"type":"string"}},"connection":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":["string","null"]},"isMock":{"type":"boolean"}},"required":["id","label","isMock"]},"note":{"type":"string"}},"required":["method","url","headers","statusRequest","estimateUsd","pricingNote","accepts","required","connection","note"]},"SpendingPolicy":{"type":"object","properties":{"dailyLimitUsd":{"type":"number"},"monthlyLimitUsd":{"type":"number"},"maxGenerationCostUsd":{"type":"number"},"allowedServices":{"type":"array","items":{"type":"string","enum":["llm","image","video","voice","publish"]}},"allowedModels":{"type":"array","items":{"type":"string"}},"requireApprovalAboveUsd":{"type":"number"},"killSwitch":{"type":"boolean"},"budgetMode":{"type":"string","enum":["manual","treasury_income"],"description":"Present when not manual. treasury_income (AI treasury on): the daily limit follows the trailing 7-day treasury income, never above dailyLimitUsd."},"updatedAt":{"type":"string"}},"required":["dailyLimitUsd","monthlyLimitUsd","maxGenerationCostUsd","allowedServices","allowedModels","requireApprovalAboveUsd","killSwitch","updatedAt"]},"Approval":{"type":"object","properties":{"id":{"type":"string"},"characterId":{"type":["string","null"]},"kind":{"type":"string"},"title":{"type":"string"},"subject":{},"refType":{"type":["string","null"]},"refId":{"type":["string","null"]},"status":{"type":"string"},"expiresAt":{"type":"string"},"createdAt":{"type":"string"},"decidedAt":{"type":["string","null"]},"note":{"type":["string","null"]}},"required":["id","characterId","kind","title","refType","refId","status","expiresAt","createdAt","decidedAt","note"]},"ActivityEvent":{"type":"object","properties":{"id":{"type":"number"},"type":{"type":"string"},"characterId":{"type":["string","null"]},"data":{"type":"object","additionalProperties":{}},"visibility":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","type","characterId","data","visibility","createdAt"]},"SolanaConnectionSaveResult":{"type":"object","properties":{},"additionalProperties":{}},"SolanaConnectionInput":{"type":"object","properties":{"cluster":{"type":"string","enum":["mainnet-beta","devnet","localnet"]},"rpcUrl":{"type":"string","minLength":8,"maxLength":500,"description":"RPC URL; API keys only via ${env:SOLANA_RPC_*} placeholders."},"fallbackUrls":{"type":"array","items":{"type":"string","minLength":8,"maxLength":500},"maxItems":5},"wsUrl":{"type":["string","null"],"maxLength":500},"commitment":{"type":"string","enum":["processed","confirmed","finalized"]},"platformTokenMint":{"type":["string","null"],"minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"platformFeeRecipient":{"type":["string","null"],"minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"buybackWallet":{"type":["string","null"],"minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"note":{"type":"string","maxLength":500},"dryRun":{"type":"boolean"}},"required":["cluster","rpcUrl"],"additionalProperties":false},"SolanaConnectionOverview":{"type":"object","properties":{},"additionalProperties":{}},"SolanaConnectionHistory":{"type":"object","properties":{"items":{"type":"array","items":{}}},"required":["items"]},"SolanaConnectionConfirmResult":{"type":"object","properties":{},"additionalProperties":{}},"SolanaConnectionCancelResult":{"type":"object","properties":{},"additionalProperties":{}},"PlatformLedger":{"type":"object","properties":{},"additionalProperties":{}},"SolanaStatus":{"type":"object","properties":{},"additionalProperties":{}},"SymbolAvailability":{"type":"object","properties":{"input":{"type":"string"},"symbol":{"type":"string"},"valid":{"type":"boolean"},"formatIssues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["empty","too_long","whitespace"]},"message":{"type":"string"}},"required":["code","message"]}},"reserved":{"type":"boolean"},"takenByMintfluence":{"type":"boolean"},"available":{"type":"boolean"},"reason":{"type":["string","null"],"enum":["invalid","reserved","rejected","taken",null]},"message":{"type":["string","null"]},"suggestions":{"type":"array","items":{"type":"string"}},"cluster":{"type":["string","null"],"enum":["mainnet-beta","devnet","localnet",null]},"note":{"type":"string"}},"required":["input","symbol","valid","formatIssues","reserved","takenByMintfluence","available","reason","message","suggestions","cluster","note"]},"TokenLaunch":{"type":"object","properties":{},"additionalProperties":{}},"TokenDraftInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":64},"symbol":{"type":"string","minLength":1,"maxLength":32},"description":{"type":"string","maxLength":1000},"imageMediaId":{"type":"string","format":"uuid"},"links":{"type":"object","properties":{"website":{"type":"string","maxLength":200},"twitter":{"type":"string","maxLength":200},"telegram":{"type":"string","maxLength":200}},"additionalProperties":false},"feePreset":{"type":"string","enum":["creator","creator_ai_budget","creator_ai_treasury"]},"creatorWallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"aiBudgetWallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"aiBudgetSplit":{"type":"object","properties":{"creatorBps":{"type":"integer"},"aiBudgetBps":{"type":"integer"}},"required":["creatorBps","aiBudgetBps"],"additionalProperties":false},"aiTreasurySplit":{"type":"object","properties":{"creatorBps":{"type":"integer"},"aiTreasuryBps":{"type":"integer"}},"required":["creatorBps","aiTreasuryBps"],"additionalProperties":false,"description":"creator_ai_treasury only (AI treasury enabled): shares of the 70% (default 3500/3500). The AI share always goes to the platform’s AI treasury wallet."},"initialBuy":{"type":["object","null"],"properties":{"lamports":{"type":"string","pattern":"^\\d{1,20}$","description":"Integer lamports as a decimal string."},"slippageBps":{"type":"integer","minimum":1,"maximum":5000}},"required":["lamports","slippageBps"],"additionalProperties":false}},"required":["characterId","name","symbol","imageMediaId","feePreset","creatorWallet"],"additionalProperties":false},"TokenLaunchPage":{"type":"object","properties":{"items":{"type":"array","items":{}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"TokenLaunchDetail":{"type":"object","properties":{},"additionalProperties":{}},"TokenLaunchUpdated":{"type":"object","properties":{},"additionalProperties":{}},"TokenDraftPatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":64},"symbol":{"type":"string","minLength":1,"maxLength":32},"description":{"type":"string","maxLength":1000},"imageMediaId":{"type":"string","format":"uuid"},"links":{"type":"object","properties":{"website":{"type":"string","maxLength":200},"twitter":{"type":"string","maxLength":200},"telegram":{"type":"string","maxLength":200}},"additionalProperties":false},"feePreset":{"type":"string","enum":["creator","creator_ai_budget","creator_ai_treasury"]},"creatorWallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"aiBudgetWallet":{"type":["string","null"],"minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"aiBudgetSplit":{"type":"object","properties":{"creatorBps":{"type":"integer"},"aiBudgetBps":{"type":"integer"}},"required":["creatorBps","aiBudgetBps"],"additionalProperties":false},"aiTreasurySplit":{"type":"object","properties":{"creatorBps":{"type":"integer"},"aiTreasuryBps":{"type":"integer"}},"required":["creatorBps","aiTreasuryBps"],"additionalProperties":false,"description":"creator_ai_treasury only (AI treasury enabled): shares of the 70% (default 3500/3500). The AI share always goes to the platform’s AI treasury wallet."},"initialBuy":{"type":["object","null"],"properties":{"lamports":{"type":"string","pattern":"^\\d{1,20}$","description":"Integer lamports as a decimal string."},"slippageBps":{"type":"integer","minimum":1,"maximum":5000}},"required":["lamports","slippageBps"],"additionalProperties":false}},"additionalProperties":false},"LaunchCostEstimate":{"type":"object","properties":{},"additionalProperties":{}},"PreparedLaunch":{"type":"object","properties":{},"additionalProperties":{}},"TokenLaunchSubmitted":{"type":"object","properties":{},"additionalProperties":{}},"TokenLaunchSignatures":{"type":"object","properties":{},"additionalProperties":{}},"TokenLaunchResumed":{"type":"object","properties":{},"additionalProperties":{}},"TokenLaunchCancelled":{"type":"object","properties":{},"additionalProperties":{}},"LinkedToken":{"type":"object","properties":{},"additionalProperties":{}},"TokenLinkInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"proof":{"type":"object","properties":{"nonce":{"type":"string","minLength":8,"maxLength":64},"signature":{"type":"string","minLength":64,"maxLength":200},"signedMessage":{"type":"string","maxLength":8000}},"required":["nonce","signature"],"additionalProperties":false,"description":"Signed token_creator wallet-proof challenge (issued with this mint) from the creator wallet."},"proofId":{"type":"string","format":"uuid","description":"Alternatively, a token_creator proof already verified through /v1/wallet-proofs/verify (single use, 30 minutes)."},"feePreset":{"type":"string","enum":["creator","creator_ai_budget","creator_ai_treasury"]},"aiBudgetWallet":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"aiBudgetSplit":{"type":"object","properties":{"creatorBps":{"type":"integer"},"aiBudgetBps":{"type":"integer"}},"required":["creatorBps","aiBudgetBps"],"additionalProperties":false},"aiTreasurySplit":{"type":"object","properties":{"creatorBps":{"type":"integer"},"aiTreasuryBps":{"type":"integer"}},"required":["creatorBps","aiTreasuryBps"],"additionalProperties":false,"description":"creator_ai_treasury only (AI treasury enabled): shares of the 70% (default 3500/3500). The AI share always goes to the platform’s AI treasury wallet."}},"required":["characterId","mint"],"additionalProperties":false},"SolanaTokenPage":{"type":"object","properties":{"items":{"type":"array","items":{}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"SolanaToken":{"type":"object","properties":{},"additionalProperties":{}},"SolanaTokenVerified":{"type":"object","properties":{},"additionalProperties":{}},"LinkFeeSharingPrepared":{"type":"object","properties":{},"additionalProperties":{}},"SolanaTokenFeeSplitLocked":{"type":"object","properties":{},"additionalProperties":{}},"LinkFeeSharingSubmitted":{"type":"object","properties":{},"additionalProperties":{}},"LinkFeeSharingSignature":{"type":"object","properties":{},"additionalProperties":{}},"TokenFees":{"type":"object","properties":{},"additionalProperties":{}},"TokenFeesCollectable":{"type":"object","properties":{},"additionalProperties":{}},"FeeCollectionPrepared":{"type":"object","properties":{},"additionalProperties":{}},"FeeCollectionSubmitted":{"type":"object","properties":{},"additionalProperties":{}},"FeeCollection":{"type":"object","properties":{},"additionalProperties":{}},"FeeCollectionList":{"type":"object","properties":{},"additionalProperties":{}},"PublicTokenPage":{"type":"object","properties":{"items":{"type":"array","items":{}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"PublicToken":{"type":"object","properties":{},"additionalProperties":{}},"StudioTemplate":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"},"name":{"type":"string"},"description":{"type":"string"},"pipeline":{"type":"string"},"available":{"type":"boolean"},"reason":{"type":["string","null"]},"capabilities":{"type":"array","items":{"type":"object","additionalProperties":{}}},"alternatives":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["id","version","name","description","pipeline","available","reason","capabilities","alternatives"],"additionalProperties":{}},"StylePresetList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/StylePreset"}},"overlays":{"type":"object","properties":{"positions":{"type":"array","items":{"type":"string"}},"styles":{"type":"array","items":{"type":"string"}},"animations":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","additionalProperties":{"type":"number"}}},"required":["positions","styles","animations","limits"]},"thumbnailPresets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"},"aspectRatio":{"type":"string"},"label":{"type":"string"}},"required":["id","width","height","aspectRatio","label"]}}},"required":["items","overlays","thumbnailPresets"]},"StylePreset":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"summary":{"type":"string"},"directives":{"type":"object","properties":{"lighting":{"type":"string"},"color":{"type":"string"},"camera":{"type":"string"}},"required":["lighting","color","camera"]},"avoid":{"type":["string","null"]},"goodFor":{"type":"array","items":{"type":"string"}},"appliesTo":{"type":"array","items":{"type":"string"}}},"required":["id","name","summary","directives","avoid","goodFor","appliesTo"]},"StudioTrend":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"templateId":{"type":"string"},"hasMotionClip":{"type":"boolean"},"provenance":{"type":"object","additionalProperties":{}},"activeFrom":{"type":"string"},"activeUntil":{"type":["string","null"]},"status":{"type":"string"},"active":{"type":"boolean"}},"required":["id","name","description","templateId","hasMotionClip","provenance","activeFrom","activeUntil","status","active"],"additionalProperties":{}},"TrendInput":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"description":{"type":"string","minLength":5,"maxLength":1000},"templateId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"motionClipMediaId":{"type":["string","null"],"format":"uuid"},"provenance":{"$ref":"#/components/schemas/TrendProvenance"},"activeFrom":{"type":"string","format":"date-time"},"activeUntil":{"type":["string","null"],"format":"date-time"}},"required":["name","description","templateId","provenance"],"additionalProperties":false},"TrendProvenance":{"type":"object","properties":{"source":{"type":"string","minLength":2,"maxLength":200,"example":"Licensed from the choreographer (contract 2026-10)"},"url":{"type":"string","maxLength":500,"format":"uri"},"license":{"type":"string","minLength":2,"maxLength":300,"example":"Commercial use license, social platforms, worldwide"}},"required":["source","license"],"additionalProperties":false},"TrendPatch":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"description":{"type":"string","minLength":5,"maxLength":1000},"templateId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"motionClipMediaId":{"type":["string","null"],"format":"uuid"},"provenance":{"$ref":"#/components/schemas/TrendProvenance"},"activeFrom":{"type":"string","format":"date-time"},"activeUntil":{"type":["string","null"],"format":"date-time"},"status":{"type":"string","enum":["active","archived"]}},"additionalProperties":false},"PlanShotsInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"shots":{"type":"array","items":{},"minItems":1,"maxItems":20,"description":"ShotSpec objects (validated one by one so each shot gets its own result)."}},"required":["characterId","shots"]},"StudioStartResult":{"type":"object","properties":{"runId":{"type":["string","null"]},"status":{"type":"string"},"replayed":{"type":"boolean"},"kind":{"type":"string"},"label":{"type":"string"},"motionMode":{"type":["string","null"]},"jobIds":{"type":"array","items":{"type":"string"}},"quote":{"$ref":"#/components/schemas/StudioQuote"},"decision":{"type":["object","null"],"additionalProperties":{}},"approvalId":{"type":["string","null"]},"run":{"$ref":"#/components/schemas/PipelineRun"},"identityNotice":{"type":"string"}},"required":["runId","status","replayed","kind","label","motionMode","jobIds","quote","decision","approvalId","run","identityNotice"]},"StudioQuote":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"totalUsd":{"type":["string","null"]},"status":{"type":"string","enum":["estimated","unknown"]},"knownSubtotalUsd":{"type":"string"},"perItemUsd":{"type":["string","null"]},"steps":{"type":"array","items":{"type":"object","additionalProperties":{}}},"chargedTo":{"type":"array","items":{"type":"string"}},"notes":{"type":"array","items":{"type":"string"}}},"required":["currency","totalUsd","status","knownSubtotalUsd","perItemUsd","steps","chargedTo","notes"]},"PipelineRun":{"type":["object","null"],"properties":{"id":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"status":{"type":"string"},"characterId":{"type":["string","null"]},"identityVersionId":{"type":["string","null"]},"templateId":{"type":["string","null"]},"templateVersion":{"type":["number","null"]},"promptVersion":{"type":"string"},"isMock":{"type":"boolean"},"motionMode":{"type":["string","null"]},"quote":{"$ref":"#/components/schemas/StudioQuote"},"steps":{"type":"array","items":{"type":"object","additionalProperties":{}}},"shots":{"type":"array","items":{"type":"object","additionalProperties":{}}},"outputs":{"type":"array","items":{"type":"object","additionalProperties":{}}},"identityNotice":{"type":"string"}},"required":["id","kind","label","status","characterId","identityVersionId","templateId","templateVersion","promptVersion","isMock","motionMode","quote","steps","shots","outputs","identityNotice"],"additionalProperties":{}},"ShotSpec":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"identityVersionId":{"type":"string","format":"uuid","description":"Defaults to the current approved identity version; always recorded."},"templateId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"templateVersion":{"type":"integer","minimum":1},"output":{"type":"string","enum":["photo","video","talking"],"description":"photo | video | talking. Defaults from the template."},"strategy":{"type":"string","enum":["keyframe","reference"],"description":"Video strategy: identity-conditioned keyframe then image-to-video (default), or reference-to-video."},"action":{"type":"string","minLength":1,"maxLength":500},"dialogue":{"type":"string","minLength":1,"maxLength":3000,"description":"Spoken lines / script (talking shots) or voiceover (video shots in episodes)."},"location":{"type":"string","minLength":1,"maxLength":300},"outfit":{"type":"string","minLength":1,"maxLength":300},"props":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":10},"expression":{"type":"string","minLength":1,"maxLength":120},"camera":{"$ref":"#/components/schemas/ShotCamera"},"lighting":{"type":"string","minLength":1,"maxLength":160},"mood":{"type":"string","minLength":1,"maxLength":120},"stylePreset":{"$ref":"#/components/schemas/StylePresetId"},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1","4:5","3:4","4:3","2:3","3:2","21:9"]},"durationSec":{"type":"number","exclusiveMinimum":0,"description":"Seconds. No Mintfluence limit: the documented range of the model that runs the shot decides; out-of-range values are rejected with the allowed range."},"resolution":{"type":"string","pattern":"^[0-9.]{1,4}[KkPp]$","example":"720p"},"voice":{"$ref":"#/components/schemas/ShotVoice"},"language":{"type":"string","minLength":2,"maxLength":16},"references":{"$ref":"#/components/schemas/ShotReferences"},"variation":{"$ref":"#/components/schemas/ShotVariationAxis"},"seed":{"type":"integer","minimum":0,"maximum":2147483647},"review":{"type":"object","properties":{"identitySimilarity":{"type":"boolean"}},"additionalProperties":false,"description":"Optional advisory identity similarity score through your connected vision LLM."}},"required":["characterId"],"additionalProperties":false,"description":"One shot of an AI influencer. Permanent identity attributes are not editable here."},"ShotCamera":{"type":"object","properties":{"framing":{"type":"string","enum":["extreme_close_up","close_up","medium_close_up","medium","medium_full","full_body","wide"]},"angle":{"type":"string","maxLength":80},"movement":{"type":"string","maxLength":160},"lens":{"type":"string","maxLength":60}},"additionalProperties":false},"StylePresetId":{"type":"string","enum":["film_grain","studio_softbox","neon_night","golden_hour","monochrome","vintage_70s","editorial_flash","pastel_dream","cinematic_teal_orange","natural_daylight","moody_lowkey"],"description":"Named visual preset (lighting, colour grade, camera) from GET /v1/style-presets. An explicit lighting value wins over the preset lighting."},"ShotVoice":{"type":"object","properties":{"voiceId":{"type":"string","maxLength":120},"language":{"type":"string","minLength":2,"maxLength":16},"speed":{"type":"number","minimum":0.5,"maximum":2}},"additionalProperties":false},"ShotReferences":{"type":"object","properties":{"outfitImages":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":3},"productImages":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":3},"locationImages":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":2},"motionClip":{"type":"string","format":"uuid","description":"Driving clip for motion transfer (3-30 s, rights attested)."}},"additionalProperties":false},"ShotVariationAxis":{"type":"object","properties":{"axis":{"type":"string","enum":["outfit","product","location","text"],"description":"outfit | product | location: one generation per value. text: one generation, then each value is rendered locally as exact on-screen text (no extra AI cost)."},"values":{"type":"array","items":{"$ref":"#/components/schemas/ShotVariationValue"},"minItems":2,"maxItems":50,"description":"Bounded by BATCH_MAX_VARIATIONS at submission. For axis \"text\", description is the exact on-screen text."},"placement":{"$ref":"#/components/schemas/TextPlacement"}},"required":["axis","values"],"additionalProperties":false},"ShotVariationValue":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":80},"description":{"type":"string","minLength":1,"maxLength":300},"referenceImage":{"type":"string","format":"uuid"}},"required":["label"],"additionalProperties":false},"TextPlacement":{"type":"object","properties":{"position":{"type":"string","enum":["top","center","bottom","lower_third","top_left","top_right","bottom_left","bottom_right"]},"style":{"type":"string","enum":["title","caption","lower_third","label","title_card"]},"animation":{"type":"string","enum":["fade","slide_up","none"]},"start":{"type":"number","minimum":0,"maximum":600},"end":{"type":"number","minimum":0,"maximum":600}},"additionalProperties":false,"description":"Axis \"text\" only: position, style, animation and timing of the on-screen text."},"TextOverlay":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":90,"description":"Exact on-screen text (up to 3 lines separated by \\n). Rendered locally, never by an AI model.","example":"New drop · Friday 6 pm"},"start":{"type":"number","minimum":0,"maximum":600,"description":"Seconds from the start of the output (default 0). Ignored on images."},"end":{"type":"number","minimum":0,"maximum":600,"description":"Seconds; default: until the end of the clip. Clamped to the clip length. Ignored on images."},"position":{"type":"string","enum":["top","center","bottom","lower_third","top_left","top_right","bottom_left","bottom_right"],"description":"Default depends on the style (title: top, caption: bottom, lower_third: lower_third, label: top_left, title_card: center)."},"style":{"type":"string","enum":["title","caption","lower_third","label","title_card"],"description":"title | caption | lower_third | label | title_card (full-frame dimmed card). Default caption."},"animation":{"type":"string","enum":["fade","slide_up","none"],"description":"fade (default) | slide_up | none."}},"required":["text"],"additionalProperties":false},"GenerateShotInput":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/ShotSpec"},"output":{"type":"string","enum":["photo","video","talking"]},"lipsync":{"type":"object","properties":{"sourceVideoMediaId":{"type":"string","format":"uuid"},"audioMediaId":{"type":"string","format":"uuid"}},"required":["sourceVideoMediaId"],"additionalProperties":false,"description":"Alternative talking pipeline: lip sync new audio (spec.dialogue via TTS, or an audio file) onto an existing clip."},"overlays":{"type":"array","items":{"$ref":"#/components/schemas/TextOverlay"},"minItems":1,"maxItems":8,"description":"Motion graphics: text overlays / title cards / lower thirds rendered locally on the result (no AI cost)."}},"required":["spec"]},"BatchInput":{"type":"object","properties":{"spec":{"allOf":[{"$ref":"#/components/schemas/ShotSpec"},{"description":"One shot spec; spec.variation holds the axis (outfit | product | location | text) and values. Axis \"text\" generates once and renders each value as exact on-screen text locally."}]},"output":{"type":"string","enum":["photo","video"]},"overlays":{"type":"array","items":{"$ref":"#/components/schemas/TextOverlay"},"minItems":1,"maxItems":8,"description":"Text overlays added to every version (on-screen text variations are added on top)."}},"required":["spec"]},"SubtitleOptions":{"type":"object","properties":{"enabled":{"type":"boolean","default":true},"burnIn":{"type":"boolean","default":true},"timing":{"type":"string","enum":["tts","stt"],"default":"tts","description":"tts: timed from TTS output durations; stt: word timestamps from a speech-to-text step on your connected provider (extra cost)."}},"additionalProperties":false},"EpisodeInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"identityVersionId":{"type":"string","format":"uuid"},"templateId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"templateVersion":{"type":"integer","minimum":1},"title":{"type":"string","minLength":1,"maxLength":120},"script":{"type":"string","minLength":1,"maxLength":6000,"description":"Split into bounded talking segments. Provide either script or shots."},"shots":{"type":"array","items":{"$ref":"#/components/schemas/ShotSpec"},"minItems":1,"maxItems":20,"description":"Shot list: output \"talking\" (dialogue) or \"video\" (b-roll; dialogue = voiceover)."},"voice":{"$ref":"#/components/schemas/ShotVoice"},"language":{"type":"string","minLength":2,"maxLength":16},"subtitles":{"$ref":"#/components/schemas/SubtitleOptions"},"exportPresets":{"type":"array","items":{"type":"string","enum":["instagram_reels","instagram_feed","x_video_portrait","x_video_landscape"]},"minItems":1,"maxItems":4},"transitionSec":{"type":"number","minimum":0,"maximum":1},"overlays":{"type":"array","items":{"$ref":"#/components/schemas/TextOverlay"},"minItems":1,"maxItems":8,"description":"Motion graphics on the assembled episode timeline (title cards, lower thirds...), rendered before subtitles."}},"required":["characterId"]},"FacelessVisual":{"anyOf":[{"type":"object","properties":{"mediaId":{"type":"string","format":"uuid","description":"Your video clip or still image (stills fill the narration time not covered by clips)."}},"required":["mediaId"],"additionalProperties":false},{"type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":400,"description":"AI b-roll description (text-to-video on your connected provider; no presenter, no identity references)."},"durationSec":{"type":"number","exclusiveMinimum":0,"description":"Seconds of b-roll. No Mintfluence limit: the documented range of the text-to-video model decides."}},"required":["prompt"],"additionalProperties":false}]},"NarrationInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"identityVersionId":{"type":"string","format":"uuid"},"mode":{"type":"string","enum":["voiceover","faceless"],"description":"voiceover (default): narration over your clips. faceless: narrated explainer without a presenter from visuals (your clips/images and/or AI b-roll)."},"templateId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$","description":"Faceless mode: a template with the faceless pipeline (default faceless_explainer)."},"templateVersion":{"type":"integer","minimum":1},"clipMediaIds":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":8,"description":"Voiceover mode (required): video clips in playback order."},"visuals":{"type":"array","items":{"$ref":"#/components/schemas/FacelessVisual"},"minItems":1,"maxItems":8,"description":"Faceless mode: b-roll in playback order."},"script":{"type":"string","minLength":1,"maxLength":3000},"voice":{"$ref":"#/components/schemas/ShotVoice"},"language":{"type":"string","minLength":2,"maxLength":16},"subtitles":{"$ref":"#/components/schemas/SubtitleOptions"},"exportPresets":{"type":"array","items":{"type":"string","enum":["instagram_reels","instagram_feed","x_video_portrait","x_video_landscape"]},"minItems":1,"maxItems":4},"duckOriginal":{"type":"boolean"},"stylePreset":{"allOf":[{"$ref":"#/components/schemas/StylePresetId"},{"description":"Faceless mode: style preset for AI b-roll."}]},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1","4:5","3:4","4:3","2:3","3:2","21:9"],"description":"Faceless mode: AI b-roll aspect ratio (default from the template)."},"overlays":{"type":"array","items":{"$ref":"#/components/schemas/TextOverlay"},"minItems":1,"maxItems":8,"description":"Motion graphics on the narrated video timeline."}},"required":["characterId","script"]},"ThumbnailInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"sourceMediaId":{"type":"string","format":"uuid","description":"The finished clip or episode (video) or an image to make the cover from."},"mode":{"type":"string","enum":["frame","ai"],"description":"frame (default, $0): a still frame of the clip. ai: a reference-conditioned cover image (image editing on your connected provider) from that frame and the identity references."},"frameAtSec":{"type":"number","minimum":0,"maximum":600,"description":"Which moment of the clip to use (default: about a third in, at most 1 s)."},"preset":{"type":"string","enum":["cover_9x16","landscape_16x9","feed_4x5","square_1x1"],"description":"Output size; default follows the source orientation."},"title":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":90},"position":{"type":"string","enum":["top","center","bottom","lower_third","top_left","top_right","bottom_left","bottom_right"]},"style":{"type":"string","enum":["title","caption","lower_third","label","title_card"]}},"required":["text"],"additionalProperties":false,"description":"Title text rendered locally with ffmpeg (never by the model)."},"stylePreset":{"allOf":[{"$ref":"#/components/schemas/StylePresetId"},{"description":"AI mode: style preset for the cover image."}]},"scene":{"type":"object","properties":{"action":{"type":"string","minLength":1,"maxLength":300},"expression":{"type":"string","minLength":1,"maxLength":120},"mood":{"type":"string","minLength":1,"maxLength":120},"lighting":{"type":"string","minLength":1,"maxLength":160}},"additionalProperties":false,"description":"AI mode: scene choices only (identity attributes are rejected)."},"seed":{"type":"integer","minimum":0,"maximum":2147483647}},"required":["characterId","sourceMediaId"]},"MotionGraphicsInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"sourceMediaId":{"type":"string","format":"uuid","description":"A video (or image) from your library."},"overlays":{"type":"array","items":{"$ref":"#/components/schemas/TextOverlay"},"minItems":1,"maxItems":8,"description":"Animated text overlays, title cards or lower thirds rendered locally with ffmpeg (no AI cost), at most 8."},"exportPresets":{"type":"array","items":{"type":"string","enum":["instagram_reels","instagram_feed","x_video_portrait","x_video_landscape"]},"minItems":1,"maxItems":4,"description":"Normalize to the first preset and export the others; default keeps the source frame."}},"required":["characterId","sourceMediaId","overlays"]},"ObjectSwapInput":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"sourceMediaId":{"type":"string","format":"uuid"},"swap":{"type":"object","properties":{"element":{"type":"string","enum":["outfit","product","location","text"]},"to":{"type":"string","minLength":1,"maxLength":300},"from":{"type":"string","minLength":1,"maxLength":200},"referenceMediaId":{"type":"string","format":"uuid"}},"required":["element","to"],"additionalProperties":false}},"required":["characterId","sourceMediaId","swap"]},"MotionClipAttestation":{"type":"object","properties":{"ownsRights":{"type":"boolean","description":"You own the clip or are licensed to use it for this purpose."},"depictsRealPerson":{"type":"boolean"},"isSelf":{"type":"boolean"},"hasConsent":{"type":"boolean"},"statement":{"type":"string","minLength":10,"maxLength":1000}},"required":["ownsRights","depictsRealPerson","statement"],"additionalProperties":false,"description":"Required once per user-supplied clip."},"MotionTransferInput":{"type":"object","properties":{"spec":{"allOf":[{"$ref":"#/components/schemas/ShotSpec"},{"description":"characterId + optional scene (outfit/location); templateId defaults to \"dance\"."}]},"motionClipMediaId":{"type":"string","format":"uuid"},"trendId":{"type":"string","format":"uuid"},"attestation":{"$ref":"#/components/schemas/MotionClipAttestation"},"orientation":{"type":"string","enum":["image","video"]},"keepOriginalSound":{"type":"boolean"}},"required":["spec"]},"RegenerateInput":{"type":"object","properties":{"reason":{"type":"string","maxLength":500},"adjustments":{"type":"object","additionalProperties":{},"description":"Scene-only adjustments (action, location, outfit, props, expression, camera, lighting, mood, seed). Identity fields are rejected."}}},"OAuthGrantList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OAuthGrant"}}},"required":["items"]},"OAuthGrant":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"clientId":{"type":"string"},"clientName":{"type":"string"},"clientHost":{"type":["string","null"],"description":"Host of the client metadata document, or of the redirect URI for self-registered apps."},"clientType":{"type":"string","enum":["cimd","dcr","static"],"description":"cimd = client metadata document (for example ChatGPT), dcr = dynamically registered, static = pre-registered."},"scopes":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"}},"required":["scope","title","description"]}},"connected":{"type":"boolean","description":"True while the app holds a usable refresh credential."},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"lastUsedAt":{"type":["string","null"]}},"required":["id","clientId","clientName","clientHost","clientType","scopes","connected","createdAt","updatedAt","lastUsedAt"]},"OAuthGrantRevoked":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"revoked":{"type":"boolean","enum":[true]}},"required":["id","revoked"]},"AgentStatus":{"type":"object","properties":{"characterId":{"type":"string"},"mode":{"type":"string","enum":["off","approval_only","paused","frozen"]},"permissions":{"type":"object","properties":{"aiOperationEnabled":{"type":"boolean"},"autoPublishEnabled":{"type":"boolean"},"autoPublishConfirmedAt":{"type":["string","null"]},"replyMentionsEnabled":{"type":"boolean"},"replyMentionsAvailable":{"type":"boolean"},"platformPaidReadsEnabled":{"type":"boolean"}},"required":["aiOperationEnabled","autoPublishEnabled","autoPublishConfirmedAt","replyMentionsEnabled","replyMentionsAvailable","platformPaidReadsEnabled"]},"controls":{"type":"object","additionalProperties":{}},"schedule":{"type":"object","additionalProperties":{}},"lastTick":{"type":["object","null"],"additionalProperties":{}},"pendingApprovals":{"type":"object","properties":{"count":{"type":"number"},"items":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["count","items"]},"latestStrategyNote":{"type":["object","null"],"additionalProperties":{}},"recentDenials":{"type":"array","items":{"type":"object","additionalProperties":{}}},"llm":{"type":"object","additionalProperties":{}},"promptVersions":{"type":"object","properties":{"operator":{"type":"string"},"director":{"type":"string"}},"required":["operator","director"]}},"required":["characterId","mode","permissions","controls","schedule","lastTick","pendingApprovals","latestStrategyNote","recentDenials","llm","promptVersions"],"additionalProperties":{}},"AgentModeInput":{"type":"object","properties":{"aiOperationEnabled":{"type":"boolean","description":"Autonomous operation for this influencer. Off by default."},"paused":{"type":"boolean","description":"Pause automated content generation."},"frozen":{"type":"boolean","description":"Instant freeze: no automated work until unfrozen."},"tickIntervalMinutes":{"type":"integer","minimum":2,"maximum":1440},"maxActionsPerTick":{"type":"integer","minimum":1,"maximum":5}},"additionalProperties":false},"AgentRedirectInput":{"type":"object","properties":{"pinnedFormat":{"type":["string","null"],"pattern":"^[a-z0-9_]{2,48}$","description":"Template id the operator should prefer (null clears)."},"pinnedTopic":{"type":["string","null"],"minLength":2,"maxLength":200,"description":"Topic the operator should focus on (null clears)."}},"additionalProperties":false},"AgentTickRunResult":{"type":"object","properties":{"started":{"type":"boolean"},"reason":{"type":"string"},"resumed":{"type":"boolean"},"tickId":{"type":["string","null"]},"status":{"type":["string","null"]},"tick":{"$ref":"#/components/schemas/AgentTick"}},"required":["started","tickId","status","tick"]},"AgentTick":{"type":["object","null"],"properties":{"id":{"type":"string"},"trigger":{"type":"string"},"dryRun":{"type":"boolean"},"status":{"type":"string"},"phase":{"type":"string"},"statusReason":{"type":["string","null"]},"promptVersion":{"type":"string"},"planValid":{"type":["boolean","null"]},"actions":{"type":"object","additionalProperties":{"type":"number"}},"startedAt":{"type":["string","null"]},"finishedAt":{"type":["string","null"]}},"required":["id","trigger","dryRun","status","phase","statusReason","promptVersion","planValid","actions","startedAt","finishedAt"],"additionalProperties":{}},"AgentAction":{"type":"object","properties":{"id":{"type":"string"},"tickId":{"type":"string"},"index":{"type":"number"},"type":{"type":"string"},"params":{},"reasoning":{"type":"string"},"expectedOutcome":{"type":"string"},"status":{"type":"string"},"policyDecision":{"type":["object","null"],"additionalProperties":{}},"cost":{"type":"object","additionalProperties":{}},"result":{},"error":{},"promptVersion":{"type":"string"}},"required":["id","tickId","index","type","reasoning","expectedOutcome","status","policyDecision","cost","promptVersion"],"additionalProperties":{}},"AgentMemoryInput":{"type":"object","properties":{"content":{"type":"string","minLength":2,"maxLength":1000,"description":"An owner note the operator sees in every observation (trusted owner input)."},"pinned":{"type":"boolean"}},"required":["content"],"additionalProperties":false},"DirectorPlan":{"type":"object","properties":{"id":{"type":"string"},"characterId":{"type":"string"},"request":{"type":"string"},"status":{"type":"string","enum":["ready","needs_clarification","invalid","denied","running"]},"reply":{"type":["string","null"]},"clarification":{"type":["string","null"]},"shots":{"type":"array","items":{"type":"object","additionalProperties":{}}},"total":{"type":["object","null"],"additionalProperties":{}},"captions":{"type":"array","items":{}},"runs":{"type":"array","items":{}},"promptVersion":{"type":"string"},"submitted":{"type":"boolean"}},"required":["id","characterId","request","status","reply","clarification","shots","total","captions","runs","promptVersion","submitted"],"additionalProperties":{}},"DirectorRequest":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"request":{"type":"string","minLength":3,"maxLength":2000,"example":"Make a vertical video of Luna walking through Paris in a black coat, plus two photo variations in different outfits."}},"required":["characterId","request"],"additionalProperties":false},"DirectorRunInput":{"type":"object","properties":{"shotIndexes":{"type":"array","items":{"type":"integer","minimum":0,"maximum":7},"minItems":1,"maxItems":8,"description":"Run only these shots (default: every valid, available shot)."}},"additionalProperties":false},"PublicInfluencerPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicInfluencerSummary"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"PublicInfluencerSummary":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED","INSUFFICIENT_BUDGET","DRAFT"],"description":"PAUSED: the owner paused it or a kill switch is on. INSUFFICIENT_BUDGET: its daily or monthly spending limit is used up, or every provider account it runs on reports no credit (amounts are never disclosed). DRAFT: no approved look yet (never shown publicly). ACTIVE otherwise."},"symbol":{"type":["string","null"],"description":"Ticker of the linked token, if any (profile URLs on the website use it)."},"name":{"type":"string"},"username":{"type":"string"},"niche":{"type":"string"},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"]},"contentLanguage":{"type":"string"},"aiGenerated":{"type":"boolean","enum":[true]},"aiDisclosure":{"type":"string","example":"AI-generated character"},"headshotThumbnailUrl":{"type":["string","null"],"description":"Short-lived signed URL of the approved headshot thumbnail."},"publishedPostCount":{"type":"integer"},"lastPublishedAt":{"type":["string","null"]},"lastActiveAt":{"type":"string","description":"Latest of: creation, last published post, last public activity event. Used by sort=active."},"followers":{"type":["integer","null"],"description":"Sum of the latest follower counts of the linked X / Instagram accounts. null = unknown (no linked account, or the platform did not return a count). Used by sort=followers."},"engagement72h":{"type":["number","null"],"description":"Engagement score of posts published in the last 72 hours (likes + 2×comments/replies + 3×shares/reposts + views/100, from the latest metrics snapshot of each post). null = no metrics available. Used by sort=trending."},"token":{"$ref":"#/components/schemas/PublicTokenBlock"},"market":{"$ref":"#/components/schemas/PublicMarketSummary"},"createdAt":{"type":"string"}},"required":["id","status","symbol","name","username","niche","characterType","contentLanguage","aiGenerated","aiDisclosure","headshotThumbnailUrl","publishedPostCount","lastPublishedAt","lastActiveAt","followers","engagement72h","token","market","createdAt"]},"PublicTokenBlock":{"type":["object","null"],"properties":{"mint":{"type":"string"},"symbol":{"type":["string","null"]},"cluster":{"type":"string","enum":["mainnet-beta","devnet","localnet"]},"network":{"type":["string","null"],"example":"Solana devnet (mock)"},"venue":{"type":"string","enum":["pump.fun"]},"status":{"type":"string","description":"pending_fee_setup | active | needs_reconciliation"},"graduated":{"type":"boolean"},"graduatedTo":{"type":["string","null"],"enum":["PumpSwap"]},"bondingCurveProgress":{"type":["number","null"],"minimum":0,"maximum":1,"description":"0-1 share of the bonding curve sold (cached chain read); 1 after graduation; null until first read."},"launchedAt":{"type":"string"},"feeSplit":{"type":["object","null"],"properties":{"burn":{"type":"number"},"treasury":{"type":"number"},"creator":{"type":"number"}},"required":["burn","treasury","creator"],"description":"Percent of all creator fees: burn = buys and burns $MINT (fixed 30), treasury = AI treasury or AI budget wallet, creator."},"feeSplitBps":{"type":["object","null"],"properties":{"burn":{"type":"number"},"treasury":{"type":"number"},"creator":{"type":"number"}},"required":["burn","treasury","creator"]},"feeSplitLocked":{"type":"boolean","description":"The owner locked the split: Mintfluence refuses to prepare any further fee-sharing change for this token."},"feeSplitAdminRevokedOnChain":{"type":["boolean","null"],"description":"Whether the on-chain fee-sharing config reports its admin as revoked (null = not read yet)."},"isMock":{"type":"boolean","description":"True for tokens recorded by the offline test chain (not a real token)."}},"required":["mint","symbol","cluster","network","venue","status","graduated","graduatedTo","bondingCurveProgress","launchedAt","feeSplit","feeSplitBps","feeSplitLocked","feeSplitAdminRevokedOnChain","isMock"]},"PublicMarketSummary":{"type":["object","null"],"properties":{"priceSol":{"type":"number"},"priceUsd":{"type":["number","null"]},"marketCapSol":{"type":"number"},"marketCapUsd":{"type":["number","null"]},"change24h":{"type":["number","null"],"description":"Percent change against the latest snapshot at least 24 h old (or the first snapshot for younger tokens, see change24hWindow)."},"change24hBasis":{"type":["string","null"],"enum":["usd","sol",null]},"change24hWindow":{"type":["string","null"],"enum":["24h","since_first_snapshot",null]},"holders":{"type":["integer","null"]},"bondingCurveProgress":{"type":"number","description":"0–1; 1 after graduation."},"phase":{"type":"string","enum":["bonding_curve","amm"]},"capturedAt":{"type":"string"},"isMock":{"type":"boolean"}},"required":["priceSol","priceUsd","marketCapSol","marketCapUsd","change24h","change24hBasis","change24hWindow","holders","bondingCurveProgress","phase","capturedAt","isMock"],"description":"Neutral on-chain facts for display on the website. Not advice, not a prediction. null when MARKET_DATA_ENABLED is off or no snapshot exists yet."},"PublicInfluencerProfile":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","PAUSED","INSUFFICIENT_BUDGET","DRAFT"],"description":"PAUSED: the owner paused it or a kill switch is on. INSUFFICIENT_BUDGET: its daily or monthly spending limit is used up, or every provider account it runs on reports no credit (amounts are never disclosed). DRAFT: no approved look yet (never shown publicly). ACTIVE otherwise."},"symbol":{"type":["string","null"]},"name":{"type":"string"},"username":{"type":"string"},"bio":{"type":"string"},"niche":{"type":"string"},"voiceDescription":{"type":["string","null"],"example":"Warm, quick, dry humour"},"publicActivityLog":{"type":"boolean"},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"]},"visualStyle":{"type":"string"},"contentLanguage":{"type":"string"},"aiGenerated":{"type":"boolean","enum":[true]},"aiDisclosure":{"type":"string"},"persona":{"type":"object","properties":{"summary":{"type":"string"},"traits":{"type":"array","items":{"type":"string"}},"interests":{"type":"array","items":{"type":"string"}},"tone":{"type":"string"}},"required":["summary","traits","interests","tone"]},"identity":{"type":"object","properties":{"version":{"type":"integer"},"approvedAt":{"type":"string"},"headshot":{"$ref":"#/components/schemas/PublicImage"},"fullBody":{"$ref":"#/components/schemas/PublicImage"}},"required":["version","approvedAt","headshot","fullBody"]},"stats":{"type":"object","properties":{"publishedPosts":{"type":"integer"},"publishedByPlatform":{"type":"object","properties":{"x":{"type":"integer"},"instagram":{"type":"integer"},"tiktok":{"type":"integer"}},"required":["x","instagram","tiktok"]},"followers":{"type":["integer","null"],"description":"Sum of the latest follower counts of the linked accounts; null = unknown."}},"required":["publishedPosts","publishedByPlatform","followers"]},"socialAccounts":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["x","instagram","tiktok"]},"handle":{"type":["string","null"]},"followers":{"type":["integer","null"]}},"required":["platform","handle","followers"]}},"postingSchedule":{"type":["object","null"],"properties":{"timezone":{"type":"string"},"maxPostsPerDay":{"type":"integer"},"times":{"type":"array","items":{"type":"string"}}},"required":["timezone","maxPostsPerDay","times"],"description":"Retained for compatibility; always null because direct social scheduling is removed."},"recentPosts":{"type":"array","items":{"$ref":"#/components/schemas/PublicPost"}},"activity":{"type":"array","items":{"$ref":"#/components/schemas/PublicActivityEvent"}},"token":{"$ref":"#/components/schemas/PublicTokenBlock"},"market":{"$ref":"#/components/schemas/PublicMarketSummary"},"activityLog":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PublicActivityLogItem"},"description":"Latest transparency-log entries when the owner made the log public; null otherwise."},"createdAt":{"type":"string"}},"required":["id","status","symbol","name","username","bio","niche","voiceDescription","publicActivityLog","characterType","visualStyle","contentLanguage","aiGenerated","aiDisclosure","persona","identity","stats","socialAccounts","postingSchedule","recentPosts","activity","token","market","activityLog","createdAt"]},"PublicImage":{"type":["object","null"],"properties":{"id":{"type":"string"},"mimeType":{"type":"string"},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"url":{"type":"string","description":"Short-lived signed URL of the full image (see expiresAt)."},"thumbnailUrl":{"type":["string","null"]},"aiGenerated":{"type":"boolean"},"isMock":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["id","mimeType","width","height","url","thumbnailUrl","aiGenerated","isMock","expiresAt"]},"PublicPost":{"type":"object","properties":{"id":{"type":"string"},"platform":{"type":"string","enum":["x","instagram","tiktok"]},"postType":{"type":"string"},"caption":{"type":"string","description":"The published caption, including the AI disclosure."},"externalUrl":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"isMock":{"type":"boolean","description":"True when published through a test adapter (never a real platform post)."},"providerLabel":{"type":["string","null"],"example":"x · mock"},"media":{"type":"array","items":{"$ref":"#/components/schemas/PublicMediaThumbnail"}}},"required":["id","platform","postType","caption","externalUrl","publishedAt","isMock","providerLabel","media"]},"PublicMediaThumbnail":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["image","video","audio","subtitle","other"]},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"durationMs":{"type":["number","null"]},"thumbnailUrl":{"type":["string","null"],"description":"Short-lived signed URL (see expiresAt)."},"expiresAt":{"type":"string"}},"required":["id","kind","width","height","durationMs","thumbnailUrl","expiresAt"]},"PublicActivityEvent":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string"},"data":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"description":"Whitelisted display fields only (e.g. postId, platform, url)."},"createdAt":{"type":"string"}},"required":["id","type","data","createdAt"]},"PublicActivityLogItem":{"type":"object","properties":{"type":{"type":"string","enum":["generated_video","generated_image","generated_audio","spent","strategy_updated","posted","draft_awaiting_approval"]},"message":{"type":"string","example":"Generated a 9:16 video · Kling · mock"},"costUsd":{"type":["string","null"]},"costStatus":{"type":["string","null"],"enum":["estimated","actual","unknown",null]},"provider":{"type":["string","null"]},"modelId":{"type":["string","null"]},"billing":{"type":["string","null"],"enum":["byok","platform_credits","treasury",null]},"state":{"type":["string","null"]},"isMock":{"type":"boolean"},"at":{"type":"string"}},"required":["type","message","costUsd","costStatus","provider","modelId","billing","state","isMock","at"]},"PublicFeedPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicFeedItem"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"PublicFeedItem":{"type":"object","properties":{"post":{"$ref":"#/components/schemas/PublicPost"},"influencer":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"},"aiDisclosure":{"type":"string"},"headshotThumbnailUrl":{"type":["string","null"]}},"required":["id","name","username","aiDisclosure","headshotThumbnailUrl"]}},"required":["post","influencer"]},"PublicMarketDetail":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/PublicMarketSummary"},"chart":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string"},"priceSol":{"type":"number"},"priceUsd":{"type":["number","null"]},"marketCapUsd":{"type":["number","null"]}},"required":["t","priceSol","priceUsd","marketCapUsd"]}}},"required":["summary","chart"]},"PublicActivityLogPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicActivityLogItem"}},"nextBefore":{"type":["string","null"]}},"required":["items","nextBefore"]},"PublicPlatformToken":{"type":"object","properties":{"symbol":{"type":"string","example":"MINT"},"mint":{"type":["string","null"],"description":"Contract address (CA) of the platform token; null until configured."},"cluster":{"type":["string","null"],"enum":["mainnet-beta","devnet","localnet",null]},"network":{"type":["string","null"]},"decimals":{"type":["integer","null"]},"configured":{"type":"boolean"},"status":{"type":"string","enum":["configured","not_configured"],"description":"not_configured: PLATFORM_TOKEN_MINT is not set yet; mint is null (never a placeholder address)."},"isMock":{"type":"boolean"}},"required":["symbol","mint","cluster","network","decimals","configured","status","isMock"]},"PublicStats":{"type":"object","properties":{"platformToken":{"type":"object","properties":{"symbol":{"type":"string"},"mint":{"type":["string","null"]}},"required":["symbol","mint"]},"burned":{"type":"object","properties":{"baseUnits":{"type":"string"},"amount":{"type":["string","null"]},"verifiedBurns":{"type":"integer"}},"required":["baseUnits","amount","verifiedBurns"]},"feesPaidToCreators":{"type":"object","properties":{"lamports":{"type":"string"},"sol":{"type":"string"},"usd":{"type":["string","null"]},"usdValuation":{"type":["object","null"],"properties":{"method":{"type":"string","enum":["price_at_claim"]},"pricedLamports":{"type":"string"},"unpricedLamports":{"type":"string"},"note":{"type":"string"}},"required":["method","pricedLamports","unpricedLamports","note"],"description":"null when no SOL/USD price source is configured (usd is then null too)."},"derivation":{"type":"string","enum":["platform_share"],"description":"Per token: platform's verified share × creator bps / platform bps."}},"required":["lamports","sol","usd","usdValuation","derivation"]},"aisLive":{"type":"integer"},"cluster":{"type":["string","null"],"enum":["mainnet-beta","devnet","localnet",null]},"network":{"type":["string","null"]},"isMock":{"type":"boolean"},"generatedAt":{"type":"string"}},"required":["platformToken","burned","feesPaidToCreators","aisLive","cluster","network","isMock","generatedAt"]},"PublicBurn":{"type":"object","properties":{"symbol":{"type":"string"},"mint":{"type":["string","null"]},"burned":{"type":"object","properties":{"baseUnits":{"type":"string"},"amount":{"type":["string","null"]},"verifiedBurns":{"type":"integer"}},"required":["baseUnits","amount","verifiedBurns"]},"burns":{"type":"array","items":{"type":"object","properties":{"signature":{"type":"string"},"slot":{"type":["integer","null"]},"blockTime":{"type":["string","null"]},"baseUnits":{"type":"string"},"amount":{"type":["string","null"]},"cluster":{"type":["string","null"],"enum":["mainnet-beta","devnet","localnet",null]},"verifiedAt":{"type":"string"}},"required":["signature","slot","blockTime","baseUnits","amount","cluster","verifiedAt"]}},"nextCursor":{"type":["string","null"]},"cluster":{"type":["string","null"],"enum":["mainnet-beta","devnet","localnet",null]},"isMock":{"type":"boolean"}},"required":["symbol","mint","burned","burns","nextCursor","cluster","isMock"]},"FanVideoSettings":{"type":"object","properties":{"characterId":{"type":"string"},"mode":{"type":"string","enum":["off","everyone","holders"],"description":"off (default) | everyone (any signed-in wallet) | holders (wallets holding at least minHolderBps of the linked token's supply)."},"minHolderBps":{"type":"integer","description":"Basis points of supply (5 = 0.05%). Used when mode is holders."},"minHolderPercent":{"type":"string","example":"0.05"},"requireApproval":{"type":"boolean","description":"Fan videos appear publicly only after you approve them."},"allowedOutputs":{"type":"array","items":{"type":"string","enum":["photo","video"]}},"templateIds":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed studio templates; null = every non-talking template."},"effectiveTemplateIds":{"type":"array","items":{"type":"string"}},"dailyLimitPerFan":{"type":"integer"},"linkedToken":{"type":["object","null"],"properties":{"mint":{"type":"string"},"cluster":{"type":"string"},"symbol":{"type":["string","null"]},"isMock":{"type":"boolean"}},"required":["mint","cluster","symbol","isMock"],"description":"Token identity only (required for holders mode)."},"requirement":{"type":["string","null"],"description":"Neutral description of who can request fan videos."},"treasury":{"type":"object","properties":{"perVideoUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"perDayUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"usedTodayUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"dayBoundary":{"type":"string","enum":["00:00 UTC"]}},"required":["perVideoUsd","perDayUsd","usedTodayUsd","dayBoundary"],"description":"Present only when the AI treasury is enabled: how much of each fan video and of each UTC day the influencer’s AI treasury pays (billing \"treasury\"); the holder pays the rest in SOL."},"updatedAt":{"type":["string","null"]}},"required":["characterId","mode","minHolderBps","minHolderPercent","requireApproval","allowedOutputs","templateIds","effectiveTemplateIds","dailyLimitPerFan","linkedToken","requirement","updatedAt"]},"FanVideoSettingsUpdate":{"type":"object","properties":{"mode":{"type":"string","enum":["off","everyone","holders"]},"minHolderBps":{"type":"integer","minimum":1,"maximum":10000},"requireApproval":{"type":"boolean"},"allowedOutputs":{"type":"array","items":{"type":"string","enum":["photo","video"]},"minItems":1,"maxItems":2},"templateIds":{"type":["array","null"],"items":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"maxItems":50},"dailyLimitPerFan":{"type":"integer","minimum":1,"maximum":100},"treasury":{"type":"object","properties":{"perVideoUsd":{"type":"number","minimum":0,"maximum":1000},"perDayUsd":{"type":"number","minimum":0,"maximum":10000}},"additionalProperties":false,"description":"AI treasury caps for fan videos (needs AI_TREASURY_ENABLED; defaults $5 per video and $25 per UTC day)."}},"additionalProperties":false},"CreatorFanVideoPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CreatorFanVideo"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"CreatorFanVideo":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["pending_generation","generating","awaiting_creator","published","hidden","rejected","failed","awaiting_payment"]},"output":{"type":"string","enum":["photo","video"]},"templateId":{"type":["string","null"]},"promptSummary":{"type":"string"},"creditedAs":{"type":"string","description":"The fan's display handle when they opted in, otherwise \"a fan\"."},"aiGenerated":{"type":"boolean","enum":[true]},"isMock":{"type":"boolean"},"media":{"type":"array","items":{"$ref":"#/components/schemas/FanVideoMedia"}},"error":{},"createdAt":{"type":"string"},"completedAt":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"decidedAt":{"type":["string","null"]}},"required":["id","status","output","templateId","promptSummary","creditedAs","aiGenerated","isMock","media","createdAt","completedAt","publishedAt","decidedAt"]},"FanVideoMedia":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"mimeType":{"type":"string"},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"durationMs":{"type":["number","null"]},"aiGenerated":{"type":"boolean"},"isMock":{"type":"boolean"},"urls":{"type":"object","properties":{"previewUrl":{"type":"string"},"downloadUrl":{"type":"string"},"thumbnailUrl":{"type":["string","null"]},"expiresAt":{"type":"string"}},"required":["previewUrl","downloadUrl","thumbnailUrl","expiresAt"]}},"required":["id","kind","mimeType","width","height","durationMs","aiGenerated","isMock","urls"]},"FanVideoQuoteResponse":{"type":"object","properties":{"influencer":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"eligibility":{"type":"object","properties":{"mode":{"type":"string","enum":["off","everyone","holders"]},"eligible":{"type":"boolean","enum":[true]},"requirement":{"type":["string","null"]}},"required":["mode","eligible","requirement"]},"quote":{"$ref":"#/components/schemas/FanVideoQuote"},"policy":{"$ref":"#/components/schemas/PolicyDecision"},"requiresCreatorApproval":{"type":"boolean"},"limits":{"type":"object","properties":{"dailyLimitPerFan":{"type":"number"},"usedToday":{"type":"number"},"platformDaily":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":"number"}},"required":["used","limit"]}},"required":["dailyLimitPerFan","usedToday","platformDaily"]}},"required":["influencer","eligibility","quote","policy","requiresCreatorApproval","limits"]},"FanVideoQuote":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"totalUsd":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"status":{"type":"string","enum":["estimated","unknown"]},"billing":{"type":"string","enum":["byok","platform_credits","treasury"]},"chargedTo":{"type":"string"},"payer":{"type":"object","properties":{"treasuryUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"holderUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"holderLamports":{"type":["string","null"]},"holderSol":{"type":["string","null"]},"solUsd":{"type":["string","null"]},"perVideoCapUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"dayBudgetRemainingUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"lockMinutes":{"type":"integer"}},"required":["treasuryUsd","holderUsd","holderLamports","holderSol","solUsd","perVideoCapUsd","dayBudgetRemainingUsd","lockMinutes"],"description":"billing \"treasury\" only: who pays. The treasury pays up to the per-video cap and the remaining day budget; the holder pays the rest in SOL (amount locked when the request is created)."},"isMock":{"type":"boolean"},"steps":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"capability":{"type":"string"},"provider":{"type":"string"},"providerLabel":{"type":"string"},"modelId":{"type":"string"},"modelName":{"type":"string"},"estimateUsd":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"unit":{"type":"string"},"unitPriceUsd":{"type":"number"},"notes":{"type":"array","items":{"type":"string"}}},"required":["step","capability","provider","providerLabel","modelId","modelName","estimateUsd","unit","unitPriceUsd","notes"]}}},"required":["currency","totalUsd","status","billing","chargedTo","isMock","steps"]},"FanVideoRequest":{"type":"object","properties":{"output":{"type":"string","enum":["photo","video"]},"templateId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"action":{"type":"string","minLength":1,"maxLength":500},"location":{"type":"string","minLength":1,"maxLength":300},"outfit":{"type":"string","minLength":1,"maxLength":300},"props":{"type":"array","items":{"type":"string","minLength":1,"maxLength":100},"maxItems":10},"expression":{"type":"string","minLength":1,"maxLength":120},"camera":{"$ref":"#/components/schemas/ShotCamera"},"lighting":{"type":"string","minLength":1,"maxLength":160},"mood":{"type":"string","minLength":1,"maxLength":120},"aspectRatio":{"type":"string","enum":["9:16","16:9","1:1","4:5","3:4","4:3","2:3","3:2","21:9"]},"durationSec":{"type":"integer","minimum":1,"maximum":10,"description":"Video only (seconds)."},"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"],"description":"Pin the final step (photo, or the video) to one of your connected providers."},"modelId":{"type":"string","maxLength":200,"description":"Pin the final step to a model."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"default":"byok","description":"byok (default): your own connected provider account pays. platform_credits: explicitly use your Mintfluence platform credits (when offered). treasury (AI treasury enabled): the influencer’s AI treasury pays up to the creator’s per-video and per-day caps and you pay the rest with a SOL transfer you sign in your own wallet."},"showHandle":{"type":"boolean","default":false,"description":"Credit your display name publicly (default: shown as \"a fan\"). Wallet addresses are never shown."},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) when creating."}},"required":["output"],"additionalProperties":false},"FanVideoCreated":{"type":"object","properties":{"fanVideo":{"$ref":"#/components/schemas/MyFanVideo"},"policy":{"allOf":[{"$ref":"#/components/schemas/PolicyDecision"},{"type":["object","null"]}]},"quote":{"allOf":[{"$ref":"#/components/schemas/FanVideoQuote"},{"type":["object","null"]}]},"replayed":{"type":"boolean"}},"required":["fanVideo","policy","quote","replayed"]},"MyFanVideo":{"type":"object","properties":{"id":{"type":"string"},"influencer":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username"]},"status":{"type":"string","enum":["pending_generation","generating","awaiting_creator","published","hidden","rejected","failed","awaiting_payment"]},"output":{"type":"string","enum":["photo","video"]},"templateId":{"type":["string","null"]},"billing":{"type":"string","enum":["byok","platform_credits","treasury"]},"promptSummary":{"type":"string"},"creditedAs":{"type":"string"},"aiGenerated":{"type":"boolean","enum":[true]},"isMock":{"type":"boolean"},"estimatedCostUsd":{"type":["string","null"],"pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"approvalId":{"type":["string","null"],"description":"Your own spend approval (fan policy), when one is pending."},"jobs":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"jobId":{"type":"string"},"state":{"type":"string"}},"required":["step","jobId","state"]}},"media":{"type":"array","items":{"$ref":"#/components/schemas/FanVideoMedia"}},"error":{},"createdAt":{"type":"string"},"completedAt":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"treasury":{"type":"object","properties":{"treasuryUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"holderUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"paid":{"type":"boolean"}},"required":["treasuryUsd","holderUsd","paid"],"description":"billing \"treasury\" only: what the influencer’s AI treasury pays and what you pay."},"payment":{"description":"billing \"treasury\" with a holder share: your SOL payment intent (unsigned transaction while it is open)."}},"required":["id","influencer","status","output","templateId","billing","promptSummary","creditedAs","aiGenerated","isMock","estimatedCostUsd","approvalId","jobs","media","createdAt","completedAt","publishedAt"]},"PublicFanVideosPage":{"type":"object","properties":{"offer":{"$ref":"#/components/schemas/FanVideoOffer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/PublicFanVideo"}},"nextCursor":{"type":["string","null"]}},"required":["offer","items","nextCursor"]},"FanVideoOffer":{"type":"object","properties":{"available":{"type":"boolean"},"mode":{"type":"string","enum":["off","everyone","holders"]},"label":{"type":["string","null"]},"requirement":{"type":["string","null"],"description":"Neutral description, e.g. \"Available to wallets that hold at least 0.05% of the linked token's supply.\""},"minHolderBps":{"type":["number","null"]},"outputs":{"type":"array","items":{"type":"string","enum":["photo","video"]}},"requiresSignIn":{"type":"boolean","enum":[true]}},"required":["available","mode","label","requirement","minHolderBps","outputs","requiresSignIn"]},"PublicFanVideo":{"type":"object","properties":{"id":{"type":"string"},"output":{"type":"string","enum":["photo","video"]},"title":{"type":"string","description":"Includes the AI disclosure."},"creditedAs":{"type":"string"},"aiGenerated":{"type":"boolean","enum":[true]},"aiDisclosure":{"type":"string"},"media":{"type":"array","items":{"$ref":"#/components/schemas/PublicFanVideoMedia"}},"publishedAt":{"type":"string"}},"required":["id","output","title","creditedAs","aiGenerated","aiDisclosure","media","publishedAt"]},"PublicFanVideoMedia":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"mimeType":{"type":"string"},"width":{"type":["number","null"]},"height":{"type":["number","null"]},"durationMs":{"type":["number","null"]},"url":{"type":"string","description":"Short-lived signed URL (see expiresAt)."},"thumbnailUrl":{"type":["string","null"]},"aiGenerated":{"type":"boolean"},"isMock":{"type":"boolean"},"expiresAt":{"type":"string"}},"required":["id","kind","mimeType","width","height","durationMs","url","thumbnailUrl","aiGenerated","isMock","expiresAt"]},"MyFanVideoPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/MyFanVideo"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"FanPolicy":{"type":"object","properties":{"dailyLimitUsd":{"type":"number"},"monthlyLimitUsd":{"type":"number"},"maxGenerationCostUsd":{"type":"number"},"requireApprovalAboveUsd":{"type":"number"},"killSwitch":{"type":"boolean"},"allowedServices":{"type":"array","items":{"type":"string"}},"updatedAt":{"type":"string"},"usage":{"type":"object","properties":{"todayUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"monthUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"dailyRemainingUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"monthlyRemainingUsd":{"type":"string","pattern":"^-?\\d+\\.\\d{6}$","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."}},"required":["todayUsd","monthUsd","dailyRemainingUsd","monthlyRemainingUsd"]}},"required":["dailyLimitUsd","monthlyLimitUsd","maxGenerationCostUsd","requireApprovalAboveUsd","killSwitch","allowedServices","updatedAt","usage"]},"FanPolicyUpdate":{"type":"object","properties":{"dailyLimitUsd":{"type":"number","minimum":0,"maximum":100000},"monthlyLimitUsd":{"type":"number","minimum":0,"maximum":1000000},"maxGenerationCostUsd":{"type":"number","minimum":0,"maximum":100000},"requireApprovalAboveUsd":{"type":"number","minimum":0,"maximum":100000},"killSwitch":{"type":"boolean"}},"additionalProperties":false},"ApiKeyCreated":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/ApiKey"},"token":{"type":"string","description":"The full key. Shown once."},"notice":{"type":"string"}},"required":["key","token","notice"]},"ApiKey":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"hint":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["read","generate","publish","automation"]}},"rateLimitPerMinute":{"type":"integer"},"expiresAt":{"type":["string","null"]},"lastUsedAt":{"type":["string","null"]},"revokedAt":{"type":["string","null"]},"status":{"type":"string","enum":["active","revoked","expired"]},"createdAt":{"type":"string"}},"required":["id","name","hint","scopes","rateLimitPerMinute","expiresAt","lastUsedAt","revokedAt","status","createdAt"]},"WebhookCreated":{"type":"object","properties":{"webhook":{"$ref":"#/components/schemas/Webhook"},"secret":{"type":"string","description":"Signing secret (whsec_…). Shown once."},"notice":{"type":"string"}},"required":["webhook","secret","notice"]},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["generation.completed","generation.failed","pipeline.completed","post.published","post.failed","approval.pending","fan_video.submitted","character.status_changed","treasury.deposit"]}},"status":{"type":"string","enum":["active","failing","disabled"]},"secretHint":{"type":"string"},"consecutiveFailures":{"type":"integer"},"lastSuccessAt":{"type":["string","null"]},"lastFailureAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","url","description","events","status","secretHint","consecutiveFailures","lastSuccessAt","lastFailureAt","createdAt","updatedAt"]},"WebhookDeliveries":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"AiTreasury":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryEntries":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryPaymentIntent":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryPaymentIntentDetail":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryPaymentSubmitted":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryPaymentRegistered":{"type":"object","properties":{},"additionalProperties":{}},"PublicAiTreasury":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryOverview":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryDeposits":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryDepositResolved":{"type":"object","properties":{},"additionalProperties":{}},"AiTreasuryAdjusted":{"type":"object","properties":{},"additionalProperties":{}},"RiskNotice":{"type":"object","properties":{"version":{"type":"integer"},"markdown":{"type":"string"},"legalReviewPending":{"type":"boolean"}},"required":["version","markdown","legalReviewPending"]},"LaunchJourney":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyList":{"type":"object","properties":{"items":{"type":"array","items":{}}},"required":["items"]},"LaunchJourneyDetail":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyLooks":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyLookApproved":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyUpdated":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyTicker":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyRiskAccepted":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyEstimate":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyPrepared":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneySubmitted":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneySignatures":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyResumed":{"type":"object","properties":{},"additionalProperties":{}},"LaunchJourneyCancelled":{"type":"object","properties":{},"additionalProperties":{}},"ManagePanel":{"type":"object","properties":{},"additionalProperties":{}},"ManagePanelStopped":{"type":"object","properties":{},"additionalProperties":{}},"ManagePanelResumed":{"type":"object","properties":{},"additionalProperties":{}},"DataExportResponse":{"type":"object","properties":{"delivery":{"type":"string","enum":["inline","job"]},"export":{"type":"object","additionalProperties":{}},"job":{"$ref":"#/components/schemas/DataExportJob"}},"required":["delivery"]},"DataExportJob":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["queued","running","ready","failed","expired"]},"createdAt":{"type":"string"},"completedAt":{"type":["string","null"]},"expiresAt":{"type":["string","null"]},"sizeBytes":{"type":["integer","null"]},"downloadUrl":{"type":["string","null"],"description":"Signed link to the JSON export while status is \"ready\"; it expires at expiresAt."},"error":{"type":["object","null"],"additionalProperties":{}}},"required":["id","status","createdAt","completedAt","expiresAt","sizeBytes","downloadUrl","error"]},"AccountDeletion":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]},"deletedAt":{"type":"string"},"influencersPaused":{"type":"integer"},"revoked":{"type":"object","properties":{"socialConnections":{"type":"integer"},"socialRevokedAtPlatform":{"type":"integer"},"providerConnections":{"type":"integer"},"oauthGrants":{"type":"integer"},"apiKeys":{"type":"integer"},"webhooks":{"type":"integer"},"sessions":{"type":"integer"}},"required":["socialConnections","socialRevokedAtPlatform","providerConnections","oauthGrants","apiKeys","webhooks","sessions"]},"mediaFilesDeleted":{"type":"integer"},"exportsDeleted":{"type":"integer"},"kept":{"type":"array","items":{"type":"string"}},"notes":{"type":"array","items":{"type":"string"}}},"required":["deleted","deletedAt","influencersPaused","revoked","mediaFilesDeleted","exportsDeleted","kept","notes"]},"AdminUserPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AdminUser"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"AdminUser":{"type":"object","properties":{"id":{"type":"string"},"walletAddress":{"type":"string"},"displayName":{"type":["string","null"]},"isAdmin":{"type":"boolean"},"status":{"type":"string","enum":["active","suspended"]},"killSwitch":{"type":"boolean"},"characters":{"type":"integer"},"lastSignInAt":{"type":["string","null"]},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","walletAddress","displayName","isAdmin","status","killSwitch","characters","lastSignInAt","createdAt","updatedAt"]},"AdminSuspensionResult":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/AdminUser"},"changed":{"type":"boolean"},"sessionsRevoked":{"type":"integer"},"killSwitchRestored":{"type":"boolean"}},"required":["user","changed"]},"AdminStatus":{"type":"object","properties":{"generatedAt":{"type":"string"},"readiness":{"type":"object","additionalProperties":{},"description":"Same payload as /ready: configuration problems, database and pending migrations, module checks."},"killSwitch":{"type":"object","properties":{"enabled":{"type":"boolean"},"reason":{"type":["string","null"]},"updatedAt":{"type":["string","null"]}},"required":["enabled","reason","updatedAt"]},"queue":{"type":"object","properties":{"depth":{"type":"object","additionalProperties":{"type":"integer"}},"byQueue":{"type":"array","items":{"type":"object","properties":{"queue":{"type":"string"},"status":{"type":"string"},"count":{"type":"integer"}},"required":["queue","status","count"]}},"oldestQueuedAgeSeconds":{"type":"object","additionalProperties":{"type":"number"}}},"required":["depth","byQueue","oldestQueuedAgeSeconds"]},"jobs":{"type":"object","properties":{"byState":{"type":"object","additionalProperties":{"type":"integer"}},"outcomeUnknown":{"type":"integer"},"awaitingApproval":{"type":"integer"}},"required":["byState","outcomeUnknown","awaitingApproval"]},"posts":{"type":"object","properties":{"byState":{"type":"object","additionalProperties":{"type":"integer"}},"outcomeUnknown":{"type":"integer"}},"required":["byState","outcomeUnknown"]},"launches":{"type":"object","properties":{"byState":{"type":"object","additionalProperties":{"type":"integer"}},"needsReconciliation":{"type":"integer"}},"required":["byState","needsReconciliation"]},"outcomeUnknown":{"type":"object","properties":{"generationJobs":{"type":"integer"},"posts":{"type":"integer"},"launches":{"type":"integer"}},"required":["generationJobs","posts","launches"]},"failedTasks":{"type":"object","properties":{"total":{"type":"integer"},"last24h":{"type":"integer"},"recent":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"queue":{"type":"string"},"attempts":{"type":"integer"},"maxAttempts":{"type":"integer"},"lastError":{"type":["string","null"]},"createdAt":{"type":"string"},"finishedAt":{"type":["string","null"]}},"required":["id","queue","attempts","maxAttempts","lastError","createdAt","finishedAt"]}}},"required":["total","last24h","recent"]},"platformCosts":{"type":"object","properties":{"windowDays":{"type":"integer"},"totalUsd":{"type":"string"},"byCategory":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"entries":{"type":"integer"},"mockEntries":{"type":"integer"},"units":{"type":"string"},"totalUsd":{"type":"string"}},"required":["category","entries","mockEntries","units","totalUsd"]}}},"required":["windowDays","totalUsd","byCategory"]},"sponsored":{"type":"object","properties":{"enabled":{"type":"boolean"},"perUserLimit":{"type":"integer"},"globalCap":{"type":"integer"},"usedTotal":{"type":"integer"},"usedLast30Days":{"type":"integer"},"users":{"type":"integer"},"remainingGlobal":{"type":"integer"}},"required":["enabled","perUserLimit","globalCap","usedTotal","usedLast30Days","users","remainingGlobal"]},"approvalsPending":{"type":"integer"},"users":{"type":"object","properties":{"total":{"type":"integer"},"suspended":{"type":"integer"},"admins":{"type":"integer"}},"required":["total","suspended","admins"]},"mocks":{"type":"object","properties":{"generation":{"type":"boolean"},"social":{"type":"boolean"},"chain":{"type":"boolean"}},"required":["generation","social","chain"]}},"required":["generatedAt","readiness","killSwitch","queue","jobs","posts","launches","outcomeUnknown","failedTasks","platformCosts","sponsored","approvalsPending","users","mocks"]},"AdminTaskPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AdminTask"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]},"AdminTask":{"type":"object","properties":{"id":{"type":"integer"},"queue":{"type":"string"},"status":{"type":"string"},"attempts":{"type":"integer"},"maxAttempts":{"type":"integer"},"dedupeKey":{"type":["string","null"]},"runAt":{"type":"string"},"lastError":{"type":["string","null"],"description":"Scrubbed of credential-like strings."},"createdAt":{"type":"string"},"finishedAt":{"type":["string","null"]}},"required":["id","queue","status","attempts","maxAttempts","dedupeKey","runAt","lastError","createdAt","finishedAt"]},"AuditPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntry"}},"nextCursor":{"type":["string","null"]},"chain":{"$ref":"#/components/schemas/AuditChainVerification"}},"required":["items","nextCursor","chain"]},"AuditEntry":{"type":"object","properties":{"id":{"type":"integer"},"actorType":{"type":"string"},"actorId":{"type":["string","null"]},"action":{"type":"string"},"targetType":{"type":["string","null"]},"targetId":{"type":["string","null"]},"data":{"type":"object","additionalProperties":{}},"prevHash":{"type":["string","null"]},"hash":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","actorType","actorId","action","targetType","targetId","data","prevHash","hash","createdAt"]},"AuditChainVerification":{"type":["object","null"],"properties":{"ok":{"type":"boolean"},"checked":{"type":"integer"},"brokenAt":{"type":"integer"},"verifiedAt":{"type":"string"}},"required":["ok","checked","verifiedAt"],"description":"Recomputes every hash of the append-only audit log; brokenAt is the first entry that does not match."},"BlockedIdentity":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"normalized":{"type":"string"},"reason":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","name","normalized","reason","createdAt"]},"CharacterAnalytics":{"type":"object","properties":{"characterId":{"type":"string"},"window":{"type":"object","properties":{"days":{"type":"integer"},"from":{"type":"string"},"to":{"type":"string"}},"required":["days","from","to"]},"spend":{"type":"object","properties":{"currency":{"type":"string","enum":["USD"]},"totalUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"settledUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"reservedUsd":{"type":"string","example":"0.150000","description":"Unsettled reservations: work in flight, or completed work whose provider reports no final cost (kept at the estimate)."},"byCostStatus":{"type":"object","properties":{"estimated":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"actual":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"unknown":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."}},"required":["estimated","actual","unknown"]},"byDay":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"totalUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"settledUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"reservedUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"byCostStatus":{"type":"object","properties":{"estimated":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"actual":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"unknown":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."}},"required":["estimated","actual","unknown"]},"reservations":{"type":"integer"}},"required":["day","totalUsd","settledUsd","reservedUsd","byCostStatus","reservations"]}},"byService":{"type":"array","items":{"type":"object","properties":{"service":{"type":"string"},"totalUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"reservations":{"type":"integer"}},"required":["service","totalUsd","reservations"]}},"notes":{"type":"array","items":{"type":"string"}}},"required":["currency","totalUsd","settledUsd","reservedUsd","byCostStatus","byDay","byService","notes"]},"generations":{"type":"object","properties":{"total":{"type":"integer"},"byState":{"type":"object","additionalProperties":{"type":"integer"}},"byCapability":{"type":"array","items":{"type":"object","properties":{"capability":{"type":"string"},"total":{"type":"integer"},"byState":{"type":"object","additionalProperties":{"type":"integer"}}},"required":["capability","total","byState"]}},"latency":{"type":"object","properties":{"completedJobs":{"type":"integer"},"averageMs":{"type":["number","null"],"description":"Created → completed, completed jobs only."},"averageProviderMs":{"type":["number","null"],"description":"Submitted to the provider → completed."},"p50Ms":{"type":["number","null"]},"p95Ms":{"type":["number","null"]},"byCapability":{"type":"array","items":{"type":"object","properties":{"capability":{"type":"string"},"completedJobs":{"type":"integer"},"averageMs":{"type":["number","null"]},"averageProviderMs":{"type":["number","null"]}},"required":["capability","completedJobs","averageMs","averageProviderMs"]}}},"required":["completedJobs","averageMs","averageProviderMs","p50Ms","p95Ms","byCapability"]}},"required":["total","byState","byCapability","latency"]},"publishing":{"type":"object","properties":{"total":{"type":"integer"},"publishedInWindow":{"type":"integer"},"byPlatform":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string"},"total":{"type":"integer"},"byState":{"type":"object","additionalProperties":{"type":"integer"}}},"required":["platform","total","byState"]}}},"required":["total","publishedInWindow","byPlatform"]},"metrics":{"type":"object","properties":{"postsWithSnapshots":{"type":"integer"},"publishedPostsWithoutSnapshots":{"type":"integer","description":"Published posts whose metrics were never collected (all metrics unavailable)."},"totals":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/AnalyticsMetricTotal"}},"posts":{"type":"array","items":{"type":"object","properties":{"postId":{"type":"string"},"platform":{"type":"string"},"externalUrl":{"type":["string","null"]},"publishedAt":{"type":["string","null"]},"capturedAt":{"type":"string"},"isMock":{"type":"boolean"},"metrics":{"type":"object","additionalProperties":{"type":"number"}},"availability":{"type":"object","additionalProperties":{"type":"object","properties":{"status":{"type":"string","enum":["available","unavailable"]},"reason":{"type":"string"}},"required":["status"]}}},"required":["postId","platform","externalUrl","publishedAt","capturedAt","isMock","metrics","availability"]}}},"required":["postsWithSnapshots","publishedPostsWithoutSnapshots","totals","posts"]},"platformPaid":{"type":"object","properties":{"xApi":{"type":"object","properties":{"calls":{"type":"integer"},"costUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"mockCalls":{"type":"integer","description":"Calls made through the X test adapter (recorded at list price, never billed)."},"byOperation":{"type":"array","items":{"type":"object","properties":{"operation":{"type":"string"},"calls":{"type":"integer"},"units":{"type":"string"},"costUsd":{"type":"string","example":"0.150000","description":"USD with 6 decimals (integer micro-USD internally)."},"isMock":{"type":"boolean"}},"required":["operation","calls","units","costUsd","isMock"]}}},"required":["calls","costUsd","mockCalls","byOperation"]},"notes":{"type":"array","items":{"type":"string"}}},"required":["xApi","notes"]}},"required":["characterId","window","spend","generations","publishing","metrics","platformPaid"]},"AnalyticsMetricTotal":{"type":"object","properties":{"value":{"type":["number","null"],"description":"Sum over posts where the metric is available; null when it is unavailable for every post."},"availableFor":{"type":"integer"},"unavailableFor":{"type":"integer"}},"required":["value","availableFor","unavailableFor"]}},"parameters":{}},"paths":{"/v1/auth/nonce":{"post":{"tags":["Auth"],"summary":"Issue a Sign-In-With-Solana challenge","description":"Returns the exact message to sign. Nonces are single-use, expire after 10 minutes, and are bound to the website domain and wallet. Account sign-in is network-neutral and omits the optional SIWS Chain ID; it does not authorize a transaction.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":32,"maxLength":44}},"required":["address"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletChallenge"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/verify":{"post":{"tags":["Auth"],"summary":"Verify the signed challenge and start a session","description":"Sets an HttpOnly session cookie and also returns the session token for non-browser clients (send it as `Authorization: Bearer <token>`).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nonce":{"type":"string","minLength":8,"maxLength":64},"signature":{"type":"string","minLength":64,"maxLength":200,"description":"ed25519 signature of the exact message, base58 or base64."},"signedMessage":{"type":"string","maxLength":8000,"description":"Optional base64 of the bytes the wallet signed; must equal the issued message."}},"required":["nonce","signature"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Session"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/auth/logout":{"post":{"tags":["Auth"],"summary":"End the current session","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me":{"get":{"tags":["Auth"],"summary":"Current user","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Privacy"],"summary":"Delete your account (wallet session and confirmation phrase)","description":"Send {\"confirm\": \"DELETE MY ACCOUNT\"}. Revokes X, Instagram and TikTok connections (at the platform where it has an API), OAuth grants, all API keys and webhooks; deletes provider credentials, media files and personal fields; pauses, unlists and kill-switches every influencer; ends every session. Kept as required: the audit log, on-chain records (tokens on chain cannot be deleted), the credits and AI treasury ledgers, and the paused influencers with their frozen treasury balances. Signing in with the same wallet later creates a new, empty account.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"string","enum":["DELETE MY ACCOUNT"],"description":"Exactly \"DELETE MY ACCOUNT\"."}},"required":["confirm"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDeletion"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/wallet-proofs/challenge":{"post":{"tags":["Auth"],"summary":"Issue a wallet-ownership challenge","description":"Every creator fee recipient wallet must sign this challenge before launch. For linking an existing token, the token creator wallet signs it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":32,"maxLength":44},"purpose":{"type":"string","enum":["fee_recipient","ai_budget_wallet","token_creator"]},"mint":{"type":"string"}},"required":["address","purpose"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletChallenge"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/wallet-proofs/verify":{"post":{"tags":["Auth"],"summary":"Verify a signed wallet-ownership challenge","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"nonce":{"type":"string","minLength":8,"maxLength":64},"signature":{"type":"string","minLength":64,"maxLength":200,"description":"ed25519 signature of the exact message, base58 or base64."},"signedMessage":{"type":"string","maxLength":8000,"description":"Optional base64 of the bytes the wallet signed; must equal the issued message."},"purpose":{"type":"string","enum":["fee_recipient","ai_budget_wallet","token_creator"]}},"required":["nonce","signature","purpose"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletProof"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connections":{"get":{"tags":["AI providers"],"summary":"List connected AI provider accounts","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProviderConnection"}},"settingsUrl":{"type":"string"}},"required":["items","settingsUrl"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["AI providers"],"summary":"Connect an AI provider with your own API key(s)","description":"Website API only — never exposed to ChatGPT. Single-key providers take `apiKey`; multi-field providers (Kling: accessKey + secretKey) take `credentials`. Custom HTTP providers also take `config` and a `label`. Credentials are validated with the provider, envelope-encrypted, and never returned. See GET /v1/providers for each provider’s fields.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"apiKey":{"type":"string","minLength":1,"maxLength":4096},"credentials":{"type":"object","additionalProperties":{"type":"string","maxLength":4096}},"config":{"type":"object","additionalProperties":{}},"label":{"type":"string","maxLength":80}},"required":["provider"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderConnection"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/model-cards":{"get":{"tags":["Models"],"summary":"Cards for the /models page (one per card, derived from the live model registry)","description":"Each card lists the curated models and providers behind it, the union of their documented durations (Mintfluence adds no duration limit of its own), audio, aspect ratios, starting price and which billing modes this deployment offers. With a session, `connected` says whether the caller already connected one of its providers. Also returns the trend cards.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelCards"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/routing-preferences":{"get":{"tags":["Models"],"summary":"Saved defaults for the opt-in auto router (provider \"auto\")","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingPreferences"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Models"],"summary":"Save defaults for the opt-in auto router","description":"Used when a request sends provider \"auto\" without routing. The auto router never uses a provider you did not connect (or that the billing mode does not cover) and never exceeds maxCostUsd.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"maxCostUsd":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"string","maxLength":20}]},"allow":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string","maxLength":200}},"required":["provider","modelId"]},"maxItems":50}},"required":["maxCostUsd"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingPreferences"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/providers":{"get":{"tags":["AI providers"],"summary":"Provider catalog: how to connect each provider, what it can do, and how it is billed","description":"Every provider runs on the user’s own account (BYOK). `billing.platformCredits` is true only when this deployment offers explicit, capped platform credits for that provider.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ProviderInfo"}},"platformCredits":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}},"required":["items","platformCredits"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connections/nanogpt/start":{"post":{"tags":["AI providers"],"summary":"Connect a NanoGPT account with OAuth PKCE","description":"Authorizes a dedicated key billed to the user’s NanoGPT balance. A same-browser cookie and the initiating wallet session bind the callback. No generation or spending occurs here.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"returnTo":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"authorizeUrl":{"type":"string"},"state":{"type":"string"},"isMock":{"type":"boolean"}},"required":["authorizeUrl","state","isMock"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connections/openrouter/start":{"post":{"tags":["AI providers"],"summary":"Start the OpenRouter OAuth PKCE flow","description":"Returns the URL to send the user to. OpenRouter issues a user-controlled key billed to the user’s own credits.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"returnTo":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"authorizeUrl":{"type":"string"},"state":{"type":"string"},"isMock":{"type":"boolean"}},"required":["authorizeUrl","state","isMock"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connections/{id}/validate":{"post":{"tags":["AI providers"],"summary":"Re-validate a connection and refresh its balance","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderConnection"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connections/{id}":{"delete":{"tags":["AI providers"],"summary":"Disconnect a provider (deletes the stored credential)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["disconnected"]},"revokeAdvice":{"type":"string"}},"required":["id","status","revokeAdvice"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/models":{"get":{"tags":["Models"],"summary":"Capability-aware model registry","security":[],"parameters":[{"schema":{"type":"string","enum":["llm.text","llm.structured","image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"required":false,"name":"capability","in":"query"},{"schema":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"required":false,"name":"provider","in":"query"},{"schema":{"type":"string","maxLength":60},"required":false,"name":"family","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"verifiedAt":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/Model"}}},"required":["verifiedAt","items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/capabilities":{"get":{"tags":["Models"],"summary":"What the current user can generate with their connected providers","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"capability":{"type":"string"},"available":{"type":"boolean"},"via":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"model":{"type":"string"}},"required":["provider","model"]}},"supportedBy":{"type":"array","items":{"type":"string"}},"reason":{"type":["string","null"]}},"required":["capability","available","via","supportedBy","reason"]}},"settingsUrl":{"type":"string"}},"required":["items","settingsUrl"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/model-preferences":{"put":{"tags":["Models"],"summary":"Choose the model used for a capability","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"capability":{"type":"string","enum":["llm.text","llm.structured","image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string","minLength":1,"maxLength":200}},"required":["capability","provider","modelId"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Models"],"summary":"Forget the model chosen for a capability (routing picks again: the template’s model, then the cheapest connected one)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["llm.text","llm.structured","image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"required":true,"name":"capability","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]},"removed":{"type":"boolean"}},"required":["ok","removed"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/uploads":{"post":{"tags":["Media"],"summary":"Create a direct-to-storage upload","description":"Returns a signed, expiring PUT URL. After uploading, call /v1/uploads/{id}/complete to verify and ingest the file.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mimeType":{"type":"string","maxLength":100},"sizeBytes":{"type":"integer","exclusiveMinimum":0},"purpose":{"type":"string","enum":["identity_photo","reference_outfit","reference_product","reference_location","motion_clip","voice_sample","audio","video","image","subtitle","token_image","consent_evidence"]},"characterId":{"type":"string","format":"uuid"}},"required":["mimeType","sizeBytes","purpose"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"uploadId":{"type":"string"},"upload":{"type":"object","properties":{"url":{"type":"string"},"method":{"type":"string","enum":["PUT"]},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["url","method","headers"]},"expiresInSeconds":{"type":"number"}},"required":["uploadId","upload","expiresInSeconds"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/uploads/{id}/complete":{"post":{"tags":["Media"],"summary":"Verify and ingest an uploaded file","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Media"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/import":{"post":{"tags":["Media"],"summary":"Import media from an https URL","description":"SSRF-protected fetch (public addresses only, redirect checks, size and type limits, decode verification).","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":4000,"format":"uri"},"purpose":{"type":"string","enum":["identity_photo","reference_outfit","reference_product","reference_location","motion_clip","voice_sample","audio","video","image","subtitle","token_image","consent_evidence"]},"characterId":{"type":"string","format":"uuid"}},"required":["url","purpose"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Media"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media":{"get":{"tags":["Media"],"summary":"List media (history)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"},{"schema":{"type":"string","enum":["image","video","audio","subtitle"]},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string"},"required":false,"name":"source","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Media"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/media/{id}":{"get":{"tags":["Media"],"summary":"Get media with authorized, expiring preview/download URLs","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Media"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Media"],"summary":"Delete media","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/looks":{"get":{"tags":["Characters"],"summary":"Preset looks and builder options (character types, intensities, genders, adult age ranges)","description":"Public catalog for the tile-based builder. Create from a preset with POST /v1/characters { method: \"template\", lookId, appearance?: overrides }.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookCatalog"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/looks/{id}":{"get":{"tags":["Characters"],"summary":"One preset look","security":[],"parameters":[{"schema":{"type":"string","maxLength":48},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookPreset"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters":{"post":{"tags":["Characters"],"summary":"Create an original AI influencer","description":"Methods: one-sentence description, structured template choices or a preset look (lookId, with optional appearance overrides; adults only), or an uploaded reference photo with a rights and consent attestation. Nine character types; intensity average/bold/extreme scales styling only. Public figures and minors are blocked.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["description","template","reference_photo"]},"name":{"type":"string","minLength":1,"maxLength":60},"username":{"type":"string","pattern":"^[a-z0-9_.]{2,30}$/i"},"description":{"type":"string","maxLength":600},"lookId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$","description":"Preset look to start from (GET /v1/looks); method \"template\" only. Its defaults are merged under every field you send explicitly."},"appearance":{"type":"object","properties":{"summary":{"type":"string","minLength":3,"maxLength":600,"description":"One or two sentences describing the permanent look."},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"],"description":"human (default), stylized, anime, cartoon, fantasy, robot, anthro_animal, creature or alien. Humanoid types are always adults."},"gender":{"type":"string","maxLength":40},"ageRange":{"type":"string","enum":["18-24","25-34","35-44","45-54","55-64","65+"]},"bodyType":{"type":"string","maxLength":80},"skinTone":{"type":"string","maxLength":80},"faceDetails":{"type":"string","maxLength":200},"hair":{"type":"string","maxLength":120},"eyeColor":{"type":"string","maxLength":40},"distinctiveFeatures":{"type":"string","maxLength":200}},"description":"Structured appearance choices (method \"template\": ageRange required unless lookId supplies it). Each field overrides the preset look."},"intensity":{"type":"string","enum":["average","bold","extreme"],"description":"Styling intensity: average (default), bold or extreme. Scales styling, makeup, hair colour, outfit statement and lighting drama in candidate looks; never age, body proportions or how revealing anything is."},"visualStyle":{"type":"string","maxLength":80,"description":"Default: the preset look’s style, else \"photorealistic\"."},"referencePhoto":{"type":"object","properties":{"mediaId":{"type":"string","format":"uuid"},"attestation":{"type":"object","properties":{"depictsRealPerson":{"type":"boolean"},"isSelf":{"type":"boolean","default":false},"hasConsent":{"type":"boolean","default":false},"ownsRights":{"type":"boolean"},"consentEvidenceMediaId":{"type":"string","format":"uuid"},"statement":{"type":"string","minLength":10,"maxLength":1000}},"required":["depictsRealPerson","ownsRights","statement"]}},"required":["mediaId","attestation"]},"bio":{"type":"string","maxLength":1000,"default":""},"niche":{"type":"string","maxLength":120,"description":"Default: the preset look’s suggested niche, else empty."},"contentLanguage":{"type":"string","minLength":2,"maxLength":16,"default":"en"},"personality":{"type":"object","properties":{"traits":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":12,"default":[]},"backstory":{"type":"string","maxLength":1500},"interests":{"type":"array","items":{"type":"string","maxLength":60},"maxItems":20}},"default":{"traits":[]}},"tone":{"type":"string","maxLength":200,"description":"Default: the preset look’s suggested tone, else empty."},"boundaries":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":20,"default":[]},"voice":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string","maxLength":120},"voiceId":{"type":"string","maxLength":120},"language":{"type":"string","maxLength":16},"speed":{"type":"number","minimum":0.5,"maximum":2}},"default":{}},"defaultWardrobe":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":20,"description":"Default: the preset look’s wardrobe, else empty."},"scenePreferences":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":20,"description":"Default: the preset look’s scene preferences, else empty."},"timezone":{"type":"string","maxLength":64,"default":"UTC"}},"required":["method","name"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Character"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Characters"],"summary":"List my influencers","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Character"}}},"required":["items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}":{"get":{"tags":["Characters"],"summary":"Get an influencer with identity versions and candidates","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Character"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Characters"],"summary":"Edit non-identity fields (persona, voice, wardrobe, language…)","description":"Permanent appearance changes go through candidates + approval, which creates a new identity version.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"bio":{"type":"string","maxLength":1000,"default":""},"niche":{"type":"string","maxLength":120,"description":"Default: the preset look’s suggested niche, else empty."},"contentLanguage":{"type":"string","minLength":2,"maxLength":16,"default":"en"},"personality":{"type":"object","properties":{"traits":{"type":"array","items":{"type":"string","maxLength":40},"maxItems":12,"default":[]},"backstory":{"type":"string","maxLength":1500},"interests":{"type":"array","items":{"type":"string","maxLength":60},"maxItems":20}},"default":{"traits":[]}},"tone":{"type":"string","maxLength":200,"description":"Default: the preset look’s suggested tone, else empty."},"boundaries":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":20,"default":[]},"voice":{"type":"object","properties":{"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string","maxLength":120},"voiceId":{"type":"string","maxLength":120},"language":{"type":"string","maxLength":16},"speed":{"type":"number","minimum":0.5,"maximum":2}},"default":{}},"defaultWardrobe":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":20,"description":"Default: the preset look’s wardrobe, else empty."},"scenePreferences":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":20,"description":"Default: the preset look’s scene preferences, else empty."},"timezone":{"type":"string","maxLength":64,"default":"UTC"},"isPublic":{"type":"boolean"},"suggestedTokenName":{"type":"string","maxLength":32},"suggestedTokenSymbol":{"type":"string","pattern":"^[A-Z0-9]{1,10}$"},"voiceDescription":{"type":"string","maxLength":160,"pattern":"^[^\\u0000-\\u001f\\u007f<>]*$","description":"One line describing the voice, shown on the public profile (e.g. \"Warm, quick, dry humour\")."},"publicActivityLog":{"type":"boolean","description":"Show the transparency log (generated media with provider, model and cost; spend approved by policy; strategy updates; posts) on the public profile. Off by default."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Character"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Characters"],"summary":"Archive an influencer","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","enum":[true]}},"required":["ok"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/candidates":{"post":{"tags":["Characters"],"summary":"Generate candidate looks (headshot + full body on white)","description":"purpose=initial (new character), appearance_update (new identity version; edit mode: pass a one-sentence `edit` and/or changed appearance fields and only that change is requested), or extra_angles (adds angles/expressions with identity conditioning). Runs on the user’s connected provider; each job passes the spending policy. Each candidate uses one unit of the daily character-generation quota (QUOTA_CHARACTER_GENERATIONS_PER_DAY, default 10 per user per UTC day); replays with the same idempotencyKey are free, and units for candidates whose jobs could not be created are refunded. QUOTA_EXCEEDED (429) when the cap would be exceeded.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":4,"default":2},"provider":{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},"modelId":{"type":"string","maxLength":200},"aspectRatio":{"type":"string","maxLength":10},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200},"purpose":{"type":"string","enum":["initial","appearance_update","extra_angles"],"default":"initial"},"appearance":{"type":"object","properties":{"summary":{"type":"string","minLength":3,"maxLength":600,"description":"One or two sentences describing the permanent look."},"characterType":{"type":"string","enum":["human","stylized","anime","cartoon","fantasy","robot","anthro_animal","creature","alien"],"description":"human (default), stylized, anime, cartoon, fantasy, robot, anthro_animal, creature or alien. Humanoid types are always adults."},"gender":{"type":"string","maxLength":40},"ageRange":{"type":"string","enum":["18-24","25-34","35-44","45-54","55-64","65+"]},"bodyType":{"type":"string","maxLength":80},"skinTone":{"type":"string","maxLength":80},"faceDetails":{"type":"string","maxLength":200},"hair":{"type":"string","maxLength":120},"eyeColor":{"type":"string","maxLength":40},"distinctiveFeatures":{"type":"string","maxLength":200}},"description":"Appearance fields to change (unsent fields keep their stored values)."},"edit":{"type":"string","minLength":3,"maxLength":200,"description":"Edit mode (purpose appearance_update only): a one-sentence change such as \"shorter hair\". Only the requested change is asked for; everything else is kept from the approved references."},"intensity":{"type":"string","enum":["average","bold","extreme"],"description":"Override the styling intensity for these candidates (initial or appearance_update). Becomes the influencer’s intensity when a candidate is approved."},"billing":{"type":"string","enum":["byok","platform_credits","treasury","auto"],"description":"byok (default): your own connected provider. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). auto (the website’s \"First one free\"): a free look while one is available (FREE_LOOKS_PER_WALLET_PER_DAY), else your platform credits when they cover the look (e.g. the signup grant), else your own connected provider; PROVIDER_NOT_CONNECTED when none can pay. Decided before any job exists; the response says which one paid (billingUsed) and what the next look costs (pricing). Omitted keeps byok."},"extraAngles":{"type":"array","items":{"type":"string","enum":["left profile","right profile","three-quarter view","smiling","laughing","serious","looking over shoulder"]},"maxItems":4}},"required":["idempotencyKey"]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/candidates/{candidateId}/approve":{"post":{"tags":["Characters"],"summary":"Approve a candidate look (creates an immutable identity version)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"candidateId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"notes":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"identityVersionId":{"type":"string"},"version":{"type":"number"}},"required":["identityVersionId","version"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/identity-versions":{"get":{"tags":["Characters"],"summary":"List immutable identity versions and their reference images","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/lifecycle":{"get":{"tags":["Characters"],"summary":"Lifecycle state (draft / ready / active / paused) with agent mode, AI posting and token status","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CharacterLifecycleDetails"},{"type":"object","properties":{"characterId":{"type":"string"}},"required":["characterId"]}]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/activate":{"post":{"tags":["Characters"],"summary":"Activate: put the public page live (owner only)","description":"Requires an approved look (INVALID_STATE otherwise). Sets the influencer public; AI operation and automatic posting are NOT enabled (they stay as they were — off for a new influencer). Records the public activity event `activated`. Idempotent.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterLifecycleResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/pause":{"post":{"tags":["Characters"],"summary":"Pause an active influencer (owner only)","description":"Pauses the agent (same as agent mode paused): no operator ticks, scheduled posts are held and not published. The public page stays visible. Records the public activity event `paused`. Idempotent. The kill switch remains the separate instant freeze.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterLifecycleResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/resume":{"post":{"tags":["Characters"],"summary":"Resume a paused influencer (owner only)","description":"Clears the pause. The agent returns to the mode its kept permissions give (approval_only if AI operation was enabled before the pause, otherwise off); a freeze or kill switch is not lifted. Records the public activity event `resumed`. Idempotent.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterLifecycleResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/deactivate":{"post":{"tags":["Characters"],"summary":"Deactivate: take the public page down (owner only)","description":"Sets the influencer private (lifecycle ready). Agent and automation settings are not changed. Records the private activity event `deactivated`. Idempotent.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterLifecycleResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/generations/quote":{"post":{"tags":["Generation"],"summary":"Quote a generation (provider, model, estimate, policy decision)","description":"Validates parameters against the selected model before quoting. Nothing is submitted; the policy decision is recorded.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"capability":{"type":"string","enum":["image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"provider":{"anyOf":[{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},{"type":"string","enum":["auto"]}],"description":"A provider, or \"auto\" for the opt-in auto router (with routing or saved routing preferences)."},"routing":{"$ref":"#/components/schemas/AutoRouting"},"modelId":{"type":"string","maxLength":200},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"default":"byok","description":"byok (default): your own connected provider account pays. platform_credits: explicitly use capped Mintfluence platform credits (when offered). treasury: the influencer’s AI treasury pays on platform keys (owner only, AI treasury enabled). Never switched automatically."},"params":{"$ref":"#/components/schemas/GenerationParams"},"inputs":{"$ref":"#/components/schemas/GenerationInputs"}},"required":["characterId","capability"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/generations":{"post":{"tags":["Generation"],"summary":"Submit a low-level generation job","description":"Requires an idempotency key (header Idempotency-Key or body). Returns immediately; follow progress with GET /v1/generations/{id} or SSE /v1/events. Denials are returned as decisions, not errors.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"capability":{"type":"string","enum":["image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"provider":{"anyOf":[{"type":"string","enum":["openrouter","fal","nanogpt","google","kling","runway","luma","minimax","replicate","custom_http","higgsfield"]},{"type":"string","enum":["auto"]}],"description":"A provider, or \"auto\" for the opt-in auto router (with routing or saved routing preferences)."},"routing":{"$ref":"#/components/schemas/AutoRouting"},"modelId":{"type":"string","maxLength":200},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"default":"byok","description":"byok (default): your own connected provider account pays. platform_credits: explicitly use capped Mintfluence platform credits (when offered). treasury: the influencer’s AI treasury pays on platform keys (owner only, AI treasury enabled). Never switched automatically."},"params":{"$ref":"#/components/schemas/GenerationParams"},"inputs":{"$ref":"#/components/schemas/GenerationInputs"},"idempotencyKey":{"type":"string","minLength":8,"maxLength":200}},"required":["characterId","capability"]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/GenerationJob"},"decision":{"$ref":"#/components/schemas/PolicyDecision"},"replayed":{"type":"boolean"}},"required":["job","decision","replayed"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Generation"],"summary":"Generation history","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"},{"schema":{"type":"string"},"required":false,"name":"state","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/GenerationJob"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/generations/{id}":{"get":{"tags":["Generation"],"summary":"Job status and results","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationJob"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/generations/{id}/cancel":{"post":{"tags":["Generation"],"summary":"Cancel a job","description":"Before submission: stops locally, nothing is billed. After submission: requests provider cancellation where supported; the provider job may still be billed (the response says so).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationJob"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/generations/{id}/resolve":{"post":{"tags":["Generation"],"summary":"Resolve a job whose outcome is unknown","description":"For providers without a job-listing API. Check your provider dashboard first.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"resolution":{"type":"string","enum":["mark_failed_billed","mark_failed_not_billed"]}},"required":["resolution"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerationJob"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/credits":{"get":{"tags":["Platform credits"],"summary":"Your platform-credit balance, limits and covered providers","description":"Platform credits are used only for requests that set billing=platform_credits. They never replace your own provider account automatically.","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAccount"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/credits/ledger":{"get":{"tags":["Platform credits"],"summary":"Your platform-credit ledger (grants, holds, spends, releases)","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CreditLedgerEntry"}}},"required":["items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/credits":{"get":{"tags":["Platform credits"],"summary":"Global platform-credit usage against the configured caps","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"spentThisMonthUsd":{"type":"string"},"heldUsd":{"type":"string"},"outstandingBalanceUsd":{"type":"string"},"monthlyCapUsd":{"type":"string"},"generations30d":{"type":"integer"},"generationsCap30d":{"type":"integer"},"coveredProviders":{"type":"array","items":{"type":"string"}}},"required":["enabled","spentThisMonthUsd","heldUsd","outstandingBalanceUsd","monthlyCapUsd","generations30d","generationsCap30d","coveredProviders"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/credits/grants":{"post":{"tags":["Platform credits"],"summary":"Grant platform credits to a user (audited)","description":"Manual grant. `fundingRef` may reference a fee receipt (transaction signature) for bookkeeping; nothing is converted or moved on-chain.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"usd":{"type":"string","pattern":"^\\d+(\\.\\d{1,6})?$"},"funding":{"type":"string","enum":["admin_grant","fee_share_manual","adjustment"],"default":"admin_grant"},"fundingRef":{"type":"string","maxLength":200},"note":{"type":"string","maxLength":300}},"required":["userId","usd"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ledgerId":{"type":"integer"},"account":{"$ref":"#/components/schemas/CreditAccount"}},"required":["ledgerId","account"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/credits/revoke":{"post":{"tags":["Platform credits"],"summary":"Revoke unheld platform credits from a user (audited)","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"usd":{"type":"string","pattern":"^\\d+(\\.\\d{1,6})?$"},"note":{"type":"string","maxLength":300}},"required":["userId","usd"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditAccount"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/custom-models":{"get":{"tags":["Custom models"],"summary":"List your custom models (custom HTTP provider)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"connectionId","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"includeArchived","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CustomModel"}},"limit":{"type":"integer"}},"required":["items","limit"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Custom models"],"summary":"Define a custom model on one of your custom HTTP provider connections","description":"Website API only. Describes how to call your endpoint: a JSON body template with {{param}} placeholders, and how to read outputs (sync, or async with a status request). Runs only with your own key; never with platform credits. See docs/providers/custom-http.md.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionId":{"type":"string","format":"uuid","description":"Your active custom HTTP provider connection."},"displayName":{"type":"string","minLength":1,"maxLength":80},"capability":{"type":"string","enum":["image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"request":{"$ref":"#/components/schemas/CustomModelRequest"},"response":{"$ref":"#/components/schemas/CustomModelResponse"},"limits":{"$ref":"#/components/schemas/CustomModelLimits"},"required":{"type":"array","items":{"type":"string","enum":["prompt","negativePrompt","image","endImage","referenceImages","video","motionVideo","audio","text","durationSec","aspectRatio","resolution","seed","generateAudio","numImages","voiceId","language","speed","outputFormat","orientation","keepOriginalSound","upscaleFactor"]},"maxItems":22,"default":[],"description":"Parameters callers must provide (must appear in the request template)."},"pricing":{"type":["object","null"],"properties":{"unit":{"type":"string","enum":["second","video","image","request"]},"usd":{"anyOf":[{"type":"number"},{"type":"string","maxLength":20}],"description":"Price per unit in USD, e.g. 0.05 or \"0.05\" (up to 6 decimals)."}},"required":["unit","usd"],"additionalProperties":false,"description":"Optional. Without a price the cost cannot be estimated and every generation needs owner approval."}},"required":["connectionId","displayName","capability","request","response"],"additionalProperties":false}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/custom-models/{id}":{"get":{"tags":["Custom models"],"summary":"Get one of your custom models","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Custom models"],"summary":"Update a custom model","description":"Fields you send replace the stored ones (request, response and limits are replaced as a whole). Jobs already created keep the definition they were created with.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":80},"capability":{"type":"string","enum":["image.generate","image.edit","video.text_to_video","video.image_to_video","video.reference_to_video","video.motion_transfer","audio.tts","video.talking_avatar","video.lipsync","video.edit","image.upscale","video.upscale","audio.stt"]},"request":{"$ref":"#/components/schemas/CustomModelRequest"},"response":{"$ref":"#/components/schemas/CustomModelResponse"},"limits":{"$ref":"#/components/schemas/CustomModelLimits"},"required":{"type":"array","items":{"type":"string","enum":["prompt","negativePrompt","image","endImage","referenceImages","video","motionVideo","audio","text","durationSec","aspectRatio","resolution","seed","generateAudio","numImages","voiceId","language","speed","outputFormat","orientation","keepOriginalSound","upscaleFactor"]},"maxItems":22},"pricing":{"$ref":"#/components/schemas/CustomModelPricingInput"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Custom models"],"summary":"Archive a custom model (it can no longer be used for new generations)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModel"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/custom-models/{id}/preview":{"post":{"tags":["Custom models"],"summary":"Preview the exact request a custom model would send (key redacted, nothing is sent)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"type":"object","properties":{"prompt":{"type":"string","maxLength":4000},"negativePrompt":{"type":"string","maxLength":2000},"aspectRatio":{"type":"string","maxLength":10},"resolution":{"type":"string","maxLength":10},"durationSec":{"type":"number","exclusiveMinimum":0,"description":"Seconds. No Mintfluence limit: the documented range of the chosen model decides (out-of-range values are rejected with the allowed range)."},"numImages":{"type":"integer","minimum":1,"maximum":6},"seed":{"type":"integer"},"generateAudio":{"type":"boolean"},"outputFormat":{"type":"string","enum":["png","jpeg","webp"]},"text":{"type":"string","maxLength":10000},"voiceId":{"type":"string","maxLength":120},"language":{"type":"string","maxLength":16},"speed":{"type":"number","minimum":0.25,"maximum":4},"orientation":{"type":"string","enum":["image","video"]},"keepOriginalSound":{"type":"boolean"},"upscaleFactor":{"type":"number","minimum":1,"maximum":4},"image":{"type":"string","maxLength":2000},"endImage":{"type":"string","maxLength":2000},"referenceImages":{"type":"array","items":{"type":"string","maxLength":2000},"maxItems":16},"video":{"type":"string","maxLength":2000},"motionVideo":{"type":"string","maxLength":2000},"audio":{"type":"string","maxLength":2000}},"default":{},"additionalProperties":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomModelPreview"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/policy":{"get":{"tags":["Spending policy"],"summary":"Get the spending policy","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendingPolicy"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Spending policy"],"summary":"Update the spending policy (owner only)","description":"Amounts are USD; stored as integer micro-USD. Daily/monthly counters reset at UTC midnight / month start. These limits are a second layer on top of provider-side limits.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dailyLimitUsd":{"type":"number","minimum":0,"maximum":100000},"monthlyLimitUsd":{"type":"number","minimum":0,"maximum":1000000},"maxGenerationCostUsd":{"type":"number","minimum":0,"maximum":10000},"allowedServices":{"type":"array","items":{"type":"string","enum":["llm","image","video","voice","publish"]}},"allowedModels":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":100},"requireApprovalAboveUsd":{"type":"number","minimum":0,"maximum":10000},"killSwitch":{"type":"boolean"},"budgetMode":{"type":"string","enum":["manual","treasury_income"],"description":"treasury_income (AI treasury on): daily limit = min(dailyLimitUsd, net treasury income of the last 7 days ÷ 7). Costs above the approval threshold still wait for you."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendingPolicy"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/kill-switch":{"post":{"tags":["Spending policy"],"summary":"Instant freeze for one influencer","description":"Stops new submissions and scheduled publishing. Already-submitted work continues through reconciliation.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpendingPolicy"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/kill-switch":{"post":{"tags":["Spending policy"],"summary":"Account-wide kill switch","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/kill-switch":{"post":{"tags":["Admin"],"summary":"Platform-wide kill switch","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["enabled","reason"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/spend":{"get":{"tags":["Spending policy"],"summary":"Spend summary, reservations and recent policy decisions","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approvals":{"get":{"tags":["Approvals"],"summary":"Approval queue","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["pending","approved","rejected","expired","cancelled"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Approval"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approvals/{id}/approve":{"post":{"tags":["Approvals"],"summary":"Approve a pending item","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Approval"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approvals/{id}/reject":{"post":{"tags":["Approvals"],"summary":"Reject a pending item","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Approval"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/activity":{"get":{"tags":["Activity"],"summary":"Activity feed (lifecycle, generation, publishing and agent events)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"},{"schema":{"type":"string","maxLength":60},"required":false,"name":"type","in":"query"},{"schema":{"type":["integer","null"]},"required":false,"name":"before","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ActivityEvent"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/solana-connection":{"put":{"tags":["Solana"],"summary":"Validate and save the Solana connection (versioned, audited)","description":"Validates before saving: URL hygiene, RPC reachability, genesis hash vs cluster, mint validity, recipients. Returns the report. Changing a financial field (platform mint, fee recipient, buyback wallet) creates a pending version that must be confirmed with the one-time code. `dryRun` validates only.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaConnectionInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaConnectionSaveResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Solana"],"summary":"Current effective Solana configuration, pending change and readiness","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaConnectionOverview"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/solana-connection/history":{"get":{"tags":["Solana"],"summary":"Saved configuration versions (newest first)","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaConnectionHistory"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/solana-connection/confirm":{"post":{"tags":["Solana"],"summary":"Confirm a pending financial-recipient change (second step)","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":0},"confirmationCode":{"type":"string","minLength":8,"maxLength":64}},"required":["version","confirmationCode"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaConnectionConfirmResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/solana-connection/cancel":{"post":{"tags":["Solana"],"summary":"Cancel the pending configuration change","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaConnectionCancelResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/solana/ledger":{"get":{"tags":["Solana"],"summary":"Platform fee ledger: receipts, buyback allocation, swaps, burns, unspent balance","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["mainnet-beta","devnet","localnet"]},"required":false,"name":"cluster","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformLedger"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/status":{"get":{"tags":["Solana"],"summary":"Solana availability for this server (cluster, launches, linking, mock label)","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaStatus"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/symbol-availability":{"get":{"tags":["Solana"],"summary":"Ticker availability for the launch page","description":"Normalizes the ticker (trimmed, without a leading $, upper case), checks the launch format rules (1-13 bytes, no spaces; the same rules as launch drafts), reserved tickers, the content rules and whether another Mintfluence influencer already uses it on this cluster, with up to three free suggestions when it is taken or reserved. pump.fun itself does not block duplicate tickers. Pass characterId to ignore that influencer’s own token or launch.","security":[],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":40},"required":true,"name":"symbol","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SymbolAvailability"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches":{"post":{"tags":["Solana"],"summary":"Create a token launch draft","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDraftInput"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunch"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Solana"],"summary":"List my token launches","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}":{"get":{"tags":["Solana"],"summary":"Launch detail, state, next action and prepared transactions","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchDetail"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Solana"],"summary":"Edit a draft","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDraftPatch"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchUpdated"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}/estimate":{"post":{"tags":["Solana"],"summary":"Launch cost estimate (live rent and fees)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchCostEstimate"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}/prepare":{"post":{"tags":["Solana"],"summary":"Prepare (or resume) the launch transactions for your wallet","description":"Pins metadata, builds create_v2 + fee-sharing transactions with the official pump.fun SDK, partially signs with the temporary mint keypair, simulates, and returns a human-readable summary. Re-preparing after blockhash expiry keeps the same mint and only rebuilds what has not landed. Mainnet is refused unless MAINNET_LAUNCH_AUTHORIZED=true.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedLaunch"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}/submit":{"post":{"tags":["Solana"],"summary":"Submit wallet-signed transactions (the server verifies and broadcasts them in order)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer","minimum":1,"maximum":5},"transaction":{"type":"string","minLength":100,"maxLength":4000,"description":"Base64 of the wallet-signed VersionedTransaction."}},"required":["seq","transaction"],"additionalProperties":false},"minItems":1,"maxItems":3}},"required":["transactions"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchSubmitted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}/signatures":{"post":{"tags":["Solana"],"summary":"Register signatures of transactions your wallet broadcast itself","description":"Signatures are never trusted on their own: the launch becomes active only after on-chain verification.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signatures":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer","minimum":1,"maximum":5},"signature":{"type":"string","minLength":64,"maxLength":100}},"required":["seq","signature"],"additionalProperties":false},"minItems":1,"maxItems":3}},"required":["signatures"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchSignatures"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}/resume":{"post":{"tags":["Solana"],"summary":"Reconcile an interrupted launch with the chain now","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchResumed"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/launches/{id}/cancel":{"post":{"tags":["Solana"],"summary":"Cancel a launch that has not created a token","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLaunchCancelled"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/link":{"post":{"tags":["Solana"],"summary":"Link an existing pump.fun token to an influencer by mint address","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenLinkInput"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedToken"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens":{"get":{"tags":["Solana"],"summary":"My launched and linked tokens","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaTokenPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}":{"get":{"tags":["Solana"],"summary":"Token detail","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaToken"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/verify":{"post":{"tags":["Solana"],"summary":"Re-verify bonding-curve/graduation and fee-sharing state on-chain","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaTokenVerified"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fee-sharing/prepare":{"post":{"tags":["Solana"],"summary":"Prepare (or re-prepare) the fee-sharing transaction for a linked token","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkFeeSharingPrepared"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fee-sharing/lock":{"post":{"tags":["Solana"],"summary":"Lock the fee split (no unlock): Mintfluence refuses to prepare any further fee-share change","description":"Owner, wallet session, explicit confirmation (confirm: true). Idempotent. Allowed once the token is active. Afterwards every fee-share preparation answers 409 FEE_SPLIT_LOCKED. The lock is enforced by Mintfluence (pump-sdk 2.0.0 has no revoke instruction); the token reports feeSplitLocked and, separately, feeSplitAdminRevokedOnChain.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","enum":[true],"description":"Must be true: you understand the split cannot be changed through Mintfluence afterwards."}},"required":["confirm"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaTokenFeeSplitLocked"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fee-sharing/submit":{"post":{"tags":["Solana"],"summary":"Submit the wallet-signed fee-sharing transaction","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transaction":{"type":"string","minLength":100,"maxLength":4000}},"required":["transaction"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkFeeSharingSubmitted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fee-sharing/signature":{"post":{"tags":["Solana"],"summary":"Register the signature of a fee-sharing transaction your wallet broadcast","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","minLength":64,"maxLength":100}},"required":["signature"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkFeeSharingSignature"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fees":{"get":{"tags":["Solana"],"summary":"Creator-fee receipts per recipient (confirmed on-chain) and pending fees","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenFees"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fees/collectable":{"get":{"tags":["Solana"],"summary":"Creator fees a distribution would pay right now (read from chain; nothing is prepared)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenFeesCollectable"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fees/collect":{"post":{"tags":["Solana"],"summary":"Prepare the creator fee distribution for your creator wallet to sign","description":"Owner only. Builds the permissionless pump.fun distribution (distribute_creator_fees_v2; after graduation preceded by transfer_creator_fees_to_pump_v2) from the on-chain fee-sharing config. Your creator wallet signs and pays the network fee; pump.fun pays every shareholder its on-chain share in the same transaction. Recipients and amounts come only from the chain. 409 INVALID_STATE (reason below_minimum) when there is nothing to collect yet.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCollectionPrepared"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fees/collect/{collectionId}/submit":{"post":{"tags":["Solana"],"summary":"Submit the wallet-signed fee collection (or the signature of the one your wallet broadcast)","description":"The signed transaction is accepted only if its message equals the prepared one and every signature verifies; a bare signature only if it is over the prepared message. Status then comes from chain.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"collectionId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transaction":{"type":"string","minLength":100,"maxLength":4000},"signature":{"type":"string","minLength":64,"maxLength":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCollectionSubmitted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fees/collect/{collectionId}":{"get":{"tags":["Solana"],"summary":"Fee collection status (reconciled with the chain)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"collectionId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCollection"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/solana/tokens/{id}/fees/collections":{"get":{"tags":["Solana"],"summary":"Fee collections of this token (newest first)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeCollectionList"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/tokens":{"get":{"tags":["Solana"],"summary":"Public influencer tokens (verifiable facts only; no prices or trading)","security":[],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTokenPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/tokens/{mint}":{"get":{"tags":["Solana"],"summary":"Public token profile by mint","security":[],"parameters":[{"schema":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"required":true,"name":"mint","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicToken"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/operator/solana":{"get":{"tags":["Owner panel"],"summary":"Key-protected Solana owner dashboard","security":[{"solanaOwnerKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/operator/solana/prepare":{"post":{"tags":["Owner panel"],"summary":"Validate and stage a CA change; no blockchain transaction","security":[{"solanaOwnerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platformTokenMint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"launchesEnabled":{"type":"boolean"},"expectedVersion":{"type":["integer","null"],"exclusiveMinimum":0},"dryRun":{"type":"boolean"}},"required":["platformTokenMint","launchesEnabled","expectedVersion"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/operator/solana/confirm":{"post":{"tags":["Owner panel"],"summary":"Confirm the exact validated platform CA and launch setting","security":[{"solanaOwnerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","exclusiveMinimum":0},"confirmationCode":{"type":"string","minLength":8,"maxLength":64},"platformTokenMint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"}},"required":["version","confirmationCode","platformTokenMint"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/operator/solana/pause":{"post":{"tags":["Owner panel"],"summary":"Pause new launches without a network call or changing existing tokens","security":[{"solanaOwnerKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/platform-config":{"get":{"tags":["Public"],"summary":"Public runtime platform CA; no secrets or admin state","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"platformTokenMint":{"type":["string","null"],"minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"cluster":{"type":["string","null"]},"launchesEnabled":{"type":"boolean"}},"required":["platformTokenMint","cluster","launchesEnabled"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/templates":{"get":{"tags":["Studio"],"summary":"Studio templates with availability for your connected providers","description":"A template whose required capability is not offered by any connected provider is returned with available: false and a reason; honest alternatives (e.g. \"prompted motion\") are listed with their own availability.","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/StudioTemplate"}},"identityNotice":{"type":"string"}},"required":["items","identityNotice"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/templates/{id}":{"get":{"tags":["Studio"],"summary":"One template version (default: current) and its version history","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1},"required":false,"name":"version","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/style-presets":{"get":{"tags":["Studio"],"summary":"Named visual style presets for shots, thumbnails and b-roll","description":"Use the id as `stylePreset` in a shot spec (REST, MCP, templates and the agent share the same schema). A preset adds lighting, colour-grade and camera directives; an explicit `lighting` in the shot spec still wins. Also lists the text-overlay options (positions, styles, animations, limits) and thumbnail sizes.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StylePresetList"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/trends":{"get":{"tags":["Studio"],"summary":"Active curated trends (template + optional licensed motion clip, with provenance)","security":[],"parameters":[{"schema":{"type":"string","maxLength":48},"required":false,"name":"templateId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/StudioTrend"}}},"required":["items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/trends":{"get":{"tags":["Studio"],"summary":"All trends including inactive and archived (admin)","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/StudioTrend"}}},"required":["items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Studio"],"summary":"Create a curated trend (admin)","description":"The motion clip must be an admin-uploaded video of 3-30 s; provenance {source, url, license} is required.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendInput"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioTrend"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/trends/{id}":{"patch":{"tags":["Studio"],"summary":"Update a trend (admin)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendPatch"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioTrend"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Studio"],"summary":"Archive a trend (admin)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioTrend"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/shots/plan":{"post":{"tags":["Studio"],"summary":"Validate a shot list and quote every shot and the total (no submission)","description":"Each shot is validated against the ShotSpec schema (permanent identity attributes are rejected), routed to a connected provider/model, priced per step, and summed. A quote-only policy decision is recorded.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanShotsInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/shots":{"post":{"tags":["Studio"],"summary":"Generate a shot from a shot spec (photo, video from keyframe, reference-to-video, talking clip, lip sync)","description":"A \"dance\"-style template without a driving clip is labeled \"prompted motion\" (not motion transfer). Returns immediately with run and job ids.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/GenerateShotInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/batches":{"post":{"tags":["Studio"],"summary":"Batch variations: one shot spec × N values on one axis (outfit, product, location, on-screen text)","description":"N is bounded by BATCH_MAX_VARIATIONS. The total is quoted and ONE batch policy decision is made (one approval when pending); per-job checks still run at submission. Axis \"text\" generates the shot once and renders each value locally as exact on-screen text (no extra AI cost).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/BatchInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/episodes":{"post":{"tags":["Studio"],"summary":"AI host episode: script or shot list → per-shot jobs → assembly, subtitles, loudness normalization, export","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/EpisodeInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/narration":{"post":{"tags":["Studio"],"summary":"Narration: voiceover (influencer voice) + subtitles on your clips, or a faceless video (mode \"faceless\")","description":"mode \"faceless\" builds a narrated explainer without a presenter from visuals: your clips or still images and/or AI b-roll (text-to-video on your connected provider). Optional text overlays. TTS (and AI b-roll) are quoted before anything runs; mixing, subtitles and overlays are local.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/NarrationInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/thumbnails":{"post":{"tags":["Studio"],"summary":"Thumbnail / cover for a finished clip or episode (still frame or AI cover) with a locally rendered title","description":"mode \"frame\" (default) is local and costs $0. mode \"ai\" quotes one reference-conditioned image edit (the frame + identity references) on your connected provider. The title is always rendered locally with ffmpeg, never by the model.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ThumbnailInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/motion-graphics":{"post":{"tags":["Studio"],"summary":"Motion graphics: animated text overlays, title cards or lower thirds on a clip or image (local, no AI cost)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/MotionGraphicsInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/object-swap":{"post":{"tags":["Studio"],"summary":"Object swap: change exactly one named element (outfit, product, location, text)","description":"Images use reference-conditioned image editing; videos use a video-edit model where one is connected.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/ObjectSwapInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/motion-transfer":{"post":{"tags":["Studio"],"summary":"Motion transfer from a driving clip (your clip with rights attested, or a curated trend clip)","description":"Only models documenting a motion/driving-video input are used. The clip is validated against the model limits (duration, size, resolution, frame rate). Without such a model the call fails with CAPABILITY_UNAVAILABLE and suggests \"prompted motion\".","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/MotionTransferInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudioStartResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/pipelines":{"get":{"tags":["Studio"],"summary":"Studio pipeline runs","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"},{"schema":{"type":"string","maxLength":40},"required":false,"name":"kind","in":"query"},{"schema":{"type":"string","maxLength":40},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/pipelines/{id}":{"get":{"tags":["Studio"],"summary":"Run status: steps, jobs, per-shot checks, advisory identity scores, outputs, costs","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineRun"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/pipelines/{id}/shots/{stepId}/regenerate":{"post":{"tags":["Studio"],"summary":"Regenerate a shot (bounded by REGENERATION_MAX_PER_SHOT; each attempt quoted, authorized and billed)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"stepId","in":"path"},{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/RegenerateInput"},{"type":"object","properties":{"idempotencyKey":{"type":"string","minLength":8,"maxLength":200,"description":"Required (body or Idempotency-Key header) unless quoteOnly is true."},"quoteOnly":{"type":"boolean","description":"Return per-step quotes and a policy preview without submitting anything."},"billing":{"type":"string","enum":["byok","platform_credits","treasury"],"description":"byok (default): your own connected provider accounts. platform_credits: explicitly paid with Mintfluence platform credits (capped, never a fallback). treasury: the influencer’s AI treasury pays (owner only, AI treasury enabled). Omitted keeps byok."}}}]}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/studio/pipelines/{id}/cancel":{"post":{"tags":["Studio"],"summary":"Cancel a run","description":"Stops pending steps locally; submitted provider jobs get a provider cancel where supported and may still be billed (reported per job).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"run":{"$ref":"#/components/schemas/PipelineRun"},"cancellations":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["run","cancellations"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/oauth/grants":{"get":{"tags":["OAuth"],"summary":"List connected apps","description":"Apps (such as ChatGPT) the user authorized through OAuth, with the approved scopes and when they were last used.","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthGrantList"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/oauth/grants/{id}":{"delete":{"tags":["OAuth"],"summary":"Disconnect an app","description":"Revokes the authorization and every access and refresh credential issued under it. The app must ask for consent again to reconnect.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthGrantRevoked"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent":{"get":{"tags":["Agent"],"summary":"Agent status: mode, permissions, last/next tick, pending approvals, latest strategy note, recent denials","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStatus"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/mode":{"post":{"tags":["Agent"],"summary":"Change agent mode and permissions (owner only)","description":"AI operation and automatic publishing are separate explicit permissions (both off by default). Enabling auto-publish requires confirmAutoPublish: true. paused stops operator ticks and scheduled publishing; frozen is the instant freeze. Emits activated / paused / frozen activity events.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentModeInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStatus"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/redirect":{"post":{"tags":["Agent"],"summary":"Pin a format (template) or topic for the operator (owner only; null clears)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRedirectInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentStatus"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/tick":{"post":{"tags":["Agent"],"summary":"Run one operator tick now (owner only)","description":"Observe → Plan (your connected LLM) → Authorize (server quotes + spending policy) → Act → Reflect. dryRun plans and authorizes without acting (the planning call is still billed to your LLM account). A real tick requires AI operation to be enabled. Generation jobs continue in the background; when another tick is running this returns started: false.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dryRun":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentTickRunResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/ticks":{"get":{"tags":["Agent"],"summary":"Operator ticks (newest first)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AgentTick"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/ticks/{tickId}":{"get":{"tags":["Agent"],"summary":"One tick with its observation, raw and validated plan, and actions","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"tickId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"trigger":{"type":"string"},"dryRun":{"type":"boolean"},"status":{"type":"string"},"phase":{"type":"string"},"statusReason":{"type":["string","null"]},"promptVersion":{"type":"string"},"planValid":{"type":["boolean","null"]},"actions":{"type":"object","additionalProperties":{"type":"number"}},"startedAt":{"type":["string","null"]},"finishedAt":{"type":["string","null"]},"observation":{},"plan":{},"planRaw":{"type":["string","null"]},"actionItems":{"type":"array","items":{"$ref":"#/components/schemas/AgentAction"}}},"required":["id","trigger","dryRun","status","phase","statusReason","promptVersion","planValid","actions","startedAt","finishedAt","planRaw","actionItems"],"additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/actions":{"get":{"tags":["Agent"],"summary":"Agent actions log","description":"Every proposed action with its tick, observation summary, plan summary, reasoning, policy decision (including denials), server quote vs the model's estimate, jobs, costs and results.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AgentAction"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/memory":{"get":{"tags":["Agent"],"summary":"Agent memory (results, metrics, denials, owner notes)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["result","metric","denial","failure","owner_note","owner_answer","lesson"]},"required":false,"name":"kind","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Agent"],"summary":"Add an owner note to the agent memory (owner only)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentMemoryInput"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/agent/strategy":{"get":{"tags":["Agent"],"summary":"Versioned strategy notes","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","additionalProperties":{}}},"minIntervalHours":{"type":"number"},"nextUpdateAllowedAfter":{"type":["string","null"]}},"required":["items","minIntervalHours","nextUpdateAllowedAfter"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/director/requests":{"post":{"tags":["Agent"],"summary":"Director: turn a request into a quoted shot plan (nothing is submitted)","description":"Plans with your connected LLM (spending policy service \"llm\"; cost recorded), validates the plan, builds the shot specs server-side, quotes every shot with the studio and screens caption drafts. Confirm with POST /v1/director/plans/{id}/run. A policy denial returns a plan with status \"denied\".","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectorRequest"}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectorPlan"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/director/plans":{"get":{"tags":["Agent"],"summary":"Your director plans","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"characterId","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/DirectorPlan"}},"nextCursor":{"type":["string","null"]}},"required":["items","nextCursor"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/director/plans/{id}":{"get":{"tags":["Agent"],"summary":"One director plan with quotes and live run status","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectorPlan"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/director/plans/{id}/run":{"post":{"tags":["Agent"],"summary":"Confirm and run a director plan","description":"Submits the valid, available shots as studio runs (source \"web\") and returns run and job ids immediately. Repeating the call returns the same runs. Progress: GET /v1/studio/pipelines/{runId} or SSE /v1/events.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectorRunInput"}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"planId":{"type":"string"},"status":{"type":"string"},"runs":{"type":"array","items":{"type":"object","additionalProperties":{}}},"identityNotice":{"type":"string"},"progress":{"type":"string"}},"required":["planId","status","runs","identityNotice","progress"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/agent/metrics":{"get":{"tags":["Agent"],"summary":"Agent metrics: ticks, actions by type, denials by reason, spend, failures","security":[{"session":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":2160},"required":false,"name":"sinceHours","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":{}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers":{"get":{"tags":["Public"],"summary":"Discover public AI influencers","description":"Influencers whose owner made them public and that have an approved identity. sort=new (newest first, default), active (most recently active), followers (linked social followers; unknown last), trending (engagement in the last 72 hours; no metrics last) or market_cap (website market data; requires MARKET_DATA_ENABLED, unknown last). Optional status filter (comma-separated active, paused, insufficient_budget), exact niche filter and name/username search. Cursor pagination, default page size 24.","security":[],"parameters":[{"schema":{"type":"string","enum":["new","active","followers","trending","market_cap"]},"required":false,"name":"sort","in":"query"},{"schema":{"type":"string","description":"Comma-separated: active, paused, insufficient_budget."},"required":false,"description":"Comma-separated: active, paused, insufficient_budget.","name":"status","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":120},"required":false,"name":"niche","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":60,"description":"Case-insensitive substring of the name or username."},"required":false,"description":"Case-insensitive substring of the name or username.","name":"q","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicInfluencerPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/{id}":{"get":{"tags":["Public"],"summary":"Public influencer profile","description":"Bio, niche, persona summary, approved headshot and full body, recent published posts, public activity, and the linked token identity if any (mint, cluster, status; never prices or market data). Unknown and non-public influencers return NOT_FOUND.","security":[],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":50,"description":"Number of recent posts (default 12)."},"required":false,"description":"Number of recent posts (default 12).","name":"posts","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicInfluencerProfile"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/feed":{"get":{"tags":["Public"],"summary":"Recent published posts across public influencers","security":[],"parameters":[{"schema":{"type":"string","enum":["x","instagram","tiktok"]},"required":false,"name":"platform","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicFeedPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/by-symbol/{symbol}":{"get":{"tags":["Public"],"summary":"Public influencer profile by ticker","description":"Resolves a ticker (case-insensitive, optional leading $) to the public influencer whose token uses it on the current cluster, with the same body as the profile endpoint. Drafts and non-public influencers are never returned. Tickers are not unique on pump.fun; if older Mintfluence tokens share a ticker, the oldest token wins (created first, then by id). The mint address in `token.mint` is the identity.","security":[],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":40,"example":"LUNA"},"required":true,"name":"symbol","in":"path"},{"schema":{"type":["integer","null"],"minimum":0,"maximum":50},"required":false,"name":"posts","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicInfluencerProfile"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/{id}/market":{"get":{"tags":["Public"],"summary":"Market facts and price chart (website only)","description":"Price, market cap, holders, 24 h change and a price chart from on-chain reserves and our own snapshots. Requires MARKET_DATA_ENABLED. Neutral facts for display, never advice or predictions; not available to the ChatGPT plugin.","security":[],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","enum":["24h","7d","30d"]},"required":false,"name":"range","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicMarketDetail"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/{id}/activity-log":{"get":{"tags":["Public"],"summary":"Public transparency log","description":"What the influencer did and what it cost: generated media (provider, model, cost), spend approved by policy, strategy updates and posts. Only when the owner turned on publicActivityLog; NOT_FOUND otherwise. Never includes prompts, reasoning, keys or account identifiers.","security":[],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":40,"description":"ISO timestamp from nextBefore."},"required":false,"description":"ISO timestamp from nextBefore.","name":"before","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicActivityLogPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/platform-token":{"get":{"tags":["Public"],"summary":"Platform token (header \"CA\")","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPlatformToken"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/stats":{"get":{"tags":["Public"],"summary":"Platform stats: burned, fees paid to creators, AIs live","description":"burned = burns of the platform token verified on chain (finalized). feesPaidToCreators = per token, the platform's verified 30% share × creator-owned bps / platform bps (a 35/35 split with the AI treasury counts 35%), in lamports and in USD at the price recorded when each fee was claimed (usd null without a price source). aisLive = public influencers that are not paused.","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStats"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/burn":{"get":{"tags":["Public"],"summary":"Platform token burn record","description":"Total verified burns of the platform token and the burn transactions, newest first (keyset cursor). Verified burns only; signatures can be checked on any explorer.","security":[],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicBurn"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/fan-videos/settings":{"get":{"tags":["Fan videos"],"summary":"Fan video settings (owner)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoSettings"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Fan videos"],"summary":"Update fan video settings (owner)","description":"mode: off (default) | everyone | holders. holders requires a launched or linked token on this influencer and gates requests to wallets that hold at least minHolderBps basis points of its supply (default 5 = 0.05%). requireApproval (default true): fan videos appear publicly only after you approve them. Fans pay for their own generations; you are never charged. With the AI treasury enabled, treasury { perVideoUsd, perDayUsd } (defaults 5 and 25) caps what your influencer’s AI treasury pays for fan requests that choose billing \"treasury\" (day boundary 00:00 UTC); the holder pays the rest in SOL.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoSettingsUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoSettings"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/fan-videos":{"get":{"tags":["Fan videos"],"summary":"Fan videos of an influencer (creator view)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","enum":["pending_generation","generating","awaiting_creator","published","hidden","rejected","failed","awaiting_payment"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorFanVideoPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/fan-videos/{fanVideoId}/approve":{"post":{"tags":["Fan videos"],"summary":"Approve (publish) a fan video","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"fanVideoId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorFanVideo"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/fan-videos/{fanVideoId}/hide":{"post":{"tags":["Fan videos"],"summary":"Hide a fan video from the public profile","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"fanVideoId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorFanVideo"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/fan-videos/{fanVideoId}/reject":{"post":{"tags":["Fan videos"],"summary":"Reject a fan video","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"fanVideoId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","maxLength":500}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatorFanVideo"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/{id}/fan-videos/quote":{"post":{"tags":["Fan videos"],"summary":"Quote a fan video (no side effects except the recorded policy decision)","description":"Runs every eligibility check (availability, gating, limits, content rules) and prices the request on your own connected providers (or platform credits when billing is platform_credits).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoQuoteResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/{id}/fan-videos":{"post":{"tags":["Fan videos"],"summary":"Request a fan video (\"make a video with <influencer>\")","description":"Signed-in wallets only. You pay for your own generation: your connected provider account (default) or, only when billing is platform_credits, your platform credits. Spend is decided by your own fan policy (GET /v1/me/fan-policy). The result is yours to see at once; it appears on the influencer's public profile after the creator approves it (when the creator requires approval).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":8,"maxLength":200,"description":"Retries with the same key return the original result."},"required":false,"description":"Retries with the same key return the original result.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoRequest"}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanVideoCreated"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Fan videos"],"summary":"Published fan videos of a public influencer","description":"Published fan videos only, with short-lived signed media URLs. Fans are credited by their opted-in display handle or as \"a fan\"; no wallet addresses or user ids. Every item is AI-generated and labelled.","security":[],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicFanVideosPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/fan-videos":{"get":{"tags":["Fan videos"],"summary":"Your fan video requests","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["pending_generation","generating","awaiting_creator","published","hidden","rejected","failed","awaiting_payment"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyFanVideoPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/fan-videos/{id}":{"get":{"tags":["Fan videos"],"summary":"One of your fan video requests (visible to you before the creator approves it)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyFanVideo"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/fan-videos/{id}/payment/submit":{"post":{"tags":["Fan videos"],"summary":"Submit your signed SOL payment for a treasury-billed fan video","description":"Wallet session only. The transaction must be the payment prepared for this request (GET /v1/me/fan-videos/{id} → payment.transaction): exactly one transfer of the locked amount to the AI treasury wallet with the request memo, signed by your wallet. It is broadcast, and the video starts only after the payment is finalized on chain. No SOL refunds.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transaction":{"type":"string","minLength":100,"maxLength":4000}},"required":["transaction"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyFanVideo"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/fan-videos/{id}/payment/signature":{"post":{"tags":["Fan videos"],"summary":"Register the signature of a SOL payment your wallet broadcast","description":"Wallet session only. Signatures are never trusted on their own: the payment counts only after on-chain verification at finalized (recipient, exact amount, memo, your wallet as signer, before expiry, never used before).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","minLength":64,"maxLength":100}},"required":["signature"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyFanVideo"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/fan-policy":{"get":{"tags":["Fan videos"],"summary":"Your fan spending policy and usage","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanPolicy"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Fan videos"],"summary":"Update your fan spending policy","description":"Limits for your fan video spend (separate from every influencer policy). Daily and monthly counters reset at 00:00 UTC. Spends above requireApprovalAboveUsd wait for your approval in /v1/approvals.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanPolicyUpdate"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FanPolicy"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api-keys":{"post":{"tags":["API keys"],"summary":"Create a personal API key (shown once)","description":"Wallet session only. Keys look like mfk_… and are stored as a hash; the full key is returned only in this response. Scopes: read, generate, publish, automation. A key can never manage keys, provider credentials, wallets or wallet proofs, launches, fee sharing, the AI treasury, spending policy, approvals, account export or deletion (403 WALLET_SESSION_REQUIRED).","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"scopes":{"type":"array","items":{"type":"string","enum":["read","generate","publish","automation"]},"minItems":1,"maxItems":4},"expiresAt":{"type":"string","format":"date-time","description":"Optional expiry (ISO 8601, in the future)."},"rateLimitPerMinute":{"type":"integer","minimum":1,"maximum":600,"description":"Per-key limit (default 60 requests per minute)."}},"required":["name","scopes"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["API keys"],"summary":"List my API keys (metadata only)","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}}},"required":["items"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api-keys/{id}":{"delete":{"tags":["API keys"],"summary":"Revoke an API key (immediately)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhooks":{"post":{"tags":["Webhooks"],"summary":"Create a signed webhook (the signing secret is shown once)","description":"https URLs that resolve to public addresses only (checked now and again on every delivery; redirects are not followed). Each delivery carries Mintfluence-Signature: t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">. Payloads hold ids and minimal fields, never secrets or prompts. treasury.deposit needs the AI treasury.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["generation.completed","generation.failed","pipeline.completed","post.published","post.failed","approval.pending","fan_video.submitted","character.status_changed","treasury.deposit"]},"minItems":1,"maxItems":9},"description":{"type":"string","maxLength":200}},"required":["url","events"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Webhooks"],"summary":"List my webhooks","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"availableEvents":{"type":"array","items":{"type":"string","enum":["generation.completed","generation.failed","pipeline.completed","post.published","post.failed","approval.pending","fan_video.submitted","character.status_changed","treasury.deposit"]}}},"required":["items","availableEvents"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhooks/{id}":{"get":{"tags":["Webhooks"],"summary":"Webhook detail","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Webhooks"],"summary":"Change a webhook (URL, events, description) or disable / re-enable it","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["generation.completed","generation.failed","pipeline.completed","post.published","post.failed","approval.pending","fan_video.submitted","character.status_changed","treasury.deposit"]},"minItems":1},"description":{"type":"string","maxLength":200},"status":{"type":"string","enum":["active","disabled"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook and its delivery log","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]}},"required":["deleted"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhooks/{id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"Delivery log: every attempt with status, latency and a truncated response","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveries"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"summary":"Send a signed test event (type webhook.test) to this webhook","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"queued":{"type":"boolean","enum":[true]}},"required":["queued"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/treasury":{"get":{"tags":["AI treasury"],"summary":"AI treasury of an influencer (owner): balances, private ledger, deposit address, limits","description":"Owner only, wallet session. Balances come from the double-entry ledger. Mainnet funds pay only for real generations; mock-chain and test-network funds only for mock ones.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasury"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/treasury/entries":{"get":{"tags":["AI treasury"],"summary":"AI treasury ledger entries with private details (owner)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","pattern":"^\\d{1,18}$"},"required":false,"name":"before","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryEntries"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/treasury/top-ups":{"post":{"tags":["AI treasury"],"summary":"Create a top-up: an unsigned SOL transfer to the AI treasury wallet for your wallet to sign","description":"Owner only. Send sol (decimal string) or lamports, and the paying wallet (your sign-in wallet or a proven wallet). The response holds the unsigned transaction (transfer + memo binding this influencer and the intent) and its expiry. Mintfluence never signs it and never asks for keys. It counts only after on-chain verification at finalized; converted at the SOL/USD price of arrival minus the conversion fee.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sol":{"type":"string","pattern":"^\\d+(\\.\\d{1,9})?$"},"lamports":{"type":"string","pattern":"^\\d{1,20}$"},"wallet":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["wallet"],"additionalProperties":false}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryPaymentIntent"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/treasury/top-ups/{intentId}":{"get":{"tags":["AI treasury"],"summary":"Top-up intent (a fresh unsigned transaction while it is open)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"intentId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryPaymentIntentDetail"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/treasury/top-ups/{intentId}/submit":{"post":{"tags":["AI treasury"],"summary":"Submit the wallet-signed top-up transaction (checked against the intent, then broadcast)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"intentId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transaction":{"type":"string","minLength":100,"maxLength":4000}},"required":["transaction"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryPaymentSubmitted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/treasury/top-ups/{intentId}/signature":{"post":{"tags":["AI treasury"],"summary":"Register the signature of a top-up your wallet broadcast (verified on chain before it counts)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"intentId","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","minLength":64,"maxLength":100}},"required":["signature"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryPaymentRegistered"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/public/influencers/{id}/treasury":{"get":{"tags":["AI treasury"],"summary":"Public AI treasury ledger of an influencer (entry type, USD amount, time, linked public item)","description":"Deposits, conversion fees, spends (approved by the spending policy) and adjustments. Wallets, signatures, payment intents and prices are not public. Mock-chain entries are labelled \"· mock\".","security":[],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","pattern":"^\\d{1,18}$"},"required":false,"name":"before","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicAiTreasury"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/ai-treasury":{"get":{"tags":["AI treasury"],"summary":"AI treasury overview: scan state, review queue, spend today, outstanding balances","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryOverview"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/ai-treasury/deposits":{"get":{"tags":["AI treasury"],"summary":"Deposits by status (default: the review queue of deposits that could not be attributed)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["unattributed","dismissed","booked"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryDeposits"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/ai-treasury/deposits/{id}/resolve":{"post":{"tags":["AI treasury"],"summary":"Attribute an unattributed deposit to an influencer, or dismiss it (audited)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["attribute","dismiss"]},"characterId":{"type":"string","format":"uuid"},"note":{"type":"string","minLength":3,"maxLength":500}},"required":["action","note"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryDepositResolved"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/ai-treasury/adjustments":{"post":{"tags":["AI treasury"],"summary":"Admin adjustment of an influencer’s AI treasury (positive credits, negative debits; audited)","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"characterId":{"type":"string","format":"uuid"},"usd":{"type":"number","minimum":-10000,"maximum":10000},"funds":{"type":"string","enum":["mainnet","test"]},"isMock":{"type":"boolean"},"note":{"type":"string","minLength":3,"maxLength":500}},"required":["characterId","usd","funds","note"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiTreasuryAdjusted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/legal/risk-notice":{"get":{"tags":["Launch"],"summary":"The current risk notice to accept before a launch","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskNotice"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys":{"post":{"tags":["Launch"],"summary":"Start a launch: one-sentence description, an optional preset look or your own photo, Average / Bold / Extreme","description":"Wallet session. Creates the influencer draft and a journey that is saved after every step (GET /v1/launch-journeys lists open ones to resume). Answers 422 PROVIDER_REQUIRED with next steps when there is no way to pay for looks (no connected provider, no free looks, no platform credits).","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","minLength":3,"maxLength":280},"lookId":{"type":"string","pattern":"^[a-z0-9_]{2,48}$"},"intensity":{"type":"string","enum":["average","bold","extreme"]},"referencePhoto":{"type":"object","properties":{"mediaId":{"type":"string","format":"uuid"},"attestation":{"type":"object","properties":{"depictsRealPerson":{"type":"boolean"},"isSelf":{"type":"boolean"},"hasConsent":{"type":"boolean"},"ownsRights":{"type":"boolean"},"consentEvidenceMediaId":{"type":"string","format":"uuid"},"statement":{"type":"string","maxLength":500}},"required":["depictsRealPerson","isSelf","hasConsent","ownsRights","statement"]}},"required":["mediaId","attestation"]}},"required":["description"],"additionalProperties":false}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourney"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Launch"],"summary":"My launch journeys (open ones first to resume)","security":[{"session":[]}],"parameters":[{"schema":{"type":["boolean","null"]},"required":false,"name":"open","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyList"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}":{"get":{"tags":["Launch"],"summary":"Journey state, next step, looks, details, prepared transactions and step history","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyDetail"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Launch"],"summary":"Save details: name (becomes the ticker), ticker, token description, links, fee split, first buy, wallets","description":"aiShareBps is the AI part of the creator 7000 bps (default 3500; 0 = all to the creator; the 3000 bps that buys and burns $MINT is fixed). With the AI treasury on the AI share goes to the AI treasury, otherwise to aiBudgetWallet (a second wallet you own and prove). firstBuy is your own SOL (default none), with slippage protection. Editing after preparing cancels the unsigned launch; it is rebuilt at the next prepare.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":60},"symbol":{"type":"string","maxLength":16},"tokenDescription":{"type":"string","maxLength":1000},"links":{"type":"object","properties":{"website":{"type":"string","maxLength":200},"twitter":{"type":"string","maxLength":200},"telegram":{"type":"string","maxLength":200}},"additionalProperties":false},"aiShareBps":{"type":"integer","minimum":0,"maximum":6999},"aiBudgetWallet":{"type":["string","null"],"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"creatorWallet":{"type":["string","null"],"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"firstBuy":{"type":["object","null"],"properties":{"sol":{"type":"string","pattern":"^\\d+(\\.\\d{1,9})?$"},"lamports":{"type":"string","pattern":"^\\d{1,20}$"},"slippageBps":{"type":"integer","minimum":1,"maximum":5000}},"additionalProperties":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyUpdated"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/looks":{"post":{"tags":["Launch"],"summary":"Create candidate looks (headshot + full body each)","description":"Paid with your connected provider; otherwise free looks (FREE_LOOKS_PER_WALLET_PER_DAY) or your platform credits when offered. Per-wallet look limits apply.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","minimum":1,"maximum":4},"intensity":{"type":"string","enum":["average","bold","extreme"]}},"additionalProperties":false}}}},"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyLooks"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/looks/{candidateId}/approve":{"post":{"tags":["Launch"],"summary":"Approve a look (locks the identity)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","format":"uuid"},"required":true,"name":"candidateId","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyLookApproved"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/ticker":{"get":{"tags":["Launch"],"summary":"Check a ticker (format, reserved, taken by another Mintfluence influencer, suggestions)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":32},"required":true,"name":"symbol","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyTicker"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/risk-notice":{"post":{"tags":["Launch"],"summary":"Accept the current risk notice (stored with your wallet, the version and the time)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer","minimum":1},"accepted":{"type":"boolean","enum":[true]}},"required":["version","accepted"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyRiskAccepted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/estimate":{"post":{"tags":["Launch"],"summary":"Exact cost before signing: network fees, rent, priority fee, first buy, platform fee (SOL, and USD with a price source) and a balance check","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyEstimate"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/prepare":{"post":{"tags":["Launch"],"summary":"Prepare the launch transactions for your wallet to sign (fee split confirmed as final)","description":"Requires the accepted risk notice (422 RISK_NOTICE_REQUIRED), a proven creator wallet (422 WALLET_PROOF_REQUIRED: sign a fee_recipient wallet proof), an available ticker (checked again now: 409 TICKER_UNAVAILABLE with suggestions) and enough SOL (422 INSUFFICIENT_FUNDS). Anything already submitted is first checked on chain, so a launch is never created twice.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"feeSplitFinal":{"type":"boolean","enum":[true],"description":"You confirm the fee split is final: it is locked right after the launch is confirmed."}},"required":["feeSplitFinal"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyPrepared"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/submit":{"post":{"tags":["Launch"],"summary":"Submit your wallet-signed transactions (verified, broadcast in order, reconciled)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer","minimum":1,"maximum":5},"transaction":{"type":"string","minLength":100,"maxLength":4000}},"required":["seq","transaction"],"additionalProperties":false},"minItems":1,"maxItems":3}},"required":["transactions"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneySubmitted"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/signatures":{"post":{"tags":["Launch"],"summary":"Register signatures of transactions your wallet broadcast itself","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signatures":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer","minimum":1,"maximum":5},"signature":{"type":"string","minLength":64,"maxLength":100}},"required":["seq","signature"],"additionalProperties":false},"minItems":1,"maxItems":3}},"required":["signatures"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneySignatures"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/resume":{"post":{"tags":["Launch"],"summary":"Check the chain now and continue where the journey left off","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyResumed"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/launch-journeys/{id}/cancel":{"post":{"tags":["Launch"],"summary":"Cancel a journey that has not submitted anything","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchJourneyCancelled"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/manage":{"get":{"tags":["Launch"],"summary":"Owner manage panel: lifecycle, autopilot, fee split and lock, treasury, policy, kill switches, social connections, approvals, fan-video settings","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagePanel"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/emergency-stop":{"post":{"tags":["Launch"],"summary":"Emergency stop in one step: kill switch on, every scheduled post held, autopilot off","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagePanelStopped"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/resume-after-stop":{"post":{"tags":["Launch"],"summary":"Undo the emergency stop: restore the previous kill switch, autopilot and pause settings","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagePanelResumed"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/export":{"get":{"tags":["Privacy"],"summary":"Export your data (wallet session only)","description":"Profile, influencers, policies, generations, posts, activity, credits ledger, AI treasury ledger (owner view), routing preferences, API-key metadata, webhooks, social and provider connection status, OAuth grants and the media list with signed links. Never credentials, tokens, secrets, token hashes or credential fingerprints. Accounts with at most EXPORT_INLINE_MAX_ROWS rows get the export inline (200, delivery \"inline\"); larger ones, or async=true, get a job (202, delivery \"job\") whose status endpoint returns an expiring signed link. Personal API keys get 403 WALLET_SESSION_REQUIRED.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"async","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExportResponse"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/export/{id}":{"get":{"tags":["Privacy"],"summary":"Status and download link of an export job (wallet session only)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExportJob"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/users":{"get":{"tags":["Admin"],"summary":"List users","description":"Newest first. q matches the wallet address, display name (substring) or exact user id.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["active","suspended"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":100},"required":false,"name":"q","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/users/{id}/suspend":{"post":{"tags":["Admin"],"summary":"Suspend a user","description":"Blocks sign-in, sessions and OAuth/MCP access immediately, revokes all sessions, and engages the account kill switch so scheduled publishing, agent ticks and other side effects stop. Audited with the reason. Idempotent.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["reason"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSuspensionResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/users/{id}/unsuspend":{"post":{"tags":["Admin"],"summary":"Lift a suspension","description":"Re-activates the account and restores the kill-switch value it had before the suspension. The user signs in again (sessions were revoked). Audited.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","minLength":3,"maxLength":500}},"required":["reason"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminSuspensionResult"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/status":{"get":{"tags":["Admin"],"summary":"Platform status: readiness, queues, jobs, outcome-unknown work, failed tasks, platform costs, sponsored usage","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminStatus"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/tasks":{"get":{"tags":["Admin"],"summary":"Durable queue tasks (newest first)","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","enum":["queued","running","done","failed","cancelled"]},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","maxLength":100},"required":false,"name":"queue","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTaskPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/tasks/{id}/retry":{"post":{"tags":["Admin"],"summary":"Retry a failed or cancelled task","description":"Re-queues the task now with a fresh attempt budget. Task handlers are idempotent, and domain state machines (jobs, posts, launches) decide whether any external call is repeated. Audited.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","pattern":"^\\d{1,15}$","example":"42"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminTask"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/audit":{"get":{"tags":["Admin"],"summary":"Audit log (newest first) with hash-chain verification","description":"verify defaults to true on the first page and false on later pages (verification reads the whole log).","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","maxLength":100},"required":false,"name":"action","in":"query"},{"schema":{"type":"string","maxLength":100},"required":false,"name":"actorId","in":"query"},{"schema":{"type":"string","maxLength":100},"required":false,"name":"targetType","in":"query"},{"schema":{"type":"string","maxLength":200},"required":false,"name":"targetId","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"verify","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","maxLength":512},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditPage"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/blocked-identities":{"get":{"tags":["Admin"],"summary":"Public-figure screening list (admin-curated entries)","security":[{"session":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/BlockedIdentity"}},"note":{"type":"string"}},"required":["items","note"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Admin"],"summary":"Add a name to the public-figure screening list","description":"Names are normalized (case, accents, punctuation). Character creation, edits and content screening reject text containing a listed name. Takes effect immediately on this instance and within 60 seconds on others. Audited.","security":[{"session":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3,"maxLength":120},"reason":{"type":"string","enum":["public_figure","impersonation","trademark","other"],"default":"public_figure"}},"required":["name"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"item":{"$ref":"#/components/schemas/BlockedIdentity"},"created":{"type":"boolean"}},"required":["item","created"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/admin/blocked-identities/{id}":{"delete":{"tags":["Admin"],"summary":"Remove a name from the screening list","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockedIdentity"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/characters/{id}/analytics":{"get":{"tags":["Analytics"],"summary":"Influencer analytics: spend, generations, latency, publishing, metrics, platform-paid X calls","description":"Window: the last `days` UTC days including today (default 30, max 90). Spend comes from spend reservations (released ones excluded) with their cost status. Metrics use the latest snapshot per post; a metric the platform did not return is \"unavailable\" (value null in totals), never zero. Requires access to the influencer; other users get NOT_FOUND.","security":[{"session":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":90},"required":false,"name":"days","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CharacterAnalytics"}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict / invalid state / idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Feature permanently removed (SOCIAL_FEATURE_REMOVED)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unprocessable (capability unavailable, provider not connected, content rejected…)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited or quota exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/internal/metrics":{"get":{"tags":["Admin"],"summary":"Prometheus metrics (text exposition format)","description":"Requires `Authorization: Bearer <METRICS_TOKEN>` (or the CRON_SECRET). Gauges: jobs by state, tasks by queue/status and backlog age, policy decisions (24 h) by decision and reason code, posts by state, AI spend today, platform costs today, provider and social connection statuses, outcome-unknown work, pending approvals, database reachability.","security":[],"responses":{"200":{"description":"Metrics","content":{"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid metrics token"}}}}},"webhooks":{}}