{"components":{"responses":{"MessagingProblem":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private messaging problem","headers":{"Cache-Control":{"description":"Prevents caches from retaining user-specific messaging data","schema":{"const":"private, no-store","type":"string"}}}},"MessagingRateLimited":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Authenticated messaging mutation budget exhausted","headers":{"Cache-Control":{"description":"Prevents caches from retaining user-specific messaging data","schema":{"const":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's messaging budget resets","required":true,"schema":{"maximum":3600,"minimum":1,"type":"integer"}}}},"Problem":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.","headers":{"Retry-After":{"description":"Seconds before retrying an HTTP 429 or 503 response.","schema":{"minimum":1,"type":"integer"}},"X-Request-ID":{"description":"Request correlation identifier returned with an HTTP 429 or 503 response.","schema":{"minLength":1,"type":"string"}}}},"ContentRejected":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"code":{"const":"content_rejected"},"message":{"const":"This content could not be posted because it may violate our rules."}},"required":["code","message"],"type":"object"}}},"description":"The server-owned safety policy rejected the social content before persistence or delivery","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"SocialRestricted":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"code":{"const":"social_restricted"},"message":{"const":"Social access is restricted for this account."}},"required":["code","message"],"type":"object"}}},"description":"The account remains active for financial and recovery access but cannot perform this social write","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"TraderPrivateProblem":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable problem. HTTP 429 and 503 responses include retry and cache-validity fields plus Retry-After and X-Request-ID headers.","headers":{"Retry-After":{"description":"Seconds before retrying an HTTP 429 or 503 response.","schema":{"minimum":1,"type":"integer"}},"X-Request-ID":{"description":"Request correlation identifier returned with an HTTP 429 or 503 response.","schema":{"minLength":1,"type":"string"}},"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}}},"TraderDiscoveryUnsupported":{"description":"Discovery capability or period is unsupported. HTTP 501 does not include Retry-After or retryable fields; waiting does not enable the capability.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderDiscoveryUnsupportedProblem"}}},"headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}}}},"parameters":{"ChatId":{"in":"path","name":"chat_id","required":true,"schema":{"format":"uuid","type":"string"}},"ChatInviteId":{"in":"path","name":"invite_id","required":true,"schema":{"format":"uuid","type":"string"}},"MessagingCursor":{"in":"query","name":"cursor","required":false,"schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}},"MessagingPageLimit":{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},"MmCatalogEnvironment":{"in":"path","name":"environment","required":true,"schema":{"maxLength":64,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"}},"MmCatalogExchange":{"in":"path","name":"exchange","required":true,"schema":{"maxLength":64,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"}},"MmMarketId":{"in":"path","name":"market_id","required":true,"schema":{"format":"uuid","type":"string"}},"MmStrategy":{"in":"path","name":"strategy","required":true,"schema":{"maxLength":64,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"}},"MmStrategyVersion":{"in":"path","name":"version","required":true,"schema":{"maxLength":64,"minLength":1,"pattern":"^[a-z0-9_-]+$","type":"string"}},"MmBotId":{"in":"path","name":"bot_id","required":true,"schema":{"format":"uuid","type":"string"}},"MmConfigRevisionId":{"in":"path","name":"config_revision_id","required":true,"schema":{"format":"uuid","type":"string"}},"MmRunId":{"in":"path","name":"run_id","required":true,"schema":{"format":"uuid","type":"string"}},"MmIdempotencyKey":{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":16,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"}},"MmIfMatch":{"description":"Quoted resource version, for example `\"rv:3\"`.","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"rv:[1-9][0-9]*\"$","type":"string"}},"MmHistoryBotRunId":{"in":"query","name":"bot_run_id","required":false,"schema":{"format":"uuid","type":"string"}},"MmHistoryCursor":{"in":"query","name":"cursor","required":false,"schema":{"maxLength":4096,"minLength":1,"type":"string"}},"MmHistoryLimit":{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},"MmHistoryMarketId":{"in":"query","name":"market_id","required":false,"schema":{"format":"uuid","type":"string"}},"MmHistoryStatus":{"in":"query","name":"status","required":false,"schema":{"maxLength":80,"pattern":"^[a-z][a-z0-9_]*$","type":"string"}},"ChatMemberUserId":{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}},"ChatInviteStateFilter":{"in":"query","name":"state","required":false,"schema":{"enum":["pending"],"type":"string"},"description":"Only pending invitations are listed; the value is accepted for forward compatibility."},"ChatMessageId":{"in":"path","name":"message_id","required":true,"schema":{"format":"uuid","type":"string"}},"ChatReactionEmoji":{"in":"path","name":"emoji","required":true,"schema":{"maxLength":64,"minLength":1,"type":"string"},"description":"Percent-encoded emoji. Exactly one emoji grapheme; normalised server-side (NFC, U+FE0F removed) so both presentations count once."},"ChatReactionEmojiFilter":{"in":"query","name":"emoji","required":false,"schema":{"maxLength":64,"minLength":1,"type":"string"}},"ChatReactionContract":{"name":"contract","in":"query","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit reaction contract 2. Omission preserves the legacy unconditional mutation or reactor-list response."},"ChatReactionCommandId":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"Required for contract=2. Stable command UUID. Retry the same identity and intent after an uncertain result; a changed intent with this identity returns 409."},"ChatReactionEdgeVersion":{"name":"If-Match","in":"header","required":false,"schema":{"type":"string","pattern":"^\"(0|[1-9][0-9]{0,18})\"$","maxLength":21},"description":"Required for contract=2. Quoted caller-edge revision within signed 64-bit range (for example, \"0\"). Matching command replay resolves before this precondition; a fresh stale command returns 412."},"PositionSnapshotVersion":{"in":"header","name":"X-Arbital-Position-Snapshot-Version","required":false,"description":"Maximum position snapshot version understood by this client. Omitted or 1 returns an exact v1 projection; 2 exposes stored v2 fields. Stored v1 is never promoted. Does not change the stored snapshot or write version. Unsupported values are rejected before mutation.","schema":{"type":"string","enum":["1","2"],"default":"1"}}},"schemas":{"NotificationDeviceRegistration":{"additionalProperties":false,"properties":{"installation_id":{"maxLength":128,"minLength":16,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"},"platform":{"enum":["ios","android"],"type":"string"},"push_token":{"maxLength":256,"minLength":20,"pattern":"^(Expo|Exponent)PushToken\\[[A-Za-z0-9_-]{1,220}\\]$","type":"string"},"notification_contract":{"type":"integer","const":2}},"required":["installation_id","push_token","platform"],"type":"object"},"NotificationItem":{"additionalProperties":false,"properties":{"body":{"maxLength":180,"type":"string"},"created_at_unix_ms":{"format":"int64","minimum":1,"type":"integer"},"id":{"format":"uuid","type":"string"},"kind":{"enum":["deposit_transfer_completed","direct_message_received","group_invite_received","group_message_received","withdrawal_completed","followed_trader_bought","followed_trader_sold","comment_reply_received","post_reply_received","post_reaction_received","comment_reaction_received"],"type":"string"},"read_at_unix_ms":{"format":"int64","minimum":1,"type":"integer","description":"Present only when currently visible activity is read. Uses a valid individual or legacy acknowledgement timestamp when available, or the latest applicable global mark-all cutoff time. The global time can change when a later cutoff advances; it is not a historical per-notification write timestamp."},"route":{"additionalProperties":false,"description":"Where the client should open the notification. token_comments and posts routes carry the exact thread identifiers (for reactions: the post or comment that received them); other keys carry only the key.","properties":{"address":{"description":"Present for token_comments: canonical token address of the thread.","type":"string"},"chain_id":{"description":"Present for token_comments: canonical chain of the thread.","type":"string"},"comment_id":{"description":"Present for token_comments: the recipient's own comment that received the reply.","format":"uuid","type":"string"},"key":{"enum":["messages","portfolio","posts","social_activity","token_comments"],"type":"string"},"parent_reply_id":{"description":"Present for posts when the reply answered the recipient's own reply: that reply.","format":"uuid","type":"string"},"post_id":{"description":"Present for posts: the community post the reply belongs to.","format":"uuid","type":"string"},"reply_id":{"description":"Present for token_comments and posts: the reply that triggered the notification.","format":"uuid","type":"string"}},"required":["key"],"type":"object"},"schema_version":{"const":1,"type":"integer"},"title":{"maxLength":80,"type":"string"}},"required":["id","kind","schema_version","title","body","route","created_at_unix_ms"],"type":"object"},"NotificationPage":{"additionalProperties":false,"properties":{"next_cursor":{"maxLength":512,"type":["string","null"],"description":"Continue while this is non-null, including when notifications is empty or shorter than 20 items. Each page examines a bounded window of history and applies current visibility checks."},"notifications":{"items":{"$ref":"#/components/schemas/NotificationItem"},"maxItems":20,"type":"array"}},"required":["notifications","next_cursor"],"type":"object"},"AcceptedChatInvite":{"additionalProperties":false,"properties":{"invite":{"$ref":"#/components/schemas/ChatInvite"},"member":{"$ref":"#/components/schemas/ChatMember"}},"required":["invite","member"],"type":"object"},"BlockState":{"additionalProperties":false,"properties":{"blocked_user_id":{"format":"uuid","type":"string"},"blocker_user_id":{"format":"uuid","type":"string"},"is_blocked":{"type":"boolean"}},"required":["blocker_user_id","blocked_user_id","is_blocked"],"type":"object"},"BlockedUser":{"additionalProperties":false,"properties":{"display_name":{"maxLength":50,"type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},"required":["user_id","username","display_name"],"type":"object"},"BlockedUserPage":{"additionalProperties":false,"properties":{"next_cursor":{"type":["string","null"]},"users":{"items":{"$ref":"#/components/schemas/BlockedUser"},"maxItems":100,"type":"array"}},"required":["users","next_cursor"],"type":"object"},"BuildInfo":{"additionalProperties":false,"properties":{"git_sha":{"type":"string"},"service":{"type":"string"},"version":{"type":"string"}},"required":["service","version","git_sha"],"type":"object"},"MobileVersionPolicy":{"additionalProperties":false,"properties":{"latest_build":{"minimum":1,"type":"integer"},"message":{"maxLength":280,"minLength":1,"type":"string"},"minimum_supported_build":{"minimum":1,"type":"integer"},"update_url":{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"}},"required":["latest_build","minimum_supported_build","update_url","message"],"type":"object"},"Chat":{"additionalProperties":false,"properties":{"chat_id":{"format":"uuid","type":"string"},"created_at_unix_ms":{"minimum":0,"type":"integer"},"created_by_user_id":{"format":"uuid","type":"string"},"deleted_at_unix_ms":{"type":["integer","null"]},"description":{"maxLength":1000,"type":["string","null"]},"dm_peer":{"oneOf":[{"$ref":"#/components/schemas/MessagingUserSummary"},{"type":"null"}]},"discoverability":{"enum":["listed","unlisted"],"type":"string"},"join_policy":{"enum":["open","approval","invite",null]},"last_message":{"oneOf":[{"$ref":"#/components/schemas/ChatLastMessage"},{"type":"null"}]},"kind":{"enum":["dm","group"],"type":"string"},"name":{"maxLength":80,"type":["string","null"]},"read_access":{"enum":["public","members"],"type":"string"},"updated_at_unix_ms":{"minimum":0,"type":"integer"},"unread_count":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"version":{"pattern":"^[1-9][0-9]*$","type":"string"},"member_count":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"Active members, decimal string."},"viewer_role":{"enum":["owner","admin","member",null],"description":"The caller's active role, or null for a public-group reader who is not a member."},"permissions":{"$ref":"#/components/schemas/ChatPermissions"}},"required":["chat_id","kind","discoverability","read_access","join_policy","name","description","created_by_user_id","version","created_at_unix_ms","updated_at_unix_ms","deleted_at_unix_ms","dm_peer","last_message","unread_count","member_count","viewer_role","permissions"],"type":"object"},"ChatLastMessage":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/MessagingUserSummary"},"body":{"description":"At most the first 200 Unicode code points of a nonempty message body; media-only messages use Photo, N photos, GIF or Media unavailable from current attachment state. An external-GIF-only message uses GIF. No external reference or rendition URL is included in chat-list previews.","maxLength":200,"type":"string"},"created_at_unix_ms":{"minimum":0,"type":"integer"},"message_id":{"format":"uuid","type":"string"},"sequence":{"pattern":"^[1-9][0-9]*$","type":"string"}},"required":["message_id","author","body","sequence","created_at_unix_ms"],"type":"object"},"ChatInvite":{"additionalProperties":false,"properties":{"chat_id":{"format":"uuid","type":"string"},"created_at_unix_ms":{"minimum":0,"type":"integer"},"expires_at_unix_ms":{"minimum":0,"type":"integer"},"invite_id":{"format":"uuid","type":"string"},"client_invite_id":{"format":"uuid","type":"string"},"invited_by_user_id":{"format":"uuid","type":"string"},"invited_by":{"$ref":"#/components/schemas/MessagingUserSummary"},"invited_user_id":{"format":"uuid","type":"string"},"invited_user":{"$ref":"#/components/schemas/MessagingUserSummary"},"proposed_role":{"enum":["admin","member"],"type":"string"},"responded_at_unix_ms":{"type":["integer","null"]},"state":{"enum":["pending","accepted","declined","revoked","expired"],"type":"string"}},"required":["invite_id","client_invite_id","chat_id","invited_user_id","invited_by_user_id","proposed_role","state","created_at_unix_ms","expires_at_unix_ms","responded_at_unix_ms","invited_by","invited_user"],"type":"object"},"ChatInvitePage":{"additionalProperties":false,"properties":{"invites":{"items":{"$ref":"#/components/schemas/ChatInvite"},"maxItems":100,"type":"array"},"next_cursor":{"type":["string","null"]}},"required":["invites","next_cursor"],"type":"object"},"ChatMember":{"additionalProperties":false,"properties":{"chat_id":{"format":"uuid","type":"string"},"joined_at_unix_ms":{"minimum":0,"type":"integer"},"role":{"enum":["owner","admin","member"],"type":"string"},"state":{"enum":["active","left","removed","banned"],"type":"string"},"state_changed_at_unix_ms":{"minimum":0,"type":"integer"},"state_changed_by_user_id":{"format":"uuid","type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"user":{"$ref":"#/components/schemas/MessagingUserSummary"},"version":{"pattern":"^[1-9][0-9]*$","type":"string"}},"required":["chat_id","user_id","role","state","joined_at_unix_ms","state_changed_at_unix_ms","state_changed_by_user_id","version","user"],"type":"object"},"ChatMessage":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/MessagingUserSummary"},"author_user_id":{"format":"uuid","type":"string"},"body":{"maxLength":2000,"type":"string","description":"Stored caption, possibly empty for an uploaded-media-only or external-GIF-only message. Deleted media slots remain valid and do not change message sequence or read cursors."},"chat_id":{"format":"uuid","type":"string"},"client_message_id":{"format":"uuid","type":"string"},"created_at_unix_ms":{"minimum":0,"type":"integer"},"deleted_at_unix_ms":{"type":["integer","null"]},"edited_at_unix_ms":{"type":["integer","null"]},"message_id":{"format":"uuid","type":"string"},"reply_to_message_id":{"format":"uuid","type":["string","null"]},"sequence":{"pattern":"^[1-9][0-9]*$","type":"string"},"version":{"pattern":"^[1-9][0-9]*$","type":"string"},"media":{"$ref":"#/components/schemas/SocialMediaGallery"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"},"attachments":{"items":{"$ref":"#/components/schemas/ChatMessageAttachment"},"maxItems":1,"minItems":1,"type":"array","description":"Immutable position cards stored with the message; omitted when there are none."},"reactions":{"items":{"$ref":"#/components/schemas/ChatMessageReactionSummary"},"type":"array","description":"Omitted when nobody has reacted. version is the reaction revision."},"receipts":{"$ref":"#/components/schemas/ChatMessageReceiptSummary"},"viewer_reactions":{"items":{"maxLength":16,"minLength":1,"type":"string"},"type":"array","description":"Emoji the caller has set on this message; omitted when none. Not present on realtime frames."}},"required":["message_id","chat_id","author_user_id","client_message_id","body","reply_to_message_id","sequence","version","created_at_unix_ms","edited_at_unix_ms","deleted_at_unix_ms","author"],"type":"object","description":"A DM or group message. Optional gif contains the saved external reference for a visible, nondeleted message, including replies identified by reply_to_message_id. Resolve and play from KLIPY on the end-user client; this is not an approved social-media upload. The reference remains readable when new GIF writes are disabled, is omitted when absent or deleted, and is never returned with nonempty media."},"ChatMessagePage":{"additionalProperties":false,"properties":{"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"maxItems":100,"type":"array"},"next_cursor":{"type":["string","null"]}},"required":["messages","next_cursor"],"type":"object"},"ChatPage":{"additionalProperties":false,"properties":{"chats":{"items":{"$ref":"#/components/schemas/Chat"},"maxItems":100,"type":"array"},"next_cursor":{"type":["string","null"]}},"required":["chats","next_cursor"],"type":"object"},"ChatReadState":{"additionalProperties":false,"properties":{"chat_id":{"format":"uuid","type":"string"},"last_read_sequence":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"updated_at_unix_ms":{"minimum":0,"type":"integer"},"user_id":{"format":"uuid","type":"string"},"last_delivered_sequence":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"Explicit device acknowledgement watermark; never below last_read_sequence."},"delivered_at_unix_ms":{"type":["integer","null"],"description":"When the delivered watermark last advanced; null before any acknowledgement."},"read_at_unix_ms":{"type":["integer","null"]}},"required":["chat_id","last_read_sequence","updated_at_unix_ms","user_id","last_delivered_sequence","delivered_at_unix_ms","read_at_unix_ms"],"type":"object","description":"A member's acknowledgement watermarks. Sent = committed message. Delivered = the member's device acknowledged receipt of messages up to the sequence. Read follows visibility and implies delivered. Both are monotonic per member and never come from push-provider receipts."},"CreateChatInviteRequest":{"additionalProperties":false,"properties":{"client_invite_id":{"format":"uuid","type":"string"},"invited_user_id":{"format":"uuid","type":"string"},"proposed_role":{"enum":["admin","member"],"type":"string"}},"required":["client_invite_id","invited_user_id","proposed_role"],"type":"object"},"CreateDirectChatRequest":{"additionalProperties":false,"properties":{"peer_user_id":{"format":"uuid","type":"string"}},"required":["peer_user_id"],"type":"object"},"CreateGroupChatRequest":{"additionalProperties":false,"properties":{"description":{"maxLength":1000,"type":"string"},"discoverability":{"enum":["listed","unlisted"],"type":"string"},"join_policy":{"enum":["open","approval","invite"],"type":"string"},"name":{"maxLength":80,"minLength":1,"type":"string"},"read_access":{"enum":["public","members"],"type":"string"}},"required":["discoverability","join_policy","name","read_access"],"type":"object"},"MessagingUserSummary":{"additionalProperties":false,"properties":{"avatar_url":{"description":"Approved profile image or stable CALLD default avatar URL.","maxLength":2048,"type":["string","null"]},"display_name":{"maxLength":50,"type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},"required":["user_id","username","display_name","avatar_url"],"type":"object"},"MessagingWebSocketTicket":{"additionalProperties":false,"properties":{"expires_at_unix":{"minimum":1,"type":"integer"},"protocol":{"const":"arbital.messaging.v1","type":"string"},"ticket_protocol":{"pattern":"^arbital\\.messaging\\.ticket\\.[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","readOnly":true,"type":"string"},"websocket_path":{"type":"string","enum":["/v2/messaging/ws?version=1","/v2/messaging/ws?version=1&position_snapshot_version=2"]}},"required":["websocket_path","protocol","ticket_protocol","expires_at_unix"],"type":"object"},"SendChatMessageRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":2000,"type":"string"},"client_message_id":{"format":"uuid","type":"string"},"reply_to_message_id":{"format":"uuid","type":"string","description":"Optional exact parent message in this same chat. Use the existing message ID to send a GIF as a reply; cross-chat targets are invalid."},"media_ids":{"$ref":"#/components/schemas/SocialMediaIds"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"},"attachments":{"items":{"$ref":"#/components/schemas/ChatPositionAttachmentInput"},"maxItems":1,"type":"array"}},"required":["client_message_id"],"type":"object","anyOf":[{"required":["body"],"properties":{"body":{"type":"string","minLength":1,"pattern":"\\S"}},"not":{"required":["gif"]}},{"required":["body","media_ids"],"properties":{"media_ids":{"type":"array","minItems":1,"items":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}},"not":{"required":["gif"]}},{"required":["gif"],"properties":{"media_ids":{"type":"array","const":[]}}},{"required":["attachments"],"properties":{"attachments":{"type":"array","minItems":1}}}],"description":"Send text, approved uploaded media, or one external KLIPY gif reference in a DM or group chat. Body remains required without gif and may be empty only with nonempty media_ids scoped to this exact chat. With gif, body may be omitted or empty; captions are limited to 2000 Unicode code points. gif and nonempty media_ids are mutually exclusive; media_ids: [] is allowed with gif. Omit absent gif; null and arbitrary URLs are invalid. A retry must retain the same client_message_id, trimmed body, reply target, ordered media IDs and exact GIF provider/id/slug. With GIF writes enabled and current authorization, identical retries return the existing message; changed content returns 409 messaging_conflict. A GIF-only retry may omit body or send an empty body equivalently. Retrying an erased GIF reference conflicts rather than restoring deleted content. SOCIAL_EXTERNAL_GIFS_ENABLED defaults to false; when disabled every submitted gif request, including retries, returns 503 messaging_unavailable. Reconcile a prior send through GET history; saved references remain readable. A position card names the sender's asset; the backend reads the sender's portfolio at send time and stores exactly what it read with the message, never rewritten. A card requires a non-empty body until mobile clients accept an attachment as content. A retry with the same client_message_id returns the committed message and card unchanged; different figures under the same key conflict."},"SetChatReadRequest":{"additionalProperties":false,"properties":{"last_read_sequence":{"maxLength":19,"minLength":1,"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["last_read_sequence"],"type":"object"},"CreateQuoteRequestV2":{"description":"Stateless same-chain, Solana-to-EVM, EVM-to-Solana, or Hyperliquid perps-funding quote request without an Idempotency-Key header, lease, durable quote state, or pulse attribution. Omitted order_type and explicit market preserve the existing flow. Explicit limit prepares a client-signed Solana USDC or same-chain EVM ERC-20 order for submission to the separate edge /v1/orders route; it does not execute a swap.","oneOf":[{"$ref":"#/components/schemas/CreateSameChainBuyQuoteRequestV2"},{"$ref":"#/components/schemas/CreateSameChainSellQuoteRequestV2"},{"$ref":"#/components/schemas/CreateSvmToEvmQuoteRequestV2"},{"$ref":"#/components/schemas/CreateEvmToSvmQuoteRequestV2"},{"$ref":"#/components/schemas/CreateHyperliquidFundingQuoteRequestV2"},{"$ref":"#/components/schemas/CreateServerBuyQuoteRequest"},{"$ref":"#/components/schemas/CreateServerSellQuoteRequest"},{"$ref":"#/components/schemas/CreateLimitBuyQuoteRequestV2"},{"$ref":"#/components/schemas/CreateLimitSellQuoteRequestV2"},{"$ref":"#/components/schemas/CreateEvmLimitBuyQuoteRequestV2"},{"$ref":"#/components/schemas/CreateEvmLimitSellQuoteRequestV2"}]},"CreateRpcWebSocketTicketRequest":{"additionalProperties":false,"properties":{"chain_id":{"$ref":"#/components/schemas/RpcWebSocketChainId"}},"required":["chain_id"],"type":"object"},"CreateSameChainBuyQuoteRequestV2":{"additionalProperties":false,"not":{"required":["execution_speed","priority_fee"]},"properties":{"asset_mint":{"maxLength":44,"minLength":32,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","type":"string"},"exact_input_usdc_atomic":{"maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"enum":["normal","fast"],"type":"string"},"operation":{"const":"same_chain_buy","type":"string"},"priority_fee":{"$ref":"#/components/schemas/PriorityFeePreferenceV2"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","asset_mint","exact_input_usdc_atomic"],"type":"object"},"CreateSameChainSellQuoteRequestV2":{"additionalProperties":false,"not":{"required":["execution_speed","priority_fee"]},"oneOf":[{"required":["exact_input_asset_atomic"]},{"required":["sell_all"]}],"properties":{"asset_mint":{"maxLength":44,"minLength":32,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","type":"string"},"exact_input_asset_atomic":{"maxLength":19,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"enum":["normal","fast"],"type":"string"},"operation":{"const":"same_chain_sell","type":"string"},"priority_fee":{"$ref":"#/components/schemas/PriorityFeePreferenceV2"},"sell_all":{"const":true,"description":"Resolve the exact input from the authenticated controlled wallet's live SPL-token balance during this stateless quote request.","type":"boolean"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","asset_mint"],"type":"object"},"ExecutionFailureCode":{"description":"Provider-agnostic execution failure classification. Provider payloads and internal invariant details are never exposed.","enum":["route_unavailable","asset_not_tradeable","trade_size_out_of_range","swap_impact_too_high","delivery_address_unavailable","insufficient_available_balance","trade_already_in_flight","authorization_denied","sponsorship_unavailable","sponsorship_limit_exceeded","transaction_expired","quote_preview_expired","broadcast_unknown","transaction_reverted","transaction_not_landed","manual_review_required","execution_unavailable","provider_response_rejected","simulation_failed","execution_misconfigured"],"type":"string"},"ExecutionQuoteFeeV2":{"additionalProperties":false,"properties":{"amount_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"asset":{"maxLength":128,"minLength":1,"type":"string"},"certainty":{"enum":["exact","estimated"],"type":"string"},"kind":{"enum":["application"],"type":"string"}},"required":["kind","asset","amount_atomic","certainty"],"type":"object"},"FollowState":{"additionalProperties":false,"properties":{"followed_user_id":{"format":"uuid","type":"string"},"follower_user_id":{"format":"uuid","type":"string"},"is_following":{"type":"boolean"}},"required":["follower_user_id","followed_user_id","is_following"],"type":"object"},"FollowSuggestionPage":{"additionalProperties":false,"properties":{"next_cursor":{"type":["string","null"]},"users":{"items":{"$ref":"#/components/schemas/PublicProfile"},"maxItems":100,"type":"array"}},"required":["users","next_cursor"],"type":"object"},"FundingAsset":{"additionalProperties":false,"properties":{"decimals":{"const":6},"mint":{"const":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},"symbol":{"const":"USDC"},"token_program":{"const":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}},"required":["symbol","mint","token_program","decimals"],"type":"object"},"HealthResponse":{"additionalProperties":false,"properties":{"status":{"const":"ready"}},"required":["status"],"type":"object"},"Me":{"additionalProperties":false,"properties":{"bio":{"type":["string","null"]},"display_name":{"type":["string","null"]},"profile_version":{"format":"int64","minimum":1,"type":"integer"},"user_id":{"format":"uuid","type":"string"},"wallet":{"$ref":"#/components/schemas/PublicWallet"},"x_account":{"oneOf":[{"$ref":"#/components/schemas/PublicXAccount"},{"type":"null"}]}},"required":["user_id","display_name","bio","x_account","profile_version","wallet"],"type":"object"},"MeV2":{"additionalProperties":false,"properties":{"bio":{"type":["string","null"]},"cross_chain_delivery_address":{"$ref":"#/components/schemas/PublicCrossChainDeliveryAddress"},"display_name":{"type":["string","null"]},"holder_profile_public":{"description":"Explicit consent to associate this CALLD profile with live public holder observations.","type":"boolean"},"cover_image_url":{"description":"Reserved for a future moderated cover-image capability; currently null.","type":["string","null"]},"profile_image_url":{"description":"Backend-owned URL for the approved profile image or the user's stable CALLD default avatar.","format":"uri","type":["string","null"]},"portfolio_public":{"description":"Explicit consent to let other authenticated viewers read this profile's request-time Codex portfolio; the owner retains access.","type":"boolean"},"profile_version":{"format":"int64","minimum":1,"type":"integer"},"user_id":{"format":"uuid","type":"string"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"},"wallet":{"$ref":"#/components/schemas/PublicWallet"},"x_account":{"oneOf":[{"$ref":"#/components/schemas/PublicXAccount"},{"type":"null"}]}},"required":["user_id","username","display_name","bio","cover_image_url","holder_profile_public","profile_image_url","portfolio_public","x_account","profile_version","wallet","cross_chain_delivery_address"],"type":"object"},"CodexWatchPortfolio":{"additionalProperties":false,"description":"Shared portfolio response shape. GET /v3/portfolio uses a request-time Codex wallet snapshot; GET /v3/portfolio/indexer uses finalized Indexer quantities and eligible indexed basis on Indexer-owned chains, identity-matched Codex market cards, and Codex wallet rows only outside Indexer chain coverage. Display data never authorizes quotes or sells.","properties":{"freshness":{"description":"Freshness of the request-time Codex snapshot. Successful backend reads emit fresh; stale remains a response-schema compatibility value for older deployments.","enum":["fresh","stale"],"type":"string"},"message":{"type":"string"},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"partial":{"type":"boolean"},"price_observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"responseObject":{"$ref":"#/components/schemas/CodexWatchPortfolioObject"},"served_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"source":{"$ref":"#/components/schemas/CodexWatchPortfolioSource"},"statusCode":{"const":200,"type":"integer"},"summary":{"$ref":"#/components/schemas/CodexWatchPortfolioSummary"},"success":{"const":true,"type":"boolean"}},"required":["success","message","observed_at_ms","served_at_ms","price_observed_at_ms","freshness","partial","responseObject","statusCode","summary"],"type":"object"},"CodexWatchPortfolioSource":{"additionalProperties":false,"description":"Per-chain Codex holdings completeness. This is independent of token-card pricing and cost-basis enrichment and must not authorize execution.","properties":{"chains":{"items":{"$ref":"#/components/schemas/CodexWatchPortfolioSourceChain"},"maxItems":16,"type":"array"},"observedAtUnixMs":{"minimum":0,"type":"integer"},"status":{"enum":["partial","ready","unavailable"],"type":"string"}},"required":["chains","observedAtUnixMs","status"],"type":"object"},"CodexWatchPortfolioSourceChain":{"additionalProperties":false,"properties":{"chainId":{"pattern":"^(solana:mainnet-beta|eip155:[1-9][0-9]*)$","type":"string"},"networkId":{"minimum":1,"type":"integer"},"observedAtUnixMs":{"minimum":0,"type":"integer"},"status":{"enum":["ready","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["chainId","networkId","observedAtUnixMs","status","truncated"],"type":"object"},"CodexWatchPortfolioSummary":{"additionalProperties":false,"description":"Backend-computed request-time valuation. total_equity_usd is exact-only across consumer-visible holdings; priced_equity_usd is a labelled subtotal when coverage or pricing is incomplete. After a successful metadata lookup, non-native holdings with neither a provider token card nor a usable provider balance price are omitted from the consumer portfolio and valuation. Clients must not reconstruct either aggregate in the browser.","properties":{"coverage_reasons":{"items":{"enum":["chain_unavailable","holdings_limit","portfolio_incomplete","unpriced_holdings"],"type":"string"},"type":"array","uniqueItems":true},"priced_cash_usd":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"priced_equity_usd":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"priced_holding_count":{"minimum":0,"type":"integer"},"total_equity_usd":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":["string","null"]},"unpriced_holding_count":{"minimum":0,"type":"integer"},"valuation_complete":{"type":"boolean"}},"required":["coverage_reasons","priced_cash_usd","priced_equity_usd","priced_holding_count","total_equity_usd","unpriced_holding_count","valuation_complete"],"type":"object"},"CodexWatchPortfolioObject":{"additionalProperties":false,"properties":{"balances":{"items":{"$ref":"#/components/schemas/CodexWatchPosition"},"maxItems":2000,"type":"array"},"experimentalClosedPositions":{"$ref":"#/components/schemas/ExperimentalClosedPositions"},"livePerpPnl":{"type":"number"},"nativeEvmBalances":{"items":{"$ref":"#/components/schemas/CodexWatchPosition"},"maxItems":2000,"type":"array"},"otherPnl":{"type":"number"},"otherPnlV2":{"type":"number"},"unverifiedBalances":{"description":"Provider-reported holdings quarantined from portfolio totals because they are scam-flagged or lack sufficient verification, purchase-basis, liquidity, and volume evidence.","items":{"$ref":"#/components/schemas/CodexWatchPosition"},"maxItems":2000,"type":"array"},"walletCoverage":{"$ref":"#/components/schemas/PortfolioWalletCoverage"},"assetPositions":{"type":"array","items":{"$ref":"#/components/schemas/AssetPositionSummary"}}},"required":["balances","otherPnl","otherPnlV2","nativeEvmBalances","livePerpPnl"],"type":"object"},"ExperimentalClosedPositionTrade":{"additionalProperties":false,"description":"One Codex wallet swap leg used by the experimental closed-position reconstruction.","properties":{"amount":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"createdAt":{"format":"date-time","type":"string"},"id":{"type":"string"},"provider":{"type":"string"},"side":{"enum":["buy","sell"],"type":"string"},"signature":{"type":"string"},"usdNotional":{"minimum":0,"type":"number"}},"required":["amount","createdAt","id","provider","side","signature","usdNotional"],"type":"object"},"ExperimentalClosedPositionRecap":{"additionalProperties":false,"description":"Experimental reconstruction of a closed position from complete bounded Codex wallet-swap history. It is not durable Arbital accounting and can be affected by transfers, aggregator multi-hops, provider classification, and missing fee data.","properties":{"averagePurchasePriceUsd":{"exclusiveMinimum":0,"type":"number"},"calculationStatus":{"const":"experimental_codex_reconstruction","type":"string"},"chainId":{"type":"string"},"closedAt":{"format":"date-time","type":"string"},"currentHoldingAmount":{"const":"0","type":"string"},"feesStatus":{"const":"unavailable","type":"string"},"openedAt":{"format":"date-time","type":"string"},"percentageStillHeld":{"const":0,"type":"number"},"positionId":{"type":"string"},"realizedPnlUsd":{"type":"number"},"state":{"const":"closed","type":"string"},"tokenAddress":{"type":"string"},"tokenImageUrl":{"format":"uri","type":["string","null"]},"tokenName":{"type":["string","null"]},"tokenSymbol":{"type":["string","null"]},"totalBoughtAmount":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"totalFeesUsd":{"type":"null"},"totalPurchaseCostUsd":{"minimum":0,"type":"number"},"totalSaleProceedsUsd":{"minimum":0,"type":"number"},"totalSoldAmount":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"trades":{"items":{"$ref":"#/components/schemas/ExperimentalClosedPositionTrade"},"maxItems":50,"minItems":2,"type":"array"},"unrealizedPnlUsd":{"const":0,"type":"number"},"updatedAt":{"format":"date-time","type":"string"}},"required":["averagePurchasePriceUsd","calculationStatus","chainId","closedAt","currentHoldingAmount","feesStatus","openedAt","percentageStillHeld","positionId","realizedPnlUsd","state","tokenAddress","tokenImageUrl","tokenName","tokenSymbol","totalBoughtAmount","totalFeesUsd","totalPurchaseCostUsd","totalSaleProceedsUsd","totalSoldAmount","trades","unrealizedPnlUsd","updatedAt"],"type":"object"},"ExperimentalClosedPositions":{"additionalProperties":false,"description":"Experimental closed-position collection returned only with include=position_recap. When status is history_truncated, items are incomplete candidates reconstructed only from the bounded recent history window.","properties":{"experimental":{"const":true,"type":"boolean"},"items":{"items":{"$ref":"#/components/schemas/ExperimentalClosedPositionRecap"},"maxItems":25,"type":"array"},"status":{"enum":["available","history_truncated","unavailable"],"type":"string"}},"required":["experimental","items","status"],"type":"object"},"PortfolioPerformancePoint":{"additionalProperties":false,"properties":{"cash_usd":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"equity_usd":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["observed_at_ms","equity_usd","cash_usd"],"type":"object"},"PortfolioPerformanceChange":{"oneOf":[{"additionalProperties":false,"properties":{"amount_usd":{"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"baseline_observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"kind":{"const":"raw_equity_change","type":"string"},"status":{"const":"available","type":"string"}},"required":["status","kind","baseline_observed_at_ms","amount_usd"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"raw_equity_change","type":"string"},"reason":{"enum":["insufficient_history","history_gap"],"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","kind","reason"],"type":"object"}]},"PortfolioPerformanceObject":{"additionalProperties":false,"properties":{"change":{"$ref":"#/components/schemas/PortfolioPerformanceChange"},"currency":{"const":"USD","type":"string"},"current":{"$ref":"#/components/schemas/PortfolioPerformancePoint"},"points":{"items":{"$ref":"#/components/schemas/PortfolioPerformancePoint"},"maxItems":121,"type":"array"},"range":{"enum":["24h","7d","30d","all"],"type":"string"}},"required":["range","currency","current","change","points"],"type":"object"},"PortfolioPerformance":{"additionalProperties":false,"description":"Arbital-owned hourly spot-wallet equity history. Values are display-only; change is raw equity movement and includes deposits, withdrawals, and transfers.","properties":{"message":{"const":"Portfolio performance found","type":"string"},"responseObject":{"$ref":"#/components/schemas/PortfolioPerformanceObject"},"statusCode":{"const":200,"type":"integer"},"success":{"const":true,"type":"boolean"}},"required":["success","message","responseObject","statusCode"],"type":"object"},"CodexWatchPositionRecap":{"additionalProperties":false,"description":"Opt-in display recap derived from the provider basis already used for userToken. It describes only a currently visible provider position, is not a durable Arbital position cycle, and is not quote, settlement, accounting, or tax authority.","properties":{"averagePurchasePriceUsd":{"exclusiveMinimum":0,"type":"number"},"calculationStatus":{"const":"provider_estimate","type":"string"},"currentHoldingAmount":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"dataSource":{"enum":["arbital_indexer","arbital_relay","codex","codex_plus_mobula_receipts"],"type":"string"},"feesStatus":{"const":"unavailable","type":"string"},"openedAt":{"format":"date-time","type":"string"},"percentageStillHeld":{"maximum":100,"minimum":0,"type":"number"},"realizedPnlUsd1y":{"type":["number","null"],"description":"Codex rolling one-year realized profit for the wallet/token, not current-cycle P&L. Null when provider evidence is unavailable or the basis is synthetic; zero means a reported zero."},"remainingCostBasisUsd":{"minimum":0,"type":"number"},"state":{"const":"open","type":"string"},"totalBoughtAmount":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"totalFeesUsd":{"nullable":true,"type":"number"},"totalPurchaseCostUsd":{"exclusiveMinimum":0,"type":"number"},"totalSoldAmount":{"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","type":"string"},"unrealizedPnlUsd":{"type":"number"},"updatedAt":{"format":"date-time","type":"string"}},"required":["averagePurchasePriceUsd","calculationStatus","currentHoldingAmount","dataSource","feesStatus","openedAt","percentageStillHeld","realizedPnlUsd1y","remainingCostBasisUsd","state","totalBoughtAmount","totalFeesUsd","totalPurchaseCostUsd","totalSoldAmount","unrealizedPnlUsd","updatedAt"],"type":"object"},"CodexWatchUserToken":{"additionalProperties":false,"description":"Display-only position basis from Codex, indexed Arbital accounting, verified Arbital Relay evidence, or a Codex lot blended with Mobula-valued direct receipts. Never quote authority, settlement evidence, or tax basis.","properties":{"averageEntryMarketCapUsd":{"nullable":true,"exclusiveMinimum":0,"type":"number"},"averageEntryPriceUsd":{"exclusiveMinimum":0,"type":"number"},"basisSource":{"enum":["arbital_indexer","arbital_relay","codex","codex_plus_mobula_receipts"],"type":"string"},"basisStatus":{"const":"complete","type":"string"},"costBasisUsdcAtomic":{"nullable":true,"pattern":"^[1-9][0-9]*$","type":"string"},"currentCostBasisUsd":{"exclusiveMinimum":0,"type":"number"},"currentRealizedPnlUsd":{"type":"number"},"holdingSince":{"format":"date-time","type":"string"},"humanAmountRemaining":{"type":"number"},"id":{"type":"string"},"networkId":{"type":"integer"},"tokenAddress":{"type":"string"},"tokenAmountRemaining":{"type":"number"},"totalCostBasisUsd":{"exclusiveMinimum":0,"type":"number"},"totalRealizedPnlUsd":{"type":"number"},"unrealizedPnlUsd":{"type":"number"},"updatedAt":{"format":"date-time","type":"string"},"userAddress":{"type":"string"},"wasSwapped":{"const":true,"type":"boolean"},"realizedPnlUsd1y":{"type":["number","null"],"description":"Codex wallet/token rolling one-year realized profit in USD, excluding unrealized P&L. Provider estimate, not position-cycle profit or net accounting. Null when unavailable or the basis is synthetic. Zero is a reported zero, not missing data."}},"required":["averageEntryMarketCapUsd","averageEntryPriceUsd","basisSource","basisStatus","costBasisUsdcAtomic","currentCostBasisUsd","currentRealizedPnlUsd","holdingSince","humanAmountRemaining","id","networkId","tokenAddress","tokenAmountRemaining","totalCostBasisUsd","totalRealizedPnlUsd","unrealizedPnlUsd","updatedAt","userAddress","wasSwapped","realizedPnlUsd1y"],"type":"object"},"CodexWatchPosition":{"additionalProperties":false,"properties":{"balance":{"$ref":"#/components/schemas/CodexWatchBalance"},"positionRecap":{"$ref":"#/components/schemas/CodexWatchPositionRecap"},"tokenFilterResult":{"$ref":"#/components/schemas/CodexWatchTokenFilterResult"},"userToken":{"anyOf":[{"$ref":"#/components/schemas/CodexWatchUserToken"},{"type":"null"}]},"valuation":{"additionalProperties":false,"properties":{"includeInEquity":{"type":"boolean"},"includeRealizedPnl":{"type":"boolean"},"includeUnrealizedPnl":{"type":"boolean"},"useLivePrice":{"type":"boolean"}},"required":["useLivePrice","includeInEquity","includeUnrealizedPnl","includeRealizedPnl"],"type":"object"},"positionBasis":{"$ref":"#/components/schemas/CodexWatchPositionBasis"}},"required":["balance","tokenFilterResult","userToken","valuation"],"type":"object"},"CodexWatchBalance":{"additionalProperties":false,"properties":{"address":{"type":"string"},"balance":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"shiftedBalance":{"type":"number"},"tokenAddress":{"type":"string"},"tokenId":{"type":"string"},"walletId":{"type":"string"}},"required":["address","tokenAddress","walletId","balance","tokenId","shiftedBalance"],"type":"object"},"PublicProfilePortfolioBalance":{"additionalProperties":false,"description":"A public-profile holding balance with managed-wallet address and wallet ID removed.","properties":{"balance":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"shiftedBalance":{"type":"number"},"tokenAddress":{"type":"string"},"tokenId":{"type":"string"}},"required":["tokenAddress","balance","tokenId","shiftedBalance"],"type":"object"},"PublicProfilePortfolioUserToken":{"additionalProperties":false,"description":"Display-only provider or indexed basis with owner wallet address and the address-derived lot ID removed.","properties":{"averageEntryMarketCapUsd":{"nullable":true,"exclusiveMinimum":0,"type":"number"},"averageEntryPriceUsd":{"exclusiveMinimum":0,"type":"number"},"basisSource":{"enum":["arbital_indexer","arbital_relay","codex","codex_plus_mobula_receipts"],"type":"string"},"basisStatus":{"const":"complete","type":"string"},"costBasisUsdcAtomic":{"nullable":true,"pattern":"^[1-9][0-9]*$","type":"string"},"currentCostBasisUsd":{"exclusiveMinimum":0,"type":"number"},"currentRealizedPnlUsd":{"type":"number"},"holdingSince":{"format":"date-time","type":"string"},"humanAmountRemaining":{"type":"number"},"networkId":{"type":"integer"},"tokenAddress":{"type":"string"},"tokenAmountRemaining":{"type":"number"},"totalCostBasisUsd":{"exclusiveMinimum":0,"type":"number"},"totalRealizedPnlUsd":{"type":"number"},"unrealizedPnlUsd":{"type":"number"},"updatedAt":{"format":"date-time","type":"string"},"wasSwapped":{"const":true,"type":"boolean"},"realizedPnlUsd1y":{"type":["number","null"],"description":"Codex wallet/token rolling one-year realized profit in USD, excluding unrealized P&L. Provider estimate, not position-cycle profit or net accounting. Null when unavailable or the basis is synthetic. Zero is a reported zero, not missing data."}},"required":["averageEntryMarketCapUsd","averageEntryPriceUsd","basisSource","basisStatus","costBasisUsdcAtomic","currentCostBasisUsd","currentRealizedPnlUsd","holdingSince","humanAmountRemaining","networkId","tokenAddress","tokenAmountRemaining","totalCostBasisUsd","totalRealizedPnlUsd","unrealizedPnlUsd","updatedAt","wasSwapped","realizedPnlUsd1y"],"type":"object"},"PublicProfilePortfolioPosition":{"additionalProperties":false,"properties":{"balance":{"$ref":"#/components/schemas/PublicProfilePortfolioBalance"},"tokenFilterResult":{"$ref":"#/components/schemas/CodexWatchTokenFilterResult"},"userToken":{"anyOf":[{"$ref":"#/components/schemas/PublicProfilePortfolioUserToken"},{"type":"null"}]},"valuation":{"additionalProperties":false,"properties":{"includeInEquity":{"type":"boolean"},"includeRealizedPnl":{"type":"boolean"},"includeUnrealizedPnl":{"type":"boolean"},"useLivePrice":{"type":"boolean"}},"required":["useLivePrice","includeInEquity","includeUnrealizedPnl","includeRealizedPnl"],"type":"object"}},"required":["balance","tokenFilterResult","userToken","valuation"],"type":"object"},"PublicProfilePortfolioObject":{"additionalProperties":false,"description":"Public-profile portfolio projection with managed-wallet identifiers removed from every position.","properties":{"balances":{"items":{"$ref":"#/components/schemas/PublicProfilePortfolioPosition"},"maxItems":2000,"type":"array"},"livePerpPnl":{"type":"number"},"nativeEvmBalances":{"items":{"$ref":"#/components/schemas/PublicProfilePortfolioPosition"},"maxItems":2000,"type":"array"},"otherPnl":{"type":"number"},"otherPnlV2":{"type":"number"},"unverifiedBalances":{"description":"Redacted unverified holdings excluded from public portfolio totals.","items":{"$ref":"#/components/schemas/PublicProfilePortfolioPosition"},"maxItems":2000,"type":"array"}},"required":["balances","otherPnl","otherPnlV2","nativeEvmBalances","livePerpPnl"],"type":"object"},"CodexWatchTokenFilterResult":{"additionalProperties":false,"properties":{"change24":{"type":"string"},"createdAt":{"type":"integer"},"liquidity":{"description":"Codex-reported USD liquidity used only for display eligibility.","type":"string"},"marketCap":{"type":"string"},"priceUSD":{"type":"string"},"token":{"$ref":"#/components/schemas/CodexWatchToken"},"volume1":{"type":"string"},"volume24":{"type":"string"}},"required":["change24","createdAt","marketCap","priceUSD","volume1","volume24","token"],"type":"object"},"CodexWatchToken":{"additionalProperties":false,"properties":{"address":{"type":"string"},"decimals":{"maximum":255,"minimum":0,"type":"integer"},"info":{"additionalProperties":false,"properties":{"circulatingSupply":{"nullable":true,"type":"string"},"id":{"type":"string"},"imageLargeUrl":{"nullable":true,"type":"string"},"imageSmallUrl":{"nullable":true,"type":"string"},"imageThumbHash":{"nullable":true,"type":"string"},"imageThumbUrl":{"nullable":true,"type":"string"},"name":{"nullable":true,"type":"string"},"symbol":{"nullable":true,"type":"string"},"totalSupply":{"nullable":true,"type":"string"}},"required":["circulatingSupply","id","imageLargeUrl","imageSmallUrl","imageThumbHash","imageThumbUrl","name","symbol","totalSupply"],"type":"object"},"isScam":{"description":"Codex scam classification. Null means unverified, not safe.","type":["boolean","null"]},"launchpad":{"additionalProperties":false,"nullable":true,"properties":{"graduationPercent":{"nullable":true,"type":"number"},"launchpadIconUrl":{"nullable":true,"type":"string"}},"required":["launchpadIconUrl","graduationPercent"],"type":"object"},"name":{"nullable":true,"type":"string"},"networkId":{"type":"integer"},"symbol":{"nullable":true,"type":"string"}},"required":["address","decimals","networkId","name","symbol","info","launchpad"],"type":"object"},"CodexWatchSwapHistory":{"additionalProperties":false,"description":"Experimental request-time swap history. Same-chain DEX pool events only. Platform fees, lot ids, Relay bridges, and aggregator hops are not reconstructed.","properties":{"message":{"type":"string"},"responseObject":{"$ref":"#/components/schemas/CodexWatchSwapHistoryObject"},"statusCode":{"const":200,"type":"integer"},"success":{"const":true,"type":"boolean"}},"required":["success","message","responseObject","statusCode"],"type":"object"},"CodexWatchSwapHistoryObject":{"additionalProperties":false,"properties":{"hasNextPage":{"type":"boolean"},"next_cursor":{"description":"Opaque wallet-set-bound boundary continuation. Null proves exhaustion for this provider read. Pass unchanged; 400 means restart, 503 means retry the same cursor.","type":["string","null"],"maxLength":2048},"swaps":{"items":{"$ref":"#/components/schemas/CodexWatchSwap"},"maxItems":50,"type":"array"}},"required":["swaps","hasNextPage","next_cursor"],"type":"object"},"CodexWatchSwap":{"additionalProperties":false,"properties":{"address":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"humanUsdAmountIn":{"type":"number"},"humanUsdAmountOut":{"type":"number"},"id":{"type":"string"},"inAmount":{"deprecated":true,"description":"Legacy numeric atomic amount. May be rounded above JavaScript's safe integer limit; use inAmountAtomic.","type":"number"},"inAmountAtomic":{"description":"Exact input amount in atomic units when the provider value and token decimals permit an unambiguous conversion.","maxLength":78,"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"inHumanAmount":{"type":"number"},"inNetworkId":{"type":"integer"},"inTokenAddress":{"type":"string"},"inTokenImageUrl":{"nullable":true,"type":["string","null"]},"inTokenName":{"nullable":true,"type":["string","null"]},"inTokenSymbol":{"nullable":true,"type":["string","null"]},"inTradeId":{"nullable":true,"type":"null"},"isCrossmint":{"const":false,"type":"boolean"},"isOffPlatform":{"const":true,"type":"boolean"},"networkId":{"type":"integer"},"outAmount":{"deprecated":true,"description":"Legacy numeric atomic amount. May be rounded above JavaScript's safe integer limit; use outAmountAtomic.","type":"number"},"outAmountAtomic":{"description":"Exact output amount in atomic units when the provider value and token decimals permit an unambiguous conversion.","maxLength":78,"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"outHumanAmount":{"type":"number"},"outNetworkId":{"type":"integer"},"outTokenAddress":{"type":"string"},"outTokenImageUrl":{"nullable":true,"type":["string","null"]},"outTokenName":{"nullable":true,"type":["string","null"]},"outTokenSymbol":{"nullable":true,"type":["string","null"]},"outTradeId":{"nullable":true,"type":"null"},"platformFeeAmount":{"nullable":true,"type":"null"},"platformFeeHumanAmount":{"nullable":true,"type":"null"},"platformFeeToken":{"nullable":true,"type":"null"},"provider":{"type":"string"},"recipient":{"nullable":true,"type":"null"},"referralFeeAddress":{"nullable":true,"type":"null"},"referralFeeHumanAmount":{"nullable":true,"type":"null"},"referralFeeToken":{"nullable":true,"type":"null"},"referralFeeTokenAmount":{"nullable":true,"type":"null"},"signature":{"type":"string"},"inExecutionPriceUsd":{"$ref":"#/components/schemas/ExecutionPriceUsd","description":"USD execution price per whole input token (the token spent). Uses only this swap's historical priceUsdTotal and exact input quantity."},"inExecutionPriceUnavailableReason":{"$ref":"#/components/schemas/ExecutionPriceUnavailableReason"},"outExecutionPriceUsd":{"$ref":"#/components/schemas/ExecutionPriceUsd","description":"USD execution price per whole output token (the token received). Select this for a buy card; select the input price for a sell card."},"outExecutionPriceUnavailableReason":{"$ref":"#/components/schemas/ExecutionPriceUnavailableReason"},"receipt":{"$ref":"#/components/schemas/TradeReceipt","description":"Saved receipt for the output leg when the input is a recognized quote asset; otherwise the input (sell) leg. Existing input/output execution fields remain available."}},"required":["id","signature","address","networkId","inTokenAddress","inTokenImageUrl","inTokenName","inTokenSymbol","inAmount","inHumanAmount","outTokenAddress","outTokenImageUrl","outTokenName","outTokenSymbol","outAmount","outHumanAmount","humanUsdAmountIn","humanUsdAmountOut","createdAt","platformFeeAmount","platformFeeHumanAmount","platformFeeToken","inTradeId","outTradeId","referralFeeTokenAmount","referralFeeHumanAmount","referralFeeToken","referralFeeAddress","isOffPlatform","isCrossmint","provider","inNetworkId","outNetworkId","recipient","inExecutionPriceUsd","inExecutionPriceUnavailableReason","outExecutionPriceUsd","outExecutionPriceUnavailableReason"],"type":"object","allOf":[{"oneOf":[{"properties":{"inExecutionPriceUsd":{"type":"string"},"inExecutionPriceUnavailableReason":{"type":"null"}}},{"properties":{"inExecutionPriceUsd":{"type":"null"},"inExecutionPriceUnavailableReason":{"type":"string"}}}]},{"oneOf":[{"properties":{"outExecutionPriceUsd":{"type":"string"},"outExecutionPriceUnavailableReason":{"type":"null"}}},{"properties":{"outExecutionPriceUsd":{"type":"null"},"outExecutionPriceUnavailableReason":{"type":"string"}}}]}]},"PreparedSolanaQuoteV2":{"additionalProperties":false,"properties":{"fee_payer_address":{"maxLength":44,"minLength":32,"type":"string"},"fee_payer_signature":{"description":"Base64 Ed25519 fee-payer signature already present in the transaction.","maxLength":88,"minLength":88,"type":"string"},"last_valid_block_height":{"pattern":"^[1-9][0-9]*$","type":"string"},"transaction_base64":{"description":"Exact two-signer transaction with only the fee-payer slot signed. The client fills the remaining user slot without changing the message.","maxLength":16400,"minLength":1,"type":"string"},"transaction_signature":{"description":"Base58 Solana transaction signature to observe after client broadcast.","maxLength":88,"minLength":64,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$","type":"string"}},"required":["transaction_base64","transaction_signature","fee_payer_signature","fee_payer_address","last_valid_block_height"],"type":"object"},"PriorityFeePreferenceV2":{"oneOf":[{"additionalProperties":false,"properties":{"mode":{"const":"automatic","type":"string"}},"required":["mode"],"type":"object"},{"additionalProperties":false,"properties":{"maximum_cost_usdc_atomic":{"maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"mode":{"const":"custom","type":"string"}},"required":["mode","maximum_cost_usdc_atomic"],"type":"object"}]},"Problem":{"additionalProperties":false,"properties":{"cached_data_valid":{"description":"Whether previously cached data remains valid for use after this failure. Present on HTTP 429 and 503 responses.","type":"boolean"},"code":{"type":"string"},"execution_failure_code":{"$ref":"#/components/schemas/ExecutionFailureCode"},"message":{"type":"string"},"request_id":{"description":"Request correlation identifier equal to the X-Request-ID header. Present on HTTP 429 and 503 responses and on every POST /v2/quote problem.","minLength":1,"type":"string"},"retry_after_seconds":{"description":"Seconds before a retry should be attempted. Present on HTTP 429 and 503 responses and equal to Retry-After.","minimum":1,"type":"integer"},"retryable":{"description":"Whether retrying the request is appropriate. Present on HTTP 429 and 503 responses.","type":"boolean"}},"required":["code","message"],"type":"object"},"ProductAccess":{"additionalProperties":false,"properties":{"assessed_at_unix_ms":{"format":"int64","type":["integer","null"]},"decision_version":{"format":"int64","minimum":1,"type":["integer","null"]},"policy_version":{"format":"int32","minimum":1,"type":["integer","null"]},"state":{"enum":["allowed","denied","unknown","stale","suspended","recovery_only"],"type":"string"},"valid_until_unix_ms":{"format":"int64","type":["integer","null"]}},"required":["state","decision_version","policy_version","assessed_at_unix_ms","valid_until_unix_ms"],"type":"object"},"ProductMarketLivePriceWebSocketTicketV1":{"additionalProperties":false,"properties":{"expires_at_unix":{"minimum":1,"type":"integer"},"protocol":{"const":"arbital.market.prices.v1","type":"string"},"ticket_protocol":{"pattern":"^arbital\\.market\\.prices\\.ticket\\.[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","readOnly":true,"type":"string"},"websocket_path":{"const":"/v2/market/prices/ws?version=1","type":"string"}},"required":["websocket_path","protocol","ticket_protocol","expires_at_unix"],"type":"object"},"ProductMarketAiPickAttentionV1":{"additionalProperties":false,"properties":{"mentions_24h":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["mentions_24h"],"type":"object"},"ProductMarketAiPickFeedItemV2":{"additionalProperties":false,"properties":{"evidence":{"type":"object","additionalProperties":false,"required":["attention","market"],"properties":{"attention":{"$ref":"#/components/schemas/ProductRankingField"},"market":{"$ref":"#/components/schemas/ProductRankingFields"}},"description":"Only with evidence=ai-picks-v1. Independent input evidence, aged at served_at_ms using persisted generation deadlines. Attention observed_at legacy fields mean backend retrieval, never proven provider observation. Missing historical attention policy or market lineage is unavailable with unknown coverage and null deadlines. Historical negative dollar fields are null in both response modes; valid decimal strings and signed percentage changes are preserved. Historical values remain history after evidence expires; unavailable evidence does not authorize current use."},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"attention":{"$ref":"#/components/schemas/ProductMarketAiPickAttentionV1"},"attention_observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"id":{"format":"uuid","type":"string"},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"market":{"$ref":"#/components/schemas/ProductMarketAiPickMarketV1"},"methodology_revision":{"const":"contract-attention-v2","type":"string"},"name":{"maxLength":128,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"picked_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"rank":{"maximum":20,"minimum":1,"type":"integer"},"risks":{"items":{"maxLength":160,"type":"string"},"maxItems":3,"type":"array"},"score":{"pattern":"^(0|[1-9][0-9]?|100)$","type":"string"},"signal_strength":{"enum":["strong","moderate","emerging"],"type":"string"},"signals":{"items":{"$ref":"#/components/schemas/ProductMarketAiPickSignalV1"},"maxItems":2,"type":"array"},"source_rank":{"maximum":200,"minimum":1,"type":"integer"},"symbol":{"maxLength":32,"type":["string","null"]},"thesis":{"maxLength":240,"type":"string"}},"required":["rank","source_rank","asset","name","symbol","image_url","signal_strength","score","thesis","signals","risks","attention","market","observed_at_ms","id","picked_at_ms","attention_observed_at_ms","methodology_revision"],"type":"object"},"ProductMarketAiPickMarketV1":{"additionalProperties":false,"properties":{"liquidity_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_change_24h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"volume_24h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]}},"required":["price_usd","market_cap_usd","liquidity_usd","price_change_24h_pct","volume_24h_usd"],"type":"object"},"ProductMarketAiPickSignalV1":{"additionalProperties":false,"properties":{"kind":{"enum":["social_attention","market_discovery"],"type":"string"},"label":{"maxLength":160,"type":"string"}},"required":["kind","label"],"type":"object"},"ProductMarketAiPicksResponseV2":{"additionalProperties":false,"properties":{"disclaimer":{"const":"Informational market signals only; not financial advice.","type":"string"},"freshness":{"enum":["fresh","reconnecting","stale"],"type":"string"},"has_more":{"type":"boolean"},"horizon":{"const":"24h","type":"string"},"items":{"items":{"$ref":"#/components/schemas/ProductMarketAiPickFeedItemV2"},"maxItems":50,"type":"array"},"latest_attention_observed_at_ms":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},{"type":"null"}]},"methodology_revision":{"const":"contract-attention-v2","type":"string"},"next_cursor":{"oneOf":[{"maxLength":180,"minLength":1,"type":"string"},{"type":"null"}]},"served_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"version":{"const":2,"type":"integer"},"view":{"enum":["global","memes","robinhood"],"type":"string"}},"required":["version","view","horizon","methodology_revision","freshness","served_at_ms","latest_attention_observed_at_ms","items","next_cursor","has_more","disclaimer"],"type":"object"},"ProductMarketMoverV1":{"additionalProperties":false,"properties":{"holders_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"created_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"bonding_progress_pct":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$"},"categories":{"type":"array","maxItems":12,"uniqueItems":true,"items":{"enum":["prestocks","ai","etf","technology","finance","healthcare","consumer","energy","industrial","real_estate","media","space"]}},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"liquidity_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"price_change_24h_pct":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"rank":{"maximum":200,"minimum":1,"type":"integer"},"symbol":{"maxLength":32,"type":["string","null"]},"volume_24h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"asset_category":{"enum":["crypto","memecoins","stocks"],"type":"string"}},"required":["asset","rank","name","symbol","image_url","price_usd","market_cap_usd","liquidity_usd","price_change_24h_pct","volume_24h_usd","observed_at_ms","asset_category"],"type":"object","description":"A canonical market asset ranked by rolling 24-hour percentage price change. Mini-charts use the existing candles endpoint with this exact chain and address."},"ProductMarketMoversResponseV1":{"type":"object","additionalProperties":false,"properties":{"category":{"enum":["all","crypto","memecoins","stocks"],"type":"string"},"direction":{"enum":["gainers","losers"],"type":"string"},"period":{"const":"24h","type":"string"},"view_revision":{"const":"market-movers-24h-v1","type":"string"},"availability":{"enum":["available","partial"],"type":"string"},"freshness":{"enum":["fresh","reconnecting","stale"],"type":"string"},"coverage":{"enum":["unknown","partial"],"type":"string","description":"Bounded provider discovery and curated catalogues do not prove exhaustive market coverage."},"observed_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$","description":"Oldest contributing snapshot/source clock. Each item retains its original observation clock."},"available_categories":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"items":{"enum":["crypto","memecoins","stocks"],"type":"string"}},"missing_categories":{"type":"array","maxItems":3,"uniqueItems":true,"items":{"enum":["crypto","memecoins","stocks"],"type":"string"}},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/ProductMarketMoverV1"}}},"required":["category","direction","period","view_revision","availability","freshness","coverage","observed_at_ms","available_categories","missing_categories","items"]},"ProductMarketAssetV1":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"maxLength":44,"minLength":32,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$","type":"string"},"chain_id":{"const":"solana:mainnet-beta"}},"required":["chain_id","address"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"pattern":"^0x[0-9a-f]{40}$","type":"string"},"chain_id":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"]}},"required":["chain_id","address"],"type":"object"}]},"ProductMarketTokenSummariesRequestV1":{"additionalProperties":false,"properties":{"assets":{"items":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"maxItems":20,"minItems":1,"type":"array","uniqueItems":true}},"required":["assets"],"type":"object"},"ProductMarketTokenSummariesResponseV1":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/ProductMarketTokenSummaryV1"},"maxItems":20,"minItems":1,"type":"array"}},"required":["items"],"type":"object"},"ProductMarketTokenSummaryNotFoundV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"status":{"const":"not_found","type":"string"}},"required":["asset","status"],"type":"object"},"ProductMarketTokenSummaryOkV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"evidence":{"$ref":"#/components/schemas/ProductTokenSummaryEvidenceV1"},"circulating_supply":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"liquidity_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"price_change_24h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"status":{"const":"ok","type":"string"},"symbol":{"maxLength":32,"type":["string","null"]},"volume_24h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]}},"required":["asset","status","name","symbol","image_url","price_usd","market_cap_usd","circulating_supply","liquidity_usd","price_change_24h_pct","volume_24h_usd","observed_at_ms"],"type":"object"},"ProductMarketTokenSummaryRateLimitedV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"retry_after_seconds":{"maximum":300,"minimum":1,"type":"integer"},"status":{"const":"rate_limited","type":"string"}},"required":["asset","status","retry_after_seconds"],"type":"object"},"ProductMarketTokenSummaryUnavailableV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"status":{"const":"unavailable","type":"string"}},"required":["asset","status"],"type":"object"},"ProductMarketTokenSummaryV1":{"oneOf":[{"$ref":"#/components/schemas/ProductMarketTokenSummaryOkV1"},{"$ref":"#/components/schemas/ProductMarketTokenSummaryNotFoundV1"},{"$ref":"#/components/schemas/ProductMarketTokenSummaryRateLimitedV1"},{"$ref":"#/components/schemas/ProductMarketTokenSummaryUnavailableV1"}]},"ProductMarketHolderPlatformProfileV1":{"additionalProperties":false,"properties":{"avatar_url":{"description":"For CALLD profiles, the approved image or stable default; external profiles may be null.","type":["string","null"]},"display_name":{"maxLength":120,"type":["string","null"]},"platform":{"enum":["calld","fomo","pump"],"type":"string"},"platform_profile_id":{"maxLength":180,"minLength":1,"type":"string"},"profile_observed_at_ms":{"type":["string","null"]},"username":{"maxLength":128,"type":["string","null"]},"viewer_follows":{"type":["boolean","null"]},"wallet_verified_at_ms":{"type":["string","null"]}},"required":["platform","platform_profile_id","username","display_name","avatar_url","viewer_follows","profile_observed_at_ms","wallet_verified_at_ms"],"type":"object"},"ProductMarketHolderProfileV1":{"additionalProperties":false,"properties":{"address":{"maxLength":44,"minLength":32,"type":"string"},"average_cost_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1","description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"balance":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"buy_transaction_count":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"Mobula total transaction count for this wallet and token, not restricted to the current position."},"friend_match":{"type":["boolean","null"]},"gmgn_avatar_url":{"type":["string","null"],"description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"gmgn_name":{"maxLength":128,"type":["string","null"],"description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"gmgn_twitter_username":{"maxLength":128,"type":["string","null"],"description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"holding_pct":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string","description":"Percentage points of total token supply."},"holding_value_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"maker_token_tags":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":32,"type":"array","description":"Retained for compatibility; returned as an empty array."},"profiles":{"items":{"$ref":"#/components/schemas/ProductMarketHolderPlatformProfileV1"},"maxItems":8,"type":"array"},"rank":{"maximum":100,"minimum":1,"type":"integer"},"realized_profit_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1","description":"Provider gross display estimate in USD with fees excluded; not verified accounting or portfolio authority."},"sell_transaction_count":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"Mobula total transaction count for this wallet and token, not restricted to the current position."},"sold_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1","description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"started_holding_at_ms":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1","description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"tags":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":32,"type":"array","description":"Mobula provider labels for display only; not evidence of public-profile identity."},"unrealized_pnl_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1","description":"Retained for compatibility; unavailable from the Mobula holder mapping and returned as null."},"unrealized_profit_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1","description":"Provider gross display estimate in USD with fees excluded; not verified accounting or portfolio authority."}},"required":["rank","address","balance","holding_pct","holding_value_usd","average_cost_usd","unrealized_pnl_pct","unrealized_profit_usd","realized_profit_usd","buy_transaction_count","sell_transaction_count","sold_pct","started_holding_at_ms","tags","maker_token_tags","gmgn_name","gmgn_twitter_username","gmgn_avatar_url","profiles","friend_match"],"type":"object"},"ProductMarketHolderProfilesResponseV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"enrichment_status":{"enum":["available","unavailable"],"type":"string"},"freshness":{"enum":["fresh","stale"],"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ProductMarketHolderProfileV1"},"maxItems":100,"type":"array"},"next_cursor":{"maxLength":512,"minLength":1,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"percentage_basis":{"const":"total_supply","type":"string"}},"required":["asset","freshness","observed_at_ms","percentage_basis","enrichment_status","items","next_cursor"],"type":"object"},"ProductMarketHotSearchCountV1":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},{"type":"null"}]},"ProductMarketHotSearchMetricV1":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"ProductMarketHotSearchResponseV1":{"additionalProperties":false,"properties":{"chain_id":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:4663","eip155:8453"],"type":"string"},"freshness":{"enum":["fresh","stale"],"type":"string"},"interval":{"enum":["1m","5m","1h","6h","24h"],"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ProductMarketHotSearchTokenV1"},"maxItems":100,"type":"array"},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["chain_id","interval","freshness","observed_at_ms","items"],"type":"object"},"ProductMarketHotSearchTokenV1":{"additionalProperties":false,"properties":{"all_time_high_market_cap_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"bot_wallet_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"bot_wallet_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"bundler_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"buys_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"created_at_ms":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"developer_hold_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"entrapment_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"holders_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"insider_trading_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"kol_wallet_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"liquidity_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"market_cap_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"name":{"maxLength":128,"type":["string","null"]},"price_change_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"price_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"rank":{"maximum":100,"minimum":1,"type":"integer"},"rug_score_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"search_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"sells_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"smart_money_wallet_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"swaps_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"symbol":{"maxLength":32,"type":["string","null"]},"top_10_holder_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"total_fees":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"volume_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"}},"required":["rank","asset","name","symbol","image_url","created_at_ms","search_count","price_usd","market_cap_usd","all_time_high_market_cap_usd","liquidity_usd","price_change_pct","volume_usd","swaps_count","buys_count","sells_count","holders_count","total_fees","top_10_holder_pct","entrapment_pct","bundler_pct","insider_trading_pct","rug_score_pct","developer_hold_pct","bot_wallet_count","bot_wallet_pct","smart_money_wallet_count","kol_wallet_count"],"type":"object"},"ProductMarketSurgeResponseV1":{"additionalProperties":false,"properties":{"available_chain_ids":{"const":["solana:mainnet-beta","eip155:56","eip155:4663"],"type":"array"},"chain_id":{"oneOf":[{"enum":["solana:mainnet-beta","eip155:56","eip155:4663"],"type":"string"},{"type":"null"}]},"freshness":{"enum":["fresh","stale"],"type":"string"},"interval":{"enum":["1m","5m","1h","6h","24h"],"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ProductMarketSurgeTokenV1"},"maxItems":20,"type":"array"},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["available_chain_ids","chain_id","interval","freshness","observed_at_ms","items"],"type":"object"},"ProductMarketSurgeTokenV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"change_pct":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"first_trigger_market_cap_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"holders_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"liquidity_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"market_cap_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"name":{"maxLength":128,"type":["string","null"]},"price_usd":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"rank":{"maximum":20,"minimum":1,"type":"integer"},"signal_count":{"$ref":"#/components/schemas/ProductMarketHotSearchCountV1"},"symbol":{"maxLength":32,"type":["string","null"]},"top_10_holder_pct":{"$ref":"#/components/schemas/ProductMarketHotSearchMetricV1"},"trigger_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"trigger_market_cap_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"}},"required":["rank","asset","name","symbol","image_url","price_usd","market_cap_usd","trigger_market_cap_usd","first_trigger_market_cap_usd","change_pct","trigger_at_ms","signal_count","holders_count","liquidity_usd","top_10_holder_pct"],"type":"object"},"ProductRankingField":{"type":"object","additionalProperties":false,"properties":{"source":{"type":["string","null"],"maxLength":128},"scope":{"type":"string","maxLength":128},"window":{"enum":["24h",null]},"provider_observed_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"retrieved_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"fresh_until_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"usable_until_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"availability":{"enum":["available","stale","unavailable","unsupported"]},"observed_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"coverage":{"enum":["partial","unknown"]}},"required":["source","scope","window","provider_observed_at_ms","retrieved_at_ms","fresh_until_ms","usable_until_ms","availability","observed_at_ms","coverage"]},"ProductRankingFields":{"type":"object","maxProperties":32,"additionalProperties":{"$ref":"#/components/schemas/ProductRankingField"}},"ProductRankingEvidence":{"type":"object","additionalProperties":false,"properties":{"availability":{"enum":["available","stale","unavailable"]},"coverage":{"enum":["partial","unknown"]},"contributing_sources":{"type":"array","maxItems":16,"items":{"type":"string","maxLength":128}},"missing_sources":{"type":"array","maxItems":16,"items":{"type":"string","maxLength":128}},"recovery":{"const":"current_snapshot"},"served_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"}},"required":["availability","coverage","contributing_sources","missing_sources","recovery","served_at_ms"]},"ProductMarketTokenV1":{"additionalProperties":false,"properties":{"evidence":{"$ref":"#/components/schemas/ProductRankingFields"},"holders_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"created_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"bonding_progress_pct":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$"},"categories":{"type":"array","maxItems":12,"uniqueItems":true,"items":{"enum":["prestocks","ai","etf","technology","finance","healthcare","consumer","energy","industrial","real_estate","media","space"]}},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"liquidity_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"price_change_24h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"rank":{"maximum":200,"minimum":1,"type":"integer"},"symbol":{"maxLength":32,"type":["string","null"]},"volume_24h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]}},"required":["asset","rank","name","symbol","image_url","price_usd","market_cap_usd","liquidity_usd","price_change_24h_pct","volume_24h_usd","observed_at_ms"],"type":"object"},"ProductMarketTrendingResponseV1":{"additionalProperties":false,"properties":{"evidence":{"$ref":"#/components/schemas/ProductRankingEvidence"},"available_chain_ids":{"items":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"},"maxItems":8,"minItems":8,"type":"array","uniqueItems":true},"chain_id":{"oneOf":[{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"},{"type":"null"}]},"freshness":{"enum":["fresh","reconnecting","stale"],"type":"string"},"generation":{"maxLength":128,"minLength":1,"type":"string"},"items":{"items":{"$ref":"#/components/schemas/ProductMarketTokenV1"},"maxItems":50,"type":"array"},"next_cursor":{"maxLength":512,"minLength":1,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"revision":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"view":{"enum":["global","crypto","stocks","graduated","bonding","memes","most_held","robinhood"],"type":"string"},"view_revision":{"enum":["chain-selector-meme-trending-v1","chain-selector-meme-trending-v2","multichain-meme-volume-surge-page-v2","multichain-meme-volume-surge-page-v3","multichain-blue-chip-crypto-page-v1","solana-stocks-page-v1","multichain-graduated-page-v1","multichain-graduated-page-v2","multichain-bonding-page-v1","multichain-bonding-page-v2","multichain-memes-page-v1","multichain-memes-page-v2","multichain-most-held-memes-page-v1","multichain-most-held-memes-page-v2","robinhood-trending-page-v1"],"type":"string"}},"required":["available_chain_ids","chain_id","freshness","generation","items","observed_at_ms","revision","view_revision"],"type":"object"},"ProductTokenCandleV1":{"additionalProperties":false,"properties":{"close_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"high_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"low_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"open_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"timestamp_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"volume_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"}},"required":["timestamp_ms","open_usd","high_usd","low_usd","close_usd","volume_usd"],"type":"object"},"ProductCandleEvidenceV1":{"type":"object","additionalProperties":false,"description":"Optional for legacy compatibility. Freshness describes retrieval reuse only: provider observation time is unknown. Actual bounds describe returned bucket starts, not requested range completeness or asset lifetime. Gaps may be illiquidity, not outages. before_ms is a time boundary, never a frozen snapshot. Empty valid history is available without a completeness claim. Values may include provider padding. served_at_ms remains unchanged on intermediary replay.","properties":{"source":{"enum":["birdeye","mobula","codex"]},"provider_observed_at_ms":{"type":"null"},"retrieved_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"served_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"freshness":{"enum":["fresh","stale"]},"availability":{"enum":["available","partial"]},"fresh_until_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"usable_until_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"coverage":{"type":"object","additionalProperties":false,"properties":{"first_bucket_ms":{"oneOf":[{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},{"type":"null"}]},"last_bucket_ms":{"oneOf":[{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},{"type":"null"}]},"missing_interior_buckets":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"complete":{"const":false},"history":{"const":"bounded_window"},"limit_reached":{"type":"boolean"},"empty":{"type":"boolean"},"identity":{"enum":["provider_verified","request_scoped"]},"padding":{"enum":["provider_may_fill","unfilled"]}},"required":["first_bucket_ms","last_bucket_ms","missing_interior_buckets","complete","history","limit_reached","empty","identity","padding"]}},"required":["source","provider_observed_at_ms","retrieved_at_ms","served_at_ms","freshness","availability","fresh_until_ms","usable_until_ms","coverage"]},"ProductTokenChartResponseV1":{"additionalProperties":false,"properties":{"evidence":{"$ref":"#/components/schemas/ProductCandleEvidenceV1"},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"candles":{"items":{"$ref":"#/components/schemas/ProductTokenCandleV1"},"maxItems":2000,"type":"array"},"from_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"range":{"enum":["five_minutes","thirty_minutes","hour","two_hours","day","week","month","year","all"],"type":"string"},"resolution":{"enum":["1s","15s","30s","1m","5m","1h","4h","1d"],"type":"string"},"to_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["asset","range","resolution","from_ms","to_ms","observed_at_ms","candles"],"type":"object"},"ProductTokenDeployerFundingV1":{"additionalProperties":false,"properties":{"amount":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"currency_name":{"maxLength":64,"type":["string","null"]},"currency_symbol":{"maxLength":32,"type":["string","null"]},"funded_at":{"maxLength":64,"type":["string","null"]},"source":{"oneOf":[{"$ref":"#/components/schemas/ProductMarketAssetV1"},{"type":"null"}]},"source_logo_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"source_name":{"maxLength":128,"type":["string","null"]},"transaction_hash":{"maxLength":128,"type":["string","null"]}},"required":["source","source_name","source_logo_url","amount","currency_name","currency_symbol","funded_at","transaction_hash"],"type":"object"},"ProductTokenEvidenceFieldV1":{"enum":["decimals","circulating_supply","market_cap_usd","liquidity_usd","price_change_24h_pct","volume_24h_usd","name","symbol","image_url","price_usd","deployer_funding.amount","deployer_funding.currency_name","deployer_funding.currency_symbol","deployer_funding.funded_at","deployer_funding.source","deployer_funding.source_logo_url","deployer_funding.source_name","deployer_funding.transaction_hash"],"type":"string"},"ProductTokenFactGroupEvidenceV1":{"additionalProperties":false,"description":"Evidence applies only to coverage.fields, not the full token row or separate Birdeye security. Provider time is null when unknown. valid_until_ms is an exclusive field-use deadline, not a promise to retain stale values. A stale price group with unavailable availability has a null price; no stale price fallback is served.","properties":{"scope":{"enum":["base","metadata","price","deployer_funding"],"type":"string"},"source":{"enum":["mobula","codex","arbital_catalogue","preferred_metadata","configured_price"],"type":"string"},"method":{"enum":["token_details","token_search","catalogue","preferred_metadata","configured_price","wallet_labels","filtered_minute_bar_close","filtered_second_bar_close"],"type":"string"},"provider_observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"retrieved_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"valid_until_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"freshness":{"enum":["fresh","stale","unknown"],"type":"string"},"availability":{"enum":["available","partial","unavailable","not_applicable"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"},"fields":{"items":{"$ref":"#/components/schemas/ProductTokenEvidenceFieldV1"},"maxItems":18,"minItems":1,"type":"array","uniqueItems":true},"missing_fields":{"items":{"$ref":"#/components/schemas/ProductTokenEvidenceFieldV1"},"maxItems":18,"type":"array","uniqueItems":true}},"required":["exhaustive","fields","missing_fields"],"type":"object"}},"required":["scope","source","method","provider_observed_at_ms","retrieved_at_ms","valid_until_ms","freshness","availability","coverage"],"type":"object"},"ProductTokenDetailEvidenceV1":{"additionalProperties":false,"description":"Optional field-group evidence. Legacy observed_at_ms retains its existing conditional meaning: preferred price clock when selected, otherwise Mobula base receipt. Only the group clocks describe the age of the fields they cover. No inference of full-detail or security completeness is permitted.","properties":{"scope":{"const":"token_detail","type":"string"},"served_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"groups":{"items":{"$ref":"#/components/schemas/ProductTokenFactGroupEvidenceV1"},"maxItems":8,"minItems":1,"type":"array"}},"required":["scope","served_at_ms","groups"],"type":"object"},"ProductTokenSummaryEvidenceV1":{"additionalProperties":false,"description":"Projection over summary fields only: never claims decimals, funding, token security or a complete detail cache. Evidence absence is supported for prior compatible backend releases.","properties":{"scope":{"const":"token_summary","type":"string"},"served_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"groups":{"items":{"$ref":"#/components/schemas/ProductTokenSummaryFactGroupEvidenceV1"},"maxItems":8,"minItems":1,"type":"array"}},"required":["scope","served_at_ms","groups"],"type":"object"},"ProductTokenSummaryFactGroupEvidenceV1":{"allOf":[{"$ref":"#/components/schemas/ProductTokenFactGroupEvidenceV1"},{"properties":{"scope":{"enum":["base","metadata","price"]},"coverage":{"properties":{"fields":{"items":{"$ref":"#/components/schemas/ProductTokenSummaryEvidenceFieldV1"}},"missing_fields":{"items":{"$ref":"#/components/schemas/ProductTokenSummaryEvidenceFieldV1"}}},"type":"object"}},"type":"object"}]},"ProductTokenSummaryEvidenceFieldV1":{"enum":["circulating_supply","market_cap_usd","liquidity_usd","price_change_24h_pct","volume_24h_usd","name","symbol","image_url","price_usd"],"type":"string"},"ProductTokenDetailResponseV1":{"additionalProperties":false,"properties":{"token":{"$ref":"#/components/schemas/ProductTokenDetailV1"},"token_security":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenSecurityV1"},{"type":"null"}]}},"required":["token","token_security"],"type":"object"},"ProductTokenSecurityV1":{"additionalProperties":false,"description":"Informational Birdeye security signals. Null means Birdeye did not provide that signal for the selected chain or token. A clean observation never means the token is safe and is never portfolio, quote, sell, or execution authority.","properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"honeypot":{"description":"Birdeye's EVM honeypot signal. Always null for Solana because Birdeye does not expose an isHoneypot field in its Solana security schema.","type":["boolean","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"provider":{"const":"birdeye","type":"string"},"scam_flag":{"description":"Provider fake/scam-token signal when available; null is unknown, not clean.","type":["boolean","null"]},"status":{"const":"reviewed","type":"string"},"verification_source":{"description":"The community list used for verification. Currently Jupiter Strict List on Solana only.","enum":["jupiter_strict_list",null],"type":["string","null"]},"verified":{"description":"Whether the token is on the named verification source. Null means no supported verification signal was available.","type":["boolean","null"]}},"required":["asset","honeypot","observed_at_ms","provider","scam_flag","status","verification_source","verified"],"type":"object"},"ProductTokenDetailV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"evidence":{"$ref":"#/components/schemas/ProductTokenDetailEvidenceV1"},"ath_price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"atl_price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"bundlers_holdings_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"buy_tax_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"circulating_supply":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"created_at":{"maxLength":64,"type":["string","null"]},"decimals":{"maximum":255,"minimum":0,"type":["integer","null"]},"deployer":{"oneOf":[{"$ref":"#/components/schemas/ProductMarketAssetV1"},{"type":"null"}]},"deployer_funding":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenDeployerFundingV1"},{"type":"null"}]},"description":{"maxLength":4096,"type":["string","null"]},"developer_holdings_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"dexscreener_ad_paid":{"type":["boolean","null"]},"dexscreener_boosted":{"type":["boolean","null"]},"dexscreener_enhanced":{"type":["boolean","null"]},"dexscreener_social_paid":{"type":["boolean","null"]},"fully_diluted_market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"holders_count":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},{"type":"null"}]},"honeypot":{"type":["boolean","null"]},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"insiders_holdings_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"is_scam":{"type":["boolean","null"]},"liquidity_burned_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"liquidity_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"price_change_1h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_change_24h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_change_4h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_change_5m_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"pro_traders_count":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},{"type":"null"}]},"rug_pull":{"type":["boolean","null"]},"sell_tax_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"snipers_holdings_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"socials":{"$ref":"#/components/schemas/ProductTokenSocialsV1"},"symbol":{"maxLength":32,"type":["string","null"]},"top_10_holdings_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"total_supply":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"trade_flow":{"$ref":"#/components/schemas/ProductTokenTradeFlowV1"},"volume_1h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"volume_24h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"verified":{"type":["boolean","null"]}},"required":["asset","name","symbol","image_url","description","decimals","socials","buy_tax_pct","sell_tax_pct","price_usd","market_cap_usd","fully_diluted_market_cap_usd","liquidity_usd","price_change_5m_pct","price_change_1h_pct","price_change_4h_pct","price_change_24h_pct","volume_1h_usd","volume_24h_usd","trade_flow","total_supply","circulating_supply","holders_count","honeypot","top_10_holdings_pct","developer_holdings_pct","insiders_holdings_pct","is_scam","bundlers_holdings_pct","snipers_holdings_pct","liquidity_burned_pct","pro_traders_count","rug_pull","dexscreener_ad_paid","dexscreener_boosted","dexscreener_enhanced","dexscreener_social_paid","deployer","created_at","deployer_funding","ath_price_usd","atl_price_usd","observed_at_ms","verified"],"type":"object"},"ProductTokenSearchEvidenceV1":{"additionalProperties":false,"description":"Optional evidence for the shared search owner. Retrieval/serving times are Arbital clocks; this adapter does not supply a provider observation time. Available means the returned rows have the declared search fields, not exhaustive provider or asset coverage.","properties":{"availability":{"enum":["available","partial"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"},"incomplete_items":{"description":"Returned rows missing name, symbol, price, market cap, 24h volume, liquidity or 24h price change. Nullable fields in each row identify the missing facts; optional images are not counted.","maximum":6,"minimum":0,"type":"integer"},"provider_limit":{"const":20,"type":"integer"},"rejected_items":{"maximum":20,"minimum":0,"type":"integer"},"response_limit":{"enum":[1,6],"type":"integer"},"scope":{"const":"bounded_search_results","type":"string"}},"required":["scope","exhaustive","provider_limit","response_limit","rejected_items","incomplete_items"],"type":"object"},"freshness":{"enum":["fresh","stale"],"type":"string"},"provider_observed_at_ms":{"description":"Unknown for this adapter; never derived from legacy observed_at_ms, cache access or response time.","type":"null"},"retrieved_at_ms":{"pattern":"^[0-9]+$","type":"string"},"served_at_ms":{"pattern":"^[0-9]+$","type":"string"},"source":{"const":"codex","type":"string"}},"required":["source","provider_observed_at_ms","retrieved_at_ms","served_at_ms","freshness","availability","coverage"],"type":"object"},"ProductTokenSearchResponseV1":{"additionalProperties":false,"properties":{"evidence":{"$ref":"#/components/schemas/ProductTokenSearchEvidenceV1"},"items":{"items":{"$ref":"#/components/schemas/ProductMarketTokenV1"},"maxItems":6,"type":"array"},"query":{"maxLength":64,"minLength":2,"type":"string"}},"required":["query","items"],"type":"object"},"ProductTokenSocialsV1":{"additionalProperties":false,"properties":{"telegram":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"twitter":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"website":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]}},"required":["twitter","website","telegram"],"type":"object"},"ProductTokenTradeActorV1":{"additionalProperties":false,"properties":{"address":{"maxLength":128,"minLength":1,"type":"string"},"entity_logo_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"entity_name":{"oneOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}]},"is_developer":{"type":"boolean"},"labels":{"items":{"enum":["sniper","insider","bundler","pro_trader","smart_trader","fresh_trader","developer","liquidity_pool"],"type":"string"},"maxItems":8,"type":"array","uniqueItems":true}},"required":["address","labels","entity_name","entity_logo_url","is_developer"],"type":"object"},"ProductTokenTradeFeesV1":{"additionalProperties":false,"properties":{"gas_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"mev_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"platform_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"total_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]}},"required":["total_usd","gas_usd","platform_usd","mev_usd"],"type":"object"},"ProductTokenTradeFlowV1":{"additionalProperties":false,"properties":{"1h":{"$ref":"#/components/schemas/ProductTokenTradeFlowWindowV1"},"24h":{"$ref":"#/components/schemas/ProductTokenTradeFlowWindowV1"},"4h":{"$ref":"#/components/schemas/ProductTokenTradeFlowWindowV1"},"5m":{"$ref":"#/components/schemas/ProductTokenTradeFlowWindowV1"}},"required":["5m","1h","4h","24h"],"type":"object"},"ProductTokenTradeFlowWindowV1":{"additionalProperties":false,"description":"Mobula-provided, token-relative buy/sell activity. Mobula does not guarantee taker attribution or the wallet identity used for unique counts. Missing or malformed upstream metrics are null; a reported zero remains zero.","properties":{"buy_volume_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"buyers":{"description":"Unique buyers reported by the provider.","minimum":0,"type":["integer","null"]},"buys":{"description":"Provider-reported buy count.","minimum":0,"type":["integer","null"]},"sell_volume_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"sellers":{"description":"Unique sellers reported by the provider.","minimum":0,"type":["integer","null"]},"sells":{"description":"Provider-reported sell count.","minimum":0,"type":["integer","null"]}},"required":["buys","sells","buy_volume_usd","sell_volume_usd","buyers","sellers"],"type":"object"},"ProductTokenTradePageV1":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"next_cursor":{"description":"Opaque cursor for the next page. Clients must not parse or construct it.","type":["string","null"]},"next_offset":{"deprecated":true,"maximum":10000,"minimum":0,"type":["integer","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"trades":{"items":{"$ref":"#/components/schemas/ProductTokenTradeV1"},"maxItems":100,"type":"array"}},"required":["asset","trades","next_cursor","next_offset","observed_at_ms"],"type":"object"},"ProductTokenTradePageV2":{"additionalProperties":false,"properties":{"evidence":{"description":"Optional on legacy pages. Retrieval is not execution or source observation. Reuse expires after two seconds; stale data is not served on failure. Partial means a returned trade has a null market cap, atomic amount, gas/network/MEV/platform/total fee amount, platform ID/name/logo, or trader entity name/logo, even when the containing object is present. Zero fees, false developer status, and empty labels are known values. Missing optional facts do not discard valid trades; missing required facts fail the page. Moving offsets are not snapshots; page end does not prove complete provider history.","type":"object","additionalProperties":false,"required":["source","source_observed_at_ms","retrieved_at_ms","served_at_ms","reusable_until_ms","availability","pagination","coverage","continuation","offset","limit","oldest_occurred_at_ms","newest_occurred_at_ms"],"properties":{"source":{"const":"mobula","type":"string"},"source_observed_at_ms":{"type":"null"},"retrieved_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"served_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"reusable_until_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"availability":{"type":"string","enum":["available","partial"]},"pagination":{"const":"moving_offset","type":"string"},"coverage":{"const":"provider_page","type":"string"},"continuation":{"type":"string","enum":["more","local_limit","provider_page_end"]},"offset":{"type":"integer","minimum":0,"maximum":10000},"limit":{"type":"integer","minimum":1,"maximum":100},"oldest_occurred_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"newest_occurred_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"}}},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"next_cursor":{"description":"Opaque asset-bound moving-offset cursor, not a frozen snapshot or expiry token. New leading trades can shift pages. Clients must not parse or construct it. Null does not prove complete history.","type":["string","null"]},"next_offset":{"deprecated":true,"maximum":10000,"minimum":0,"type":["integer","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"trades":{"items":{"$ref":"#/components/schemas/ProductTokenTradeV1"},"maxItems":100,"type":"array"}},"required":["asset","trades","next_cursor","next_offset","observed_at_ms"],"type":"object"},"ProductTokenTradePlatformV1":{"additionalProperties":false,"properties":{"id":{"oneOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]},"logo_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"name":{"oneOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","name","logo_url"],"type":"object"},"ProductTokenTradeV1":{"additionalProperties":false,"description":"Observed public on-chain market data; never settlement or execution authority.","properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"event_id":{"pattern":"^[0-9a-f]{64}$","type":"string"},"fees":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenTradeFeesV1"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"occurred_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"platform":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenTradePlatformV1"},{"type":"null"}]},"pool_address":{"maxLength":128,"minLength":1,"type":"string"},"price_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"side":{"enum":["buy","sell"],"type":"string"},"token_amount":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"token_amount_atomic":{"oneOf":[{"maxLength":128,"pattern":"^(0|[1-9][0-9]*)$","type":"string"},{"type":"null"}]},"trader":{"$ref":"#/components/schemas/ProductTokenTradeActorV1"},"transaction_hash":{"maxLength":128,"minLength":1,"type":"string"},"usd_amount":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"}},"required":["event_id","asset","side","token_amount","token_amount_atomic","usd_amount","price_usd","market_cap_usd","occurred_at_ms","transaction_hash","pool_address","trader","platform","fees"],"type":"object"},"ProfileMediaUpload":{"additionalProperties":false,"properties":{"kind":{"const":"profile","type":"string"},"profile_version":{"format":"int64","minimum":1,"type":"integer"},"url":{"description":"Backend-owned URL for the approved profile image.","format":"uri","type":"string"}},"required":["kind","profile_version","url"],"type":"object"},"PublicCrossChainDeliveryAddress":{"additionalProperties":false,"description":"Whether a buy settling on a chain other than Solana has a delivery address on record. `unavailable` is the same condition the buy path reports as `delivery_address_unavailable`, surfaced before the trade is composed. When `ready`, `address` is the owner's bound Ethereum delivery wallet so the client can select the matching signer for EVM-origin exits instead of guessing among its linked wallets.","properties":{"address":{"description":"Bound Ethereum delivery wallet. Present only when state is `ready`.","pattern":"^0x[0-9a-fA-F]{40}$","type":"string"},"state":{"enum":["ready","unavailable"],"type":"string"}},"required":["state"],"type":"object"},"PublicProfile":{"additionalProperties":false,"properties":{"bio":{"maxLength":160,"type":["string","null"]},"display_name":{"maxLength":50,"type":["string","null"]},"follower_count":{"format":"uint64","minimum":0,"type":"integer"},"following_count":{"format":"uint64","minimum":0,"type":"integer"},"follows_viewer":{"type":"boolean"},"cover_image_url":{"description":"Reserved for a future moderated cover-image capability; currently null.","type":["string","null"]},"profile_image_url":{"description":"Backend-owned URL for the approved profile image or the user's stable CALLD default avatar.","format":"uri","type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"},"viewer_follows":{"type":"boolean"},"x_account":{"oneOf":[{"$ref":"#/components/schemas/PublicXAccount"},{"type":"null"}]}},"required":["user_id","username","display_name","bio","cover_image_url","profile_image_url","x_account","follower_count","following_count","viewer_follows","follows_viewer"],"type":"object"},"PublicProfilePage":{"additionalProperties":false,"properties":{"next_cursor":{"type":["string","null"]},"users":{"items":{"$ref":"#/components/schemas/PublicProfile"},"maxItems":100,"type":"array"}},"required":["users","next_cursor"],"type":"object"},"PublicWallet":{"additionalProperties":false,"properties":{"address":{"type":"string"},"state":{"enum":["active","provisioning"],"type":"string"},"execution_mode":{"type":"string","enum":["client","server","unknown"],"description":"Current wallet execution authority from the configured server cohort. New edge limit placements require client; missing or unknown fails closed. This does not restrict authenticated reads or cancellation of existing orders."}},"required":["state"],"type":"object"},"PublicXAccount":{"additionalProperties":false,"properties":{"avatar_url":{"type":["string","null"]},"display_name":{"type":["string","null"]},"username":{"type":"string"}},"required":["username","display_name","avatar_url"],"type":"object"},"QuoteV2":{"oneOf":[{"$ref":"#/components/schemas/SameChainQuoteV2"},{"$ref":"#/components/schemas/SvmToEvmQuoteV2"},{"$ref":"#/components/schemas/EvmToSvmQuoteV2"},{"$ref":"#/components/schemas/SignedServerQuote"},{"$ref":"#/components/schemas/LimitExecutionPreviewV2"},{"$ref":"#/components/schemas/EvmLimitExecutionPreviewV2"}]},"ReportRequest":{"description":"Closed report-target union. Supplying only reason reports the profile identified by the path. Content is always resolved canonically by the server.","oneOf":[{"additionalProperties":false,"properties":{"reason":{"enum":["spam","harassment","impersonation","other"],"type":"string"}},"required":["reason"],"title":"Profile report","type":"object"},{"additionalProperties":false,"properties":{"post_id":{"format":"uuid","type":"string"},"reason":{"enum":["spam","harassment","impersonation","other"],"type":"string"}},"required":["reason","post_id"],"title":"Social post report","type":"object"},{"additionalProperties":false,"properties":{"comment_id":{"format":"uuid","type":"string"},"reason":{"enum":["spam","harassment","impersonation","other"],"type":"string"}},"required":["reason","comment_id"],"title":"Token comment report","type":"object"},{"additionalProperties":false,"properties":{"chat_id":{"format":"uuid","type":"string"},"message_id":{"format":"uuid","type":"string"},"reason":{"enum":["spam","harassment","impersonation","other"],"type":"string"}},"required":["reason","chat_id","message_id"],"title":"Chat message report","type":"object"},{"additionalProperties":false,"properties":{"reason":{"enum":["spam","harassment","impersonation","other"],"type":"string"},"trade_event_id":{"type":"string","format":"uuid"},"reply_id":{"type":"string","format":"uuid"}},"required":["reason","trade_event_id","reply_id"],"title":"Trade reply report","type":"object","description":"Exact native reply and trade UUID. The path user must be its native author. Current trade and ancestry visibility are required even for repeated reports. Immutable native evidence only."}]},"ReportView":{"additionalProperties":false,"properties":{"reason":{"enum":["spam","harassment","impersonation","other"],"type":"string"},"report_id":{"format":"uuid","type":"string"},"reported_user_id":{"format":"uuid","type":"string"}},"required":["report_id","reported_user_id","reason"],"type":"object"},"RpcWebSocketChainId":{"enum":["eip155:1","eip155:56","eip155:143","eip155:999","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"},"RpcWebSocketTicket":{"additionalProperties":false,"properties":{"chain_id":{"$ref":"#/components/schemas/RpcWebSocketChainId"},"expires_at_unix":{"minimum":1,"type":"integer"},"protocol":{"const":"arbital.rpc.v1","type":"string"},"ticket_protocol":{"pattern":"^arbital\\.ticket\\.[A-Za-z0-9_.-]+$","readOnly":true,"type":"string"},"websocket_path":{"pattern":"^/v2/rpc-ws/","type":"string"}},"required":["chain_id","websocket_path","protocol","ticket_protocol","expires_at_unix"],"type":"object"},"CreateSocialPostRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":2000,"type":"string"},"media":{"items":{"$ref":"#/components/schemas/SocialPostMediaInput"},"maxItems":0,"type":"array","deprecated":true,"description":"Compatibility field; only an empty array is accepted. Use media_ids for approved uploads."},"publish_to_x":{"type":"boolean","description":"Defaults to true for text posts. Any nonempty media_ids requires explicit false; new media is not published to X. Structured attachment-only posts default to false and reject explicit true."},"attachments":{"type":"array","maxItems":4,"items":{"$ref":"#/components/schemas/SocialPostAttachmentInput"},"uniqueItems":true,"description":"Ordered structured references, separate from uploaded media. Duplicate same-kind identities are rejected after normalization."},"media_ids":{"$ref":"#/components/schemas/SocialMediaIds"},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeMentionInput"},"description":"Explicit native targets; no targets are inferred from plain @text. Offsets use Unicode code points in the exact canonical body; no trimming is allowed when nonempty."},"client_content_id":{"type":"string","format":"uuid","description":"Actor/source-kind scoped creation key. Matching replay returns the original readable source; a changed command returns 409. Required with nonempty mentions."}},"type":"object","description":"Requires nonblank text, structured attachments or approved media_ids. Parent, structured attachments and media bind in one transaction. Nonempty media_ids requires explicit publish_to_x:false. Position references cannot fall back to author-supplied figures. Native mentions support stable Early user IDs only. Imported-thesis/trade routes reject mention/key fields. No financial authority or external identity inference is granted.","oneOf":[{"properties":{"media_ids":{"type":"array","maxItems":0}},"anyOf":[{"required":["body"],"properties":{"body":{"type":"string","minLength":1,"pattern":"\\S"}}},{"required":["attachments"],"properties":{"attachments":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/SocialPostAttachmentInput"}},"publish_to_x":{"type":"boolean","const":false}}}]},{"required":["media_ids","publish_to_x"],"properties":{"media_ids":{"type":"array","minItems":1,"items":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}},"publish_to_x":{"const":false,"type":"boolean"}}}],"allOf":[{"if":{"required":["mentions"],"properties":{"mentions":{"minItems":1}}},"then":{"required":["body","client_content_id","publish_to_x"],"properties":{"publish_to_x":{"const":false}}}}]},"SocialActivityWebSocketTicket":{"additionalProperties":false,"properties":{"expires_at_unix":{"minimum":1,"type":"integer"},"protocol":{"const":"arbital.terminal.v1","type":"string"},"ticket_protocol":{"pattern":"^arbital\\.terminal\\.ticket\\.[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","readOnly":true,"type":"string"},"websocket_path":{"const":"/v2/social/activity/ws?version=1","type":"string"}},"required":["websocket_path","protocol","ticket_protocol","expires_at_unix"],"type":"object"},"SocialProviderObservation":{"type":"object","additionalProperties":false,"description":"Optional indexer-owned provider observations for external social thesis display. Null fields are missing, invalid, or unavailable; omission of the entire observation means unavailable or unsupported. Financial values are historical provider reports, never live holdings, verified P&L, portfolio/quote authority, or lifecycle results. No new provider acquisition or backend content storage is implied.","properties":{"kind":{"type":"string","const":"provider_reported"},"provider":{"type":"string","maxLength":128},"observedAtMs":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"Indexer record last-seen time in Unix milliseconds. This does not establish freshness of economic values or of any individual field."},"fieldObservedAtMs":{"type":"object","additionalProperties":false,"properties":{"author_name":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"author_is_dev":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"author_avatar_url":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"token_image_url":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"segments":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"holdings_usd":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"author_trade_usd":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_token_amount":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_pnl_usd":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_realized_pnl_usd":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_unrealized_pnl_usd":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_percentage_realized_pnl":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_percentage_unrealized_pnl":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"provider_closed_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"author_wallet_address":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"author_x_username":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"author_is_verified":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"token_name":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"}},"description":"Original per-field observation clocks in Unix milliseconds, keyed by upstream snake_case field names (segments for structured content). Only populated fields with valid clocks no later than the record last-seen time are included. An absent clock means unknown field freshness; never substitute observedAtMs."},"authorName":{"type":["string","null"],"maxLength":120},"authorIsDev":{"type":["boolean","null"]},"authorAvatarUrl":{"type":["string","null"],"maxLength":2048},"tokenImageUrl":{"type":["string","null"],"maxLength":2048},"segments":{"type":["array","null"],"items":{"type":"object","additionalProperties":true},"description":"Normalized provider segment objects, limited to 64 KiB of serialized JSON. Treat all values as untrusted text/data; never execute or render them as HTML."},"holdingsUsd":{"type":["string","null"],"maxLength":128,"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"authorTradeUsd":{"type":["string","null"],"maxLength":128,"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"tokenAmount":{"type":["string","null"],"maxLength":128,"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"pnlUsd":{"type":["string","null"],"maxLength":128,"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"realizedPnlUsd":{"type":["string","null"],"maxLength":128,"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"unrealizedPnlUsd":{"type":["string","null"],"maxLength":128,"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"percentageRealizedPnl":{"type":["string","null"],"maxLength":128,"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"percentageUnrealizedPnl":{"type":["string","null"],"maxLength":128,"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$"},"closedAtMs":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"authorWalletAddress":{"type":["string","null"],"maxLength":128,"description":"Provider-reported display text only. Does not establish author ownership, current wallet association, identity, or trading authority."},"authorXUsername":{"type":["string","null"],"maxLength":64},"authorIsVerified":{"type":["boolean","null"]},"tokenName":{"type":["string","null"],"maxLength":256}},"required":["kind","provider","observedAtMs","fieldObservedAtMs","authorName","authorIsDev","authorAvatarUrl","tokenImageUrl","segments","holdingsUsd","authorTradeUsd","tokenAmount","pnlUsd","realizedPnlUsd","unrealizedPnlUsd","percentageRealizedPnl","percentageUnrealizedPnl","closedAtMs","authorWalletAddress","authorXUsername","authorIsVerified","tokenName"]},"SocialActivityEventRevision":{"additionalProperties":false,"properties":{"event":{"description":"The same normalized event delivered by Social Activity WebSocket v1. Trade prices describe the fill, independently of assetRef.priceUsd.","oneOf":[{"$ref":"#/components/schemas/SocialActivityTradeEvent"},{"type":"object","additionalProperties":true,"required":["eventKind"],"properties":{"eventKind":{"type":"string","const":"thesis_published"}}}]},"eventId":{"maxLength":64,"minLength":1,"type":"string"},"providerObservation":{"$ref":"#/components/schemas/SocialProviderObservation"},"operation":{"const":"upsert","type":"string"},"revision":{"minimum":1,"type":"integer"},"sequence":{"pattern":"^[1-9][0-9]*$","type":"string"}},"required":["event","eventId","operation","revision","sequence"],"type":"object"},"SocialActivityEventPage":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/SocialActivityEventRevision"},"maxItems":50,"type":"array"},"next_cursor":{"maxLength":512,"minLength":1,"type":["string","null"]}},"required":["items","next_cursor"],"type":"object"},"SocialAssetRecentBuyersRequest":{"additionalProperties":false,"properties":{"assets":{"items":{"additionalProperties":false,"properties":{"address":{"maxLength":128,"minLength":20,"type":"string"},"chainId":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},"required":["chainId","address"],"type":"object"},"maxItems":20,"minItems":1,"type":"array","uniqueItems":true},"limit":{"default":6,"maximum":20,"minimum":1,"type":"integer"}},"required":["assets"],"type":"object"},"SocialAssetRecentBuyersResponse":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"assetRef":{"additionalProperties":false,"properties":{"address":{"type":"string"},"chainId":{"type":"string"}},"required":["chainId","address"],"type":"object"},"recentBuyerCount":{"minimum":0,"type":"integer"},"recentBuyers":{"items":{"additionalProperties":false,"properties":{"avatarUrl":{"type":["string","null"]},"displayName":{"type":["string","null"]},"entry":{"additionalProperties":false,"properties":{"amountAtomic":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"boughtAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"decimals":{"maximum":36,"minimum":0,"type":"integer"},"entryPriceUsd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"transactionSignature":{"maxLength":256,"minLength":1,"type":"string"},"usdNotional":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"}},"required":["amountAtomic","decimals","usdNotional","entryPriceUsd","boughtAtMs","transactionSignature"],"type":"object"},"handle":{"type":["string","null"]},"platformSubjectId":{"maxLength":180,"minLength":1,"type":"string"},"relationship":{"const":"recent_buyer","type":"string"}},"required":["platformSubjectId","handle","displayName","avatarUrl","relationship","entry"],"type":"object"},"maxItems":20,"type":"array"}},"required":["assetRef","recentBuyerCount","recentBuyers"],"type":"object"},"maxItems":20,"type":"array"}},"required":["items"],"type":"object"},"CreateSocialAssetCommentRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":280,"minLength":1,"type":"string","description":"Trimmed before validation; 1–280 Unicode characters. Rejects C0 controls except tab, LF and CR, and DEL (U+007F).","pattern":"^[^\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]*$"},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeMentionInput"},"description":"Explicit native targets; no targets are inferred from plain @text. Offsets use Unicode code points in the exact canonical body; no trimming is allowed when nonempty."},"client_content_id":{"type":"string","format":"uuid","description":"Actor/source-kind scoped creation key. Matching replay returns the original readable source; a changed command returns 409. Required with nonempty mentions."}},"required":["body"],"type":"object","allOf":[{"if":{"required":["mentions"],"properties":{"mentions":{"minItems":1}}},"then":{"required":["body","client_content_id"]}}],"description":" Native mentions support stable Early user IDs only. Imported-thesis/trade routes reject mention/key fields. No financial authority or external identity inference is granted."},"SocialAssetComment":{"additionalProperties":false,"properties":{"body":{"maxLength":280,"type":["string","null"],"description":"Null after parent deletion; empty for a media-only or external-GIF-only ordinary reply. Removing the last image preserves the empty body and deleted media slot."},"comment_id":{"format":"uuid","type":"string"},"created_at":{"format":"date-time","type":"string"},"deleted":{"type":"boolean"},"holding_display":{"type":["string","null"]},"is_holder":{"const":true,"type":"boolean"},"parent_comment_id":{"format":"uuid","type":["string","null"],"description":"Exact direct parent comment in this token thread; null for a root comment."},"reply_count":{"type":"integer","minimum":0,"description":"Nondeleted visible direct replies, excluding deeper descendants."},"thesis_event_id":{"description":"Feed eventId of the imported thesis this comment directly replies to; null for ordinary comments and replies.","format":"uuid","type":["string","null"]},"user":{"$ref":"#/components/schemas/SocialAssetCommentAuthor"},"viewer_can_delete":{"type":"boolean","description":"Whether the viewer owns this undeleted comment and may delete it."},"media":{"$ref":"#/components/schemas/SocialMediaGallery"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeReadMention"},"description":"Ordered historical entities with current viewer-scoped identity. Empty for legacy, imported or tombstoned content. A read failure is explicit, never a fabricated empty array."}},"required":["comment_id","body","created_at","is_holder","holding_display","user","parent_comment_id","deleted","reply_count","viewer_can_delete","thesis_event_id","mentions"],"type":"object","description":"Optional gif contains the saved external reference only for a visible, nondeleted native reply. It remains readable when GIF-reference writes are disabled and is omitted for deleted placeholders. It is distinct from approved uploaded media and is never returned with nonempty media."},"SocialAssetCommentAuthor":{"additionalProperties":false,"properties":{"avatar_url":{"description":"Approved profile image or stable CALLD default avatar URL.","type":["string","null"]},"display_name":{"type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"type":"string"}},"required":["user_id","username","display_name","avatar_url"],"type":"object"},"SocialAssetCommentPage":{"additionalProperties":false,"properties":{"comments":{"items":{"$ref":"#/components/schemas/SocialAssetComment"},"maxItems":50,"type":"array"},"next_cursor":{"type":["string","null"],"format":"uuid","description":"Last returned root comment UUID when older roots remain; scoped to this token."},"viewer_can_comment":{"type":"boolean","description":"True for an unrestricted viewer with a fresh positive live token balance."},"participation":{"const":"token_holders","type":"string"}},"required":["comments","next_cursor","viewer_can_comment","participation"],"type":"object"},"SocialAssetCommentReplyPage":{"additionalProperties":false,"type":"object","properties":{"comments":{"items":{"$ref":"#/components/schemas/SocialAssetComment"},"maxItems":50,"type":"array"},"next_cursor":{"type":["string","null"],"format":"uuid","description":"Last returned reply UUID when older replies remain; scoped to the exact token and parent."},"reply_count":{"type":"integer","minimum":0,"description":"Total visible nondeleted direct replies in this scope, independent of pagination."},"viewer_can_reply":{"type":"boolean","description":"True only for an unrestricted token holder with a visible undeleted parent. Provider unavailability returns 503."},"participation":{"const":"token_holders","type":"string"}},"required":["comments","next_cursor","reply_count","viewer_can_reply","participation"]},"SocialCommunityProfile":{"additionalProperties":false,"properties":{"account_created_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"bio":{"type":["string","null"]},"cover_image_url":{"type":["string","null"]},"display_name":{"type":["string","null"]},"follower_count":{"minimum":0,"type":"integer"},"following_count":{"minimum":0,"type":"integer"},"follows_viewer":{"type":"boolean"},"is_owner":{"type":"boolean"},"mutual_count":{"minimum":0,"type":"integer"},"profile_image_url":{"description":"Approved profile image or stable CALLD default avatar URL.","type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"type":"string"},"viewer_follows":{"type":"boolean"},"x_avatar_url":{"type":["string","null"]},"x_username":{"type":["string","null"]}},"required":["user_id","username","display_name","bio","profile_image_url","cover_image_url","x_username","x_avatar_url","account_created_at_ms","follower_count","following_count","mutual_count","viewer_follows","follows_viewer","is_owner"],"type":"object"},"SocialMutual":{"additionalProperties":false,"properties":{"display_name":{"type":["string","null"]},"profile_image_url":{"description":"Approved profile image or stable CALLD default avatar URL.","type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"type":"string"},"x_avatar_url":{"type":["string","null"]}},"required":["user_id","username","display_name","profile_image_url","x_avatar_url"],"type":"object"},"SocialMutualPage":{"additionalProperties":false,"properties":{"next_cursor":{"description":"Opaque scope-bound cursor for the next page.","maxLength":512,"pattern":"^[A-Za-z0-9_-]+$","type":["string","null"]},"users":{"items":{"$ref":"#/components/schemas/SocialMutual"},"maxItems":50,"type":"array"}},"required":["users","next_cursor"],"type":"object"},"SocialPost":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/SocialPostAuthor"},"body":{"maxLength":2000,"type":"string"},"created_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"id":{"format":"uuid","type":"string"},"like_count":{"minimum":0,"type":"integer"},"media":{"$ref":"#/components/schemas/SocialMediaGallery"},"pinned":{"type":"boolean"},"viewer_liked":{"type":"boolean"},"x_post_url":{"type":["string","null"]},"x_publish_state":{"type":"string"},"attachments":{"type":"array","maxItems":4,"items":{"$ref":"#/components/schemas/SocialPostAttachment"},"description":"Immutable ordered references and snapshots with viewer-scoped source availability. Historical values are distinct from live portfolio values."},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeReadMention"},"description":"Ordered historical entities with current viewer-scoped identity. Empty for legacy, imported or tombstoned content. A read failure is explicit, never a fabricated empty array."}},"required":["id","author","body","created_at_ms","media","like_count","viewer_liked","pinned","x_publish_state","x_post_url","attachments","mentions"],"type":"object"},"SocialPostAuthor":{"additionalProperties":false,"properties":{"display_name":{"type":["string","null"]},"profile_image_url":{"description":"Approved profile image or stable CALLD default avatar URL.","type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"type":"string"},"x_avatar_url":{"type":["string","null"]}},"required":["user_id","username","display_name","profile_image_url","x_avatar_url"],"type":"object"},"SocialPostMedia":{"$ref":"#/components/schemas/SocialMedia"},"SocialPostMediaInput":{"additionalProperties":false,"properties":{"media_url":{"format":"uri","type":"string"},"mime_type":{"enum":["image/jpeg","image/png","image/webp","image/gif"],"type":"string"},"size_bytes":{"maximum":15728640,"minimum":1,"type":"integer"}},"required":["media_url","mime_type","size_bytes"],"type":"object","deprecated":true,"description":"Retired caller-supplied URL format. Nonempty legacy media arrays are rejected; upload through POST /v2/social-media and submit media_ids instead."},"SocialPostPage":{"additionalProperties":false,"properties":{"next_cursor":{"description":"Opaque scope-bound cursor for the next page.","maxLength":512,"pattern":"^[A-Za-z0-9_-]+$","type":["string","null"]},"posts":{"items":{"$ref":"#/components/schemas/SocialPost"},"maxItems":50,"type":"array"}},"required":["posts","next_cursor"],"type":"object"},"SocialTraderProfile":{"additionalProperties":false,"properties":{"avatarUrl":{"type":["string","null"]},"bio":{"type":["string","null"]},"dataVisibility":{"enum":["public","private","unknown"],"type":"string"},"displayName":{"type":["string","null"]},"followers":{"type":["string","null"]},"following":{"type":["string","null"]},"handle":{"type":["string","null"]},"platform":{"enum":["fomo","pump"],"type":"string"},"platformSubjectId":{"type":"string"},"portfolioObservedAtMs":{"type":["string","null"]},"portfolioValueUsd":{"type":["string","null"]},"profileObservedAtMs":{"type":["string","null"]},"sevenDayPnlPct":{"type":["string","null"]},"sevenDayPnlUsd":{"type":["string","null"]},"traderProfileId":{"format":"uuid","type":"string"},"wallets":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"chainId":{"type":"string"}},"required":["chainId","address"],"type":"object"},"type":"array"}},"required":["traderProfileId","platform","platformSubjectId","handle","displayName","avatarUrl","bio","followers","following","profileObservedAtMs","portfolioValueUsd","portfolioObservedAtMs","sevenDayPnlUsd","sevenDayPnlPct","dataVisibility","wallets"],"type":"object"},"ExternalTraderAccount":{"additionalProperties":false,"properties":{"avatarUrl":{"type":["string","null"]},"bio":{"type":["string","null"]},"dataVisibility":{"enum":["public","unknown"],"type":"string"},"displayName":{"type":["string","null"]},"followers":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"following":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"handle":{"type":["string","null"]},"platform":{"enum":["fomo","pump"],"type":"string"},"platformSubjectId":{"maxLength":180,"minLength":1,"type":"string"},"profileObservedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"followersObservedAtMs":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$","description":"Optional exact count observation time, never inferred from a separately observed profile."}},"required":["avatarUrl","bio","dataVisibility","displayName","followers","following","handle","platform","platformSubjectId","profileObservedAtMs"],"type":"object"},"ExternalTraderWallet":{"additionalProperties":false,"properties":{"address":{"maxLength":128,"minLength":1,"type":"string"},"chainId":{"enum":["eip155:1","solana:mainnet-beta"],"type":"string"},"verificationSource":{"enum":["fomoscan","pump_public_profile"],"type":"string"},"verifiedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["address","chainId","verificationSource","verifiedAtMs"],"type":"object"},"ExternalTraderProfile":{"additionalProperties":false,"description":"Public Fomo/pump.fun identity projection. This is not an Arbital community user profile.","properties":{"accounts":{"items":{"$ref":"#/components/schemas/ExternalTraderAccount"},"minItems":1,"type":"array"},"traderProfileId":{"format":"uuid","type":"string"},"wallets":{"items":{"$ref":"#/components/schemas/ExternalTraderWallet"},"minItems":1,"type":"array"}},"required":["accounts","traderProfileId","wallets"],"type":"object"},"ExternalTraderPerformanceSummary":{"additionalProperties":false,"properties":{"capturedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"cohort":{"enum":["fomo_top_100_7d","pump_top_100_weekly"],"type":"string"},"isCurrentCohort":{"type":"boolean"},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"period":{"enum":["seven_day","weekly"],"type":"string"},"platform":{"enum":["fomo","pump"],"type":"string"},"platformSubjectId":{"maxLength":180,"minLength":1,"type":"string"},"pnlPct":{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"pnlUsd":{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"rank":{"maximum":100,"minimum":1,"type":"integer"},"realizedPnlUsd":{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"tradeCount":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"unrealizedPnlUsd":{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"volumeUsd":{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]}},"required":["capturedAtMs","cohort","isCurrentCohort","observedAtMs","period","platform","platformSubjectId","pnlPct","pnlUsd","rank","realizedPnlUsd","tradeCount","unrealizedPnlUsd","volumeUsd"],"type":"object"},"ExternalTraderPerformance":{"additionalProperties":false,"description":"Latest stored provider-leaderboard summary per eligible external account; not an equity curve or complete trading performance record.","properties":{"coverage":{"const":"provider_leaderboard_snapshot","type":"string"},"summaries":{"items":{"$ref":"#/components/schemas/ExternalTraderPerformanceSummary"},"type":"array"},"traderProfileId":{"format":"uuid","type":"string"}},"required":["coverage","summaries","traderProfileId"],"type":"object"},"ExternalTraderActivityAsset":{"additionalProperties":false,"properties":{"address":{"type":"string"},"change24hPct":{"type":["string","null"]},"chainId":{"type":"string"},"imageUrl":{"type":["string","null"]},"marketCapUsd":{"type":["string","null"]},"marketObservedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"name":{"type":["string","null"]},"priceUsd":{"type":["string","null"]},"quoteState":{"enum":["quotable","unavailable","unknown"],"type":"string"},"quoteUnavailableReason":{"type":["string","null"]},"symbol":{"type":["string","null"]}},"required":["address","change24hPct","chainId","imageUrl","marketCapUsd","marketObservedAtMs","name","priceUsd","quoteState","quoteUnavailableReason","symbol"],"type":"object"},"ExternalTraderActivityExecution":{"oneOf":[{"additionalProperties":false,"properties":{"chainId":{"const":"solana:mainnet-beta","type":"string"},"finality":{"const":"confirmed","type":"string"},"route":{"const":"same_chain","type":"string"},"slot":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"venue":{"enum":["dflow","jupiter","pump","pump_amm"],"type":"string"}},"required":["chainId","finality","route","slot","venue"],"type":"object"},{"additionalProperties":false,"description":"Historical Relay trade recorded before on-chain matching, identified by its Relay request ID.","properties":{"destinationChainId":{"type":"string"},"destinationTransaction":{"type":"string"},"finality":{"enum":["confirmed","finalized"],"type":"string"},"originChainId":{"type":"string"},"originTransaction":{"type":"string"},"relayRequestId":{"type":"string"},"route":{"const":"cross_chain","type":"string"},"venue":{"const":"relay","type":"string"}},"required":["destinationChainId","destinationTransaction","finality","originChainId","originTransaction","relayRequestId","route","venue"],"type":"object"},{"additionalProperties":false,"description":"Relay order matched on chain, identified by its Relay order ID.","properties":{"destinationChainId":{"type":"string"},"destinationTransaction":{"type":"string"},"finality":{"enum":["confirmed","finalized"],"type":"string"},"orderId":{"pattern":"^0x[0-9a-f]{64}$","type":"string"},"originChainId":{"type":"string"},"originTransaction":{"type":"string"},"route":{"const":"cross_chain","type":"string"},"venue":{"const":"relay","type":"string"}},"required":["destinationChainId","destinationTransaction","finality","orderId","originChainId","originTransaction","route","venue"],"type":"object"}]},"ExternalTraderActivityTrade":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"amountAtomic":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"amountDecimals":{"maximum":36,"minimum":0,"type":"integer"},"nativeAmount":{"type":"string"},"nativeSymbol":{"enum":["SOL","USDC"],"type":"string"},"side":{"enum":["buy","sell"],"type":"string"},"transactionSignature":{"maxLength":256,"minLength":1,"type":"string"},"usdNotional":{"type":["string","null"]},"executionPriceUsd":{"$ref":"#/components/schemas/ExecutionPriceUsd"},"executionPriceUnavailableReason":{"$ref":"#/components/schemas/ExecutionPriceUnavailableReason"},"receipt":{"$ref":"#/components/schemas/TradeReceipt"}},"required":["amount","amountAtomic","amountDecimals","nativeAmount","nativeSymbol","side","transactionSignature","usdNotional","executionPriceUsd","executionPriceUnavailableReason"],"type":"object","allOf":[{"oneOf":[{"properties":{"executionPriceUsd":{"type":"string"},"executionPriceUnavailableReason":{"type":"null"}}},{"properties":{"executionPriceUsd":{"type":"null"},"executionPriceUnavailableReason":{"type":"string"}}}]}]},"ExternalTraderActivityItem":{"additionalProperties":false,"properties":{"activityId":{"format":"uuid","type":"string"},"assetRef":{"$ref":"#/components/schemas/ExternalTraderActivityAsset"},"execution":{"$ref":"#/components/schemas/ExternalTraderActivityExecution"},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"occurredAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"platform":{"enum":["fomo","pump"],"type":"string"},"trade":{"$ref":"#/components/schemas/ExternalTraderActivityTrade"}},"required":["activityId","assetRef","execution","observedAtMs","occurredAtMs","platform","trade"],"type":"object"},"ExternalTraderActivityPage":{"additionalProperties":false,"description":"Observed Social Engine trades only; this is not guaranteed complete wallet history.","properties":{"coverage":{"const":"observed_only","type":"string"},"items":{"items":{"$ref":"#/components/schemas/ExternalTraderActivityItem"},"maxItems":50,"type":"array"},"nextCursor":{"type":["string","null"]},"traderProfileId":{"format":"uuid","type":"string"}},"required":["coverage","items","nextCursor","traderProfileId"],"type":"object"},"ExternalPortfolioValuation":{"additionalProperties":false,"properties":{"cashUsd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"equityUsd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"}},"required":["cashUsd","equityUsd"],"type":"object"},"ExternalTraderPortfolio":{"additionalProperties":false,"description":"Request-time Codex portfolio for server-resolved, verified public-platform wallets. Display only and never quote, sell, or execution authority.","properties":{"complete":{"type":"boolean"},"coverage":{"const":"verified_wallets","type":"string"},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"portfolio":{"$ref":"#/components/schemas/CodexWatchPortfolioObject"},"source":{"const":"codex","type":"string"},"summary":{"$ref":"#/components/schemas/CodexWatchPortfolioSummary"},"traderProfileId":{"format":"uuid","type":"string"},"valuation":{"oneOf":[{"$ref":"#/components/schemas/ExternalPortfolioValuation"},{"type":"null"}]}},"required":["complete","coverage","observedAtMs","portfolio","source","summary","traderProfileId","valuation"],"type":"object"},"PublicProfilePortfolio":{"additionalProperties":false,"description":"Request-time Codex portfolio for an active CALLD profile's server-resolved Privy-managed wallets. Owners retain access; other viewers require explicit consent. Display only and never quote, sell, or execution authority.","properties":{"complete":{"type":"boolean"},"coverage":{"const":"managed_wallets","type":"string"},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"portfolio":{"$ref":"#/components/schemas/PublicProfilePortfolioObject"},"source":{"const":"codex","type":"string"},"summary":{"$ref":"#/components/schemas/CodexWatchPortfolioSummary"},"valuation":{"oneOf":[{"$ref":"#/components/schemas/ExternalPortfolioValuation"},{"type":"null"}]}},"required":["complete","coverage","observedAtMs","portfolio","source","summary","valuation"],"type":"object"},"ExternalTraderSwaps":{"additionalProperties":false,"description":"Request-time provider wallet history for server-resolved, verified public-platform wallets.","properties":{"complete":{"description":"True only when every configured wallet-chain read succeeded.","type":"boolean"},"coverage":{"const":"provider_wallet_history","type":"string"},"source":{"const":"codex","type":"string"},"swaps":{"$ref":"#/components/schemas/CodexWatchSwapHistoryObject"},"traderProfileId":{"format":"uuid","type":"string"}},"required":["complete","coverage","source","swaps","traderProfileId"],"type":"object"},"ExternalTraderAssetSwaps":{"additionalProperties":false,"description":"Request-time provider wallet history of one token for server-resolved, verified public-platform wallets.","properties":{"asset":{"additionalProperties":false,"properties":{"address":{"description":"Canonical token address, or native for the chain native asset. EVM addresses are lowercase; Solana addresses preserve canonical case.","type":"string"},"chainId":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},"required":["address","chainId"],"type":"object"},"complete":{"description":"True only when every configured wallet-chain read succeeded.","type":"boolean"},"coverage":{"const":"provider_wallet_history","type":"string"},"source":{"const":"codex","type":"string"},"swaps":{"$ref":"#/components/schemas/CodexWatchSwapHistoryObject"},"traderProfileId":{"format":"uuid","type":"string"}},"required":["asset","complete","coverage","source","swaps","traderProfileId"],"type":"object"},"WalletProfileSubject":{"additionalProperties":false,"properties":{"address":{"maxLength":128,"minLength":1,"type":"string"},"chainId":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},"required":["address","chainId"],"type":"object"},"WalletProfile":{"additionalProperties":false,"description":"Canonical public-wallet profile. Holder-provider metadata remains row-level navigation context and is not promoted to profile identity.","properties":{"capabilities":{"additionalProperties":false,"properties":{"performance":{"const":false,"type":"boolean"},"portfolio":{"const":true,"type":"boolean"},"swaps":{"const":true,"type":"boolean"}},"required":["performance","portfolio","swaps"],"type":"object"},"profileKind":{"const":"wallet","type":"string"},"subject":{"$ref":"#/components/schemas/WalletProfileSubject"}},"required":["capabilities","profileKind","subject"],"type":"object"},"WalletProfilePortfolio":{"additionalProperties":false,"description":"Request-time Codex portfolio for the canonical wallet in the path. Display only and never quote, sell, or execution authority.","properties":{"complete":{"type":"boolean"},"coverage":{"const":"requested_wallet","type":"string"},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"portfolio":{"$ref":"#/components/schemas/CodexWatchPortfolioObject"},"profileKind":{"const":"wallet","type":"string"},"source":{"const":"codex","type":"string"},"subject":{"$ref":"#/components/schemas/WalletProfileSubject"},"summary":{"$ref":"#/components/schemas/CodexWatchPortfolioSummary"},"valuation":{"oneOf":[{"$ref":"#/components/schemas/ExternalPortfolioValuation"},{"type":"null"}]}},"required":["complete","coverage","observedAtMs","portfolio","profileKind","source","subject","summary","valuation"],"type":"object"},"WalletProfileSwaps":{"additionalProperties":false,"properties":{"complete":{"description":"True only when every configured wallet-chain read succeeded.","type":"boolean"},"coverage":{"const":"provider_wallet_history","type":"string"},"profileKind":{"const":"wallet","type":"string"},"source":{"const":"codex","type":"string"},"subject":{"$ref":"#/components/schemas/WalletProfileSubject"},"swaps":{"$ref":"#/components/schemas/CodexWatchSwapHistoryObject"}},"required":["complete","coverage","profileKind","source","subject","swaps"],"type":"object"},"SameChainQuoteV2":{"additionalProperties":false,"properties":{"asset_decimals":{"description":"Decimals of the traded asset: the output asset for buys and the input asset for sells.","maximum":255,"minimum":0,"type":"integer"},"authorization_requirement":{"const":"interactive_client_signature","type":"string"},"destination_asset":{"maxLength":128,"minLength":1,"type":"string"},"destination_chain_id":{"const":"solana","type":"string"},"dynamic_slippage_bps":{"description":"Provider-selected slippage encoded into the validated transaction minimum output.","minimum":0,"type":"integer"},"exact_input_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"enum":["normal","fast"],"type":"string"},"expected_output_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"expires_at_unix_ms":{"minimum":1,"type":"integer"},"fees":{"items":{"$ref":"#/components/schemas/ExecutionQuoteFeeV2"},"maxItems":4,"type":"array"},"minimum_output_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"operation":{"enum":["same_chain_buy","same_chain_sell"],"type":"string"},"platform_fee_bps":{"maximum":10000,"minimum":0,"type":["integer","null"]},"prepared":{"$ref":"#/components/schemas/PreparedSolanaQuoteV2"},"priority_fee_lamports":{"pattern":"^[1-9][0-9]*$","type":["string","null"]},"provider":{"enum":["dflow","jupiter"],"type":"string"},"quote_id":{"description":"Opaque quote identifier. An in-request preparation retry appends `_r<attempt>`.","pattern":"^(scb|scs)_[0-9a-f-]{36}(_r[1-9][0-9]{0,2})?$","type":"string"},"source_asset":{"maxLength":128,"minLength":1,"type":"string"},"source_balance_observation":{"$ref":"#/components/schemas/SourceBalanceObservationV2"},"source_chain_id":{"const":"solana","type":"string"},"swap_impact_bps":{"maximum":10000,"minimum":-10000,"type":"integer"}},"required":["quote_id","provider","operation","source_chain_id","destination_chain_id","source_asset","destination_asset","asset_decimals","exact_input_atomic","expected_output_atomic","minimum_output_atomic","fees","execution_speed","platform_fee_bps","priority_fee_lamports","dynamic_slippage_bps","swap_impact_bps","expires_at_unix_ms","authorization_requirement","prepared"],"type":"object"},"SourceBalanceObservationV2":{"additionalProperties":false,"description":"The controlled wallet's live balance of the sold asset as the backend observed it during this quote request. It is the evidence behind the sell amount and the only balance a client may treat as sell authority. It is present on Solana/EVM same_chain_sell and evm_to_svm quotes and absent on buys.","properties":{"amount_atomic":{"maxLength":78,"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"asset":{"maxLength":128,"minLength":1,"type":"string"},"chain_id":{"description":"`solana` for Solana same-chain sells; the numeric EVM chain ID for EVM limit sells or evm_to_svm.","maxLength":80,"minLength":1,"type":"string"},"commitment":{"description":"How final the balance read was: `confirmed` for Solana balances read at confirmed commitment; `latest` for EVM balances read from the latest block, which can reorganize.","enum":["confirmed","latest"],"type":"string"},"observed_at_unix_ms":{"minimum":1,"type":"integer"},"slot":{"description":"Solana slot the balance was read at. Absent for EVM origins.","pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["amount_atomic","asset","chain_id","commitment","observed_at_unix_ms"],"type":"object"},"SuggestionDismissal":{"additionalProperties":false,"properties":{"is_dismissed":{"const":true,"type":"boolean"},"suggested_user_id":{"format":"uuid","type":"string"}},"required":["suggested_user_id","is_dismissed"],"type":"object"},"UpdateMeRequest":{"additionalProperties":false,"anyOf":[{"required":["display_name"]},{"required":["bio"]}],"properties":{"bio":{"maxLength":160,"type":["string","null"]},"display_name":{"maxLength":50,"type":["string","null"]},"expected_profile_version":{"format":"int64","minimum":1,"type":"integer"}},"required":["expected_profile_version"],"type":"object"},"UpdateMeV2Request":{"additionalProperties":false,"description":"Optimistic profile update. A socially restricted account may still revoke holder-profile or portfolio visibility without profile edits.","anyOf":[{"required":["display_name"]},{"required":["bio"]},{"required":["username"]},{"required":["holder_profile_public"]},{"required":["portfolio_public"]}],"properties":{"bio":{"maxLength":160,"type":["string","null"]},"display_name":{"maxLength":50,"type":["string","null"]},"expected_profile_version":{"format":"int64","minimum":1,"type":"integer"},"holder_profile_public":{"description":"Publish or withdraw the CALLD wallet-to-profile association used by holder profiles.","type":"boolean"},"portfolio_public":{"description":"Publish or withdraw other authenticated viewers' access to this CALLD profile's request-time Codex portfolio. The owner retains access.","type":"boolean"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},"required":["expected_profile_version"],"type":"object"},"UsdcFundingInstructions":{"additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/FundingAsset"},"caip2":{"const":"solana:mainnet","description":"Provider-compatible destination chain identifier"},"destination_token_account":{"description":"Canonical derived USDC ATA used to verify finalized settlement","maxLength":44,"minLength":32,"type":"string"},"network":{"const":"solana-mainnet-beta"},"wallet_address":{"maxLength":44,"minLength":32,"type":"string"}},"required":["network","caip2","wallet_address","asset","destination_token_account"],"type":"object"},"WatchlistEntry":{"additionalProperties":false,"properties":{"created_at_ms":{"pattern":"^[1-9][0-9]*$","type":"string"},"target":{"$ref":"#/components/schemas/WatchlistTarget"}},"required":["target","created_at_ms"],"type":"object"},"WatchlistPage":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/WatchlistEntry"},"maxItems":100,"type":"array"},"next_cursor":{"maxLength":1024,"type":["string","null"]}},"required":["items","next_cursor"],"type":"object"},"WatchlistState":{"additionalProperties":false,"properties":{"created_at_ms":{"pattern":"^[1-9][0-9]*$","type":["string","null"]},"is_watchlisted":{"type":"boolean"},"target":{"$ref":"#/components/schemas/WatchlistTarget"}},"required":["target","is_watchlisted","created_at_ms"],"type":"object"},"WatchlistTarget":{"oneOf":[{"$ref":"#/components/schemas/WatchlistTokenTarget"}]},"TraderFollowTarget":{"additionalProperties":false,"properties":{"platform":{"enum":["fomo","pump"],"type":"string"},"platform_subject_id":{"maxLength":180,"minLength":1,"type":"string"}},"required":["platform","platform_subject_id"],"type":"object"},"TraderFollowState":{"additionalProperties":false,"properties":{"created_at_ms":{"pattern":"^[1-9][0-9]*$","type":["string","null"]},"is_following":{"type":"boolean"},"target":{"$ref":"#/components/schemas/TraderFollowTarget"}},"required":["target","is_following","created_at_ms"],"type":"object"},"TraderFollowPage":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"created_at_ms":{"pattern":"^[1-9][0-9]*$","type":"string"},"target":{"$ref":"#/components/schemas/TraderFollowTarget"}},"required":["target","created_at_ms"],"type":"object"},"maxItems":100,"type":"array"},"next_cursor":{"maxLength":1024,"type":["string","null"]}},"required":["items","next_cursor"],"type":"object"},"WatchlistTokenTarget":{"additionalProperties":false,"properties":{"address":{"maxLength":44,"minLength":32,"type":"string"},"chain_id":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"},"kind":{"const":"token"}},"required":["kind","chain_id","address"],"type":"object"},"UsernameAvailability":{"additionalProperties":false,"description":"Advisory username check. Only a successful PATCH /v2/me atomically claims a username.","properties":{"available":{"type":"boolean"},"is_current":{"description":"True when this case-insensitive username is already owned by the authenticated user.","type":"boolean"},"suggestions":{"items":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"},"maxItems":3,"type":"array"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},"required":["username","available","is_current","suggestions"],"type":"object"},"XDiscoveryAuthorizationStart":{"additionalProperties":false,"properties":{"authorizationUrl":{"description":"Short-lived X OAuth 2.0 PKCE authorization URL. Open it in an external authentication session.","format":"uri","type":"string"}},"required":["authorizationUrl"],"type":"object"},"XDiscoveryStatus":{"additionalProperties":false,"properties":{"granted_scopes":{"description":"Scopes returned by X for this stored authorization. A usable discovery authorization includes tweet.read, users.read, follows.read, and offline.access and excludes publishing scopes.","oneOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}]},"state":{"enum":["unlinked","identity_linked","discovery_authorized","reauthorization_required"],"type":"string"},"x_provider_user_id":{"type":["string","null"]}},"required":["state","x_provider_user_id","granted_scopes"],"type":"object"},"XFollowSync":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"matched_user_count":{"format":"uint64","minimum":0,"type":"integer"},"state":{"enum":["pending","syncing","completed","failed"],"type":"string"},"sync_id":{"format":"uuid","type":"string"}},"required":["sync_id","state","matched_user_count","has_more"],"type":"object"},"XFollowSyncRequest":{"description":"Omit the body or send an empty object to use the backend-owned X discovery authorization. x_access_token is retained only for legacy clients.","additionalProperties":false,"properties":{"x_access_token":{"description":"Short-lived RFC 6750 bearer token with tweet.read, users.read, and follows.read scopes.","maxLength":4000,"minLength":1,"pattern":"^[A-Za-z0-9\\-._~+/]+={0,}$","type":"string","writeOnly":true}},"type":"object"},"CreateSvmToEvmQuoteRequestV2":{"additionalProperties":false,"properties":{"destination_chain_id":{"maxLength":20,"not":{"const":"1337"},"pattern":"^[1-9][0-9]*$","type":"string"},"destination_currency":{"maxLength":128,"minLength":1,"pattern":"^[^\\s\\u0000-\\u001F]+$","type":"string"},"exact_input_usdc_atomic":{"maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"operation":{"const":"svm_to_evm","type":"string"},"priority_fee":{"$ref":"#/components/schemas/PriorityFeePreferenceV2"},"slippage_bps":{"deprecated":true,"description":"Ignored compatibility placeholder. The server pins ordinary Relay exact-input quotes to 1000 bps slippage and requests high-impact route evaluation on the first quote.","examples":[1000],"maximum":4500,"minimum":1,"type":"integer"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","destination_chain_id","destination_currency","exact_input_usdc_atomic"],"type":"object"},"CreateEvmToSvmQuoteRequestV2":{"additionalProperties":false,"allOf":[{"if":{"required":["retry_reason"]},"then":{"properties":{"origin_chain_id":{"const":"4663"}}}}],"description":"Quotes a Relay EVM-to-Solana exit. The backend returns the approve and deposit calls; the client signs and submits them. The request creates no quote, execution, or gasless-submission state.","oneOf":[{"required":["exact_input_asset_atomic"]},{"required":["sell_all"]}],"properties":{"exact_input_asset_atomic":{"maxLength":78,"pattern":"^[1-9][0-9]*$","type":"string"},"operation":{"const":"evm_to_svm","type":"string"},"origin_chain_id":{"maxLength":20,"not":{"const":"1337"},"pattern":"^[1-9][0-9]*$","type":"string"},"origin_token_address":{"description":"ERC-20 contract on the origin chain. The zero address is not a valid sell asset.","maxLength":42,"minLength":42,"not":{"pattern":"^0x0{40}$"},"pattern":"^0x[0-9a-fA-F]{40}$","type":"string"},"retry_reason":{"const":"transaction_simulation_failed","description":"Requests the one guarded Robinhood Chain fallback route after a definitive client-side deposit simulation failure. Rejected for every other origin chain.","type":"string"},"sell_all":{"const":true,"description":"Resolve the exact input from the authenticated controlled wallet's live ERC-20 balance during this stateless quote request.","type":"boolean"},"slippage_bps":{"deprecated":true,"description":"Ignored compatibility placeholder. The server pins ordinary Relay exact-input quotes to 1000 bps slippage.","examples":[1000],"maximum":4500,"minimum":1,"type":"integer"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","origin_chain_id","origin_token_address"],"type":"object"},"CreateHyperliquidFundingQuoteRequestV2":{"additionalProperties":false,"description":"Quotes a fully sponsored, zero-app-fee Relay EXACT_OUTPUT transfer from the authenticated user's Solana USDC balance directly into their linked Hyperliquid perps account. Priority is automatic and cannot be overridden. The quote is unavailable unless the required input is decimal-normalized 1:1 and Relay preserves full sponsorship within the configured cap.","properties":{"exact_output_perps_usdc_atomic":{"description":"Exact HyperCore perps USDC output in 8-decimal atomic units. The final two digits must be zero and the value must be at least 500000000 (5 USDC).","maxLength":20,"pattern":"^[1-9][0-9]*00$","type":"string"},"operation":{"const":"hyperliquid_perps_funding","type":"string"},"slippage_bps":{"deprecated":true,"description":"Ignored compatibility placeholder. Relay selects exact-output slippage for this transfer.","examples":[1000],"maximum":4500,"minimum":1,"type":"integer"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","exact_output_perps_usdc_atomic"],"type":"object"},"CreateUsdcWithdrawalRequest":{"additionalProperties":false,"properties":{"preview_id":{"format":"uuid","type":"string"}},"required":["preview_id"],"type":"object"},"CreateUsdcWithdrawalResponse":{"additionalProperties":false,"properties":{"authorization":{"$ref":"#/components/schemas/UsdcWithdrawalSigningRequest"},"replayed":{"type":"boolean"},"withdrawal":{"$ref":"#/components/schemas/UsdcWithdrawal"}},"required":["withdrawal","replayed"],"type":"object"},"CreateUserTransferRequest":{"additionalProperties":false,"properties":{"preview_id":{"format":"uuid","type":"string"}},"required":["preview_id"],"type":"object"},"CreateUserTransferResponse":{"additionalProperties":false,"properties":{"authorization":{"$ref":"#/components/schemas/UsdcWithdrawalSigningRequest"},"replayed":{"type":"boolean"},"transfer":{"$ref":"#/components/schemas/UserTransfer"}},"required":["transfer","replayed"],"type":"object"},"PreparedRelayQuoteV2":{"additionalProperties":false,"properties":{"destination_address":{"maxLength":128,"minLength":1,"type":"string"},"fee_payer_address":{"maxLength":44,"minLength":32,"type":"string"},"fee_payer_signature":{"description":"Base64 Ed25519 fee-payer signature already present in the transaction.","maxLength":88,"minLength":88,"type":"string"},"last_valid_block_height":{"pattern":"^[1-9][0-9]*$","type":"string"},"relay_status_endpoint":{"format":"uri","maxLength":2048,"type":"string"},"relay_swap_id":{"maxLength":256,"minLength":1,"type":"string"},"transaction_base64":{"description":"Exact two-signer transaction with only the fee-payer slot signed. The client fills the remaining user slot without changing the message.","maxLength":16400,"minLength":1,"type":"string"},"transaction_signature":{"description":"Base58 Solana transaction signature to observe after client broadcast.","maxLength":88,"minLength":64,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$","type":"string"}},"required":["relay_swap_id","relay_status_endpoint","destination_address","transaction_base64","transaction_signature","fee_payer_signature","fee_payer_address","last_valid_block_height"],"type":"object"},"PreparedEvmTransactionV2":{"additionalProperties":false,"properties":{"data":{"maxLength":65538,"pattern":"^0x(?:[0-9a-fA-F]{2})*$","type":"string"},"step":{"enum":["approve","deposit"],"type":"string"},"to":{"pattern":"^0x[0-9a-fA-F]{40}$","type":"string"},"value":{"pattern":"^0x(?:0|[1-9a-fA-F][0-9a-fA-F]*)$","type":"string"}},"required":["step","to","value","data"],"type":"object"},"PreparedEvmRelayQuoteV2":{"additionalProperties":false,"description":"Relay approve and deposit calls. The client wraps them in an ERC-4337 UserOperation, obtains Pimlico paymaster fields through the edge bundler, submits the sponsored UserOp, and indexes the landed origin hash with Relay. The backend does not submit these calls and does not return a gasless capability.","properties":{"destination_address":{"maxLength":44,"minLength":32,"type":"string"},"relay_status_endpoint":{"format":"uri","maxLength":2048,"type":"string"},"relay_swap_id":{"maxLength":256,"minLength":1,"type":"string"},"transactions":{"items":{"$ref":"#/components/schemas/PreparedEvmTransactionV2"},"maxItems":2,"minItems":1,"type":"array"}},"required":["relay_swap_id","relay_status_endpoint","destination_address","transactions"],"type":"object"},"PreviewUsdcWithdrawalRequest":{"additionalProperties":false,"properties":{"amount_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"destination_address":{"maxLength":64,"minLength":32,"type":"string"},"destination_chain":{"$ref":"#/components/schemas/WithdrawalDestinationChain"}},"required":["destination_chain","destination_address","amount_atomic"],"type":"object"},"PreviewUserTransferRequest":{"additionalProperties":false,"properties":{"amount_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"asset_id":{"const":"usdc"},"recipient_username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},"required":["recipient_username","asset_id","amount_atomic"],"type":"object"},"SubmitUsdcWithdrawalSignatureRequest":{"additionalProperties":false,"properties":{"artifact_hash":{"pattern":"^[0-9a-f]{64}$","type":"string"},"authorization_signature":{"maxLength":256,"minLength":1,"type":"string","writeOnly":true},"version":{"const":1,"type":"integer"}},"required":["version","artifact_hash","authorization_signature"],"type":"object"},"SvmToEvmQuoteV2":{"additionalProperties":false,"description":"Sponsor-signed Relay Solana-to-EVM quote. A hyperliquid_perps_funding request returns this shape with destination_chain_id 1337, a zero destination_asset, platform_fee_bps 0, and an empty fees array.","properties":{"asset_decimals":{"description":"Decimals of the destination asset when Relay reports them.","maximum":255,"minimum":0,"type":"integer"},"authorization_requirement":{"const":"interactive_client_signature","type":"string"},"destination_asset":{"maxLength":128,"minLength":1,"type":"string"},"destination_chain_id":{"maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"dynamic_slippage_bps":{"description":"Relay-selected slippage derived from the expected and minimum outputs.","maximum":10000,"minimum":0,"type":"integer"},"exact_input_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"enum":["normal","fast"],"type":"string"},"expected_output_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"expires_at_unix_ms":{"minimum":1,"type":"integer"},"fees":{"items":{"$ref":"#/components/schemas/ExecutionQuoteFeeV2"},"maxItems":4,"type":"array"},"minimum_output_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"operation":{"const":"svm_to_evm","type":"string"},"platform_fee_bps":{"maximum":10000,"minimum":0,"type":["integer","null"]},"prepared":{"$ref":"#/components/schemas/PreparedRelayQuoteV2"},"priority_fee_lamports":{"pattern":"^[1-9][0-9]*$","type":["string","null"]},"quote_id":{"pattern":"^s2e_[0-9a-f-]{36}$","type":"string"},"source_asset":{"const":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","type":"string"},"source_chain_id":{"const":"solana","type":"string"},"swap_impact_bps":{"maximum":10000,"minimum":-10000,"type":["integer","null"]}},"required":["quote_id","operation","source_chain_id","destination_chain_id","source_asset","destination_asset","exact_input_atomic","expected_output_atomic","minimum_output_atomic","dynamic_slippage_bps","fees","execution_speed","platform_fee_bps","priority_fee_lamports","swap_impact_bps","expires_at_unix_ms","authorization_requirement","prepared"],"type":"object"},"EvmToSvmQuoteV2":{"additionalProperties":false,"description":"Thin Relay EVM-to-Solana quote. The client signs and submits the returned approve and deposit calls. The backend does not sponsor, broadcast, or admit a gasless submission.","properties":{"authorization_requirement":{"const":"interactive_client_signature","type":"string"},"destination_asset":{"const":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","type":"string"},"destination_chain_id":{"const":"solana","type":"string"},"dynamic_slippage_bps":{"maximum":10000,"minimum":0,"type":"integer"},"exact_input_atomic":{"maxLength":78,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"const":"normal","type":"string"},"expected_output_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"expires_at_unix_ms":{"minimum":1,"type":"integer"},"fees":{"items":{"$ref":"#/components/schemas/ExecutionQuoteFeeV2"},"maxItems":4,"type":"array"},"minimum_output_atomic":{"maxLength":39,"pattern":"^[1-9][0-9]*$","type":"string"},"operation":{"const":"evm_to_svm","type":"string"},"platform_fee_bps":{"maximum":10000,"minimum":0,"type":["integer","null"]},"prepared":{"$ref":"#/components/schemas/PreparedEvmRelayQuoteV2"},"priority_fee_lamports":{"const":null},"quote_id":{"pattern":"^e2s_[0-9a-f-]{36}$","type":"string"},"source_asset":{"pattern":"^0x[0-9a-fA-F]{40}$","type":"string"},"source_balance_observation":{"$ref":"#/components/schemas/SourceBalanceObservationV2"},"source_chain_id":{"maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"swap_impact_bps":{"maximum":10000,"minimum":-10000,"type":["integer","null"]}},"required":["quote_id","operation","source_chain_id","destination_chain_id","source_asset","destination_asset","exact_input_atomic","expected_output_atomic","minimum_output_atomic","dynamic_slippage_bps","fees","execution_speed","platform_fee_bps","priority_fee_lamports","swap_impact_bps","expires_at_unix_ms","authorization_requirement","prepared"],"type":"object"},"UsdcWithdrawal":{"additionalProperties":false,"properties":{"amount_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"created_at_unix_ms":{"format":"int64","type":"integer"},"destination_address":{"type":"string"},"destination_amount":{"pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"destination_chain":{"$ref":"#/components/schemas/WithdrawalDestinationChain"},"estimated_fees":{"items":{"$ref":"#/components/schemas/WithdrawalFee"},"type":"array"},"estimated_output_amount":{"type":"string"},"failure_code":{"type":"string"},"id":{"format":"uuid","type":"string"},"provider_action_id":{"type":"string"},"provider_fees":{"items":{},"maxItems":64,"type":"array"},"provider_steps":{"items":{},"maxItems":64,"type":"array"},"resolved_at_unix_ms":{"format":"int64","type":"integer"},"slippage_bps":{"type":"integer"},"source_asset":{"const":"usdc"},"source_chain":{"const":"solana"},"status":{"enum":["authorization_required","submitting","submission_unknown","pending","provider_succeeded","succeeded","rejected","failed","reconciliation_required"],"type":"string"},"transaction_hashes":{"items":{},"maxItems":64,"type":"array"}},"required":["id","status","source_chain","source_asset","destination_chain","destination_address","amount_atomic","estimated_output_amount","estimated_fees","provider_fees","provider_steps","transaction_hashes","slippage_bps","created_at_unix_ms"],"type":"object"},"UsdcWithdrawalPreview":{"additionalProperties":false,"properties":{"amount_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"destination_address":{"type":"string"},"destination_chain":{"$ref":"#/components/schemas/WithdrawalDestinationChain"},"estimated_fees":{"items":{"$ref":"#/components/schemas/WithdrawalFee"},"maxItems":16,"type":"array"},"estimated_output_amount":{"description":"Indicative standard-unit output. For cross-chain exact-input transfers, final destination amount and fees are read from the Privy wallet action.","pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"expires_at_unix_seconds":{"format":"int64","type":"integer"},"id":{"format":"uuid","type":"string"},"slippage_bps":{"maximum":10000,"minimum":0,"type":"integer"},"source_asset":{"const":"usdc"},"source_chain":{"const":"solana"}},"required":["id","source_chain","source_asset","destination_chain","destination_address","amount_atomic","estimated_output_amount","estimated_fees","slippage_bps","expires_at_unix_seconds"],"type":"object"},"UsdcWithdrawalSigningRequest":{"additionalProperties":false,"properties":{"artifact_hash":{"pattern":"^[0-9a-f]{64}$","type":"string"},"payload_base64":{"maxLength":16384,"minLength":1,"type":"string","writeOnly":true},"version":{"const":1,"type":"integer"}},"required":["version","artifact_hash","payload_base64"],"type":"object"},"UserTransfer":{"additionalProperties":false,"properties":{"amount_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"asset_id":{"const":"usdc"},"created_at_unix_ms":{"format":"int64","type":"integer"},"destination_amount":{"type":"string"},"destination_chain":{"const":"solana"},"estimated_fees":{"items":{"$ref":"#/components/schemas/WithdrawalFee"},"type":"array"},"estimated_output_amount":{"type":"string"},"failure_code":{"type":"string"},"id":{"format":"uuid","type":"string"},"provider_fees":{"items":{},"maxItems":64,"type":"array"},"provider_steps":{"items":{},"maxItems":64,"type":"array"},"recipient_username":{"maxLength":30,"minLength":3,"type":"string"},"resolved_at_unix_ms":{"format":"int64","type":"integer"},"slippage_bps":{"type":"integer"},"source_chain":{"const":"solana"},"status":{"enum":["authorization_required","submitting","submission_unknown","pending","provider_succeeded","succeeded","rejected","failed","reconciliation_required"],"type":"string"},"transaction_hashes":{"items":{},"maxItems":64,"type":"array"}},"required":["id","status","source_chain","destination_chain","asset_id","recipient_username","amount_atomic","estimated_output_amount","estimated_fees","provider_fees","provider_steps","transaction_hashes","slippage_bps","created_at_unix_ms"],"type":"object"},"UserTransferPreview":{"additionalProperties":false,"properties":{"amount_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"asset_id":{"const":"usdc"},"destination_chain":{"const":"solana"},"estimated_fees":{"items":{"$ref":"#/components/schemas/WithdrawalFee"},"maxItems":16,"type":"array"},"estimated_output_amount":{"pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"expires_at_unix_seconds":{"format":"int64","type":"integer"},"preview_id":{"format":"uuid","type":"string"},"recipient_username":{"maxLength":30,"minLength":3,"type":"string"},"slippage_bps":{"maximum":10000,"minimum":0,"type":"integer"},"source_chain":{"const":"solana"}},"required":["preview_id","source_chain","destination_chain","asset_id","recipient_username","amount_atomic","estimated_output_amount","estimated_fees","slippage_bps","expires_at_unix_seconds"],"type":"object"},"WithdrawalDestinationChain":{"enum":["solana","ethereum","base","arbitrum","polygon","tempo"],"type":"string"},"WithdrawalFee":{"additionalProperties":false,"properties":{"amount_usd":{"pattern":"^[0-9]+(?:\\.[0-9]+)?$","type":"string"},"kind":{"maxLength":32,"minLength":1,"type":"string"}},"required":["kind","amount_usd"],"type":"object"},"SubmitHyperliquidInternalTransferRequest":{"additionalProperties":false,"properties":{"attempt_id":{"format":"uuid","type":"string"},"signature":{"pattern":"^0x[0-9a-fA-F]{130}$","type":"string","writeOnly":true}},"required":["attempt_id","signature"],"type":"object"},"CreateHyperliquidInternalTransferRequest":{"additionalProperties":false,"properties":{"direction":{"enum":["spot_to_perps","perps_to_spot"],"type":"string"},"exact_usdc_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"}},"required":["direction","exact_usdc_atomic"],"type":"object"},"CreateHyperliquidTransferQuoteRequestV2":{"additionalProperties":false,"description":"Quotes an exact 6-decimal Solana USDC output. Relay's required 8-decimal HyperCore input must remain decimal-normalized 1:1.","properties":{"exact_output_usdc_atomic":{"description":"Exact Solana USDC output in 6-decimal atomic units. The value must be at least 5000000 (5 USDC).","maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"operation":{"const":"hyperliquid_perps_withdrawal","type":"string"},"slippage_bps":{"default":100,"examples":[50,100,200,300],"maximum":300,"minimum":1,"type":"integer"}},"required":["operation","exact_output_usdc_atomic","slippage_bps"],"type":"object"},"HyperliquidTransferQuoteV2":{"additionalProperties":false,"properties":{"destination_asset":{"const":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","type":"string"},"destination_chain_id":{"const":"792703809","type":"string"},"destination_decimals":{"const":6,"type":"integer"},"exact_input_atomic":{"pattern":"^[1-9][0-9]*00$","type":"string"},"expected_output_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"minimum_output_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"nonce_mapping":{"$ref":"#/components/schemas/HyperliquidNonceMappingStepV2"},"operation":{"const":"hyperliquid_perps_withdrawal","type":"string"},"request_id":{"pattern":"^0x[0-9A-Fa-f]{64}$","type":"string"},"send_asset":{"$ref":"#/components/schemas/HyperliquidSendAssetStepV2"},"slippage_bps":{"maximum":300,"minimum":1,"type":"integer"},"source_asset":{"const":"0x6d1e7cde53ba9467b783cb7c530ce054","type":"string"},"source_chain_id":{"const":"1337","type":"string"},"source_decimals":{"const":8,"type":"integer"}},"required":["operation","request_id","source_chain_id","destination_chain_id","source_asset","destination_asset","source_decimals","destination_decimals","exact_input_atomic","expected_output_atomic","minimum_output_atomic","slippage_bps","nonce_mapping","send_asset"],"type":"object"},"HyperliquidNonceMappingStepV2":{"additionalProperties":false,"properties":{"domain":{"type":"object"},"message":{"type":"object"},"primary_type":{"const":"NonceMapping","type":"string"},"signature_kind":{"const":"eip712","type":"string"},"submission_body":{"type":"object"},"submission_endpoint":{"const":"https://api.relay.link/authorize","type":"string"},"types":{"type":"object"}},"required":["signature_kind","domain","types","primary_type","message","submission_endpoint","submission_body"],"type":"object"},"HyperliquidSendAssetStepV2":{"additionalProperties":false,"properties":{"domain":{"type":"object"},"message":{"type":"object"},"primary_type":{"const":"HyperliquidTransaction:SendAsset","type":"string"},"signature_kind":{"const":"eip712","type":"string"},"status_endpoint":{"pattern":"^/intents/status/v3\\?requestId=0x[0-9A-Fa-f]{64}$","type":"string"},"submission_endpoint":{"const":"https://api.hyperliquid.xyz/exchange","type":"string"},"types":{"type":"object"}},"required":["signature_kind","domain","types","primary_type","message","submission_endpoint","status_endpoint"],"type":"object"},"HyperliquidInternalTransfer":{"allOf":[{"$ref":"#/components/schemas/HyperliquidInternalTransferFields"}],"unevaluatedProperties":false},"HyperliquidInternalTransferIntent":{"allOf":[{"$ref":"#/components/schemas/HyperliquidInternalTransferFields"},{"properties":{"expected_signer":{"pattern":"^0x[0-9a-f]{40}$","type":"string"},"typed_data":{"type":"object"}},"required":["expected_signer","typed_data"],"type":"object"}],"unevaluatedProperties":false},"HyperliquidAccount":{"additionalProperties":false,"properties":{"account_id":{"format":"uuid","type":"string"},"address":{"description":"Canonical Hyperliquid master address. Use as the user field for direct Hyperliquid info and WebSocket reads. Orders are signed and submitted by the client; Arbital uses this address only for account identity.","pattern":"^0x[0-9a-f]{40}$","type":"string"},"builder_address":{"description":"Arbital builder address for client-direct Hyperliquid orders. The main wallet must approve this builder before its first fee-bearing trade.","const":"0x1a891b521601d4f4caa3b7dfda4dcf9080568dfe"},"builder_fee_tenths_bps":{"const":50,"description":"Hyperliquid builder fee unit; 50 tenths of one basis point equals 5 bps (0.05%).","type":"integer"},"state":{"const":"linked"},"venue":{"const":"hyperliquid"}},"required":["venue","state","account_id","address","builder_address","builder_fee_tenths_bps"],"type":"object"},"HyperliquidAccountProvisioning":{"additionalProperties":false,"properties":{"state":{"const":"provisioning"},"venue":{"const":"hyperliquid"}},"required":["venue","state"],"type":"object"},"HyperliquidInternalTransferFields":{"properties":{"app_fee_usdc_atomic":{"const":"0","type":"string"},"attempt_id":{"format":"uuid","type":"string"},"builder_fee_usdc_atomic":{"const":"0","type":"string"},"direction":{"enum":["spot_to_perps","perps_to_spot"],"type":"string"},"exact_usdc_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"expected_output_usdc_atomic":{"pattern":"^[1-9][0-9]*$","type":"string"},"priority_fee_usdc_atomic":{"const":"0","type":"string"},"state":{"enum":["signature_required","submission_unknown","completed","rejected"],"type":"string"},"total_fee_usdc_atomic":{"const":"0","type":"string"},"transfer_id":{"format":"uuid","type":"string"}},"required":["transfer_id","attempt_id","direction","exact_usdc_atomic","expected_output_usdc_atomic","app_fee_usdc_atomic","builder_fee_usdc_atomic","priority_fee_usdc_atomic","total_fee_usdc_atomic","state"],"type":"object"},"SocialAssetHistoryPage":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/SocialAssetHistoryItem"},"maxItems":50,"type":"array"},"next_cursor":{"description":"Opaque cursor for older items when any included source has more; null when the read exhausted every included source.","maxLength":512,"minLength":1,"type":["string","null"]},"period":{"$ref":"#/components/schemas/SocialRecapPeriod"},"totals":{"type":"object","additionalProperties":false,"properties":{"native":{"oneOf":[{"$ref":"#/components/schemas/SocialRecapNativeCount"},{"type":"null"}]},"fomo":{"oneOf":[{"$ref":"#/components/schemas/SocialRecapStoredThesisCount"},{"type":"null"}]},"pump":{"oneOf":[{"$ref":"#/components/schemas/SocialRecapStoredThesisCount"},{"type":"null"}]}},"required":["native","fomo","pump"]}},"required":["items","next_cursor"],"type":"object"},"SocialAssetHistoryItem":{"description":"One discussion record for a token. kind and source identify the record's origin; the payload key matches kind.","discriminator":{"mapping":{"comment":"#/components/schemas/SocialAssetHistoryComment","thesis":"#/components/schemas/SocialAssetHistoryThesis"},"propertyName":"kind"},"oneOf":[{"$ref":"#/components/schemas/SocialAssetHistoryComment"},{"$ref":"#/components/schemas/SocialAssetHistoryThesis"}]},"SocialAssetHistoryComment":{"additionalProperties":false,"properties":{"asset":{"additionalProperties":false,"description":"The exact canonical token this item belongs to.","properties":{"address":{"minLength":1,"type":"string"},"chain_id":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},"required":["address","chain_id"],"type":"object"},"comment":{"$ref":"#/components/schemas/SocialAssetComment"},"id":{"description":"The comment_id.","format":"uuid","type":"string"},"kind":{"const":"comment","type":"string"},"observed_at_ms":{"description":"Comment creation time in Unix milliseconds.","pattern":"^(0|[1-9][0-9]*)$","type":"string"},"posted_at_ms":{"description":"Original comment creation time in Unix milliseconds; equals observed_at_ms for native comments.","pattern":"^(0|[1-9][0-9]*)$","type":"string"},"source":{"const":"native","type":"string"},"source_event_id":{"type":"null"}},"required":["asset","comment","id","kind","observed_at_ms","posted_at_ms","source","source_event_id"],"type":"object"},"SocialAssetHistoryThesis":{"additionalProperties":false,"properties":{"asset":{"additionalProperties":false,"description":"The exact canonical token this item belongs to.","properties":{"address":{"minLength":1,"type":"string"},"chain_id":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},"required":["address","chain_id"],"type":"object"},"id":{"description":"The durable social feed eventId.","maxLength":64,"minLength":1,"type":"string"},"kind":{"const":"thesis","type":"string"},"observed_at_ms":{"description":"When Arbital observed the thesis at the provider, in Unix milliseconds.","pattern":"^(0|[1-9][0-9]*)$","type":"string"},"posted_at_ms":{"description":"When the author published the thesis at the provider, in Unix milliseconds; null when the provider did not report it. Kept separate from observed_at_ms, which is when Arbital recorded it.","pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"source":{"enum":["fomo","pump"],"type":"string"},"source_event_id":{"description":"The provider's original event identifier.","maxLength":256,"minLength":1,"type":"string"},"thesis":{"$ref":"#/components/schemas/SocialActivityEventRevision"}},"required":["asset","id","kind","observed_at_ms","posted_at_ms","source","source_event_id","thesis"],"type":"object"},"SocialProfileCommentPage":{"additionalProperties":false,"properties":{"comments":{"items":{"$ref":"#/components/schemas/SocialProfileComment"},"maxItems":50,"type":"array"},"next_cursor":{"description":"Last returned comment_id when older comments by this author remain.","format":"uuid","type":["string","null"]}},"required":["comments","next_cursor"],"type":"object"},"SocialProfileComment":{"additionalProperties":false,"description":"One token comment or reply by the profile, with the canonical token it belongs to. kind and source identify the record's origin so imported tracked-trader theses can join this list later. Open the thread through the token comment endpoints. A native reply includes the same optional gif reference as the token reply endpoint; current visibility rules still apply.","properties":{"asset":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"chain_id":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},"required":["address","chain_id"],"type":"object"},"comment":{"$ref":"#/components/schemas/SocialAssetComment"},"kind":{"const":"comment","type":"string"},"source":{"const":"native","type":"string"}},"required":["asset","comment","kind","source"],"type":"object"},"SocialRecapPeriod":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string","enum":["5m","1h","4h","24h"]},"from_ms":{"type":"string","pattern":"^[0-9]+$"},"to_ms":{"type":"string","pattern":"^[0-9]+$"}},"required":["key","from_ms","to_ms"]},"SocialRecapNativeCount":{"type":"object","additionalProperties":false,"properties":{"post_count":{"type":"integer","minimum":0},"author_count":{"type":"integer","minimum":0},"post_count_complete":{"type":"boolean","const":true},"author_count_complete":{"type":"boolean","const":true},"scope":{"type":"string","const":"viewer_visible_stored_posts"}},"required":["post_count","author_count","post_count_complete","author_count_complete","scope"]},"SocialRecapStoredThesisCount":{"type":"object","additionalProperties":false,"properties":{"post_count":{"oneOf":[{"type":"integer","minimum":0},{"type":"null"}]},"author_count":{"oneOf":[{"type":"integer","minimum":0},{"type":"null"}]},"post_count_complete":{"type":"boolean"},"author_count_complete":{"type":"boolean"},"scope":{"type":"string","enum":["eligible_stored_publications","stored_publications"]},"collection_complete":{"type":"boolean","const":false}},"required":["post_count","author_count","post_count_complete","author_count_complete","scope","collection_complete"]},"SocialRecapPerson":{"type":"object","additionalProperties":false,"properties":{"platform":{"type":"string","enum":["calld","fomo","pump"]},"id":{"oneOf":[{"type":"string"},{"type":"null"}]},"username":{"oneOf":[{"type":"string"},{"type":"null"}]},"display_name":{"oneOf":[{"type":"string"},{"type":"null"}]},"avatar_url":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["platform","id","username","display_name","avatar_url"]},"SocialRecapRank":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","const":"top_holder"},"rank":{"type":"integer","minimum":1,"maximum":100},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"}},"required":["code","rank","observed_at_ms"]},{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","const":"ranked_trader"},"rank":{"type":"integer","minimum":1,"maximum":100},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"platform":{"type":"string","enum":["fomo","pump"]},"cohort":{"type":"string","enum":["fomo_top_100_7d","pump_top_100_weekly"]},"captured_at_ms":{"type":"string","pattern":"^[0-9]+$"}},"required":["code","rank","observed_at_ms","platform","cohort","captured_at_ms"]}]},"SocialRecapComment":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["arbital_comment","fomo_thesis","pump_callout"]},"text":{"type":"string","maxLength":500},"text_truncated":{"type":"boolean"},"parent_comment_id":{"oneOf":[{"type":"string"},{"type":"null"}]},"posted_at_ms":{"type":"string","pattern":"^[0-9]+$"},"author":{"$ref":"#/components/schemas/SocialRecapPerson"},"source_ref":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"source_key":{"oneOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"null"}},"required":["id","source_key","url"]},"selection_reason":{"type":"string","enum":["top_holder","ranked_trader","recent_comment"]},"rank_evidence":{"type":"array","items":{"$ref":"#/components/schemas/SocialRecapRank"}},"media":{"$ref":"#/components/schemas/SocialMediaGallery"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"}},"required":["id","kind","text","text_truncated","parent_comment_id","posted_at_ms","author","source_ref","selection_reason","rank_evidence"],"description":"Native arbital_comment entries may carry their saved external gif reference. Imported fomo_thesis and pump_callout entries do not gain attachments. Resolve provider content from the end-user client after current receiver restrictions; no provider bytes or URLs are included."},"SocialRecapTrade":{"additionalProperties":false,"description":"Observed public on-chain market data; never settlement or execution authority.","properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"event_id":{"pattern":"^[0-9a-f]{64}$","type":"string"},"fees":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenTradeFeesV1"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"occurred_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"platform":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenTradePlatformV1"},{"type":"null"}]},"pool_address":{"maxLength":128,"minLength":1,"type":"string"},"price_usd":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"side":{"enum":["buy","sell"],"type":"string"},"token_amount":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"token_amount_atomic":{"oneOf":[{"maxLength":128,"pattern":"^(0|[1-9][0-9]*)$","type":"string"},{"type":"null"}]},"trader":{"$ref":"#/components/schemas/ProductTokenTradeActorV1"},"transaction_hash":{"maxLength":128,"minLength":1,"type":"string"},"usd_amount":{"pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},"profiles":{"type":"array","items":{"$ref":"#/components/schemas/SocialRecapPerson"}}},"required":["event_id","asset","side","token_amount","token_amount_atomic","usd_amount","price_usd","market_cap_usd","occurred_at_ms","transaction_hash","pool_address","trader","platform","fees","profiles"],"type":"object"},"SocialXPostAuthor":{"additionalProperties":false,"properties":{"avatar_url":{"type":["string","null"]},"display_name":{"type":["string","null"]},"id":{"description":"Provider account id when supplied.","type":["string","null"]},"username":{"type":"string"},"verified":{"description":"Provider verification flag as observed at collection time.","type":"boolean"}},"required":["avatar_url","display_name","id","username","verified"],"type":"object"},"SocialXPostEngagement":{"additionalProperties":false,"description":"Engagement counts as observed at the latest collection; null when the provider omitted a count.","properties":{"bookmarks":{"type":["integer","null"],"minimum":0},"likes":{"type":["integer","null"],"minimum":0},"quotes":{"type":["integer","null"],"minimum":0},"replies":{"type":["integer","null"],"minimum":0},"reposts":{"type":["integer","null"],"minimum":0},"views":{"type":["integer","null"],"minimum":0}},"required":["bookmarks","likes","quotes","replies","reposts","views"],"type":"object"},"SocialXHighlightMatch":{"description":"Why the post counts for this token, as decided by the indexer. A cashtag alone is never sufficient.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"contract_address","type":"string"},"evidence":{"additionalProperties":false,"properties":{"address":{"type":"string"}},"required":["address"],"type":"object"}},"required":["kind","evidence"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"cashtag_with_name","type":"string"},"evidence":{"additionalProperties":false,"properties":{"cashtag":{"type":"string"},"name":{"type":"string"}},"required":["cashtag","name"],"type":"object"}},"required":["kind","evidence"],"type":"object"},{"additionalProperties":false,"type":"object","required":["kind","evidence"],"properties":{"kind":{"const":"curated_alias","type":"string"},"evidence":{"additionalProperties":false,"type":"object","description":"A checked-in alias or cashtag of a major asset; at least one is present.","properties":{"alias":{"type":"string"},"cashtag":{"type":"string"}}}}}]},"SocialXHighlightLabel":{"additionalProperties":false,"properties":{"evidence":{"items":{"type":"string"},"type":"array"},"label":{"type":"string"},"model":{"type":"string"}},"required":["evidence","label","model"],"type":"object"},"SocialXHighlight":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/SocialXPostAuthor"},"conversation_id":{"type":["string","null"]},"engagement":{"$ref":"#/components/schemas/SocialXPostEngagement"},"id":{"description":"Provider post id.","type":"string"},"in_reply_to_id":{"type":["string","null"]},"is_reply":{"type":"boolean"},"labels":{"items":{"$ref":"#/components/schemas/SocialXHighlightLabel"},"type":"array"},"match":{"$ref":"#/components/schemas/SocialXHighlightMatch"},"observed_at_ms":{"description":"When the collector last observed the post.","pattern":"^[0-9]{1,20}$","type":"string"},"posted_at_ms":{"pattern":"^[0-9]{1,20}$","type":"string"},"text":{"maxLength":16000,"type":"string"},"url":{"format":"uri","type":"string"},"display_text":{"type":"string","maxLength":16000},"display":{"$ref":"#/components/schemas/SocialXDisplay"}},"required":["author","conversation_id","engagement","id","in_reply_to_id","is_reply","labels","match","observed_at_ms","posted_at_ms","text","url","display_text","display"],"type":"object"},"SocialTokenXHighlights":{"additionalProperties":false,"properties":{"asset":{"additionalProperties":false,"properties":{"address":{"type":"string"},"chain_id":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},"required":["address","chain_id"],"type":"object"},"coverage":{"additionalProperties":false,"description":"not_followed: the token is not an X collection subject; pending: a subject with no successful collection yet; collected: at least one successful collection. Coverage and posts come from the indexer's shared X collection.","properties":{"last_collected_at_ms":{"pattern":"^[0-9]{1,20}$","type":["string","null"]},"last_outcome":{"enum":["success","rate_limited","permanent_error","transient_error","budget_exhausted","provider_invalid","claim_lost",null],"type":["string","null"]},"state":{"enum":["not_followed","pending","collected"],"type":"string"}},"required":["last_collected_at_ms","last_outcome","state"],"type":"object"},"period":{"$ref":"#/components/schemas/SocialRecapPeriod"},"posts":{"items":{"$ref":"#/components/schemas/SocialXHighlight"},"type":"array"},"source":{"const":"x","type":"string"}},"required":["asset","coverage","period","posts","source"],"type":"object"},"SocialTraderHistoryPage":{"additionalProperties":false,"description":"Person history for a tracked trader: imported theses only. A CALLD profile's comments come from the profile comments read; the two lists share kind/source tags.","properties":{"items":{"items":{"$ref":"#/components/schemas/SocialAssetHistoryThesis"},"maxItems":50,"type":"array"},"next_cursor":{"type":["string","null"]},"trader_profile_id":{"format":"uuid","type":"string"}},"required":["items","next_cursor","trader_profile_id"],"type":"object"},"SocialTokenRecap":{"type":"object","additionalProperties":false,"properties":{"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"period":{"$ref":"#/components/schemas/SocialRecapPeriod"},"generated_at_ms":{"type":"string","pattern":"^[0-9]+$"},"status":{"type":"string","enum":["available","partial","unavailable"]},"market":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["available","partial","unavailable"]},"source":{"type":"string","enum":["mobula","codex","arbital_catalogue","preferred_metadata","configured_price"]},"observed_at_ms":{"oneOf":[{"type":"string","pattern":"^[0-9]+$"},{"type":"null"}]},"retrieved_at_ms":{"oneOf":[{"type":"string","pattern":"^[0-9]+$"},{"type":"null"}]},"freshness":{"type":"string","enum":["fresh","stale","unknown"]},"complete":{"type":"null"},"period":{"type":"object","additionalProperties":false,"properties":{"key":{"type":"string","enum":["5m","1h","4h","24h"]},"alignment":{"type":"string","const":"provider_rolling_window"},"from_ms":{"oneOf":[{"type":"string","pattern":"^[0-9]+$"},{"type":"null"}]},"to_ms":{"oneOf":[{"type":"string","pattern":"^[0-9]+$"},{"type":"null"}]}},"required":["key","alignment","from_ms","to_ms"]},"price_change_pct":{"oneOf":[{"type":"string"},{"type":"null"}]},"totals":{"type":"object","additionalProperties":false,"properties":{"buys":{"oneOf":[{"type":"integer","minimum":0},{"type":"null"}]},"sells":{"oneOf":[{"type":"integer","minimum":0},{"type":"null"}]},"buyers":{"oneOf":[{"type":"integer","minimum":0},{"type":"null"}]},"sellers":{"oneOf":[{"type":"integer","minimum":0},{"type":"null"}]},"buy_volume_usd":{"oneOf":[{"type":"string"},{"type":"null"}]},"sell_volume_usd":{"oneOf":[{"type":"string"},{"type":"null"}]}},"required":["buys","sells","buyers","sellers","buy_volume_usd","sell_volume_usd"]}},"required":["status","source","observed_at_ms","retrieved_at_ms","freshness","complete","period","price_change_pct","totals"]},"recent_trades":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["available","unavailable"]},"source":{"type":"string","const":"mobula"},"observed_at_ms":{"type":"null"},"retrieved_at_ms":{"oneOf":[{"type":"string","pattern":"^[0-9]+$"},{"type":"null"}]},"complete":{"type":"boolean","const":false},"total_in_window":{"type":"null"},"coverage":{"type":"string","const":"provider_page"},"candidate_limit":{"type":"integer","const":50},"limit":{"type":"integer","const":20},"sampled_count":{"type":"integer","minimum":0,"maximum":20},"items":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/SocialRecapTrade"}}},"required":["status","source","observed_at_ms","retrieved_at_ms","complete","total_in_window","coverage","candidate_limit","limit","sampled_count","items"]},"discussion":{"type":"object","additionalProperties":false,"properties":{"status":{"type":"string","enum":["available","partial","unavailable"]},"source":{"type":"string","const":"postgres"},"observed_at_ms":{"oneOf":[{"type":"string","pattern":"^[0-9]+$"},{"type":"null"}]},"complete":{"type":"boolean","const":false},"counts":{"type":"object","additionalProperties":false,"properties":{"arbital":{"oneOf":[{"$ref":"#/components/schemas/SocialRecapNativeCount"},{"type":"null"}]},"fomo":{"oneOf":[{"$ref":"#/components/schemas/SocialRecapStoredThesisCount"},{"type":"null"}]},"pump":{"oneOf":[{"$ref":"#/components/schemas/SocialRecapStoredThesisCount"},{"type":"null"}]}},"required":["arbital","fomo","pump"]},"notable_comments":{"type":"array","maxItems":5,"items":{"$ref":"#/components/schemas/SocialRecapComment"}},"selection":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","const":1},"candidate_limit_per_read":{"type":"integer","const":100},"complete":{"type":"boolean"},"rank_enrichment_available":{"type":"boolean"},"ranked_candidate_limit":{"type":"integer","const":500},"ranked_posts_per_author":{"type":"integer","const":5}},"required":["version","candidate_limit_per_read","complete","rank_enrichment_available","ranked_candidate_limit","ranked_posts_per_author"]}},"required":["status","source","observed_at_ms","complete","counts","notable_comments","selection"]}},"required":["asset","period","generated_at_ms","status","market","recent_trades","discussion"]},"CreateSocialPostReplyRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":2000,"type":"string","pattern":"^[^\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u009f]*$"},"media_ids":{"$ref":"#/components/schemas/SocialMediaIds"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeMentionInput"},"description":"Explicit native targets; no targets are inferred from plain @text. Offsets use Unicode code points in the exact canonical body; no trimming is allowed when nonempty."},"client_content_id":{"type":"string","format":"uuid","description":"Actor/source-kind scoped creation key. Matching replay returns the original readable source; a changed command returns 409. Required with nonempty mentions."}},"type":"object","anyOf":[{"required":["body"],"properties":{"body":{"type":"string","minLength":1,"pattern":"\\S"}},"not":{"required":["gif"]}},{"required":["media_ids"],"properties":{"media_ids":{"type":"array","minItems":1,"items":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}},"not":{"required":["gif"]}},{"required":["gif"],"properties":{"media_ids":{"type":"array","const":[]}}}],"description":"A nonblank body of at most 2000 Unicode code points, or nonempty post_reply media_ids. Body may be omitted or empty only with media or an external gif reference. Parent and ancestor authorization and text moderation still apply. Alternatively accepts one external gif reference with an optional caption; gif and nonempty media_ids are mutually exclusive. Absent gif is omitted; null is invalid. SOCIAL_EXTERNAL_GIFS_ENABLED defaults to false and gates GIF-reference writes independently of uploaded media; disabled writes return 503 social_media_disabled. Native mentions support stable Early user IDs only. Imported-thesis/trade routes reject mention/key fields. No financial authority or external identity inference is granted.","allOf":[{"if":{"required":["mentions"],"properties":{"mentions":{"minItems":1}}},"then":{"required":["body","client_content_id"]}}]},"SocialPostReply":{"additionalProperties":false,"description":"A reply on a community post. Token comment threads and chat messages use separate APIs; their ids cannot address post replies. Optional gif contains the saved external reference only for a visible, nondeleted native reply. It remains readable when GIF-reference writes are disabled and is omitted for deleted placeholders. It is distinct from approved uploaded media and is never returned with nonempty media.","properties":{"author":{"$ref":"#/components/schemas/SocialPostAuthor"},"body":{"description":"Null after parent deletion; empty for a media-only or external-GIF-only reply. Removing the last image preserves the empty body and deleted media slot.","maxLength":2000,"type":["string","null"]},"created_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"deleted":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"parent_reply_id":{"description":"Exact direct parent reply on the same post; null for a direct reply to the post.","format":"uuid","type":["string","null"]},"post_id":{"format":"uuid","type":"string"},"reply_count":{"description":"Nondeleted visible direct replies, excluding deeper descendants.","minimum":0,"type":"integer"},"viewer_can_delete":{"description":"Whether the viewer owns this undeleted reply and may delete it.","type":"boolean"},"media":{"$ref":"#/components/schemas/SocialMediaGallery"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeReadMention"},"description":"Ordered historical entities with current viewer-scoped identity. Empty for legacy, imported or tombstoned content. A read failure is explicit, never a fabricated empty array."}},"required":["author","body","created_at_ms","deleted","id","parent_reply_id","post_id","reply_count","viewer_can_delete","mentions"],"type":"object"},"SocialPostReplyPage":{"additionalProperties":false,"properties":{"next_cursor":{"description":"Opaque post_replies cursor for older replies in the same post and parent scope.","maxLength":512,"pattern":"^[A-Za-z0-9_-]+$","type":["string","null"]},"participation":{"const":"community","type":"string"},"replies":{"items":{"$ref":"#/components/schemas/SocialPostReply"},"maxItems":50,"type":"array"},"reply_count":{"description":"Total visible nondeleted direct replies in this scope, independent of pagination.","minimum":0,"type":"integer"},"viewer_can_reply":{"description":"True for a signed-in, unrestricted viewer when the parent is not deleted. Always false for anonymous readers.","type":"boolean"}},"required":["next_cursor","participation","replies","reply_count","viewer_can_reply"],"type":"object"},"SocialReactionCount":{"additionalProperties":false,"properties":{"count":{"description":"Reactions with this emoji by active CALLD accounts.","minimum":1,"type":"integer"},"emoji":{"maxLength":16,"minLength":1,"type":"string"},"viewer_reacted":{"description":"Whether the signed-in viewer has this reaction; always false for anonymous readers.","type":"boolean"}},"required":["count","emoji","viewer_reacted"],"type":"object"},"SocialReactionSummary":{"additionalProperties":false,"description":"CALLD reactions on one target, most used first. External-platform likes or counts are never merged in; source says so explicitly.","properties":{"reactions":{"items":{"$ref":"#/components/schemas/SocialReactionCount"},"type":"array"},"source":{"const":"calld","type":"string"},"target":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"kind":{"enum":["post","asset_comment","thesis","trade","x_post"],"type":"string"}},"required":["id","kind"],"type":"object"}},"required":["reactions","source","target"],"type":"object"},"SocialLeaderboardPage":{"additionalProperties":false,"description":"A rank-ordered page of one immutable provider leaderboard snapshot. Provider observations only; not wallet ownership or financial authority.","properties":{"capturedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"When the provider captured the leaderboard."},"cohort":{"enum":["fomo_top_100_7d","pump_top_100_weekly"],"type":"string"},"entryCount":{"const":100,"type":"integer","description":"Entries in the whole snapshot, independent of pagination."},"isCurrent":{"type":"boolean","description":"Whether this snapshot is still the active one for the cohort."},"items":{"items":{"$ref":"#/components/schemas/SocialLeaderboardEntry"},"maxItems":100,"type":"array"},"nextCursor":{"maxLength":256,"minLength":1,"type":["string","null"]},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"When Arbital observed the snapshot."},"period":{"enum":["seven_day","weekly"],"type":"string","description":"The ranking period every period* metric covers: seven_day (Fomo top 100, trailing seven days) or weekly (pump.fun weekly board)."},"platform":{"enum":["fomo","pump"],"type":"string"},"snapshotId":{"format":"uuid","type":"string"}},"required":["capturedAtMs","cohort","entryCount","isCurrent","items","nextCursor","observedAtMs","period","platform","snapshotId"],"type":"object"},"SocialLeaderboardEntry":{"additionalProperties":false,"properties":{"avatarUrl":{"maxLength":2048,"type":["string","null"]},"displayName":{"maxLength":256,"type":["string","null"]},"followerCount":{"description":"Provider-reported follower count at capture time; null when unreported.","pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"handle":{"maxLength":128,"type":["string","null"]},"periodPnlUsd":{"description":"Dollar profit or loss over the ranking period as reported by the provider (realized plus unrealized where the provider splits them); null when unreported.","pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"periodRealizedPnlUsd":{"description":"Realized dollar profit or loss over the ranking period; null when unreported.","pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"periodReturnPct":{"description":"Percentage return over the ranking period (seven_day for Fomo, weekly for pump.fun) as reported by the provider; null when unreported, never zero.","pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"periodTradeCount":{"description":"Number of trades over the ranking period; null when unreported.","pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"periodUnrealizedPnlUsd":{"description":"Unrealized dollar profit or loss over the ranking period; null when unreported.","pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"periodVolumeUsd":{"description":"Traded dollar volume over the ranking period; null when unreported.","pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":["string","null"]},"platform":{"enum":["fomo","pump"],"type":"string"},"platformSubjectId":{"maxLength":180,"minLength":1,"type":"string"},"profileObservedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"rank":{"maximum":100,"minimum":1,"type":"integer"},"traderProfileId":{"description":"Resolvable through /v2/social/traders/{trader_profile_id}; null when the account is private or lacks a verified wallet.","format":"uuid","type":["string","null"]},"walletAddress":{"description":"Provider-observed Solana wallet for the ranked account, when reported.","maxLength":44,"minLength":32,"type":["string","null"]}},"required":["avatarUrl","displayName","followerCount","handle","periodPnlUsd","periodRealizedPnlUsd","periodReturnPct","periodTradeCount","periodUnrealizedPnlUsd","periodVolumeUsd","platform","platformSubjectId","profileObservedAtMs","rank","traderProfileId","walletAddress"],"type":"object"},"MarkSocialFeedReadRequest":{"additionalProperties":false,"properties":{"record_ids":{"items":{"description":"Stable feed record id: post:<uuid>, comment:<uuid> or trade:<feed event uuid>.","pattern":"^(post|comment|trade):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"}},"required":["record_ids"],"type":"object"},"SocialFeedActor":{"description":"Who produced the item. identity distinguishes CALLD members from external Fomo/pump.fun traders.","discriminator":{"mapping":{"calld":"#/components/schemas/SocialFeedCalldActor","fomo":"#/components/schemas/SocialFeedTraderActor","pump":"#/components/schemas/SocialFeedTraderActor"},"propertyName":"identity"},"oneOf":[{"$ref":"#/components/schemas/SocialFeedCalldActor"},{"$ref":"#/components/schemas/SocialFeedTraderActor"}]},"SocialFeedCalldActor":{"additionalProperties":false,"properties":{"display_name":{"type":["string","null"]},"identity":{"const":"calld","type":"string"},"profile_image_url":{"type":["string","null"]},"user_id":{"format":"uuid","type":"string"},"username":{"type":"string"}},"required":["display_name","identity","profile_image_url","user_id","username"],"type":"object"},"SocialFeedTraderActor":{"additionalProperties":false,"properties":{"avatar_url":{"type":["string","null"]},"display_name":{"type":["string","null"]},"handle":{"type":["string","null"]},"identity":{"enum":["fomo","pump"],"type":"string"},"platform_subject_id":{"maxLength":180,"minLength":1,"type":"string"},"trader_profile_id":{"description":"Resolvable through /v2/social/traders/{trader_profile_id} for followed traders.","format":"uuid","type":"string"}},"required":["avatar_url","display_name","handle","identity","platform_subject_id","trader_profile_id"],"type":"object"},"SocialFeedPermissions":{"additionalProperties":false,"description":"Item-aware actions for the current viewer. Unrestricted Fomo/Pump imported trades allow community replies and CALLD reactions; CALLD trades remain unsupported. Token comment holder rules are unchanged. Mutation-time authorization is still required.","properties":{"react":{"type":"boolean"},"reply":{"enum":["allowed","token_holders","unavailable"],"type":"string"}},"required":["react","reply"],"type":"object"},"SocialFeedTrade":{"additionalProperties":false,"description":"A published buy or sell as recorded by Arbital's trade sources. Exact strings; usd_notional is null when not observed.","properties":{"amount":{"type":"string"},"asset":{"additionalProperties":false,"properties":{"address":{"type":"string"},"chain_id":{"type":"string"},"image_url":{"type":["string","null"]},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]}},"required":["address","chain_id","image_url","name","symbol"],"type":"object"},"finality":{"type":"string"},"native_amount":{"type":"string"},"native_symbol":{"type":"string"},"route":{"type":"string"},"side":{"enum":["buy","sell"],"type":"string"},"source_event_id":{"type":"string"},"transaction_signature":{"type":"string"},"usd_notional":{"type":["string","null"]},"venue":{"type":"string"},"execution_price_usd":{"$ref":"#/components/schemas/ExecutionPriceUsd"},"execution_price_unavailable_reason":{"$ref":"#/components/schemas/ExecutionPriceUnavailableReason"},"receipt":{"$ref":"#/components/schemas/TradeReceipt"}},"required":["amount","asset","finality","native_amount","native_symbol","route","side","source_event_id","transaction_signature","usd_notional","venue","execution_price_usd","execution_price_unavailable_reason"],"type":"object","allOf":[{"oneOf":[{"properties":{"execution_price_usd":{"type":"string"},"execution_price_unavailable_reason":{"type":"null"}}},{"properties":{"execution_price_usd":{"type":"null"},"execution_price_unavailable_reason":{"type":"string"}}}]}]},"SocialRelationshipFeedPostItem":{"additionalProperties":false,"description":"A community post by a member of the relationship.","properties":{"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"content_revision":{"description":"Increases when the author-owned content changes under the same record_id. Posts and comments are immutable and stay at 1 (deletion removes them); trades follow their feed revision, which advances on enrichment or restore. Live counters such as like_count, reply_count and x_publish_state are not versioned: re-render them from each page.","minimum":1,"type":"integer"},"kind":{"const":"post","type":"string"},"observed_at_ms":{"description":"When Arbital recorded the item, in Unix milliseconds; the merge order.","pattern":"^(0|[1-9][0-9]*)$","type":"string"},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"post":{"$ref":"#/components/schemas/SocialPost"},"posted_at_ms":{"description":"Original creation or execution time in Unix milliseconds; null when the source did not report it.","pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"read":{"description":"Whether the viewer marked this exact record read.","type":"boolean"},"record_id":{"description":"Stable feed record id: post:<uuid>, comment:<uuid> or trade:<feed event uuid>.","pattern":"^(post|comment|trade):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"relationship":{"enum":["friends","watching"],"type":"string"},"reaction_summary":{"$ref":"#/components/schemas/SocialReactionSummaryV2","description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read. Preserve contract, aggregate_revision and edge_versions when seeding the reaction cache."},"reply_preview":{"$ref":"#/components/schemas/SocialPostReplyPreview","description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Omitted means not requested."}},"required":["actor","content_revision","kind","observed_at_ms","permissions","post","posted_at_ms","read","record_id","relationship"],"type":"object"},"SocialRelationshipFeedCommentItem":{"additionalProperties":false,"description":"A token comment or reply by a member, with the token it belongs to.","properties":{"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"comment":{"additionalProperties":false,"properties":{"asset":{"additionalProperties":false,"properties":{"address":{"type":"string"},"chain_id":{"type":"string"}},"required":["address","chain_id"],"type":"object"},"comment":{"$ref":"#/components/schemas/SocialAssetComment"}},"required":["asset","comment"],"type":"object"},"content_revision":{"description":"Increases when the author-owned content changes under the same record_id. Posts and comments are immutable and stay at 1 (deletion removes them); trades follow their feed revision, which advances on enrichment or restore. Live counters such as like_count, reply_count and x_publish_state are not versioned: re-render them from each page.","minimum":1,"type":"integer"},"kind":{"const":"comment","type":"string"},"observed_at_ms":{"description":"When Arbital recorded the item, in Unix milliseconds; the merge order.","pattern":"^(0|[1-9][0-9]*)$","type":"string"},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"posted_at_ms":{"description":"Original creation or execution time in Unix milliseconds; null when the source did not report it.","pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"read":{"description":"Whether the viewer marked this exact record read.","type":"boolean"},"record_id":{"description":"Stable feed record id: post:<uuid>, comment:<uuid> or trade:<feed event uuid>.","pattern":"^(post|comment|trade):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"relationship":{"enum":["friends","watching"],"type":"string"},"reaction_summary":{"$ref":"#/components/schemas/SocialReactionSummaryV2","description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read. Preserve contract, aggregate_revision and edge_versions when seeding the reaction cache."},"reply_preview":{"$ref":"#/components/schemas/SocialAssetCommentReplyPreview","description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Omitted means not requested."}},"required":["actor","comment","content_revision","kind","observed_at_ms","permissions","posted_at_ms","read","record_id","relationship"],"type":"object"},"SocialRelationshipFeedTradeItem":{"additionalProperties":false,"description":"A published trade by a CALLD member or a watched trader.","properties":{"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"content_revision":{"description":"Increases when the author-owned content changes under the same record_id. Posts and comments are immutable and stay at 1 (deletion removes them); trades follow their feed revision, which advances on enrichment or restore. Live counters such as like_count, reply_count and x_publish_state are not versioned: re-render them from each page.","minimum":1,"type":"integer"},"kind":{"const":"trade","type":"string"},"observed_at_ms":{"description":"When Arbital recorded the item, in Unix milliseconds; the merge order.","pattern":"^(0|[1-9][0-9]*)$","type":"string"},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"posted_at_ms":{"description":"Original creation or execution time in Unix milliseconds; null when the source did not report it.","pattern":"^(0|[1-9][0-9]*)$","type":["string","null"]},"read":{"description":"Whether the viewer marked this exact record read.","type":"boolean"},"record_id":{"description":"Stable feed record id: post:<uuid>, comment:<uuid> or trade:<feed event uuid>.","pattern":"^(post|comment|trade):[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$","type":"string"},"relationship":{"enum":["friends","watching"],"type":"string"},"trade":{"$ref":"#/components/schemas/SocialFeedTrade"},"reaction_summary":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"type":"null"}],"description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read. Null means reactions are unsupported for a native CALLD trade; imported trades return a summary."},"reply_preview":{"oneOf":[{"$ref":"#/components/schemas/SocialTradeReplyPreview"},{"type":"null"}],"description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Null means unsupported: native CALLD trades or imported theses without an asset. Omitted means not requested."}},"required":["actor","content_revision","kind","observed_at_ms","permissions","posted_at_ms","read","record_id","relationship","trade"],"type":"object"},"SocialRelationshipFeedItem":{"discriminator":{"mapping":{"comment":"#/components/schemas/SocialRelationshipFeedCommentItem","post":"#/components/schemas/SocialRelationshipFeedPostItem","trade":"#/components/schemas/SocialRelationshipFeedTradeItem"},"propertyName":"kind"},"oneOf":[{"$ref":"#/components/schemas/SocialRelationshipFeedPostItem"},{"$ref":"#/components/schemas/SocialRelationshipFeedCommentItem"},{"$ref":"#/components/schemas/SocialRelationshipFeedTradeItem"}]},"SocialRelationshipFeedPage":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/SocialRelationshipFeedItem"},"maxItems":50,"type":"array"},"next_cursor":{"maxLength":512,"minLength":1,"type":["string","null"]},"relationship":{"enum":["friends","watching"],"type":"string"},"unavailable_sources":{"description":"Present only for a partial page. Failed sources retain their cursor for retry; no successful rows plus any failed source returns 503 instead of an empty success.","type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["post","comment","trade"]}}},"required":["items","next_cursor","relationship"],"type":"object"},"SocialAttachmentQuantity":{"type":"string","maxLength":115,"pattern":"^(?:0|[1-9][0-9]{0,77})(?:\\.[0-9]{0,35}[1-9])?$","description":"Exact nonnegative canonical decimal, at most 78 integer and 36 fractional digits. No exponent, leading zeros, or trailing fractional zeros."},"SocialAttachmentProfit":{"type":"string","maxLength":116,"pattern":"^(?!-0$)-?(?:0|[1-9][0-9]{0,77})(?:\\.[0-9]{0,35}[1-9])?$","description":"Exact canonical signed decimal; negative zero is rejected."},"SocialPositionSnapshotInput":{"type":"object","additionalProperties":false,"properties":{"quantity":{"$ref":"#/components/schemas/SocialAttachmentQuantity"},"value_usd":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentQuantity"}]},"profit_usd":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentProfit"}]}},"required":["quantity"],"description":"Author-supplied historical figures. Missing value or profit becomes null. Recorded time and verification are assigned by the server."},"SocialPositionSnapshot":{"type":"object","additionalProperties":false,"properties":{"quantity":{"$ref":"#/components/schemas/SocialAttachmentQuantity"},"value_usd":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentQuantity"}]},"profit_usd":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentProfit"}]},"recorded_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]{0,15})$"},"entry_price_usd":{"type":["string","null"],"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$","description":"Entry captured from eligible Codex basis when this immutable post snapshot was created."}},"required":["quantity","value_usd","profit_usd","recorded_at_ms"],"description":"Immutable historical snapshot. Never refreshed from current holdings or prices, and never used as portfolio, quote, settlement or accounting authority."},"SocialAttachmentAsset":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"chain_id":{"type":"string","const":"solana:mainnet-beta"},"address":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},"required":["chain_id","address"]},{"type":"object","additionalProperties":false,"properties":{"chain_id":{"type":"string","enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"]},"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"}},"required":["chain_id","address"]}]},"SocialPostAttachmentInput":{"description":"Ordered token, post, current owner-position, author-claimed position or verified position references. Current positions are requested by exact chain/address without a snapshot.","oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"token"},"chain_id":{"type":"string","enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"]},"address":{"type":"string","minLength":32,"maxLength":44,"pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"Address for the selected chain. EVM addresses normalize to lowercase; Solana retains case. Zero/system addresses are rejected."}},"required":["kind","chain_id","address"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"post"},"post_id":{"type":"string","format":"uuid"}},"required":["kind","post_id"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"position"},"chain_id":{"type":"string","enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"]},"address":{"type":"string","minLength":32,"maxLength":44,"pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"Address for the selected chain. EVM addresses normalize to lowercase; Solana retains case. Zero/system addresses are rejected."}},"required":["kind","chain_id","address"],"description":"Attach the authenticated owner’s current holding. The backend reads a fresh Codex portfolio observation; callers supply no figures, wallet, owner or verification. Missing holdings return 404; unavailable/incomplete/stale observations return 503."},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"position"},"chain_id":{"type":"string","enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"]},"address":{"type":"string","minLength":32,"maxLength":44,"pattern":"^(0x[0-9a-fA-F]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$","description":"Address for the selected chain. EVM addresses normalize to lowercase; Solana retains case. Zero/system addresses are rejected."},"snapshot":{"$ref":"#/components/schemas/SocialPositionSnapshotInput"}},"required":["kind","chain_id","address","snapshot"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"position"},"position_id":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9:._/-]{0,255}$","maxLength":256}},"required":["kind","position_id"]}]},"SocialAttachmentAuthor":{"type":"object","additionalProperties":false,"properties":{"user_id":{"type":"string","format":"uuid"},"username":{"type":"string"},"display_name":{"type":["string","null"]},"profile_image_url":{"type":["string","null"]}},"required":["user_id","username","display_name","profile_image_url"]},"SocialPostAttachment":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"kind":{"type":"string","const":"token"},"asset":{"$ref":"#/components/schemas/SocialAttachmentAsset"},"verification":{"type":"string","const":"author_claimed"}},"required":["id","ordinal","kind","asset","verification"],"description":"Canonical token reference; does not prove that the token exists."},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"kind":{"type":"string","const":"post"},"post_id":{"type":"string","format":"uuid"},"original_author":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentAuthor"}]},"availability":{"type":"string","enum":["available","unavailable"]},"verification":{"type":"string","const":"verified"}},"required":["id","ordinal","kind","post_id","original_author","availability","verification"],"description":"The backend resolved the original post and author when shared. Verification applies to the reference, not its financial statements. Deleted, blocked or inactive sources retain the ID but return a null author and unavailable state. No recursive content expansion."},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"kind":{"type":"string","const":"position"},"asset":{"$ref":"#/components/schemas/SocialAttachmentAsset"},"position_id":{"type":"null"},"source":{"type":"string","const":"author"},"calculation_version":{"type":"null"},"snapshot":{"$ref":"#/components/schemas/SocialPositionSnapshot"},"verification":{"type":"string","const":"author_claimed"},"lifecycle":{"$ref":"#/components/schemas/SocialPositionLifecycleSummary"}},"required":["id","ordinal","kind","asset","position_id","source","calculation_version","snapshot","verification"]},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"kind":{"type":"string","const":"position"},"asset":{"$ref":"#/components/schemas/SocialAttachmentAsset"},"position_id":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9:._/-]{0,255}$","maxLength":256},"source":{"type":"string","const":"position_ledger"},"calculation_version":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$"},"snapshot":{"$ref":"#/components/schemas/SocialPositionSnapshot"},"verification":{"type":"string","const":"verified"},"lifecycle":{"$ref":"#/components/schemas/SocialPositionLifecycleSummary"}},"required":["id","ordinal","kind","asset","position_id","source","calculation_version","snapshot","verification"],"description":"Available only through the authoritative position reader. Ownership, complete source evidence and observation time are validated before storage."},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"kind":{"type":"string","const":"position"},"asset":{"$ref":"#/components/schemas/SocialAttachmentAsset"},"position_id":{"type":"null"},"source":{"type":"string","const":"codex"},"calculation_version":{"type":"string","const":"codex_position_recap_v1"},"snapshot":{"$ref":"#/components/schemas/SocialPositionSnapshot"},"verification":{"type":"string","const":"provider_reported"},"lifecycle":{"$ref":"#/components/schemas/SocialPositionLifecycleSummary"}},"required":["id","ordinal","kind","asset","position_id","source","calculation_version","snapshot","verification"],"description":"Historical snapshot fetched server-side from the authenticated owner’s Codex portfolio. Quantity is an exact decimal; value uses the provider price; profit is estimated unrealized P&L from Codex basis only. Unknown values are null. These are provider-reported display figures, not verified financial/accounting facts. Relay/Mobula supplemented basis and experimental closed cycles are excluded. Post reads never refresh the snapshot."}]},"SocialMediaUpload":{"description":"Approved normalized upload metadata. There is no ordinal until parent binding. Unattached uploads expire after 24 hours; only their uploader may preview them. Decoded work is bounded to 16 million pixels, including every rendered GIF frame, and at most 60 GIF frames. Authenticated HTTP responses may include short-lived CDN delivery and thumbnail URLs; access_path stays available when delivery is disabled or unavailable.","oneOf":[{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"media_kind":{"type":"string","const":"image"},"mime_type":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"size_bytes":{"type":"integer","minimum":1,"maximum":15728640},"width":{"type":"integer","minimum":1,"maximum":16384},"height":{"type":"integer","minimum":1,"maximum":16384},"access_path":{"type":"string","pattern":"^/v2/social-media/[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"Authenticated relative byte-read path for this media ID; never a public or signed storage URL."},"delivery":{"$ref":"#/components/schemas/SocialMediaDelivery"}},"required":["id","media_kind","mime_type","size_bytes","width","height","access_path"]},{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"media_kind":{"type":"string","const":"gif"},"mime_type":{"type":"string","enum":["image/gif"]},"size_bytes":{"type":"integer","minimum":1,"maximum":15728640},"width":{"type":"integer","minimum":1,"maximum":16384},"height":{"type":"integer","minimum":1,"maximum":16384},"access_path":{"type":"string","pattern":"^/v2/social-media/[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"Authenticated relative byte-read path for this media ID; never a public or signed storage URL."},"source_tenor_url":{"type":"string","maxLength":512,"pattern":"^https://tenor\\.com/view/[a-zA-Z0-9-]+-[0-9]{1,24}$"},"delivery":{"$ref":"#/components/schemas/SocialMediaDelivery"}},"required":["id","media_kind","mime_type","size_bytes","width","height","access_path"]}]},"SocialMediaImage":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"media_kind":{"type":"string","const":"image"},"mime_type":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"size_bytes":{"type":"integer","minimum":1,"maximum":15728640},"width":{"type":"integer","minimum":1,"maximum":16384},"height":{"type":"integer","minimum":1,"maximum":16384},"access_path":{"type":"string","pattern":"^/v2/social-media/[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"Authenticated relative byte-read path for this media ID; never a public or signed storage URL."},"ordinal":{"type":"integer","minimum":0,"maximum":3},"deleted":{"type":"boolean","const":false},"delivery":{"$ref":"#/components/schemas/SocialMediaDelivery"}},"required":["id","media_kind","mime_type","size_bytes","width","height","access_path","ordinal"]},"SocialMediaGif":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"media_kind":{"type":"string","const":"gif"},"mime_type":{"type":"string","enum":["image/gif"]},"size_bytes":{"type":"integer","minimum":1,"maximum":15728640},"width":{"type":"integer","minimum":1,"maximum":16384},"height":{"type":"integer","minimum":1,"maximum":16384},"access_path":{"type":"string","pattern":"^/v2/social-media/[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$","description":"Authenticated relative byte-read path for this media ID; never a public or signed storage URL."},"source_tenor_url":{"type":"string","maxLength":512,"pattern":"^https://tenor\\.com/view/[a-zA-Z0-9-]+-[0-9]{1,24}$"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"deleted":{"type":"boolean","const":false},"delivery":{"$ref":"#/components/schemas/SocialMediaDelivery"}},"required":["id","media_kind","mime_type","size_bytes","width","height","access_path","ordinal"]},"DeletedSocialMedia":{"description":"Permanent bound slot after media removal. Only these three fields remain; the parent remains renderable even when its body is empty and every image is deleted.","type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"ordinal":{"type":"integer","minimum":0,"maximum":3},"deleted":{"type":"boolean","const":true}},"required":["id","ordinal","deleted"]},"SocialMedia":{"oneOf":[{"$ref":"#/components/schemas/SocialMediaImage"},{"$ref":"#/components/schemas/SocialMediaGif"},{"$ref":"#/components/schemas/DeletedSocialMedia"}]},"SocialMediaGallery":{"description":"Ordered immutable slots, with unique IDs and zero-based ordinals matching array positions. Up to four still images, or exactly one GIF. Deletion preserves the slot and original ID. Replies, messages and recap comments omit this field when there are no slots; posts return an empty array.","oneOf":[{"type":"array","maxItems":4,"items":{"oneOf":[{"$ref":"#/components/schemas/SocialMediaImage"},{"$ref":"#/components/schemas/DeletedSocialMedia"}]}},{"type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#/components/schemas/SocialMediaGif"}}]},"SocialMediaIds":{"type":"array","maxItems":4,"uniqueItems":true,"items":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"description":"Upload IDs in gallery order. Each must belong to the actor, be approved, ready, unexpired and unbound, and match the write scope and exact chat when applicable. Up to four still images or one GIF; no mixed gallery. Binding is atomic with the parent write."},"CreateSocialAssetCommentReplyRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":280,"type":"string","description":"Trimmed caption of at most 280 Unicode code points. May be omitted or empty only with nonempty media_ids or a gif reference; the existing control-character policy still applies.","pattern":"^[^\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]*$"},"media_ids":{"$ref":"#/components/schemas/SocialMediaIds"},"gif":{"$ref":"#/components/schemas/SocialExternalGifReference"},"mentions":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeMentionInput"},"description":"Explicit native targets; no targets are inferred from plain @text. Offsets use Unicode code points in the exact canonical body; no trimming is allowed when nonempty."},"client_content_id":{"type":"string","format":"uuid","description":"Actor/source-kind scoped creation key. Matching replay returns the original readable source; a changed command returns 409. Required with nonempty mentions."}},"type":"object","anyOf":[{"required":["body"],"properties":{"body":{"type":"string","minLength":1,"pattern":"\\S"}},"not":{"required":["gif"]}},{"required":["media_ids"],"properties":{"media_ids":{"type":"array","minItems":1,"items":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}},"not":{"required":["gif"]}},{"required":["gif"],"properties":{"media_ids":{"type":"array","const":[]}}}],"description":"Ordinary token-comment reply only. Requires nonblank text or approved asset_comment_reply media_ids, current parent/ancestor visibility and fresh positive token holdings. Top-level token comments and direct imported-thesis replies remain text-only. Alternatively accepts one external gif reference with an optional caption; gif and nonempty media_ids are mutually exclusive. Absent gif is omitted; null is invalid. SOCIAL_EXTERNAL_GIFS_ENABLED defaults to false and gates GIF-reference writes independently of uploaded media; disabled writes return 503 social_media_disabled. Native mentions support stable Early user IDs only. Imported-thesis/trade routes reject mention/key fields. No financial authority or external identity inference is granted.","allOf":[{"if":{"required":["mentions"],"properties":{"mentions":{"minItems":1}}},"then":{"required":["body","client_content_id"]}}]},"SocialMediaDelivery":{"description":"Optional HTTP-only delivery capability, issued after current access checks. URLs expire together at expires_at. Clients load the thumbnail in feeds and the full normalized image or animated GIF when opened. Refresh by re-reading the parent endpoint; access_path remains an authenticated fallback. Never persist, broadcast or share these viewer-specific URLs.","type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":4096,"description":"Short-lived Cloudflare Worker URL for the full normalized image or GIF. Treat it as opaque; refetch authorized parent metadata before expires_at to renew."},"expires_at":{"type":"string","format":"date-time","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:[.][0-9]+)?Z$"},"thumbnail":{"type":"object","additionalProperties":false,"description":"Bounded WebP preview. Animated GIFs use an approved still poster.","properties":{"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":4096},"mime_type":{"type":"string","const":"image/webp"},"size_bytes":{"type":"integer","minimum":1,"maximum":1048576},"width":{"type":"integer","minimum":1,"maximum":640},"height":{"type":"integer","minimum":1,"maximum":640}},"required":["url","mime_type","size_bytes","width","height"]}},"required":["url","expires_at"]},"CodexWatchPositionBasis":{"description":"Price-independent, ephemeral display basis. Codex wins; admitted Mobula receipts are receipt-time fair value, not sender cost or tax basis. No quantity, valuation, settlement or quote authority. Legacy marked fields retain their existing behavior.","oneOf":[{"type":"object","additionalProperties":false,"properties":{"observedAtMs":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Portfolio snapshot observation in milliseconds; not purchase time or finality."},"calculationStatus":{"type":"string","enum":["provider_estimate"]},"status":{"type":"string","enum":["available"]},"averageEntryPriceUsd":{"type":"string","pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","maxLength":40,"description":"Half-up, up to 18 fractional digits; positive underflow is unavailable."},"remainingCostBasisUsd":{"type":"string","pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","maxLength":40,"description":"Half-up, up to six fractional digits; bounded by existing micro-USD limits."},"source":{"type":"string","enum":["arbital_indexer","codex","arbital_relay","codex_plus_mobula_receipts"]},"includesReceiptFairValue":{"type":"boolean"},"unavailableReason":{"type":"null"}},"required":["observedAtMs","calculationStatus","status","averageEntryPriceUsd","remainingCostBasisUsd","source","includesReceiptFairValue","unavailableReason"]},{"type":"object","additionalProperties":false,"properties":{"observedAtMs":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Portfolio snapshot observation in milliseconds; not purchase time or finality."},"calculationStatus":{"type":"string","enum":["provider_estimate"]},"averageEntryPriceUsd":{"type":"null"},"remainingCostBasisUsd":{"type":"null"},"source":{"type":"null"},"includesReceiptFairValue":{"type":"null"},"status":{"type":"string","enum":["unavailable"]},"unavailableReason":{"type":"string","enum":["missing_purchase_history","insufficient_purchase_coverage","basis_provider_unavailable","unsupported_native_basis","invalid_basis","incomplete_wallet_coverage","numeric_bounds"]}},"required":["observedAtMs","calculationStatus","averageEntryPriceUsd","remainingCostBasisUsd","source","includesReceiptFairValue","status","unavailableReason"]}]},"PortfolioWalletChainCoverage":{"type":"object","additionalProperties":false,"required":["address","chainId","networkId","status","truncated","reason"],"properties":{"address":{"type":"string"},"chainId":{"type":"string"},"networkId":{"type":"integer"},"status":{"type":"string","enum":["ready","unavailable"]},"truncated":{"type":"boolean"},"reason":{"type":"string","enum":["none","holdings_limit","chain_unavailable","invalid_response","timeout"]}}},"PortfolioWalletCoverage":{"type":"object","additionalProperties":false,"required":["identityComplete","supportedChainIds","chains"],"properties":{"identityComplete":{"type":"boolean"},"supportedChainIds":{"type":"array","items":{"type":"string"}},"chains":{"type":"array","items":{"$ref":"#/components/schemas/PortfolioWalletChainCoverage"}}}},"AggregatePositionBasis":{"description":"Price-independent, ephemeral display basis. Codex wins; admitted Mobula receipts are receipt-time fair value, not sender cost or tax basis. No quantity, valuation, settlement or quote authority. Legacy marked fields retain their existing behavior.","oneOf":[{"type":"object","additionalProperties":false,"properties":{"observedAtMs":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Portfolio snapshot observation in milliseconds; not purchase time or finality."},"calculationStatus":{"type":"string","enum":["provider_estimate"]},"status":{"type":"string","enum":["available"]},"averageEntryPriceUsd":{"type":"string","pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","maxLength":40,"description":"Half-up, up to 18 fractional digits; positive underflow is unavailable."},"remainingCostBasisUsd":{"type":"string","pattern":"^(0|[1-9][0-9]*)(\\.[0-9]+)?$","maxLength":40,"description":"Half-up, up to six fractional digits; bounded by existing micro-USD limits."},"source":{"type":"string","enum":["arbital_indexer","codex","arbital_relay","codex_plus_mobula_receipts","mixed"]},"includesReceiptFairValue":{"type":"boolean"},"unavailableReason":{"type":"null"},"sources":{"type":"array","items":{"type":"string","enum":["arbital_indexer","codex","arbital_relay","codex_plus_mobula_receipts"]}}},"required":["observedAtMs","calculationStatus","status","averageEntryPriceUsd","remainingCostBasisUsd","source","includesReceiptFairValue","unavailableReason","sources"]},{"type":"object","additionalProperties":false,"properties":{"observedAtMs":{"type":"string","pattern":"^[1-9][0-9]*$","description":"Portfolio snapshot observation in milliseconds; not purchase time or finality."},"calculationStatus":{"type":"string","enum":["provider_estimate"]},"averageEntryPriceUsd":{"type":"null"},"remainingCostBasisUsd":{"type":"null"},"source":{"type":"null"},"includesReceiptFairValue":{"type":"null"},"status":{"type":"string","enum":["unavailable"]},"unavailableReason":{"type":"string","enum":["missing_purchase_history","insufficient_purchase_coverage","basis_provider_unavailable","unsupported_native_basis","invalid_basis","incomplete_wallet_coverage","numeric_bounds"]}},"required":["observedAtMs","calculationStatus","averageEntryPriceUsd","remainingCostBasisUsd","source","includesReceiptFairValue","status","unavailableReason"]}]},"AssetPositionSummary":{"type":"object","additionalProperties":false,"required":["chainId","address","decimals","observedQuantityAtomic","quantityAtomic","quantityComplete","valuationComplete","valueUsd","observedValueUsd","contributingWallets","missingWallets","positionBasis","unrealizedPnlUsd"],"properties":{"chainId":{"type":"string"},"address":{"type":"string"},"decimals":{"type":"integer","minimum":0,"maximum":255},"observedQuantityAtomic":{"type":"string","pattern":"^[0-9]+$"},"quantityAtomic":{"type":"string","nullable":true,"pattern":"^[0-9]+$"},"quantityComplete":{"type":"boolean"},"valuationComplete":{"type":"boolean"},"valueUsd":{"type":"string","nullable":true},"observedValueUsd":{"type":"string"},"contributingWallets":{"type":"array","items":{"type":"string"}},"missingWallets":{"type":"array","items":{"type":"string"}},"positionBasis":{"$ref":"#/components/schemas/AggregatePositionBasis"},"unrealizedPnlUsd":{"type":"string","nullable":true}}},"SocialTradeReply":{"additionalProperties":false,"description":"A reply on a imported trade. Token comment threads and chat messages use separate APIs; their ids cannot address post replies.","properties":{"author":{"$ref":"#/components/schemas/SocialPostAuthor"},"body":{"description":"Null after parent deletion; empty for a media-only reply. Removing the last image preserves the empty body and deleted media slot.","maxLength":2000,"type":["string","null"]},"created_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"deleted":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"parent_reply_id":{"description":"Exact direct parent reply on the same post; null for a direct reply to the post.","format":"uuid","type":["string","null"]},"reply_count":{"description":"Nondeleted visible direct replies, excluding deeper descendants.","minimum":0,"type":"integer"},"viewer_can_delete":{"description":"Whether the viewer owns this undeleted reply and may delete it.","type":"boolean"},"trade_event_id":{"format":"uuid","type":"string"}},"required":["author","body","created_at_ms","deleted","id","parent_reply_id","trade_event_id","reply_count","viewer_can_delete"],"type":"object"},"SocialTradeReplyPage":{"additionalProperties":false,"properties":{"next_cursor":{"description":"Opaque trade_replies cursor for older replies in the same post and parent scope.","maxLength":512,"pattern":"^[A-Za-z0-9_-]+$","type":["string","null"]},"participation":{"const":"community","type":"string"},"replies":{"items":{"$ref":"#/components/schemas/SocialTradeReply"},"maxItems":50,"type":"array"},"reply_count":{"description":"Total visible nondeleted direct replies in this scope, independent of pagination.","minimum":0,"type":"integer"},"viewer_can_reply":{"description":"True for a signed-in, unrestricted viewer when the parent is not deleted. Always false for anonymous readers.","type":"boolean"}},"required":["next_cursor","participation","replies","reply_count","viewer_can_reply"],"type":"object"},"CreateSocialTradeReplyRequest":{"additionalProperties":false,"properties":{"body":{"maxLength":2000,"type":"string","pattern":"^[^\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u009f]*$","minLength":1}},"type":"object","description":"Nonblank native reply body, at most 2000 Unicode code points. No holder requirement or media attachments.","required":["body"]},"SocialPositionLifecycleSummary":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","enum":["open","closed","unknown"]},"source":{"type":"string","const":"codex"},"calculation_status":{"type":"string","const":"provider_estimate"},"fees_status":{"type":"string","const":"unavailable"},"observed_at_ms":{"oneOf":[{"type":"null"},{"type":"integer","minimum":0,"description":"Unix timestamp in milliseconds as a JSON number."}]},"freshness":{"type":"string","enum":["fresh","stale"]},"reason":{"type":["string","null"]},"realized_pnl_usd":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentProfit"}],"description":"Sum of realized P&L across the initially linked cycle and later re-entries, including partial sales. Not unrealized P&L or a rolling-year total. Null when current evidence is unavailable/stale; retained cycle results remain in position-history items."},"current_cycle_id":{"type":["string","null"]},"closed_cycle_count":{"type":"integer","minimum":0}},"required":["state","source","calculation_status","fees_status","observed_at_ms","freshness","reason","realized_pnl_usd","current_cycle_id","closed_cycle_count"],"description":"Optional social-display lifecycle for a permanently retained position attachment. Initially supported for tracked non-native Solana tokens only. Open/closed requires complete bounded Codex token history that matches the immutable attachment quantity and current provider holding; unknown means that evidence is unavailable, incomplete, unsupported, or inconsistent, never proof of a zero holding. A later purchase reopens the same attachment without removing prior cycles. Stale summaries return state unknown and null realized_pnl_usd/current_cycle_id; observed_at_ms and closed_cycle_count retain historical context. Freshness does not imply known P&L. Realized P&L is a provider estimate, not tax/accounting evidence; unavailable valuation returns null, and fees are unavailable. Never balance, quote, settlement, or execution authority. The original snapshot is unchanged."},"SocialPositionCycle":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"state":{"type":"string","enum":["open","closed"]},"opened_at_ms":{"type":"integer","minimum":0,"description":"Unix timestamp in milliseconds as a JSON number."},"closed_at_ms":{"oneOf":[{"type":"null"},{"type":"integer","minimum":0,"description":"Unix timestamp in milliseconds as a JSON number."}]},"observed_at_ms":{"type":"integer","minimum":0,"description":"Unix timestamp in milliseconds as a JSON number."},"current_quantity":{"$ref":"#/components/schemas/SocialAttachmentQuantity"},"realized_pnl_usd":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentProfit"}]},"pnl_status":{"type":"string","enum":["available","unavailable"]},"fees_status":{"type":"string","const":"unavailable"},"trades":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"signature":{"type":"string"},"side":{"type":"string","enum":["buy","sell"]},"amount":{"$ref":"#/components/schemas/SocialAttachmentQuantity"},"usd_notional":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialAttachmentQuantity"}]},"occurred_at_ms":{"type":"integer","minimum":0,"description":"Unix timestamp in milliseconds as a JSON number."}},"required":["id","signature","side","amount","usd_notional","occurred_at_ms"],"description":"Provider-observed transaction movement for the tracked token. Amount is an exact nonnegative decimal. A null USD notional is unavailable, not zero; transaction aggregation is not a verified user-level execution record."}}},"required":["id","state","opened_at_ms","closed_at_ms","observed_at_ms","current_quantity","realized_pnl_usd","pnl_status","fees_status","trades"],"description":"Historical provider-estimated cycle linked to the thesis initial position or a later re-entry. Closed cycles remain visible after reopening. Quantity and state are observations at observed_at_ms, not live holdings. Realized P&L uses moving average acquisition cost when price/order evidence supports it and is null when unavailable, including ambiguous mixed-direction transactions. Fees are unavailable. Missing history produces an unknown lifecycle summary rather than a fabricated cycle or zero acquisition cost."},"SocialPositionHistoryPage":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/SocialPositionCycle"}},"next_cursor":{"type":["string","null"],"description":"Opaque continuation cursor; null when there is no next page."},"source":{"type":"string","const":"codex"},"calculation_status":{"type":"string","const":"provider_estimate"},"fees_status":{"type":"string","const":"unavailable"},"lifecycle":{"$ref":"#/components/schemas/SocialPositionLifecycleSummary"}},"required":["items","next_cursor","source","calculation_status","fees_status","lifecycle"],"description":"Paginated retained social position cycles with the current lifecycle summary. Use lifecycle.state and lifecycle.freshness for current status; items remain historical observations at their observed_at_ms even when lifecycle is unknown/stale. Closed-cycle realized P&L remains available in items after provider failures or repurchases. An empty page is not proof that the wallet has never traded. Display estimates only, with fees unavailable."},"ExternalTraderPosition":{"additionalProperties":false,"description":"Request-time, display-only position for one canonical asset across server-resolved verified public wallets on its chain. Unrelated holdings and chains do not consume enrichment requests. Never portfolio totals, accounting, quote, sell, execution, settlement, or lifecycle authority.","properties":{"asset":{"additionalProperties":false,"properties":{"address":{"description":"Canonical token address, or native for the chain native asset. EVM addresses are lowercase; Solana addresses preserve canonical case.","type":"string"},"chainId":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},"required":["address","chainId"],"type":"object"},"coverage":{"const":"verified_wallets","type":"string"},"observedAtMs":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"position":{"description":"Null with quantityComplete=true means no current holding was observed across all relevant wallets; it does not prove a position closed. Null with quantityComplete=false means unavailable coverage, never zero holdings. Partial records expose observed quantities only; use the position completeness and basis status before displaying value or P&L.","oneOf":[{"$ref":"#/components/schemas/AssetPositionSummary"},{"type":"null"}]},"quantityComplete":{"description":"Whether current holdings coverage is complete for this asset across all relevant verified wallets. Independent of price and basis availability and unrelated portfolio chains.","type":"boolean"},"source":{"const":"codex","type":"string"},"traderProfileId":{"format":"uuid","type":"string"},"unavailableReason":{"description":"Incomplete identity or holdings coverage; missing price or basis is represented on position itself.","enum":["incomplete_wallet_coverage",null],"type":["string","null"]},"lastPosition":{"type":["object","null"],"description":"Last saved sell receipt when current quantity coverage is complete and zero. Missing Entry or P&L stays null. This does not prove why a balance became zero.","additionalProperties":false,"properties":{"entryPriceUsd":{"type":["string","null"],"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$"},"closedAtMs":{"type":["string","null"]},"realizedPnlUsd":{"type":["string","null"],"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$"}},"required":["entryPriceUsd","closedAtMs","realizedPnlUsd"]}},"required":["asset","coverage","observedAtMs","position","quantityComplete","source","traderProfileId","unavailableReason"],"type":"object"},"SocialXFeedAuthor":{"type":"object","additionalProperties":false,"required":["id","username","display_name","avatar_url","verified","followers"],"properties":{"id":{"type":"string","description":"Stable X account id."},"username":{"type":"string"},"display_name":{"type":["string","null"]},"avatar_url":{"type":["string","null"]},"verified":{"type":"boolean"},"followers":{"type":["string","null"],"description":"Follower count as observed; null when unknown."}}},"SocialXFeedMedia":{"type":"object","additionalProperties":false,"required":["kind","url","preview_url"],"properties":{"kind":{"type":"string","enum":["photo","video","gif"]},"url":{"type":"string"},"preview_url":{"type":["string","null"]}}},"SocialXFeedMatch":{"type":"object","additionalProperties":false,"required":["subject_kind","subject_id","token","company","match_kind","evidence"],"properties":{"subject_kind":{"type":"string","enum":["token","company","topic"]},"subject_id":{"type":"string"},"token":{"type":["object","null"],"additionalProperties":false,"required":["chain_id","address"],"properties":{"chain_id":{"type":"string"},"address":{"type":"string"}}},"company":{"type":["object","null"],"additionalProperties":false,"required":["ticker","name"],"properties":{"ticker":{"type":"string"},"name":{"type":["string","null"]}}},"match_kind":{"type":"string","enum":["contract_address","cashtag_with_name","curated_alias","topic_query"]},"evidence":{"type":"object","description":"Matched text evidence, e.g. {\"address\":...}, {\"cashtag\":\"$SOL\",\"name\":\"Solana\"}, {\"alias\":...} or {\"term\":...}."}}},"SocialXFeedPost":{"type":"object","additionalProperties":false,"required":["id","x_post_id","source","author","text","url","media","posted_at_ms","observed_at_ms","updated_at_ms","removed_at_ms","classification","matches","engagement","relationships","actions","display_text","display"],"properties":{"id":{"type":"string","format":"uuid","description":"Stable Early record id derived from the X post identity."},"x_post_id":{"type":"string"},"source":{"type":"string","const":"x"},"author":{"$ref":"#/components/schemas/SocialXFeedAuthor"},"text":{"type":"string","maxLength":16000},"url":{"type":"string"},"media":{"type":"array","maxItems":4,"items":{"$ref":"#/components/schemas/SocialXFeedMedia"}},"posted_at_ms":{"type":"string","description":"Original publication time (from the post id)."},"observed_at_ms":{"type":"string","description":"First collection time."},"updated_at_ms":{"type":"string","description":"Last collection or update."},"removed_at_ms":{"type":["string","null"]},"classification":{"type":"object","additionalProperties":false,"required":["market","content_type","topics","evidence"],"properties":{"market":{"type":"array","items":{"type":"string","enum":["crypto","memecoins","stocks"]}},"content_type":{"type":"string","enum":["news","discussion"]},"topics":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}}}},"matches":{"type":"array","items":{"$ref":"#/components/schemas/SocialXFeedMatch"}},"engagement":{"type":"object","additionalProperties":false,"required":["likes","reposts","replies","quotes","views","bookmarks","observed_at_ms"],"description":"X counts only, separate from Early reactions; null means unknown.","properties":{"likes":{"type":["string","null"]},"reposts":{"type":["string","null"]},"replies":{"type":["string","null"]},"quotes":{"type":["string","null"]},"views":{"type":["string","null"]},"bookmarks":{"type":["string","null"]},"observed_at_ms":{"type":"string"}}},"relationships":{"type":"object","additionalProperties":false,"required":["in_reply_to_id","quoted_post_id","conversation_id"],"properties":{"in_reply_to_id":{"type":["string","null"]},"quoted_post_id":{"type":["string","null"]},"conversation_id":{"type":["string","null"]}}},"actions":{"type":"object","additionalProperties":false,"required":["discussion_target_id","reactions_available","replies_available"],"properties":{"discussion_target_id":{"type":"string","description":"Canonical Early discussion target (x_post:<uuid>)."},"reactions_available":{"type":"boolean","description":"True: react through `/v2/social/x/posts/{x_post_id}/reactions`. Early reactions never post to X."},"replies_available":{"type":"boolean","description":"False in this version; Early replies on X posts are not offered yet."}}},"display_text":{"type":"string","maxLength":16000},"display":{"$ref":"#/components/schemas/SocialXDisplay"}}},"SocialXFeedAvailability":{"type":"object","additionalProperties":false,"required":["state","coverage","last_collected_at_ms","cache_usable","generation","retry_after_ms"],"properties":{"state":{"type":"string","enum":["available","partial","pending","unavailable"]},"coverage":{"type":["string","null"],"enum":["not_monitored","pending","collected","delayed","unavailable","budget_exhausted",null],"description":"Subject coverage state when an asset or company filter is set."},"last_collected_at_ms":{"type":["string","null"]},"cache_usable":{"type":"boolean"},"generation":{"type":["string","null"],"description":"Top score generation this page belongs to."},"retry_after_ms":{"type":["integer","null"]}}},"SocialXFeedPage":{"type":"object","additionalProperties":false,"required":["order","filters","availability","items","next_cursor"],"properties":{"order":{"type":"string","enum":["top","latest"]},"filters":{"type":"object","additionalProperties":false,"required":["market","content","asset","company"],"properties":{"market":{"type":"string","enum":["all","crypto","memecoins","stocks"]},"content":{"type":"string","enum":["all","news","discussions"]},"asset":{"type":["object","null"],"additionalProperties":false,"required":["chain_id","address"],"properties":{"chain_id":{"type":"string"},"address":{"type":"string"}}},"company":{"type":["string","null"]}}},"availability":{"$ref":"#/components/schemas/SocialXFeedAvailability"},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/SocialXFeedPost"}},"next_cursor":{"type":["string","null"],"minLength":1,"maxLength":512}}},"SocialXCoverage":{"type":"object","additionalProperties":false,"required":["subject_id","state","active","last_success_at_ms","next_attempt_at_ms","cache_usable","last_outcome"],"properties":{"subject_id":{"type":"string"},"state":{"type":"string","enum":["not_monitored","pending","collected","delayed","unavailable","budget_exhausted"]},"active":{"type":"boolean"},"last_success_at_ms":{"type":["string","null"]},"next_attempt_at_ms":{"type":["string","null"]},"cache_usable":{"type":"boolean"},"last_outcome":{"type":["string","null"]}}},"TraderAudienceSource":{"type":"object","additionalProperties":false,"properties":{"count":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"status":{"type":"string","enum":["available","unavailable"]},"updated_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"observed_at_ms":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"}},"required":["count","status","updated_at_ms","observed_at_ms"],"description":"Exact source count with independent availability and observation time. Null means unavailable, never zero. Unknown update time remains null."},"TraderAudience":{"type":"object","additionalProperties":false,"properties":{"fomo_followers":{"$ref":"#/components/schemas/TraderAudienceSource"},"early_watchers":{"$ref":"#/components/schemas/TraderAudienceSource"},"combined_total":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"available_total":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"completeness":{"type":"string","enum":["complete","partial","unavailable"]},"available_sources":{"type":"array","uniqueItems":true,"maxItems":2,"items":{"type":"string","enum":["fomo_followers","early_watchers"]}},"label":{"type":"string","const":"Followers + watchers"},"may_overlap":{"type":"boolean","const":true}},"required":["fomo_followers","early_watchers","combined_total","available_total","completeness","available_sources","label","may_overlap"],"description":"combined_total requires both known sources. available_total sums known sources. Audiences may overlap; totals are not deduplicated people."},"ExternalTraderProfileDetail":{"additionalProperties":false,"description":"External trader detail with source-aware audience and nullable viewer watching state. Null membership means unavailable.","properties":{"accounts":{"items":{"$ref":"#/components/schemas/ExternalTraderAccount"},"minItems":1,"type":"array"},"traderProfileId":{"format":"uuid","type":"string"},"wallets":{"items":{"$ref":"#/components/schemas/ExternalTraderWallet"},"minItems":1,"type":"array"},"audience":{"$ref":"#/components/schemas/TraderAudience"},"is_watching":{"type":["boolean","null"]}},"required":["accounts","traderProfileId","wallets","audience","is_watching"],"type":"object"},"TraderSubject":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["native","imported"]},"id":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"}},"required":["kind","id"]},"TraderPerformance30dUnavailable":{"type":"object","additionalProperties":false,"properties":{"subject":{"$ref":"#/components/schemas/TraderSubject"},"availability":{"type":"string","const":"unavailable"},"return_pct":{"type":"null"},"pnl_usd":{"type":"null"},"pnl_kind":{"type":"null"},"requested_period":{"type":"string","const":"30d"},"requested_start_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"requested_end_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"actual_period":{"type":"null"},"actual_start_ms":{"type":"null"},"actual_end_ms":{"type":"null"},"available_periods":{"type":"array","uniqueItems":true,"maxItems":2,"items":{"type":"string","enum":["seven_day","weekly"]}},"currency":{"type":"string","const":"USD"},"coverage":{"type":"object","additionalProperties":false,"properties":{"wallets":{"type":"array","maxItems":0,"items":{"type":"string"}},"networks":{"type":"array","maxItems":0,"items":{"type":"string"}},"completeness":{"type":"string","const":"unknown"}},"required":["wallets","networks","completeness"]},"methodology":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"null"},"return_denominator":{"type":"null"},"cash_flow_treatment":{"type":"null"},"fees_included":{"type":"null"},"provider_estimate":{"type":"null"}},"required":["id","return_denominator","cash_flow_treatment","fees_included","provider_estimate"]},"source":{"type":"string","enum":["indexer_social_query","codex"]},"as_of_ms":{"type":"null"},"updated_at_ms":{"type":"null"},"completeness":{"type":"string","const":"unavailable"},"unavailable_reason":{"type":"string","enum":["upstream_30d_not_supported","comparable_performance_not_supported"]},"chart":{"type":"null"}},"required":["subject","availability","return_pct","pnl_usd","pnl_kind","requested_period","requested_start_ms","requested_end_ms","actual_period","actual_start_ms","actual_end_ms","available_periods","currency","coverage","methodology","source","as_of_ms","updated_at_ms","completeness","unavailable_reason","chart"],"description":"Unsupported comparable 30-day performance capability only. Metrics, methodology, chart and source timestamps remain null. Disclosed available shorter periods are never substitutes for 30d. No available-performance variant is promised."},"ExternalTraderPerformanceResponse":{"oneOf":[{"$ref":"#/components/schemas/ExternalTraderPerformance"},{"$ref":"#/components/schemas/TraderPerformance30dUnavailable"}]},"TraderSummariesRequest":{"type":"object","additionalProperties":false,"properties":{"period":{"type":"string","const":"30d"},"subjects":{"type":"array","minItems":1,"maxItems":6,"items":{"$ref":"#/components/schemas/TraderSubject"}}},"required":["period","subjects"],"description":"Ordered typed subjects; duplicate inputs remain in output while identity work is deduplicated. No wallet overrides."},"TraderSummaryItem":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"subject":{"$ref":"#/components/schemas/TraderSubject"},"status":{"type":"string","const":"ok"},"performance":{"$ref":"#/components/schemas/TraderPerformance30dUnavailable"}},"required":["subject","status","performance"]},{"type":"object","additionalProperties":false,"properties":{"subject":{"$ref":"#/components/schemas/TraderSubject"},"status":{"type":"string","enum":["not_found","not_permitted","unavailable"]},"performance":{"type":"null"}},"required":["subject","status","performance"]}]},"TraderSummariesResponse":{"type":"object","additionalProperties":false,"properties":{"requested_period":{"type":"string","const":"30d"},"items":{"type":"array","minItems":1,"maxItems":6,"items":{"$ref":"#/components/schemas/TraderSummaryItem"}}},"required":["requested_period","items"],"description":"One result per input in input order. status=ok means resolved identity, not available performance; other statuses have null performance."},"ProductClassifiedSearchToken":{"additionalProperties":false,"properties":{"evidence":{"$ref":"#/components/schemas/ProductRankingFields"},"holders_count":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"created_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"bonding_progress_pct":{"type":"string","pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$"},"categories":{"type":"array","maxItems":12,"uniqueItems":true,"items":{"enum":["prestocks","ai","etf","technology","finance","healthcare","consumer","energy","industrial","real_estate","media","space"]}},"asset":{"$ref":"#/components/schemas/ProductMarketAssetV1"},"image_url":{"oneOf":[{"format":"uri","maxLength":2048,"pattern":"^https://","type":"string"},{"type":"null"}]},"liquidity_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"market_cap_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"type":["string","null"]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"price_change_24h_pct":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"price_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"rank":{"minimum":1,"type":"integer"},"symbol":{"maxLength":32,"type":["string","null"]},"volume_24h_usd":{"oneOf":[{"pattern":"^-?(0|[1-9][0-9]*)(?:\\.[0-9]+)?$","type":"string"},{"type":"null"}]},"asset_class":{"type":"string","enum":["tokens","stocks","unknown"]},"classification":{"type":"object","additionalProperties":false,"properties":{"source":{"type":["string","null"]},"revision":{"type":"string","const":"catalogue-identity-v1"}},"required":["source","revision"]}},"required":["asset","rank","name","symbol","image_url","price_usd","market_cap_usd","liquidity_usd","price_change_24h_pct","volume_24h_usd","observed_at_ms","asset_class","classification"],"type":"object","description":"Exact canonical contract/network catalogue classification. Unknown contracts appear only in All; names or tickers never establish identity."},"ProductAssetSearchEvidence":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","const":"catalogues_and_codex"},"provider_observed_at_ms":{"type":"null"},"retrieved_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"served_at_ms":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"freshness":{"type":"string","enum":["fresh","stale"]},"availability":{"type":"string","const":"partial"},"coverage":{"type":"object","additionalProperties":false,"properties":{"scope":{"type":"string","const":"supported_catalogues_and_bounded_codex"},"exhaustive":{"type":"boolean","const":false},"collected_items":{"type":"integer","minimum":0},"codex_limit":{"type":"integer","const":20},"sources":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"classification_revision":{"type":"string","const":"catalogue-identity-v1"}},"required":["scope","exhaustive","collected_items","codex_limit","sources","classification_revision"]}},"required":["source","provider_observed_at_ms","retrieved_at_ms","served_at_ms","freshness","availability","coverage"],"description":"Full collected catalogues are filtered before ranking/paging. All adds at most 20 Codex candidates. Coverage is never exhaustive global search; missing or truncated required sources return 503."},"ProductAssetSearchPage":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/ProductClassifiedSearchToken"}},"query":{"type":"string","minLength":2,"maxLength":64},"next_cursor":{"type":["string","null"],"maxLength":256},"evidence":{"$ref":"#/components/schemas/ProductAssetSearchEvidence"}},"required":["items","query","next_cursor","evidence"]},"ProductAssetSearchResponse":{"oneOf":[{"$ref":"#/components/schemas/ProductTokenSearchResponseV1"},{"$ref":"#/components/schemas/ProductAssetSearchPage"}]},"ChatPermissions":{"additionalProperties":false,"description":"Management rights the caller currently holds in this chat. Display hints only: every command re-authorizes inside its transaction. Direct messages carry no rights.","properties":{"can_change_roles":{"type":"boolean","description":"Owner only: promote a member to admin or demote an admin to member."},"can_invite":{"type":"boolean","description":"Owners and admins: create invitations, list and revoke pending ones."},"can_remove_members":{"type":"boolean","description":"Owners remove anyone but the owner; admins remove ordinary members."}},"required":["can_change_roles","can_invite","can_remove_members"],"type":"object"},"ChatMemberPage":{"additionalProperties":false,"properties":{"members":{"items":{"$ref":"#/components/schemas/ChatMember"},"maxItems":100,"type":"array","description":"Owners first, then admins, then members; each group ordered by join time."},"next_cursor":{"type":["string","null"]}},"required":["members","next_cursor"],"type":"object"},"UpdateChatMemberRoleRequest":{"additionalProperties":false,"properties":{"role":{"enum":["admin","member"],"type":"string"}},"required":["role"],"type":"object"},"SocialExternalGifReference":{"type":"object","additionalProperties":false,"description":"A selected public KLIPY GIF reference, not an approved social-media upload. The backend validates syntax and stores only these identifiers; it does not call KLIPY or approve, cache or store its bytes. Resolve from the end-user client, verify both returned id and slug, apply receiver-side content restrictions and display provider attribution. Missing, filtered or mismatched items are unavailable. Never send an Arbital bearer token to the provider.","properties":{"provider":{"type":"string","const":"klipy"},"id":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[1-9][0-9]{0,31}(?![\\s\\S])","description":"Canonical positive decimal provider identifier. Keep as a string; never coerce to a JavaScript number. The absolute-end assertion rejects trailing newlines."},"slug":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,255}(?![\\s\\S])","description":"Exact provider lookup slug, including case. Do not derive a URL or accept arbitrary provider media URLs. The absolute-end assertion rejects trailing newlines."}},"required":["provider","id","slug"]},"ExternalSocialPositionCycle":{"type":"object","additionalProperties":false,"required":["id","state","opened_at_ms","closed_at_ms","bought_quantity_atomic","sold_quantity_atomic","remaining_quantity_atomic","realized_pnl_usd","cost_basis_usd","proceeds_usd","includes_thesis"],"properties":{"id":{"type":"string","maxLength":128},"state":{"type":"string","enum":["open","closed"]},"opened_at_ms":{"type":"integer","minimum":0},"closed_at_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"bought_quantity_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"sold_quantity_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"remaining_quantity_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"realized_pnl_usd":{"anyOf":[{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,29})(\\.[0-9]{1,18})?$"},{"type":"null"}]},"cost_basis_usd":{"anyOf":[{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,29})(\\.[0-9]{1,18})?$"},{"type":"null"}]},"proceeds_usd":{"anyOf":[{"type":"string","pattern":"^-?(0|[1-9][0-9]{0,29})(\\.[0-9]{1,18})?$"},{"type":"null"}]},"includes_thesis":{"type":"boolean"}},"description":"An indexer-observed wallet/token cycle. Provider-estimated gross USD values exclude fees and are not accounting. includes_thesis identifies a cycle whose lifetime contains the thesis publication; other retained cycles are not attributed thesis performance. Atomic quantities require asset.decimals; unavailable values are null."},"ExternalSocialPositionHistoryPage":{"type":"object","additionalProperties":false,"required":["source","calculation_status","fees_status","asset","lifecycle","items","next_cursor","request_status"],"properties":{"source":{"const":"codex"},"calculation_status":{"const":"provider_estimate"},"fees_status":{"const":"unavailable"},"asset":{"type":"object","additionalProperties":false,"required":["chain_id","address","decimals"],"properties":{"chain_id":{"const":"solana:mainnet-beta"},"address":{"type":"string"},"decimals":{"anyOf":[{"type":"integer","minimum":0,"maximum":30},{"type":"null"}]}}},"lifecycle":{"type":"object","additionalProperties":false,"required":["state","reason","observed_at_ms","freshness","calculation_version","current_quantity_atomic"],"properties":{"state":{"type":"string","enum":["open","closed","unknown"]},"reason":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}]},"observed_at_ms":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}]},"freshness":{"type":"string","enum":["fresh","stale"]},"calculation_version":{"type":"string","maxLength":128},"current_quantity_atomic":{"anyOf":[{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},{"type":"null"}]}}},"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/ExternalSocialPositionCycle"}},"next_cursor":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}]},"request_status":{"$ref":"#/components/schemas/ExternalSocialPositionRequestStatus"}},"description":"Read-only indexer social position observations. Unknown/stale current status may retain previously observed closed cycles. These results never supply portfolio balances, quote eligibility, transaction authority, or tax basis. Wallet addresses are not exposed."},"ExternalSocialPositionRequestStatus":{"type":"object","additionalProperties":false,"required":["state","reason","retry_after_seconds"],"properties":{"state":{"type":"string","enum":["available","queued","running","retry_scheduled","unavailable"]},"reason":{"type":["string","null"],"maxLength":80},"retry_after_seconds":{"type":"integer","minimum":0,"maximum":86400}},"description":"Explicit computation status. unavailable identifies an unsupported or terminally unresolved observation; an empty items array alone is not a work signal. queued/running/retry_scheduled are pending. Observe Retry-After; GET never queues work."},"ExternalSocialPositionEnsureResult":{"type":"object","additionalProperties":false,"required":["request_status","history"],"properties":{"request_status":{"$ref":"#/components/schemas/ExternalSocialPositionRequestStatus"},"history":{"anyOf":[{"$ref":"#/components/schemas/ExternalSocialPositionHistoryPage"},{"type":"null"}]}},"description":"Explicit on-demand request result. History may retain closed cycles while work is pending. Pending responses follow a durable queue ACK. The backend does not call Codex, submit worker evidence, or create position outcomes."},"PositionShareSnapshot":{"description":"Frozen share-time figures. Clients opt into v2 with X-Arbital-Position-Snapshot-Version: 2 (HTTP) or position_snapshot_version=2 (WebSocket). Default clients receive a v1 projection. Stored v1 remains v1 for all clients.","oneOf":[{"$ref":"#/components/schemas/PositionShareSnapshotV1"},{"$ref":"#/components/schemas/PositionShareSnapshotV2"}]},"ChatMessageAttachment":{"oneOf":[{"additionalProperties":false,"properties":{"attachment_id":{"format":"uuid","type":"string"},"kind":{"const":"position","type":"string"},"schema_version":{"const":1,"type":"integer"},"snapshot":{"$ref":"#/components/schemas/PositionShareSnapshotV1"}},"required":["attachment_id","kind","schema_version","snapshot"],"type":"object"},{"additionalProperties":false,"properties":{"attachment_id":{"format":"uuid","type":"string"},"kind":{"const":"position","type":"string"},"schema_version":{"const":2,"type":"integer"},"snapshot":{"$ref":"#/components/schemas/PositionShareSnapshotV2"}},"required":["attachment_id","kind","schema_version","snapshot"],"type":"object"}]},"ChatPositionAttachmentInput":{"additionalProperties":false,"description":"Names the sender's own position to share. The backend reads the sender's portfolio for this asset at send time, builds the card from what it reads, stores it with the message and never rewrites it. The client supplies no figures. Outcomes: 404 position_not_found when the sender holds no shareable position for the asset, 409 position_not_shareable when the observation is stale or incomplete (retry shortly), 503 portfolio_unavailable when the portfolio provider is unavailable.","properties":{"kind":{"const":"position","type":"string"},"asset":{"additionalProperties":false,"properties":{"chain_id":{"pattern":"^(solana:mainnet-beta|eip155:[1-9][0-9]*)$","type":"string"},"address":{"maxLength":64,"type":"string"}},"required":["chain_id","address"],"type":"object"}},"required":["kind","asset"],"type":"object"},"SetChatDeliveredRequest":{"additionalProperties":false,"properties":{"last_delivered_sequence":{"maxLength":19,"minLength":1,"pattern":"^(0|[1-9][0-9]*)$","type":"string"}},"required":["last_delivered_sequence"],"type":"object"},"ChatMessageReactionSummary":{"additionalProperties":false,"properties":{"emoji":{"maxLength":16,"minLength":1,"type":"string","description":"One emoji grapheme in canonical form (NFC, variation selectors removed)."},"count":{"minimum":1,"type":"integer"}},"required":["emoji","count"],"type":"object","description":"Aggregate count for one emoji. The caller's own selection is viewer_reactions on the parent, an HTTP-only field."},"ChatMessageReceiptSummary":{"additionalProperties":false,"description":"Totals over the members who were in the chat when the message was sent, excluding the author. Late joiners are never counted.","properties":{"eligible":{"minimum":0,"type":"integer"},"delivered":{"minimum":0,"type":"integer"},"read":{"minimum":0,"type":"integer"}},"required":["eligible","delivered","read"],"type":"object"},"ChatReactionState":{"additionalProperties":false,"description":"Canonical reaction state after a mutation. Compare revision (the message version) to drop frames or responses that arrive out of order.","properties":{"chat_id":{"format":"uuid","type":"string"},"message_id":{"format":"uuid","type":"string"},"reactions":{"items":{"$ref":"#/components/schemas/ChatMessageReactionSummary"},"type":"array"},"revision":{"pattern":"^[1-9][0-9]*$","type":"string"},"viewer_reactions":{"items":{"maxLength":16,"minLength":1,"type":"string"},"type":"array"}},"required":["chat_id","message_id","reactions","revision","viewer_reactions"],"type":"object"},"ChatReactionActor":{"additionalProperties":false,"properties":{"emoji":{"maxLength":16,"minLength":1,"type":"string"},"reacted_at_unix_ms":{"minimum":0,"type":"integer"},"user":{"$ref":"#/components/schemas/MessagingUserSummary"}},"required":["emoji","reacted_at_unix_ms","user"],"type":"object"},"ChatReactionActorPage":{"additionalProperties":false,"properties":{"reactors":{"items":{"$ref":"#/components/schemas/ChatReactionActor"},"maxItems":100,"type":"array"},"next_cursor":{"type":["string","null"]}},"required":["reactors","next_cursor"],"type":"object"},"ChatMessageReceipt":{"additionalProperties":false,"properties":{"user":{"$ref":"#/components/schemas/MessagingUserSummary"},"membership":{"enum":["active","left","removed"],"type":"string","description":"Current membership; former members keep the receipts they earned."},"delivered":{"type":"boolean"},"read":{"type":"boolean"},"last_read_sequence":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":19,"description":"Recipient's cumulative read position in this conversation, including later messages by any author. Compare as an exact integer against the requested message sequence. Zero means no read position. Omitted together with last_delivered_sequence by older deployments; absence is unknown, not zero."},"last_delivered_sequence":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","maxLength":19,"description":"Recipient's cumulative delivered position in this conversation, never below last_read_sequence. Omitted together with last_read_sequence by older deployments."}},"required":["user","membership","delivered","read"],"type":"object"},"ChatMessageReceiptPage":{"additionalProperties":false,"properties":{"recipients":{"items":{"$ref":"#/components/schemas/ChatMessageReceipt"},"maxItems":100,"type":"array"},"summary":{"$ref":"#/components/schemas/ChatMessageReceiptSummary"},"next_cursor":{"type":["string","null"]}},"required":["recipients","summary","next_cursor"],"type":"object"},"NativeMentionInput":{"type":"object","additionalProperties":false,"required":["kind","user_id","offset","length"],"properties":{"kind":{"type":"string","const":"early_user"},"user_id":{"type":"string","format":"uuid"},"offset":{"type":"integer","minimum":0,"description":"Zero-based Unicode code-point offset, not UTF-16 units or graphemes."},"length":{"type":"integer","minimum":4,"maximum":31}}},"NativeMentionProfile":{"type":"object","additionalProperties":false,"required":["user_id","username","display_name","profile_image_url"],"properties":{"user_id":{"type":"string","format":"uuid"},"username":{"type":"string"},"display_name":{"type":["string","null"]},"profile_image_url":{"type":["string","null"]}}},"NativeMentionTarget":{"type":"object","additionalProperties":false,"required":["kind","user_id"],"properties":{"kind":{"type":"string","const":"early_user"},"user_id":{"type":"string","format":"uuid"}}},"NativeReadMention":{"type":"object","additionalProperties":false,"required":["kind","user_id","offset","length","text","availability","current_profile","profile_target","notification_supported"],"properties":{"kind":{"type":"string","const":"early_user"},"user_id":{"type":"string","format":"uuid"},"offset":{"type":"integer","minimum":0,"description":"Zero-based Unicode code-point offset, not UTF-16 units or graphemes."},"length":{"type":"integer","minimum":4,"maximum":31},"text":{"type":"string","description":"Immutable exact authored span, including @."},"availability":{"enum":["available","unavailable"],"type":"string"},"current_profile":{"oneOf":[{"$ref":"#/components/schemas/NativeMentionProfile"},{"type":"null"}]},"profile_target":{"oneOf":[{"$ref":"#/components/schemas/NativeMentionTarget"},{"type":"null"}]},"notification_supported":{"type":"boolean","const":true}}},"NativeMentionSearchResult":{"type":"object","additionalProperties":false,"required":["user_id","username","display_name","profile_image_url","mention_target","profile_target","mention_eligible","notification_supported"],"properties":{"user_id":{"type":"string","format":"uuid"},"username":{"type":"string"},"display_name":{"type":["string","null"]},"profile_image_url":{"type":["string","null"]},"mention_target":{"$ref":"#/components/schemas/NativeMentionTarget"},"profile_target":{"$ref":"#/components/schemas/NativeMentionTarget"},"mention_eligible":{"type":"boolean","const":true},"notification_supported":{"type":"boolean","const":true}}},"NativeMentionSearchPage":{"type":"object","additionalProperties":false,"required":["users","next_cursor"],"properties":{"users":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NativeMentionSearchResult"}},"next_cursor":{"type":["string","null"],"maxLength":512}}},"SocialXDisplay":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"string","const":"x-display-v1"},"status":{"type":"string","enum":["cleaned","unchanged","fallback"]},"empty":{"type":"boolean"},"removed_mentions":{"type":"integer","minimum":0}},"required":["version","status","empty","removed_mentions"]},"SocialCombinedSourceStatus":{"type":"object","additionalProperties":false,"properties":{"stream_id":{"type":"string","enum":["application","fomo_posts","pump_posts","x_posts"]},"state":{"type":"string","enum":["healthy","pending","delayed","paused","partial","unavailable","unsupported","unknown"]},"reason":{"type":["string","null"]},"coverage":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","enum":["complete_for_scope","limited","not_monitored","unknown"]},"scope":{"type":"string"},"description_code":{"type":["string","null"]}},"required":["state","scope","description_code"]},"last_collection_success_at_ms":{"type":["string","null"],"description":"Last confirmed provider collection success, independently of content or generation updates. Null when collection evidence is unavailable or not applicable."},"last_successful_update_at_ms":{"type":["string","null"],"description":"Last successful imported content write, or application capture whose content, membership or interaction fingerprints changed. Quiet snapshot rebuilds and reads do not advance this clock. Null means no successful update is known."},"last_attempt_at_ms":{"type":["string","null"]},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"data_as_of_ms":{"type":["string","null"]},"cache":{"type":"object","additionalProperties":false,"properties":{"usable":{"type":"boolean"},"age_ms":{"type":["string","null"]}},"required":["usable","age_ms"]},"retry_after_ms":{"type":["integer","null"],"minimum":0}},"required":["stream_id","state","reason","coverage","last_collection_success_at_ms","last_successful_update_at_ms","last_attempt_at_ms","observed_at_ms","data_as_of_ms","cache","retry_after_ms"]},"SocialRankingSignal":{"type":"object","additionalProperties":false,"properties":{"value":{"type":["string","null"]},"unit":{"type":"string","enum":["usd","count","percentile","score_0_1","hours"]},"source":{"oneOf":[{"type":"null"},{"type":"object","additionalProperties":false,"properties":{"owner":{"type":"string","enum":["backend","indexer"]},"provider":{"type":"string"},"metric":{"type":"string"}},"required":["owner","provider","metric"]}]},"scope":{"type":"string"},"window_start_ms":{"type":["string","null"]},"window_end_ms":{"type":["string","null"]},"observed_at_ms":{"type":["string","null"]},"availability":{"type":"string","enum":["available","unavailable","unsupported"]},"reason":{"type":["string","null"]}},"required":["value","unit","source","scope","window_start_ms","window_end_ms","observed_at_ms","availability","reason"],"description":"Value and provenance at capture time. Unavailable evidence is null, never a fabricated zero. Scope identifies the measured population; provider_callout market cap is a historical observation, and observed_public_asset_holders covers only collected public holders."},"SocialRankingContext":{"type":"object","additionalProperties":false,"properties":{"policy_version":{"type":"string"},"score_micros":{"type":["integer","null"],"minimum":0,"maximum":1000000},"diversity_round":{"type":"integer","minimum":0},"inputs":{"type":"object","additionalProperties":false,"properties":{"trader_standing":{"$ref":"#/components/schemas/SocialRankingSignal"},"native_discussion_replies":{"$ref":"#/components/schemas/SocialRankingSignal"},"native_distinct_participants":{"$ref":"#/components/schemas/SocialRankingSignal"},"external_discussion_replies":{"$ref":"#/components/schemas/SocialRankingSignal"},"native_reactions":{"$ref":"#/components/schemas/SocialRankingSignal"},"external_reactions":{"$ref":"#/components/schemas/SocialRankingSignal"},"freshness":{"$ref":"#/components/schemas/SocialRankingSignal"},"relevance":{"$ref":"#/components/schemas/SocialRankingSignal"},"substance":{"$ref":"#/components/schemas/SocialRankingSignal"}},"required":["trader_standing","native_discussion_replies","native_distinct_participants","external_discussion_replies","native_reactions","external_reactions","freshness","relevance","substance"]},"contexts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"identity":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"kind":{"const":"asset","type":"string"},"chain_id":{"type":"string"},"address":{"type":"string"}},"required":["kind","chain_id","address"]},{"type":"object","additionalProperties":false,"properties":{"kind":{"const":"company","type":"string"},"company_id":{"type":"string"}},"required":["kind","company_id"]}]},"holder_standing":{"$ref":"#/components/schemas/SocialRankingSignal"},"volume_24h_usd":{"$ref":"#/components/schemas/SocialRankingSignal"},"market_cap_usd":{"$ref":"#/components/schemas/SocialRankingSignal"}},"required":["identity","holder_standing","volume_24h_usd","market_cap_usd"]},"maxItems":16},"context_total":{"type":"integer","minimum":0},"contexts_truncated":{"type":"boolean"},"used":{"type":"object","additionalProperties":false,"properties":{"standing":{"type":["string","null"],"enum":["trader","holder",null]},"asset_context_index":{"type":["integer","null"],"minimum":0},"discussion":{"type":["string","null"],"enum":["native","external",null]},"reactions":{"type":["string","null"],"enum":["native","external",null]}},"required":["standing","asset_context_index","discussion","reactions"]}},"required":["policy_version","score_micros","diversity_round","inputs","contexts","context_total","contexts_truncated","used"],"description":"Immutable ranking evidence for the captured period. Top policy combined-top-v1 uses 20% standing, 10% volume, 5% market cap, 20% discussion, 10% reactions, 15% freshness, 10% relevance and 10% substance. Unavailable inputs contribute zero without redistributing weight and remain explicitly null in the response. Signal scope distinguishes native replies, collected other-author asset theses and provider post reply counts. These are social display facts, never financial authority."},"SocialRankedPost":{"additionalProperties":false,"properties":{"author":{"$ref":"#/components/schemas/SocialPostAuthor"},"body":{"maxLength":2000,"type":"string"},"created_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"id":{"format":"uuid","type":"string"},"like_count":{"minimum":0,"type":"integer"},"media":{"$ref":"#/components/schemas/SocialMediaGallery"},"pinned":{"type":"boolean"},"viewer_liked":{"type":"boolean"},"x_post_url":{"type":["string","null"]},"x_publish_state":{"type":"string"},"attachments":{"type":"array","maxItems":4,"items":{"$ref":"#/components/schemas/SocialPostAttachment"},"description":"Immutable ordered references and snapshots with viewer-scoped source availability. Historical values are distinct from live portfolio values."},"ranking_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialRankingContext"}]}},"required":["id","author","body","created_at_ms","media","like_count","viewer_liked","pinned","x_publish_state","x_post_url","attachments","ranking_context"],"type":"object"},"SocialCombinedPostItem":{"type":"object","additionalProperties":false,"properties":{"record_id":{"type":"string"},"source":{"type":"string","enum":["native","fomo","pump","x"]},"posted_at_ms":{"type":"string","pattern":"^[0-9]+$"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"content_revision":{"type":"string","pattern":"^[0-9]+$"},"read":{"type":["boolean","null"]},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"ranking_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialRankingContext"}]},"kind":{"type":"string","const":"post"},"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"content":{"$ref":"#/components/schemas/SocialPost"},"reaction_summary":{"$ref":"#/components/schemas/SocialReactionSummaryV2","description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read. Preserve contract, aggregate_revision and edge_versions when seeding the reaction cache."},"reply_preview":{"$ref":"#/components/schemas/SocialPostReplyPreview","description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Omitted means not requested."}},"required":["record_id","source","posted_at_ms","observed_at_ms","content_revision","read","permissions","ranking_context","kind","actor","content"]},"SocialCombinedCommentItem":{"type":"object","additionalProperties":false,"properties":{"record_id":{"type":"string"},"source":{"type":"string","enum":["native","fomo","pump","x"]},"posted_at_ms":{"type":"string","pattern":"^[0-9]+$"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"content_revision":{"type":"string","pattern":"^[0-9]+$"},"read":{"type":["boolean","null"]},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"ranking_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialRankingContext"}]},"kind":{"type":"string","const":"comment"},"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"content":{"type":"object","additionalProperties":false,"properties":{"asset":{"type":"object","additionalProperties":false,"properties":{"chain_id":{"type":"string"},"address":{"type":"string"}},"required":["chain_id","address"]},"comment":{"$ref":"#/components/schemas/SocialAssetComment"}},"required":["asset","comment"]},"reaction_summary":{"$ref":"#/components/schemas/SocialReactionSummaryV2","description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read. Preserve contract, aggregate_revision and edge_versions when seeding the reaction cache."},"reply_preview":{"$ref":"#/components/schemas/SocialAssetCommentReplyPreview","description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Omitted means not requested."}},"required":["record_id","source","posted_at_ms","observed_at_ms","content_revision","read","permissions","ranking_context","kind","actor","content"]},"SocialCombinedTradeItem":{"type":"object","additionalProperties":false,"properties":{"record_id":{"type":"string"},"source":{"type":"string","enum":["native","fomo","pump","x"]},"posted_at_ms":{"type":"string","pattern":"^[0-9]+$"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"content_revision":{"type":"string","pattern":"^[0-9]+$"},"read":{"type":["boolean","null"]},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"ranking_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialRankingContext"}]},"kind":{"type":"string","const":"trade"},"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"content":{"$ref":"#/components/schemas/SocialFeedTrade"},"reaction_summary":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"type":"null"}],"description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read. Null means reactions are unsupported for a native CALLD trade; imported trades return a summary."},"reply_preview":{"oneOf":[{"$ref":"#/components/schemas/SocialTradeReplyPreview"},{"type":"null"}],"description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Null means unsupported: native CALLD trades or imported theses without an asset. Omitted means not requested."}},"required":["record_id","source","posted_at_ms","observed_at_ms","content_revision","read","permissions","ranking_context","kind","actor","content"]},"SocialCombinedThesisItem":{"type":"object","additionalProperties":false,"properties":{"record_id":{"type":"string"},"source":{"type":"string","enum":["native","fomo","pump","x"]},"posted_at_ms":{"type":"string","pattern":"^[0-9]+$"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"content_revision":{"type":"string","pattern":"^[0-9]+$"},"read":{"type":["boolean","null"]},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"ranking_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialRankingContext"}]},"kind":{"type":"string","const":"thesis"},"actor":{"$ref":"#/components/schemas/SocialFeedActor"},"content":{"$ref":"#/components/schemas/SocialActivityEventRevision"},"reaction_summary":{"$ref":"#/components/schemas/SocialReactionSummary","description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read."},"reply_preview":{"oneOf":[{"$ref":"#/components/schemas/SocialAssetCommentReplyPreview"},{"type":"null"}],"description":"Present only with include_reply_preview=true. First two discussion rows and current nondeleted direct reply count, outside content_revision and combined activity hints. Null means unsupported: native CALLD trades or imported theses without an asset. Omitted means not requested."},"position_entry":{"oneOf":[{"$ref":"#/components/schemas/SocialFeedPositionEntry"},{"type":"null"}],"description":"Present only with include_position_entry=true. Null for theses without a Solana asset. Outside content_revision and combined activity hints."}},"required":["record_id","source","posted_at_ms","observed_at_ms","content_revision","read","permissions","ranking_context","kind","actor","content"]},"SocialFeedPositionEntry":{"type":"object","additionalProperties":false,"description":"Prepared position behind a Solana thesis, read from the indexer; never computed on the request. opened_at_ms is the opening time of the cycle that includes the thesis (the chart's entry), null while the position is still preparing, stale with an open cycle, or absent.","required":["request_status","opened_at_ms","lifecycle_state","observed_at_ms","freshness"],"properties":{"request_status":{"$ref":"#/components/schemas/ExternalSocialPositionRequestStatus"},"opened_at_ms":{"type":["integer","null"],"minimum":1},"lifecycle_state":{"type":"string","enum":["open","closed","unknown"]},"observed_at_ms":{"type":["integer","null"],"minimum":1},"freshness":{"type":"string","enum":["fresh","stale"]}}},"SocialCombinedXPostItem":{"type":"object","additionalProperties":false,"properties":{"record_id":{"type":"string"},"source":{"type":"string","enum":["native","fomo","pump","x"]},"posted_at_ms":{"type":"string","pattern":"^[0-9]+$"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"},"content_revision":{"type":"string","pattern":"^[0-9]+$"},"read":{"type":["boolean","null"]},"permissions":{"$ref":"#/components/schemas/SocialFeedPermissions"},"ranking_context":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/SocialRankingContext"}]},"kind":{"type":"string","const":"x_post"},"actor":{"type":"object","additionalProperties":false,"required":["id","username","display_name","avatar_url","verified","followers","identity"],"properties":{"id":{"type":"string","description":"Stable X account id."},"username":{"type":"string"},"display_name":{"type":["string","null"]},"avatar_url":{"type":["string","null"]},"verified":{"type":"boolean"},"followers":{"type":["string","null"],"description":"Follower count as observed; null when unknown."},"identity":{"type":"string","const":"x"}}},"content":{"$ref":"#/components/schemas/SocialXFeedPost"},"reaction_summary":{"$ref":"#/components/schemas/SocialReactionSummary","description":"Current viewer-specific CALLD emoji reactions, separate from provider engagement and ranking signals. Present only with include_reactions=true; an empty reactions array means known zero. Live reaction changes do not advance content_revision or activity hints. permissions.react controls writes, not whether the summary can be read."},"reply_preview":{"type":"null","description":"Present as null with include_reply_preview=true because X reply previews are unsupported. Omitted means not requested."}},"required":["record_id","source","posted_at_ms","observed_at_ms","content_revision","read","permissions","ranking_context","kind","actor","content"]},"SocialCombinedFeedItem":{"oneOf":[{"$ref":"#/components/schemas/SocialCombinedPostItem"},{"$ref":"#/components/schemas/SocialCombinedCommentItem"},{"$ref":"#/components/schemas/SocialCombinedTradeItem"},{"$ref":"#/components/schemas/SocialCombinedThesisItem"},{"$ref":"#/components/schemas/SocialCombinedXPostItem"}],"discriminator":{"propertyName":"kind"}},"SocialCombinedFeedPage":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SocialCombinedFeedItem"}},"next_cursor":{"type":["string","null"],"description":"Opaque live seek cursor. Pass unchanged with the same filters and viewer. Rank changes can cause skipped or repeated items; refresh starts at the current head. Old cf1_ snapshot cursors return 410.","maxLength":8192},"ranking":{"type":"object","additionalProperties":false,"properties":{"sort":{"type":"string","enum":["latest","top","most_discussed"]},"version":{"type":"string"},"window_start_ms":{"type":"string","pattern":"^[0-9]+$"},"window_end_ms":{"type":"string","pattern":"^[0-9]+$"},"diversity":{"type":"string","enum":["none","per_stream_rounds_v1"]}},"required":["sort","version","window_start_ms","window_end_ms","diversity"]},"completeness":{"type":"string","enum":["complete","partial"],"description":"Whether this page used every required source head. Does not promise a complete immutable collection across multiple requests."},"omitted_streams":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"stream_id":{"type":"string"},"reason":{"type":"string"}},"required":["stream_id","reason"]}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SocialCombinedSourceStatus"}},"activity_checkpoint":{"type":["string","null"],"description":"First-page refresh baseline for an authenticated viewer; null on continuation pages or anonymous reads. Retain the last accepted first-page checkpoint until refresh.","maxLength":8192},"pagination":{"type":"object","additionalProperties":false,"description":"Live seek pagination. Membership, ranking and current visibility can change between requests; clients should deduplicate by record_id. This read time is not a frozen source or ranking anchor.","properties":{"mode":{"type":"string","const":"live"},"read_at_ms":{"type":"string","pattern":"^[0-9]+$"},"filter_hash":{"type":"string"},"scope":{"type":"string","enum":["discovery","friends","watching","native_posts"]}},"required":["mode","read_at_ms","filter_hash","scope"]}},"required":["items","next_cursor","pagination","ranking","completeness","omitted_streams","sources","activity_checkpoint"]},"SocialRankedPostPage":{"type":"object","additionalProperties":false,"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/SocialRankedPost"}},"next_cursor":{"type":["string","null"],"description":"Opaque live seek cursor. Pass unchanged with the same filters and viewer. Rank changes can cause skipped or repeated items; refresh starts at the current head. Old cf1_ snapshot cursors return 410.","maxLength":8192},"ranking":{"type":"object","additionalProperties":false,"properties":{"sort":{"type":"string","enum":["latest","top","most_discussed"]},"version":{"type":"string"},"window_start_ms":{"type":"string","pattern":"^[0-9]+$"},"window_end_ms":{"type":"string","pattern":"^[0-9]+$"},"diversity":{"type":"string","enum":["none","per_stream_rounds_v1"]}},"required":["sort","version","window_start_ms","window_end_ms","diversity"]},"completeness":{"type":"string","enum":["complete","partial"],"description":"Whether this page used every required source head. Does not promise a complete immutable collection across multiple requests."},"omitted_streams":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"stream_id":{"type":"string"},"reason":{"type":"string"}},"required":["stream_id","reason"]}},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SocialCombinedSourceStatus"}},"activity_checkpoint":{"type":["string","null"],"description":"First-page refresh baseline for an authenticated viewer; null on continuation pages or anonymous reads. Retain the last accepted first-page checkpoint until refresh.","maxLength":8192},"pagination":{"type":"object","additionalProperties":false,"description":"Live seek pagination. Membership, ranking and current visibility can change between requests; clients should deduplicate by post id. This read time is not a frozen source or ranking anchor.","properties":{"mode":{"type":"string","const":"live"},"read_at_ms":{"type":"string","pattern":"^[0-9]+$"},"filter_hash":{"type":"string"},"scope":{"type":"string","enum":["discovery","friends","watching","native_posts"]}},"required":["mode","read_at_ms","filter_hash","scope"]}},"required":["items","next_cursor","pagination","ranking","completeness","omitted_streams","sources","activity_checkpoint"]},"SocialFeedActivity":{"type":"object","additionalProperties":false,"properties":{"has_new_activity":{"type":"boolean","description":"Whether the current first visible page differs from the baseline. Changes outside that bounded page may not be detected until they reach the head."},"new_item_count":{"type":["integer","null"],"minimum":0},"new_checkpoint":{"type":"string","maxLength":8192},"refresh_action":{"type":"string","const":"request_first_page"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SocialCombinedSourceStatus"}}},"required":["has_new_activity","new_item_count","new_checkpoint","refresh_action","sources"]},"SocialFeedCapabilityProblem":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","const":"feed_capability_unsupported"},"message":{"type":"string"},"missing_capabilities":{"type":"array","items":{"type":"string"}}},"required":["code","message","missing_capabilities"]},"NotificationReadViewV2":{"type":"object","additionalProperties":false,"properties":{"unread_count":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"inbox_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"read_watermark":{"type":"string","format":"uuid"},"read_watermark_expires_at_unix_ms":{"type":"integer","minimum":0}},"required":["unread_count","inbox_revision","read_watermark","read_watermark_expires_at_unix_ms"]},"NotificationTargetLocatorV2":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"post"},"post_id":{"type":"string","format":"uuid"}},"required":["type","post_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"post_reply"},"post_id":{"type":"string","format":"uuid"},"reply_id":{"type":"string","format":"uuid"},"parent_reply_id":{"type":["string","null"],"format":"uuid"}},"required":["type","post_id","reply_id","parent_reply_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"chat_message"},"chat_id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"sequence":{"type":"string","pattern":"^[1-9][0-9]*$"}},"required":["type","chat_id","message_id","sequence"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"chat_invite"},"chat_id":{"type":"string","format":"uuid"},"invite_id":{"type":"string","format":"uuid"}},"required":["type","chat_id","invite_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"token_comment"},"chain_id":{"type":"string"},"address":{"type":"string"},"comment_id":{"type":"string","format":"uuid"}},"required":["type","chain_id","address","comment_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"token_comment_reply"},"chain_id":{"type":"string"},"address":{"type":"string"},"comment_id":{"type":"string","format":"uuid"},"parent_comment_id":{"type":"string","format":"uuid"},"root_comment_id":{"type":"string","format":"uuid"}},"required":["type","chain_id","address","comment_id","parent_comment_id","root_comment_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"financial_transaction"},"source_kind":{"type":"string","enum":["withdrawal","user_transfer","confirmed_transfer"],"description":"confirmed_transfer identifies retained verified receipt evidence. The withdrawal locator is reserved for compatibility; historical withdrawal-ID notifications without matching exact receipt evidence are omitted from lists/counts and resolve source_unavailable. Unsupported source kinds resolve unavailable."},"source_id":{"type":"string","format":"uuid"}},"required":["type","source_kind","source_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"trade"},"trade_id":{"type":"string","format":"uuid"}},"required":["type","trade_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"native_profile"},"user_id":{"type":"string","format":"uuid"}},"required":["type","user_id"]},{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"imported_post"},"post_id":{"type":"string","format":"uuid"}},"required":["type","post_id"]}]},"NotificationActivityV2":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"kind":{"enum":["deposit_transfer_completed","direct_message_received","group_invite_received","group_message_received","withdrawal_completed","followed_trader_bought","followed_trader_sold","comment_reply_received","post_reply_received","post_reaction_received","comment_reaction_received","message_reaction_received","group_invite_accepted","post_activity_received","comment_activity_received","new_watcher_received","withdrawal_failed","trader_post_received"],"type":"string","description":"Contract 2 supports these 18 kinds. The strict legacy item and legacy installation payload retain their original 11 kinds; unsupported new-only kinds are omitted while cursors advance."},"title":{"type":"string"},"body":{"type":"string"},"reasons":{"type":"array","items":{"type":"string","enum":["direct_reply","mention","selected_post"]},"description":"Currently authorized native creation reasons. Reply, mention and selected-author publication reasons can share one notification and initial alert."},"created_at_unix_ms":{"type":"integer","minimum":0},"presentation_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Current row presentation revision including any applicable global read-state revision. A change need not represent a per-row write or new positive activity."},"activity_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"read_activity_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Greatest acknowledged activity revision for this row, combining individual evidence and the global mark-all cutoff. Individual acknowledgements can leave hidden holes; this maximum alone is not an unread-state oracle."},"read_state":{"type":"string","enum":["read","unread"],"description":"Unread when a currently authorized, unsuppressed activity has neither an individual acknowledgement nor coverage by the global mark-all cutoff."},"target":{"oneOf":[{"$ref":"#/components/schemas/NotificationTargetLocatorV2"},{"type":"null"}]}},"required":["id","kind","title","body","reasons","created_at_unix_ms","presentation_revision","activity_revision","read_activity_revision","read_state","target"]},"NotificationPageV2":{"type":"object","additionalProperties":false,"properties":{"unread_count":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"inbox_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"read_watermark":{"type":"string","format":"uuid"},"read_watermark_expires_at_unix_ms":{"type":"integer","minimum":0},"contract":{"type":"integer","const":2},"notifications":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/NotificationActivityV2"}},"next_cursor":{"type":["string","null"],"maxLength":512},"page_snapshot_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"has_newer_activity":{"type":"boolean"}},"required":["unread_count","inbox_revision","read_watermark","read_watermark_expires_at_unix_ms","contract","notifications","next_cursor","page_snapshot_revision","has_newer_activity"]},"NotificationSingleReadV2":{"type":"object","additionalProperties":false,"properties":{"unread_count":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"inbox_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"read_watermark":{"type":"string","format":"uuid"},"read_watermark_expires_at_unix_ms":{"type":"integer","minimum":0},"read_state":{"type":"string","enum":["read","unread"]}},"required":["unread_count","inbox_revision","read_watermark","read_watermark_expires_at_unix_ms","read_state"]},"NotificationReadAllV2":{"type":"object","additionalProperties":false,"properties":{"unread_count":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"inbox_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"read_watermark":{"type":"string","format":"uuid"},"read_watermark_expires_at_unix_ms":{"type":"integer","minimum":0},"acknowledged_through_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"The committed recipient boundary resolved from the supplied owned checkpoint. All owned activity at or below it is acknowledged, including hidden activity; a previously higher cutoff is never lowered."},"updated_activity_count":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Count of currently authorized, unsuppressed admissions newly acknowledged by this call. Excludes hidden admissions and is not a count of physical database row updates. May be zero while a higher cutoff advances inbox_revision."}},"required":["unread_count","inbox_revision","read_watermark","read_watermark_expires_at_unix_ms","acknowledged_through_revision","updated_activity_count"]},"NotificationPreferencesPatchV2":{"type":"object","additionalProperties":false,"properties":{"expected_version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"push_enabled":{"type":"boolean"},"categories":{"type":"object","additionalProperties":false,"properties":{"direct_messages":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"group_messages":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"group_invitations":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"direct_replies":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"mentions":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"message_reactions":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"content_reactions":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"watched_trades":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"financial_outcomes":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"invitation_acceptance":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"new_watchers":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"selected_posts":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]}},"required":[],"description":"Push-only category controls; all default true. Required inbox history/read state remain independent. Optional source opt-ins are configured separately under subscriptions."},"previews":{"type":"object","additionalProperties":false,"properties":{"message":{"type":"string","enum":["show","hide"]},"financial":{"type":"string","enum":["show","hide"]}},"required":[]},"subscriptions":{"type":"object","additionalProperties":false,"properties":{"invitation_acceptance":{"type":"boolean","default":false},"new_watchers":{"type":"boolean","default":false},"selected_posts":{"type":"boolean","default":false}},"required":[],"description":"Independent optional source opt-ins, all false by default. Enable before the original event; re-enabling starts a fresh episode and does not backfill delayed or historical events. Opt-out cancels the optional reason and its queued push, preserving authorized history and independent reasons. selected_posts applies to separately typed native and imported trader selections."}},"required":["expected_version"]},"NotificationPreferencesV2":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"push_enabled":{"type":"boolean"},"categories":{"type":"object","additionalProperties":false,"properties":{"direct_messages":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"group_messages":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"group_invitations":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"direct_replies":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"mentions":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"message_reactions":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"content_reactions":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"watched_trades":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"financial_outcomes":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"invitation_acceptance":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"new_watchers":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]},"selected_posts":{"type":"object","additionalProperties":false,"properties":{"push_enabled":{"type":"boolean"}},"required":["push_enabled"]}},"required":["direct_messages","group_messages","group_invitations","direct_replies","mentions","message_reactions","content_reactions","watched_trades","financial_outcomes","invitation_acceptance","new_watchers","selected_posts"],"description":"Push-only category controls; all default true. Required inbox history/read state remain independent. Optional source opt-ins are configured separately under subscriptions."},"previews":{"type":"object","additionalProperties":false,"properties":{"message":{"type":"string","enum":["show","hide"]},"financial":{"type":"string","enum":["show","hide"]}},"required":["message","financial"]},"subscriptions":{"type":"object","additionalProperties":false,"properties":{"invitation_acceptance":{"type":"boolean","default":false},"new_watchers":{"type":"boolean","default":false},"selected_posts":{"type":"boolean","default":false}},"required":["invitation_acceptance","new_watchers","selected_posts"],"description":"Independent optional source opt-ins, all false by default. Enable before the original event; re-enabling starts a fresh episode and does not backfill delayed or historical events. Opt-out cancels the optional reason and its queued push, preserving authorized history and independent reasons. selected_posts applies to separately typed native and imported trader selections."},"supported_categories":{"type":"array","items":{"type":"string","enum":["direct_messages","group_messages","group_invitations","direct_replies","mentions","message_reactions","content_reactions","watched_trades","financial_outcomes","invitation_acceptance","new_watchers","selected_posts"]}},"supported_subscriptions":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["invitation_acceptance","new_watchers","selected_posts"]},"description":"Implemented opt-in source controls; activation and current source policy still apply."},"capabilities":{"type":"object","additionalProperties":false,"properties":{"mentions":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"supported"}},"required":["state"]},"message_reactions":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"supported"},"command_contract":{"type":"integer","const":2}},"required":["state","command_contract"]},"membership_generations":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"supported"}},"required":["state"]},"deposit_completion":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"limited"},"scope":{"type":"string","const":"finalized_direct_solana_usdc"}},"required":["state","scope"]},"terminal_failure":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"limited"},"scope":{"type":"string","const":"finalized_single_transaction_solana_withdrawal"}},"required":["state","scope"]},"verified_withdrawal_completion":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"limited"},"scope":{"type":"string","const":"finalized_direct_solana_usdc"}},"required":["state","scope"]},"imported_trade_target":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"supported"},"requires":{"type":"string","const":"current_social_query"}},"required":["state","requires"]},"optional_subscriptions":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"opt_in"},"selected_posts_scope":{"type":"string","const":"native_and_imported_authors"}},"required":["state","selected_posts_scope"]}},"required":["mentions","message_reactions","membership_generations","deposit_completion","terminal_failure","verified_withdrawal_completion","imported_trade_target","optional_subscriptions"],"description":"Implemented source contract scope, not a deployment or activation attestation. Financial proof admits only a single direct finalized Solana mainnet USDC transfer in legacy or static-account version-0 transaction format between existing token accounts. Loaded-address version-0 transactions, associated-account creation/closure, CPI, additional token transfers, compound action steps, deposit failures, bridges and cross-chain outcomes remain unavailable. Successful fixtures are synthetic; compatibility with actual Privy output is unproven, and its transfer API gives no Solana message-version guarantee. Imported publication alerts use owner-proved original identity, current author/removal/visibility and prospective follow/subscription episodes. Current owner proofs use bounded batches under one deadline; capacity or dependency failure returns 503 without partial counts. Large imported-history admission remains open. Version-0 proof requires explicitly empty address lookup descriptors and loaded address arrays; all accounts must be static."}},"required":["version","push_enabled","categories","previews","subscriptions","supported_categories","supported_subscriptions","capabilities"]},"ChatNotificationPreferencesPutV2":{"type":"object","additionalProperties":false,"properties":{"expected_version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"muted":{"type":"boolean"},"mute_until_unix_ms":{"type":["integer","null"],"minimum":0},"group_level":{"type":"string","enum":["all","relevant","none"]}},"required":["expected_version","muted","mute_until_unix_ms"]},"ChatNotificationPreferencesV2":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"muted":{"type":"boolean"},"mute_until_unix_ms":{"type":["integer","null"],"minimum":0},"group_level":{"type":["string","null"],"enum":["all","relevant","none",null]},"supported_levels":{"type":"array","items":{"type":"string","enum":["all","relevant","none"]}},"effective_push":{"type":"boolean"},"suppression_reasons":{"type":"array","items":{"type":"string","enum":["chat_muted","group_level","global_push","category_push"]}}},"required":["version","muted","mute_until_unix_ms","group_level","supported_levels","effective_push","suppression_reasons"]},"NotificationTargetResponseV2":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"post"},"post_id":{"type":"string","format":"uuid"}},"required":["type","post_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"post":{"$ref":"#/components/schemas/SocialPost"}},"required":["post"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"imported_post"},"post_id":{"type":"string","format":"uuid"}},"required":["type","post_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"post":{"$ref":"#/components/schemas/NotificationImportedPostRevisionV2"}},"required":["post"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"post_reply"},"post_id":{"type":"string","format":"uuid"},"reply_id":{"type":"string","format":"uuid"},"parent_reply_id":{"type":["string","null"],"format":"uuid"}},"required":["type","post_id","reply_id","parent_reply_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"reply":{"$ref":"#/components/schemas/SocialPostReply"}},"required":["reply"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"token_comment"},"chain_id":{"type":"string"},"address":{"type":"string"},"comment_id":{"type":"string","format":"uuid"}},"required":["type","chain_id","address","comment_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"comment":{"$ref":"#/components/schemas/SocialAssetComment"}},"required":["comment"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"token_comment_reply"},"chain_id":{"type":"string"},"address":{"type":"string"},"comment_id":{"type":"string","format":"uuid"},"parent_comment_id":{"type":"string","format":"uuid"},"root_comment_id":{"type":"string","format":"uuid"}},"required":["type","chain_id","address","comment_id","parent_comment_id","root_comment_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"comment":{"$ref":"#/components/schemas/SocialAssetComment"}},"required":["comment"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"chat_message"},"chat_id":{"type":"string","format":"uuid"},"message_id":{"type":"string","format":"uuid"},"sequence":{"type":"string","pattern":"^[1-9][0-9]*$"}},"required":["type","chat_id","message_id","sequence"]},"context":{"type":"object","additionalProperties":false,"properties":{"message":{"$ref":"#/components/schemas/ChatMessage"}},"required":["message"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"chat_invite"},"chat_id":{"type":"string","format":"uuid"},"invite_id":{"type":"string","format":"uuid"}},"required":["type","chat_id","invite_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"invitation":{"$ref":"#/components/schemas/ChatInviteWithActions"}},"required":["invitation"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"trade"},"trade_id":{"type":"string","format":"uuid"}},"required":["type","trade_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"trade":{"$ref":"#/components/schemas/NotificationTradeRevisionV2"}},"required":["trade"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"native_profile"},"user_id":{"type":"string","format":"uuid"}},"required":["type","user_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"profile":{"$ref":"#/components/schemas/PublicProfile"}},"required":["profile"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"available"},"target":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","const":"financial_transaction"},"source_kind":{"type":"string","const":"confirmed_transfer"},"source_id":{"type":"string","format":"uuid"}},"required":["type","source_kind","source_id"]},"context":{"type":"object","additionalProperties":false,"properties":{"source":{"$ref":"#/components/schemas/ConfirmedTransferNotificationEvidenceV2"}},"required":["source"]}},"required":["state","target","context"]},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"unavailable"},"reason":{"type":"string","const":"source_unavailable"},"target":{"type":"null"},"context":{"type":"null"}},"required":["state","reason","target","context"]}],"description":"Exact source-owned context after current authorization. Missing/deleted/revoked sources return unavailable; an unreadable dependency returns 503 rather than partial data. Another inbox owner receives 404. Reading a target does not acknowledge messages, mutate the source, poll a financial provider or create notifications. Historical withdrawal-ID notifications without matching retained financial receipt evidence are omitted from activity lists/counts and resolve source_unavailable; the reserved withdrawal locator does not authorize an available completion context."},"SocialReactionSummaryV2":{"additionalProperties":false,"description":"CALLD reactions on one target, most used first. External-platform likes or counts are never merged in; source says so explicitly.","properties":{"reactions":{"items":{"$ref":"#/components/schemas/SocialReactionCount"},"type":"array"},"source":{"const":"calld","type":"string"},"target":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"kind":{"enum":["post","asset_comment","thesis","trade","x_post"],"type":"string"}},"required":["id","kind"],"type":"object"},"contract":{"type":"integer","const":2},"aggregate_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"edge_versions":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"emoji":{"type":"string"},"revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19},"present":{"type":"boolean"}},"required":["emoji","revision","present"]}},"transition_id":{"type":["string","null"],"format":"uuid"}},"required":["reactions","source","target","contract","aggregate_revision","edge_versions"],"type":"object"},"ChatInviteWithActions":{"additionalProperties":false,"properties":{"chat_id":{"format":"uuid","type":"string"},"created_at_unix_ms":{"minimum":0,"type":"integer"},"expires_at_unix_ms":{"minimum":0,"type":"integer"},"invite_id":{"format":"uuid","type":"string"},"client_invite_id":{"format":"uuid","type":"string"},"invited_by_user_id":{"format":"uuid","type":"string"},"invited_by":{"$ref":"#/components/schemas/MessagingUserSummary"},"invited_user_id":{"format":"uuid","type":"string"},"invited_user":{"$ref":"#/components/schemas/MessagingUserSummary"},"proposed_role":{"enum":["admin","member"],"type":"string"},"responded_at_unix_ms":{"type":["integer","null"]},"state":{"enum":["pending","accepted","declined","revoked","expired"],"type":"string"},"can_accept":{"type":"boolean"},"can_decline":{"type":"boolean"}},"required":["invite_id","client_invite_id","chat_id","invited_user_id","invited_by_user_id","proposed_role","state","created_at_unix_ms","expires_at_unix_ms","responded_at_unix_ms","invited_by","invited_user","can_accept","can_decline"],"type":"object","description":"Current exact invitation and action capabilities. Terminal or expired invitations cannot be accepted or declined; visibility remains limited to the entitled invitee or current manager."},"ExactChatInvite":{"type":"object","additionalProperties":false,"properties":{"invite":{"$ref":"#/components/schemas/ChatInvite"},"can_accept":{"type":"boolean"},"can_decline":{"type":"boolean"}},"required":["invite","can_accept","can_decline"]},"NotificationTradeRevisionV2":{"additionalProperties":false,"properties":{"event":{"additionalProperties":true,"description":"The same normalized trade event object delivered by the Social Activity WebSocket v1 protocol.","type":"object","properties":{"eventKind":{"type":"string","const":"trade_executed"}},"required":["eventKind"]},"eventId":{"maxLength":64,"minLength":1,"type":"string"},"operation":{"const":"upsert","type":"string"},"revision":{"minimum":1,"type":"integer"},"sequence":{"pattern":"^[1-9][0-9]*$","type":"string"}},"required":["event","eventId","operation","revision","sequence"],"type":"object","description":"Exact latest currently authorized trade revision. The event remains social display evidence, never balance or settlement authority. Native CALLD and current public Fomo/Pump actor projections are supported; retracted or private sources are unavailable."},"ConfirmedTransferNotificationEvidenceV2":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string","format":"uuid"},"outcome":{"type":"string","enum":["deposit_completed","withdrawal_completed","withdrawal_failed"]},"amount_atomic":{"type":"string","pattern":"^[1-9][0-9]{0,19}$","maxLength":20,"description":"Exact USDC atomic amount (six decimals), within uint64. For failure this is the requested transfer amount, not a receipt or refund."},"occurred_at_unix_ms":{"type":"integer","minimum":1},"withdrawal_id":{"type":["string","null"],"format":"uuid"},"network":{"type":"string","const":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp"},"signature":{"type":"string","minLength":64,"maxLength":88,"pattern":"^[1-9A-HJ-NP-Za-km-z]+$"},"finalized_slot":{"type":"integer","minimum":0},"mint":{"type":"string","const":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}},"required":["id","outcome","amount_atomic","occurred_at_unix_ms","withdrawal_id","network","signature","finalized_slot","mint"],"description":"Read-only retained proof for one direct finalized Solana mainnet USDC transfer in legacy or static-account version-0 transaction format between existing token accounts, with current wallet ownership rechecked. Exact receipt-era owners and atomic deltas are required. Loaded-address version-0 transactions, associated-account creation/closure, CPI, extra token transfers and compound actions are not admitted. Synthetic receipt tests do not establish compatibility with actual Privy output. A failed explicitly bound withdrawal proves only that instruction failed; no refund or zero-fee claim. No provider polling or money-movement mutation occurs during this read. Unsupported receipts produce no context and do not imply financial failure. Version-0 proof requires explicitly empty address lookup descriptors and loaded address arrays; all accounts must be static."},"NativePostNotificationSelection":{"type":"object","additionalProperties":false,"properties":{"user_id":{"type":"string","format":"uuid"},"enabled":{"type":"boolean"},"version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."}},"required":["user_id","enabled","version"],"description":"One native author selection owned by the authenticated recipient. A never-selected author returns enabled=false/version=\"0\"; disabled rows retain their version. Imported trader/profile IDs are not accepted as native identities."},"NativePostNotificationSelectionRequest":{"type":"object","additionalProperties":false,"properties":{"expected_version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."}},"required":["expected_version"]},"NativePostNotificationSelections":{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/NativePostNotificationSelection"},"description":"At most 100 stored enabled native-author selections, ordered by user_id. Global selected_posts opt-in and current follow/source eligibility are enforced independently."},"ChatReactionStateV2":{"additionalProperties":false,"description":"Conditional mutation result. Aggregate revision/reactions are the current authorized summary; edge_revision and transition_id retain the original command result on identical replay. Null transition_id means no transition. Commands never acknowledge chat receipts.","properties":{"chat_id":{"format":"uuid","type":"string"},"message_id":{"format":"uuid","type":"string"},"reactions":{"items":{"$ref":"#/components/schemas/ChatMessageReactionSummary"},"type":"array"},"revision":{"pattern":"^[1-9][0-9]*$","type":"string"},"viewer_reactions":{"items":{"maxLength":16,"minLength":1,"type":"string"},"type":"array"},"contract":{"type":"integer","const":2},"edge_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."},"transition_id":{"type":["string","null"],"format":"uuid"}},"required":["chat_id","message_id","reactions","revision","viewer_reactions","contract","edge_revision","transition_id"],"type":"object"},"ChatReactionEdgePageV2":{"type":"object","additionalProperties":false,"properties":{"contract":{"type":"integer","const":2},"aggregate_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."},"reactions":{"type":"array","items":{"$ref":"#/components/schemas/ChatMessageReactionSummary"}},"edge_versions":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":false,"properties":{"emoji":{"type":"string","minLength":1,"maxLength":16},"revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."},"present":{"type":"boolean"}},"required":["emoji","revision","present"]}},"next_edge_cursor":{"type":["string","null"],"maxLength":512}},"required":["contract","aggregate_revision","reactions","edge_versions","next_edge_cursor"],"description":"Caller-owned per-emoji edge versions, including absent retained tombstones, ordered by emoji. Enumerate every page before assuming an unreturned/never-used edge has revision 0. Aggregate counts are independent of the edge page. This does not expose other users' edge versions or mutate receipts."},"NotificationImportedPostRevisionV2":{"additionalProperties":false,"properties":{"event":{"additionalProperties":true,"description":"The same currently authorized normalized Fomo/Pump thesis event as the Social Activity WebSocket protocol.","type":"object","properties":{"eventKind":{"type":"string","const":"thesis_published"}},"required":["eventKind"]},"eventId":{"maxLength":64,"minLength":1,"type":"string"},"operation":{"const":"upsert","type":"string"},"revision":{"minimum":1,"type":"integer"},"sequence":{"pattern":"^[1-9][0-9]*$","type":"string"}},"required":["event","eventId","operation","revision","sequence"],"type":"object","description":"Exact current imported post revision with original publication identity and current owner/visibility proof. Content is read from its authenticated owner on demand and is never replicated into notification storage."},"ImportedPostNotificationSelection":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."},"trader_profile_id":{"type":"string","format":"uuid"}},"required":["trader_profile_id","enabled","version"],"description":"One imported Fomo/Pump trader selection owned by the authenticated recipient. Uses the backend trader profile UUID, never a native user ID. An absent selection is disabled at version 0; disabled selections retain their version."},"ImportedPostNotificationSelectionRequest":{"type":"object","additionalProperties":false,"properties":{"expected_version":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19,"description":"Unsigned decimal string within signed 64-bit range; never coerce to a JavaScript number."}},"required":["expected_version"]},"ImportedPostNotificationSelections":{"type":"array","maxItems":100,"items":{"$ref":"#/components/schemas/ImportedPostNotificationSelection"},"description":"At most 100 enabled imported trader selections, ordered by trader_profile_id. Global selected_posts opt-in and the same current follow episode are independently required."},"ExecutionPriceUsd":{"description":"Historical USD consideration divided by the exact quantity of this token in this fill. Decimal string rounded half up to at most 18 fractional digits. Null when unavailable; never substituted with a current quote, portfolio average entry, or zero. Does not add network fees.","type":["string","null"],"pattern":"^(?=.*[1-9])(?:0|[1-9][0-9]{0,77})(?:\\.[0-9]{1,18})?$","maxLength":97,"examples":["0.2",null]},"ExecutionPriceUnavailableReason":{"description":"Null when the execution price is available; otherwise the reason it could not be determined. Treat unavailable values as unknown, without a current-price fallback.","type":["string","null"],"enum":["missing_usd_value","invalid_usd_value","invalid_token_amount","price_out_of_range","historical_swap_unavailable","historical_swap_not_found","historical_swap_ambiguous","historical_lookup_incomplete","historical_lookup_limited","unsupported_trade",null]},"SocialActivityTrade":{"additionalProperties":false,"properties":{"amount":{"type":"string"},"amountAtomic":{"pattern":"^(0|[1-9][0-9]*)$","type":"string"},"amountDecimals":{"maximum":36,"minimum":0,"type":"integer"},"nativeAmount":{"type":"string"},"nativeSymbol":{"enum":["SOL","USDC"],"type":"string"},"side":{"enum":["buy","sell"],"type":"string"},"transactionSignature":{"maxLength":256,"minLength":1,"type":"string"},"usdNotional":{"type":["string","null"]},"executionPriceUsd":{"$ref":"#/components/schemas/ExecutionPriceUsd"},"executionPriceUnavailableReason":{"$ref":"#/components/schemas/ExecutionPriceUnavailableReason"},"walletAddress":{"type":"string","minLength":1,"maxLength":128},"receipt":{"$ref":"#/components/schemas/TradeReceipt"}},"required":["amount","amountAtomic","amountDecimals","nativeAmount","nativeSymbol","side","transactionSignature","usdNotional","executionPriceUsd","executionPriceUnavailableReason","walletAddress"],"type":"object","allOf":[{"oneOf":[{"properties":{"executionPriceUsd":{"type":"string"},"executionPriceUnavailableReason":{"type":"null"}}},{"properties":{"executionPriceUsd":{"type":"null"},"executionPriceUnavailableReason":{"type":"string"}}}]}]},"SocialActivityTradeEvent":{"type":"object","additionalProperties":true,"description":"Normalized observed trade, with request-time execution pricing on trade. Stored ingestion payloads remain unchanged.","required":["eventKind","trade"],"properties":{"eventKind":{"type":"string","const":"trade_executed"},"trade":{"$ref":"#/components/schemas/SocialActivityTrade"},"assetRef":{"$ref":"#/components/schemas/ExternalTraderActivityAsset"},"execution":{"$ref":"#/components/schemas/ExternalTraderActivityExecution"}}},"PositionShareSnapshotV1":{"additionalProperties":false,"description":"The position exactly as the sender saw it when sharing: token, owner, quantity, value, unrealized P&L and observation time. Stored verbatim with the message and never rewritten. Figures are canonical decimal strings; unknown is null. P&L is null with pnl_unavailable_reason when the basis was not Codex's own (Relay or Mobula receipt supplements are display-only and never persisted).","properties":{"schema_version":{"const":1,"type":"integer"},"kind":{"const":"position","type":"string"},"source":{"const":"codex","type":"string"},"owner":{"additionalProperties":false,"properties":{"user_id":{"format":"uuid","type":"string"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"},"display_name":{"maxLength":50,"type":["string","null"]}},"required":["user_id","username","display_name"],"type":"object","description":"The sender as they read at share time; later renames do not change the card."},"asset":{"additionalProperties":false,"properties":{"chain_id":{"pattern":"^(solana:mainnet-beta|eip155:[1-9][0-9]*)$","type":"string"},"address":{"maxLength":64,"type":"string"},"name":{"maxLength":120,"type":["string","null"]},"symbol":{"maxLength":40,"type":["string","null"]},"decimals":{"maximum":36,"minimum":0,"type":"integer"}},"required":["chain_id","address","name","symbol","decimals"],"type":"object"},"quantity":{"pattern":"^([1-9][0-9]*(\\.[0-9]*[1-9])?|0\\.[0-9]*[1-9])$","type":"string"},"value_usd":{"oneOf":[{"pattern":"^([1-9][0-9]*(\\.[0-9]*[1-9])?|0\\.[0-9]*[1-9]|0)$","type":"string"},{"type":"null"}]},"unrealized_pnl_usd":{"oneOf":[{"pattern":"^(-?[1-9][0-9]*(\\.[0-9]*[1-9])?|-?0\\.[0-9]*[1-9]|0)$","type":"string"},{"type":"null"}]},"pnl_unavailable_reason":{"enum":["ephemeral_basis_not_shareable","basis_unavailable",null]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"Provider observation time of the figures, distinct from the message's created_at_unix_ms."}},"required":["schema_version","kind","source","owner","asset","quantity","value_usd","unrealized_pnl_usd","pnl_unavailable_reason","observed_at_ms"],"type":"object"},"PositionShareSnapshotV2":{"additionalProperties":false,"description":"Immutable v2 share-time snapshot. Average entry and remaining cost basis are captured only from fresh, persistable Codex basis. Remaining cost basis is the cost of the current holding, not lifetime purchases. Unknown basis fields are jointly null with basis_unavailable_reason. P&L availability is independent. Historical v1 snapshots are never backfilled.","properties":{"schema_version":{"const":2,"type":"integer"},"kind":{"const":"position","type":"string"},"source":{"const":"codex","type":"string"},"owner":{"additionalProperties":false,"properties":{"user_id":{"format":"uuid","type":"string"},"username":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"},"display_name":{"maxLength":50,"type":["string","null"]}},"required":["user_id","username","display_name"],"type":"object","description":"The sender as they read at share time; later renames do not change the card."},"asset":{"additionalProperties":false,"properties":{"chain_id":{"pattern":"^(solana:mainnet-beta|eip155:[1-9][0-9]*)$","type":"string"},"address":{"maxLength":64,"type":"string"},"name":{"maxLength":120,"type":["string","null"]},"symbol":{"maxLength":40,"type":["string","null"]},"decimals":{"maximum":36,"minimum":0,"type":"integer"}},"required":["chain_id","address","name","symbol","decimals"],"type":"object"},"quantity":{"pattern":"^([1-9][0-9]*(\\.[0-9]*[1-9])?|0\\.[0-9]*[1-9])$","type":"string"},"value_usd":{"oneOf":[{"pattern":"^([1-9][0-9]*(\\.[0-9]*[1-9])?|0\\.[0-9]*[1-9]|0)$","type":"string"},{"type":"null"}]},"unrealized_pnl_usd":{"oneOf":[{"pattern":"^(-?[1-9][0-9]*(\\.[0-9]*[1-9])?|-?0\\.[0-9]*[1-9]|0)$","type":"string"},{"type":"null"}]},"pnl_unavailable_reason":{"enum":["ephemeral_basis_not_shareable","basis_unavailable",null]},"observed_at_ms":{"pattern":"^(0|[1-9][0-9]*)$","type":"string","description":"Provider observation time of the figures, distinct from the message's created_at_unix_ms."},"average_entry_price_usd":{"oneOf":[{"pattern":"^([1-9][0-9]*(\\.[0-9]*[1-9])?|0\\.[0-9]*[1-9])$","type":"string"},{"type":"null"}],"description":"Provider-estimated average entry USD per token at share time; never derived from current prices or P&L."},"remaining_cost_basis_usd":{"oneOf":[{"pattern":"^([1-9][0-9]*(\\.[0-9]*[1-9])?|0\\.[0-9]*[1-9]|0)$","type":"string"},{"type":"null"}],"description":"Provider-estimated USD cost basis of the quantity still held at share time (Invested), not cumulative purchases."},"basis_unavailable_reason":{"enum":["ephemeral_basis_not_shareable","basis_unavailable",null]}},"required":["schema_version","kind","source","owner","asset","quantity","value_usd","unrealized_pnl_usd","pnl_unavailable_reason","observed_at_ms","average_entry_price_usd","remaining_cost_basis_usd","basis_unavailable_reason"],"type":"object","oneOf":[{"properties":{"average_entry_price_usd":{"type":"string"},"remaining_cost_basis_usd":{"type":"string"},"basis_unavailable_reason":{"type":"null"}}},{"properties":{"average_entry_price_usd":{"type":"null"},"remaining_cost_basis_usd":{"type":"null"},"basis_unavailable_reason":{"enum":["ephemeral_basis_not_shareable","basis_unavailable"],"type":"string"}}}]},"TradeReceipt":{"type":"object","additionalProperties":false,"description":"Immutable historical display receipt. Pending values are finalized once; never current price, balance, settlement or lifecycle authority. Optional during rollout. Entry is null for buys; USDC sells finalize immediately with available Entry or missing_purchase_history.","properties":{"status":{"type":"string","enum":["pending","final","unavailable"]},"usdAmount":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$"},"executionPriceUsd":{"$ref":"#/components/schemas/ExecutionPriceUsd"},"unavailableReason":{"$ref":"#/components/schemas/ExecutionPriceUnavailableReason"},"valuationSource":{"type":["string","null"],"enum":["usdc_notional","codex_fill","quote_price_at_time","relay_quote",null]},"valuedAtMs":{"type":["string","null"],"pattern":"^(0|[1-9][0-9]*)$"},"entry":{"type":["object","null"],"additionalProperties":false,"properties":{"entryPriceUsd":{"type":["string","null"],"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$"},"costBasisUsd":{"type":["string","null"],"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$"},"realizedPnlUsd":{"type":["string","null"],"pattern":"^-?(0|[1-9][0-9]*)(\\.[0-9]{1,18})?$"},"unavailableReason":{"type":["string","null"],"enum":["missing_purchase_history",null]}},"required":["entryPriceUsd","costBasisUsd","realizedPnlUsd","unavailableReason"]}},"required":["status","usdAmount","executionPriceUsd","unavailableReason","valuationSource","valuedAtMs","entry"],"oneOf":[{"properties":{"status":{"const":"pending"},"usdAmount":{"type":"null"},"executionPriceUsd":{"type":"null"},"unavailableReason":{"type":"null"},"valuationSource":{"type":"null"},"valuedAtMs":{"type":"null"}}},{"properties":{"status":{"const":"final"},"usdAmount":{"type":"string"},"executionPriceUsd":{"type":"string"},"unavailableReason":{"type":"null"},"valuationSource":{"type":"string"},"valuedAtMs":{"type":"string"}}},{"properties":{"status":{"const":"unavailable"},"usdAmount":{"type":"null"},"executionPriceUsd":{"type":"null"},"unavailableReason":{"type":"string"},"valuationSource":{"type":"null"},"valuedAtMs":{"type":"string"}}}]},"PortfolioHistorySnapshot":{"additionalProperties":false,"properties":{"source":{"type":"string","const":"zerion"},"kind":{"type":"string","const":"historical_net_worth"},"currency":{"type":"string","const":"USD"},"range":{"type":"string","enum":["24h","7d","30d"]},"from_ms":{"type":"string","pattern":"^\\d{1,16}$"},"to_ms":{"type":"string","pattern":"^\\d{1,16}$"},"fetched_at_ms":{"type":"string","pattern":"^\\d{1,16}$"},"points":{"type":"array","minItems":1,"maxItems":121,"items":{"additionalProperties":false,"properties":{"timestamp_ms":{"type":"string","pattern":"^\\d{1,16}$"},"equity_usd":{"type":"string","pattern":"^(?:0|[1-9]\\d{0,19})(?:\\.\\d{1,6})?$"}},"required":["timestamp_ms","equity_usd"],"type":"object"}}},"required":["source","kind","currency","range","from_ms","to_ms","fetched_at_ms","points"],"type":"object","description":"Provider-reconstructed historical net worth, including the effect of deposits and withdrawals. This is not trading P&L or locally observed equity/cash; historical cash is not supplied. Wallet scope is resolved from the authenticated principal."},"PortfolioHistory":{"additionalProperties":false,"properties":{"message":{"type":"string"},"responseObject":{"$ref":"#/components/schemas/PortfolioHistorySnapshot"},"statusCode":{"type":"integer","const":200},"success":{"type":"boolean","const":true}},"required":["message","responseObject","statusCode","success"],"type":"object"},"PortfolioHistoryPending":{"additionalProperties":false,"properties":{"message":{"type":"string"},"responseObject":{"additionalProperties":false,"properties":{"status":{"type":"string","const":"pending"},"retry_after_seconds":{"type":"integer","minimum":1,"maximum":300}},"required":["status","retry_after_seconds"],"type":"object"},"statusCode":{"type":"integer","const":202},"success":{"type":"boolean","const":true}},"required":["message","responseObject","statusCode","success"],"type":"object"},"SocialPostReplyPreview":{"type":"object","additionalProperties":false,"description":"Partial first discussion page for a feed card, not a full discussion response. Uses the existing reply ordering and visibility rules, including deleted tombstones with null bodies. Preserves supported media, GIF and mention fields. Does not evaluate token-holder eligibility; use feed permissions for the write policy and the discussion endpoint for current eligibility.","properties":{"replies":{"type":"array","maxItems":2,"items":{"$ref":"#/components/schemas/SocialPostReply"}},"reply_count":{"type":"integer","minimum":0,"description":"Total visible nondeleted direct replies in this scope, independent of preview length. Tombstones may appear in replies but are excluded from this count."},"next_cursor":{"description":"Opaque post_replies cursor for older replies in the same post and parent scope. Continue with this cursor on the corresponding existing replies endpoint; a different page limit is allowed.","maxLength":512,"pattern":"^[A-Za-z0-9_-]+$","type":["string","null"]}},"required":["replies","reply_count","next_cursor"]},"SocialAssetCommentReplyPreview":{"type":"object","additionalProperties":false,"description":"Partial first discussion page for a feed card, not a full discussion response. Uses the existing reply ordering and visibility rules, including deleted tombstones with null bodies. Preserves supported media, GIF and mention fields. Does not evaluate token-holder eligibility; use feed permissions for the write policy and the discussion endpoint for current eligibility.","properties":{"replies":{"type":"array","maxItems":2,"items":{"$ref":"#/components/schemas/SocialAssetComment"}},"reply_count":{"type":"integer","minimum":0,"description":"Total visible nondeleted direct replies in this scope, independent of preview length. Tombstones may appear in replies but are excluded from this count."},"next_cursor":{"type":["string","null"],"format":"uuid","description":"Last returned reply UUID when older replies remain; scoped to the exact token and parent. Continue with this cursor on the corresponding existing replies endpoint; a different page limit is allowed."}},"required":["replies","reply_count","next_cursor"]},"SocialTradeReplyPreview":{"type":"object","additionalProperties":false,"description":"Partial first discussion page for a feed card, not a full discussion response. Uses the existing reply ordering and visibility rules, including deleted tombstones with null bodies. Preserves supported media, GIF and mention fields. Does not evaluate token-holder eligibility; use feed permissions for the write policy and the discussion endpoint for current eligibility.","properties":{"replies":{"type":"array","maxItems":2,"items":{"$ref":"#/components/schemas/SocialTradeReply"}},"reply_count":{"type":"integer","minimum":0,"description":"Total visible nondeleted direct replies in this scope, independent of preview length. Tombstones may appear in replies but are excluded from this count."},"next_cursor":{"description":"Opaque trade_replies cursor for older replies in the same post and parent scope. Continue with this cursor on the corresponding existing replies endpoint; a different page limit is allowed.","maxLength":512,"pattern":"^[A-Za-z0-9_-]+$","type":["string","null"]}},"required":["replies","reply_count","next_cursor"]},"ExecutionPreparationInput":{"type":"object","additionalProperties":false,"required":["input_mint","input_decimals","output_mint","output_decimals","amount_atomic","minimum_output_atomic","maximum_slippage_bps","maximum_application_fee_usdc_atomic"],"properties":{"input_mint":{"type":"string"},"input_decimals":{"type":"integer","minimum":0,"maximum":255},"output_mint":{"type":"string"},"output_decimals":{"type":"integer","minimum":0,"maximum":255},"amount_atomic":{"type":"string","pattern":"^[1-9][0-9]{0,18}$"},"minimum_output_atomic":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"maximum_slippage_bps":{"type":"integer","minimum":1,"maximum":4500},"maximum_application_fee_usdc_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,19})$"},"execution_mode":{"type":"string","enum":["prepare_only","trade"],"description":"Raw trade is a local test interface only when signed quotes are disabled. Defaults to prepare_only."}},"description":"Local preparation test terms, not an accepted trading quote. Exactly one mint is Solana USDC (6 decimals); native/wrapped SOL excluded. Atomic values are bounded to u64 and input to i64::MAX. Wallet/user are derived from authentication."},"ExecutionPreparation":{"type":"object","additionalProperties":false,"required":["job_id","status","step","created_at","updated_at","error_code","signing_attempted","broadcast_attempted"],"properties":{"job_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","executing","prepared","failed","needs_attention"]},"step":{"type":"string","enum":["unprepared","prepared"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"error_code":{"type":["string","null"]},"signing_attempted":{"type":"boolean","const":false},"broadcast_attempted":{"type":"boolean","const":false}},"description":"Public preparation status only. Prepared means unsigned bytes were saved, not transaction safety approval or successful execution."},"CreateServerBuyQuoteRequest":{"additionalProperties":false,"not":{"required":["execution_speed","priority_fee"]},"properties":{"asset_mint":{"maxLength":44,"minLength":32,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","type":"string"},"exact_input_usdc_atomic":{"maxLength":20,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"type":"string","enum":["normal"],"default":"normal"},"operation":{"const":"same_chain_buy","type":"string"},"priority_fee":{"$ref":"#/components/schemas/PriorityFeePreferenceV2"},"execution_mode":{"type":"string","const":"server"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","asset_mint","exact_input_usdc_atomic","execution_mode"],"type":"object","description":"Opt-in local Solana server-execution preview. DFlow and legacy SPL only; no signing or quote persistence."},"CreateServerSellQuoteRequest":{"additionalProperties":false,"not":{"required":["execution_speed","priority_fee"]},"oneOf":[{"required":["exact_input_asset_atomic"]},{"required":["sell_all"]}],"properties":{"asset_mint":{"maxLength":44,"minLength":32,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$","type":"string"},"exact_input_asset_atomic":{"maxLength":19,"pattern":"^[1-9][0-9]*$","type":"string"},"execution_speed":{"type":"string","enum":["normal"],"default":"normal"},"operation":{"const":"same_chain_sell","type":"string"},"priority_fee":{"$ref":"#/components/schemas/PriorityFeePreferenceV2"},"sell_all":{"const":true,"description":"Resolve the exact input from the authenticated controlled wallet's live SPL-token balance during this stateless quote request.","type":"boolean"},"execution_mode":{"type":"string","const":"server"},"order_type":{"type":"string","const":"market","description":"Optional; omission preserves the existing market quote behavior."}},"required":["operation","asset_mint","execution_mode"],"type":"object","description":"Opt-in local Solana server-execution preview. DFlow and legacy SPL only; no signing or quote persistence."},"SignedServerQuote":{"type":"object","additionalProperties":false,"required":["execution_mode","authorization_requirement","quote_id","quote_token","expires_at_unix_ms","provider","operation","execution_speed","source_chain_id","destination_chain_id","source_asset","destination_asset","input_decimals","output_decimals","asset_decimals","exact_input_atomic","expected_output_atomic","minimum_output_atomic","maximum_application_fee_usdc_atomic","maximum_slippage_bps","fees"],"properties":{"execution_mode":{"type":"string","const":"server"},"authorization_requirement":{"type":"string","const":"server_execution"},"quote_id":{"type":"string","pattern":"^execution-[0-9a-f-]{36}$"},"quote_token":{"type":"string","maxLength":3072,"description":"Opaque signed accepted terms. Never log; submit to /v1/execute while fresh."},"expires_at_unix_ms":{"type":"integer"},"provider":{"type":"string","const":"dflow"},"operation":{"type":"string","enum":["same_chain_buy","same_chain_sell"]},"execution_speed":{"type":"string","const":"normal"},"source_chain_id":{"type":"string","const":"solana"},"destination_chain_id":{"type":"string","const":"solana"},"source_asset":{"type":"string"},"destination_asset":{"type":"string"},"input_decimals":{"type":"integer","minimum":0,"maximum":18},"output_decimals":{"type":"integer","minimum":0,"maximum":18},"asset_decimals":{"type":"integer","minimum":0,"maximum":18},"exact_input_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"expected_output_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"minimum_output_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"maximum_application_fee_usdc_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"maximum_slippage_bps":{"type":"integer","minimum":1,"maximum":4500},"fees":{"type":"array","minItems":1,"maxItems":1,"items":{"type":"object","additionalProperties":false,"required":["kind","asset","amount_atomic","certainty"],"properties":{"kind":{"type":"string","const":"application"},"asset":{"type":"string"},"amount_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"certainty":{"type":"string","const":"maximum"}}}}},"description":"At most 15 seconds from preview start. Token expiry gates new admission; it does not reserve a price. No prepared or signed transaction is returned."},"ExecuteSignedQuoteInput":{"type":"object","additionalProperties":false,"required":["quote_token"],"properties":{"quote_token":{"type":"string","maxLength":3072,"description":"Opaque signed accepted terms. Never log; submit to /v1/execute while fresh."}}},"ExecutionTradeJob":{"type":"object","additionalProperties":false,"required":["job_id","status","step","created_at","updated_at","error_code","signing_attempted","broadcast_attempted","execution_mode","transaction_id"],"properties":{"job_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","executing","confirming","succeeded","failed","needs_attention"]},"step":{"type":"string","enum":["unprepared","prepared","signing_requested","signed","submission_committed","observing","resolved"]},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"error_code":{"type":["string","null"]},"signing_attempted":{"type":"boolean"},"broadcast_attempted":{"type":"boolean"},"execution_mode":{"type":"string","const":"trade"},"transaction_id":{"type":["string","null"]}},"description":"Local trade job. Confirmed chain success is succeeded; background finality may still hold funds."},"ExecutionSignerSetupV2":{"description":"Solana server-signing setup status. This does not submit a trade. An active result requires authoritative provider evidence. Pending and needs_attention never authorize replay of the wallet update.","oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","enum":["disabled","active","pending","revoked","needs_attention"]}},"required":["state"]},{"type":"object","additionalProperties":false,"properties":{"state":{"const":"authorization_required"},"enrollment_id":{"type":"string","format":"uuid"},"wallet_address":{"type":"string","description":"The authenticated user’s managed Solana wallet address."},"signer_id":{"type":"string","minLength":24,"maxLength":24,"pattern":"^[a-z][a-z0-9]{23}$"},"policy_id":{"type":"string","minLength":24,"maxLength":24,"pattern":"^[a-z][a-z0-9]{23}$"},"authorization_payload":{"type":"string","contentEncoding":"base64","description":"Base64-encoded UTF-8 canonical JSON for the exact Privy PATCH request. Sign these decoded bytes with the authenticated wallet owner through the Privy SDK. Contains wallet URL, configured signer/policy and request-expiry; never a private key."},"expires_at_unix_ms":{"type":"integer","maximum":9007199254740991,"description":"Exact Unix millisecond expiry returned by prepare. Return this unchanged with the owner signature."}},"required":["state","enrollment_id","wallet_address","signer_id","policy_id","authorization_payload","expires_at_unix_ms"]}]},"ExecutionSignerAuthorizationV2Request":{"type":"object","additionalProperties":false,"properties":{"enrollment_id":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"authorization_signature":{"type":"string","minLength":80,"maxLength":96,"pattern":"^[A-Za-z0-9+/]+={0,2}$","description":"Canonical base64 DER ECDSA P-256 owner authorization signature over the prepared payload. Not a wallet transaction signature or an access token."},"expires_at_unix_ms":{"type":"integer","maximum":9007199254740991,"description":"Exact Unix millisecond expiry returned by prepare. Return this unchanged with the owner signature."}},"required":["enrollment_id","authorization_signature","expires_at_unix_ms"]},"SocialReactionTargetInput":{"additionalProperties":false,"description":"Addresses the thing being reacted to. `id` is the post, comment, thesis event or trade event UUID, or the numeric X post id for `x_post`. `chain_id` and `address` are required for `asset_comment` and rejected otherwise.","properties":{"kind":{"type":"string","enum":["post","asset_comment","thesis","trade","x_post"]},"id":{"type":"string","minLength":1,"maxLength":40},"chain_id":{"type":"string","description":"Token comment chain, for example `eip155:8453` or `solana:mainnet-beta`."},"address":{"type":"string","description":"Token address on `chain_id`."}},"required":["kind","id"],"type":"object"},"SocialReactionCommand":{"additionalProperties":false,"description":"Sets whether the viewer's reaction with `emoji` is present on `target`. Idempotent: repeating the command never counts twice and removing an absent reaction succeeds.","properties":{"target":{"$ref":"#/components/schemas/SocialReactionTargetInput"},"emoji":{"type":"string","minLength":1,"maxLength":16,"description":"One emoji: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap."},"present":{"type":"boolean","description":"`true` adds the reaction, `false` removes it."}},"required":["target","emoji","present"],"type":"object"},"QuoteServiceAssetInput":{"type":"object","additionalProperties":false,"required":["chain_id","address"],"properties":{"chain_id":{"type":"string","pattern":"^(solana:mainnet|eip155:[1-9][0-9]{0,15})$","description":"Canonical chain identifier; availability is determined by enabled Quote providers."},"address":{"type":"string","description":"Canonical token address or native. Wallet addresses come from the authenticated principal; decimal counts are not required."}}},"CreateQuoteV3Request":{"type":"object","additionalProperties":false,"required":["source","destination","amount_atomic","slippage_bps"],"properties":{"source":{"$ref":"#/components/schemas/QuoteServiceAssetInput"},"destination":{"$ref":"#/components/schemas/QuoteServiceAssetInput"},"amount_atomic":{"type":"string","pattern":"^[1-9][0-9]{0,77}$","description":"Explicit exact source amount in atomic units, bounded to uint256. No balance lookup is performed; sell_all is not supported."},"slippage_bps":{"type":"integer","minimum":0,"maximum":1000}}},"CreateQuoteV3Response":{"type":"object","additionalProperties":false,"required":["quote_id","signed_quote"],"properties":{"quote_id":{"type":"string","pattern":"^quote_[0-9a-f]{32}$"},"signed_quote":{"$ref":"#/components/schemas/SignedQuoteV3"}}},"SignedQuoteV3":{"type":"object","additionalProperties":false,"required":["algorithm","key_id","payload","signature"],"properties":{"algorithm":{"type":"string","enum":["Ed25519"]},"key_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"payload":{"type":"string","maxLength":524288,"pattern":"^[A-Za-z0-9_-]+$","description":"Exact base64url quote envelope saved in Redis; verify signature before decoding."},"signature":{"type":"string","pattern":"^[A-Za-z0-9_-]{86}$"}}},"ExecuteQuoteIdInput":{"type":"object","additionalProperties":false,"required":["quote_id"],"properties":{"quote_id":{"type":"string","pattern":"^quote_[0-9a-f]{32}$","description":"Quote ID returned by /v3/quote. The client cannot override signed execution terms."}}},"SocialTraderProfileDiscoveryStatus":{"type":"object","additionalProperties":false,"required":["state","reason","retry_after_seconds"],"properties":{"state":{"type":"string","enum":["queued","running","indexed","not_found","retry_scheduled","unavailable"]},"reason":{"type":"string","description":"Bounded diagnostic category; not a provider error message."},"retry_after_seconds":{"type":"integer","minimum":0,"maximum":86400}}},"SocialTraderDiscoveryItem":{"additionalProperties":false,"properties":{"avatarUrl":{"type":["string","null"]},"bio":{"type":["string","null"]},"dataVisibility":{"enum":["public","private","unknown"],"type":"string"},"displayName":{"type":["string","null"]},"followers":{"type":["string","null"]},"following":{"type":["string","null"]},"handle":{"type":["string","null"]},"platform":{"type":"string","const":"fomo"},"platformSubjectId":{"type":"string"},"portfolioObservedAtMs":{"type":["string","null"]},"portfolioValueUsd":{"type":["string","null"]},"profileObservedAtMs":{"type":["string","null"]},"sevenDayPnlPct":{"type":["string","null"],"pattern":"^-?[0-9]+(\\.[0-9]+)?$","maxLength":128,"description":"Exact seven-day provider decimal string, including any leading zeroes; null when unavailable."},"sevenDayPnlUsd":{"type":["string","null"],"pattern":"^-?[0-9]+(\\.[0-9]+)?$","maxLength":128,"description":"Exact seven-day provider decimal string, including any leading zeroes; null when unavailable."},"traderProfileId":{"format":"uuid","type":"string"},"wallets":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"chainId":{"type":"string"}},"required":["chainId","address"],"type":"object"},"type":"array"},"provider_rank":{"type":["integer","null"],"minimum":1,"maximum":100,"description":"Original Fomo provider rank for Suggested traders and Top traders; null for Recently discovered. Filtering does not renumber ranks."},"discovered_at_ms":{"type":["string","null"],"pattern":"^[0-9]+$","description":"Indexer first-discovery timestamp in milliseconds for Recently discovered; null for the leaderboard modes. This is not account creation time."}},"required":["traderProfileId","platform","platformSubjectId","handle","displayName","avatarUrl","bio","followers","following","profileObservedAtMs","portfolioValueUsd","portfolioObservedAtMs","sevenDayPnlUsd","sevenDayPnlPct","dataVisibility","wallets","provider_rank","discovered_at_ms"],"type":"object","description":"Fomo discovery candidate with the existing platform profile fields. Provider PnL strings are preserved exactly; these are seven-day provider values, not comparable thirty-day returns."},"SocialTraderDiscoveryMetadata":{"type":"object","additionalProperties":false,"properties":{"mode":{"type":"string","enum":["for_you","top_returns","new"]},"label":{"type":"string","enum":["Recently discovered","Suggested traders","Top traders"]},"source":{"type":"string","const":"fomo"},"candidate_scope":{"type":"string","enum":["fomo_discovered_profiles","fomo_provider_top_100"]},"actual_period":{"type":["string","null"],"enum":["seven_day",null]},"ranking_basis":{"type":"string","enum":["first_discovered","provider_leaderboard"]},"personalized":{"type":"boolean","const":false,"description":"No learned personalization or ML scoring. Suggested traders applies supported watched/dismissed exclusions to the provider candidate order."},"snapshot":{"type":"string","minLength":1,"maxLength":256,"description":"Pinned Indexer discovery head or immutable provider leaderboard snapshot."},"observed_at_ms":{"type":["string","null"],"pattern":"^[0-9]+$","description":"Pinned provider observation time in milliseconds. Null for Recently discovered because the discovery head has no observation clock."}},"required":["mode","label","source","candidate_scope","actual_period","ranking_basis","personalized","snapshot","observed_at_ms"],"oneOf":[{"properties":{"mode":{"const":"new"},"label":{"const":"Recently discovered"},"candidate_scope":{"const":"fomo_discovered_profiles"},"actual_period":{"const":null},"ranking_basis":{"const":"first_discovered"},"observed_at_ms":{"const":null}}},{"properties":{"mode":{"const":"for_you"},"label":{"const":"Suggested traders"},"candidate_scope":{"const":"fomo_provider_top_100"},"actual_period":{"const":"seven_day"},"ranking_basis":{"const":"provider_leaderboard"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"}}},{"properties":{"mode":{"const":"top_returns"},"label":{"const":"Top traders"},"candidate_scope":{"const":"fomo_provider_top_100"},"actual_period":{"const":"seven_day"},"ranking_basis":{"const":"provider_leaderboard"},"observed_at_ms":{"type":"string","pattern":"^[0-9]+$"}}}]},"SocialTraderDiscoveryPage":{"type":"object","additionalProperties":false,"description":"Fomo-only discovery page. An underfilled or empty page can still have a next_cursor after bounded candidate scanning and exclusions. Follow next_cursor until null; an empty successful page is not an upstream outage. Candidate eligibility is checked against current profiles while the source order stays pinned.","properties":{"items":{"type":"array","maxItems":50,"items":{"$ref":"#/components/schemas/SocialTraderDiscoveryItem"}},"next_cursor":{"type":["string","null"],"minLength":1,"maxLength":4096,"pattern":"^[A-Za-z0-9_-]+$","description":"Opaque seek continuation bound to the authenticated viewer, mode, limit and pinned source snapshot. It grants no access authority."},"metadata":{"$ref":"#/components/schemas/SocialTraderDiscoveryMetadata"}},"required":["items","next_cursor","metadata"]},"TraderDiscoveryUnsupportedProblem":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","const":"trader_discovery_unsupported"},"message":{"type":"string"}},"required":["code","message"]},"TraderDiscoveryDismissalResponse":{"type":"object","additionalProperties":false,"properties":{"trader_profile_id":{"type":"string","format":"uuid"},"is_dismissed":{"type":"boolean"}},"required":["trader_profile_id","is_dismissed"]},"SocialTraderDirectoryResponse":{"oneOf":[{"$ref":"#/components/schemas/SocialTraderSearchResponse"},{"$ref":"#/components/schemas/SocialTraderDiscoveryPage"}]},"SocialTraderSearchResponse":{"additionalProperties":false,"properties":{"items":{"items":{"$ref":"#/components/schemas/SocialTraderProfile"},"maxItems":20,"type":"array"},"discovery":{"$ref":"#/components/schemas/SocialTraderProfileDiscoveryStatus"}},"required":["items"],"type":"object"},"CreateLimitBuyQuoteRequestV2":{"type":"object","additionalProperties":false,"properties":{"operation":{"type":"string","const":"same_chain_buy"},"order_type":{"type":"string","const":"limit"},"asset_mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."},"exact_input_usdc_atomic":{"type":"string","maxLength":20,"pattern":"^[1-9][0-9]*$"}},"required":["operation","order_type","asset_mint","limit_price_usd","expire_time","exact_input_usdc_atomic"],"description":"Client-execution Solana USDC limit buy. Caller-selected wallets, market execution controls, cross-chain and advanced order fields are rejected. Amount must fit an unsigned 64-bit integer."},"CreateLimitSellQuoteRequestV2":{"type":"object","additionalProperties":false,"properties":{"operation":{"type":"string","const":"same_chain_sell"},"order_type":{"type":"string","const":"limit"},"asset_mint":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."},"exact_input_asset_atomic":{"type":"string","maxLength":20,"pattern":"^[1-9][0-9]*$"},"sell_all":{"type":"boolean","const":true,"description":"Snapshot the live spendable token balance into one fixed order amount; future deposits are not included."}},"required":["operation","order_type","asset_mint","limit_price_usd","expire_time"],"oneOf":[{"required":["exact_input_asset_atomic"]},{"required":["sell_all"]}],"description":"Client-execution Solana USDC limit sell. Exactly one of exact_input_asset_atomic or sell_all is required. Amount must fit the supported live token-balance range."},"SignedOrderInstructionV2":{"type":"object","additionalProperties":false,"properties":{"program_id":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"accounts":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"address":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"is_signer":{"type":"boolean"},"is_writable":{"type":"boolean"}},"required":["address","is_signer","is_writable"]}},"data":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]*$","description":"Exact base58 instruction bytes. Construct the setup transaction without changing these bytes or account flags."}},"required":["program_id","accounts","data"]},"SignedOrderSubmitPayloadV2":{"type":"object","additionalProperties":false,"properties":{"target_chain":{"type":"string","const":"solana"},"contra_chain":{"type":"string","const":"solana"},"target_asset":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"contra_asset":{"type":"string","const":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},"side":{"type":"string","enum":["buy","sell"]},"input_amount":{"type":"string","pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,19})(?:\\.[0-9]{0,17}[1-9])?$","description":"Exact canonical decimal amount in the spent asset denomination, derived from atomic input without floating-point conversion.","maxLength":39},"order_type":{"type":"string","const":"limit"},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"quote_id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]{1,256}$"},"platform_fee_bps":{"type":"integer","minimum":0,"maximum":1000},"nonce":{"type":"string","maxLength":20,"pattern":"^(0|[1-9][0-9]*)$","description":"Unsigned 64-bit authorization nonce. Preserve the string exactly."},"deadline":{"type":"string","maxLength":19,"pattern":"^[1-9][0-9]*$","description":"Positive signed 64-bit Unix timestamp in seconds. Preserve the string exactly."}},"required":["target_chain","contra_chain","target_asset","contra_asset","side","input_amount","order_type","limit_price_usd","quote_id","platform_fee_bps","nonce","deadline"],"description":"Append user_signature and submit to POST /v1/orders on the separate edge origin. No caller-selected funder, provider key or upstream URL is accepted. Placement is not a fill; never retry an ambiguous submission automatically."},"SignedOrderV2":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"signed_order"},"setup":{"type":"object","additionalProperties":false,"properties":{"ata_setup_instructions":{"type":"array","items":{"$ref":"#/components/schemas/SignedOrderInstructionV2"}},"delegate_instruction":{"oneOf":[{"$ref":"#/components/schemas/SignedOrderInstructionV2"},{"type":"null"}]}},"required":["ata_setup_instructions","delegate_instruction"]},"order_message":{"type":"string","minLength":1,"description":"Sign these exact UTF-8 bytes using the authenticated wallet. Wallet authorization details remain inspectable."},"submit_payload":{"$ref":"#/components/schemas/SignedOrderSubmitPayloadV2"}},"required":["kind","setup","order_message","submit_payload"]},"LimitOrderFeeV2":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"total"},"denomination":{"type":"string","const":"USD"},"amount":{"type":"string","pattern":"^(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","maxLength":37},"certainty":{"type":"string","const":"estimated"}},"required":["kind","denomination","amount","certainty"],"description":"Validated current total fee estimate in USD, including integration fees. Future execution cost and output are not guaranteed."},"LimitExecutionPreviewV2":{"type":"object","additionalProperties":false,"properties":{"order_type":{"type":"string","const":"limit"},"operation":{"type":"string","enum":["same_chain_buy","same_chain_sell"]},"quote_id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]{1,256}$"},"asset_decimals":{"type":"integer","minimum":0,"maximum":255},"source_chain_id":{"type":"string","const":"solana"},"destination_chain_id":{"type":"string","const":"solana"},"source_asset":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"destination_asset":{"type":"string","minLength":32,"maxLength":44,"pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"},"exact_input_atomic":{"type":"string","maxLength":20,"pattern":"^[1-9][0-9]*$"},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."},"platform_fee_bps":{"type":"integer","minimum":0,"maximum":1000},"fees":{"type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#/components/schemas/LimitOrderFeeV2"}},"authorization_requirement":{"type":"string","const":"interactive_client_signature"},"prepared":{"$ref":"#/components/schemas/SignedOrderV2"},"source_balance_observation":{"$ref":"#/components/schemas/SourceBalanceObservationV2"}},"required":["order_type","operation","quote_id","asset_decimals","source_chain_id","destination_chain_id","source_asset","destination_asset","exact_input_atomic","limit_price_usd","expire_time","platform_fee_bps","fees","authorization_requirement","prepared"],"allOf":[{"if":{"properties":{"operation":{"const":"same_chain_sell"}},"required":["operation"]},"then":{"required":["source_balance_observation"]},"else":{"not":{"required":["source_balance_observation"]}}}],"description":"Prepared limit-order authorization, not an executable market swap or guaranteed future fill. Setup is funder-paid. New preparation is disabled until explicit configuration and wallet-cohort admission; no durable order/job is created by this API call."},"CreateEvmLimitBuyQuoteRequestV2":{"type":"object","additionalProperties":false,"properties":{"operation":{"type":"string","const":"same_chain_buy"},"order_type":{"type":"string","const":"limit"},"chain_id":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]},"asset_address":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"quote_asset_address":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."},"exact_input_atomic":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":78,"description":"Exact positive atomic input as a canonical uint256 decimal string. Runtime rejects values above 2^256-1."}},"required":["operation","order_type","chain_id","asset_address","quote_asset_address","limit_price_usd","expire_time","exact_input_atomic"],"description":"Same-chain EVM limit buy: spend quote_asset_address and receive asset_address using the authenticated owned EVM wallet. No caller wallet, cross-chain output, native wrapping, server execution or market controls are accepted."},"CreateEvmLimitSellQuoteRequestV2":{"type":"object","additionalProperties":false,"properties":{"operation":{"type":"string","const":"same_chain_sell"},"order_type":{"type":"string","const":"limit"},"chain_id":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]},"asset_address":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"quote_asset_address":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."},"exact_input_atomic":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":78,"description":"Exact positive atomic input as a canonical uint256 decimal string. Runtime rejects values above 2^256-1."},"sell_all":{"type":"boolean","const":true,"description":"Resolve the authenticated EVM wallet live source ERC-20 balance into a fixed amount for this order; later deposits are excluded."}},"required":["operation","order_type","chain_id","asset_address","quote_asset_address","limit_price_usd","expire_time"],"oneOf":[{"required":["exact_input_atomic"]},{"required":["sell_all"]}],"description":"Same-chain EVM limit sell: spend asset_address and receive quote_asset_address. Exactly one of exact_input_atomic or sell_all is required."},"TypedOrderApprovalTransactionV2":{"type":"object","additionalProperties":false,"properties":{"to":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"data":{"type":"string","minLength":138,"maxLength":138,"pattern":"^0x095ea7b3[0-9a-fA-F]{128}$","description":"Validated ERC-20 approve calldata returned for this setup. Submit without changing its bytes and confirm before signing the order."},"value":{"type":"string","const":"0"},"chain_id":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]}},"required":["to","data","value","chain_id"],"description":"Optional funder-paid ERC-20 allowance setup on the selected chain; never a native-value transfer or execution swap."},"TypedOrderSubmitPayloadV2":{"type":"object","additionalProperties":false,"properties":{"target_chain":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]},"contra_chain":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]},"target_asset":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"contra_asset":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"side":{"type":"string","enum":["buy","sell"]},"input_amount":{"type":"string","maxLength":97,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,77})(?:\\.[0-9]{0,17}[1-9])?$","description":"Exact positive canonical decimal in source-token units, derived from uint256 input and verified token decimals. No exponent or trailing fractional zeroes."},"order_type":{"type":"string","const":"limit"},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"quote_id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]{1,256}$"},"platform_fee_bps":{"type":"integer","minimum":0,"maximum":1000},"evm_order_typed_data":{"type":"string","minLength":1,"maxLength":16384,"description":"Exact returned EIP-712 JSON string. Parse for wallet signing while preserving integer strings; echo this original string in submission without reserializing or changing fields."},"evm_permit_typed_data":{"type":"string","minLength":1,"maxLength":16384,"description":"Exact returned EIP-712 JSON string. Parse for wallet signing while preserving integer strings; echo this original string in submission without reserializing or changing fields."}},"required":["target_chain","contra_chain","target_asset","contra_asset","side","input_amount","order_type","limit_price_usd","quote_id","platform_fee_bps","evm_order_typed_data"],"allOf":[{"if":{"properties":{"target_chain":{"const":"1"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"1"}}}},{"if":{"properties":{"target_chain":{"const":"56"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"56"}}}},{"if":{"properties":{"target_chain":{"const":"143"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"143"}}}},{"if":{"properties":{"target_chain":{"const":"4663"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"4663"}}}},{"if":{"properties":{"target_chain":{"const":"5042"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"5042"}}}},{"if":{"properties":{"target_chain":{"const":"8453"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"8453"}}}},{"if":{"properties":{"target_chain":{"const":"42161"}},"required":["target_chain"]},"then":{"properties":{"contra_chain":{"const":"42161"}}}}],"description":"Submit on the separate edge origin POST /v1/orders?chain_id=<numeric chain> with hexadecimal user_signature and, only when permit typed data was returned, evm_permit_signature. Numeric target/contra chain IDs must be identical and match the explicit query chain_id. Wallet identity is derived from authentication. Echo the exact returned typed-data strings; Solana nonce/deadline fields are not accepted."},"TypedOrderV2":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","const":"typed_order"},"setup":{"type":"object","additionalProperties":false,"properties":{"approve_transaction":{"oneOf":[{"$ref":"#/components/schemas/TypedOrderApprovalTransactionV2"},{"type":"null"}]}},"required":["approve_transaction"]},"order_typed_data":{"type":"string","minLength":1,"maxLength":16384,"description":"Exact returned EIP-712 JSON string. Parse for wallet signing while preserving integer strings; echo this original string in submission without reserializing or changing fields."},"permit_typed_data":{"oneOf":[{"type":"string","minLength":1,"maxLength":16384,"description":"Exact returned EIP-712 JSON string. Parse for wallet signing while preserving integer strings; echo this original string in submission without reserializing or changing fields."},{"type":"null"}]},"submit_payload":{"$ref":"#/components/schemas/TypedOrderSubmitPayloadV2"}},"required":["kind","setup","order_typed_data","permit_typed_data","submit_payload"],"allOf":[{"if":{"properties":{"permit_typed_data":{"type":"null"}},"required":["permit_typed_data"]},"then":{"properties":{"submit_payload":{"not":{"required":["evm_permit_typed_data"]}}}},"else":{"properties":{"submit_payload":{"required":["evm_permit_typed_data"]}}}}],"description":"EVM limit authorization: confirm returned approval if present; sign the EIP-712 order and optional Permit2 typed data with the authenticated EVM wallet. Null approval/permit means that step is not required. No backend signer or broadcast occurs."},"EvmLimitExecutionPreviewV2":{"type":"object","additionalProperties":false,"properties":{"order_type":{"type":"string","const":"limit"},"operation":{"type":"string","enum":["same_chain_buy","same_chain_sell"]},"quote_id":{"type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_-]{1,256}$"},"asset_decimals":{"type":"integer","minimum":0,"maximum":18},"source_chain_id":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]},"destination_chain_id":{"type":"string","enum":["1","56","143","4663","5042","8453","42161"]},"source_asset":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"destination_asset":{"type":"string","minLength":42,"maxLength":42,"pattern":"^0x[0-9a-fA-F]{40}$","not":{"anyOf":[{"pattern":"^0x0{40}$"},{"pattern":"^0x[eE]{40}$"}]},"description":"ERC-20 contract address. Zero and native-token sentinel addresses are rejected; both tokens must be distinct and pass live chain/token validation."},"exact_input_atomic":{"type":"string","pattern":"^[1-9][0-9]*$","maxLength":78,"description":"Exact positive atomic input as a canonical uint256 decimal string. Runtime rejects values above 2^256-1."},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."},"platform_fee_bps":{"type":"integer","minimum":0,"maximum":1000},"fees":{"type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#/components/schemas/LimitOrderFeeV2"}},"authorization_requirement":{"type":"string","const":"interactive_client_signature"},"prepared":{"$ref":"#/components/schemas/TypedOrderV2"},"source_balance_observation":{"allOf":[{"$ref":"#/components/schemas/SourceBalanceObservationV2"},{"properties":{"commitment":{"const":"latest"}},"not":{"required":["slot"]}}]}},"required":["order_type","operation","quote_id","asset_decimals","source_chain_id","destination_chain_id","source_asset","destination_asset","exact_input_atomic","limit_price_usd","expire_time","platform_fee_bps","fees","authorization_requirement","prepared"],"allOf":[{"if":{"properties":{"operation":{"const":"same_chain_sell"}},"required":["operation"]},"then":{"required":["source_balance_observation"]},"else":{"not":{"required":["source_balance_observation"]}}},{"if":{"properties":{"source_chain_id":{"const":"1"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"1"}}}},{"if":{"properties":{"source_chain_id":{"const":"56"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"56"}}}},{"if":{"properties":{"source_chain_id":{"const":"143"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"143"}}}},{"if":{"properties":{"source_chain_id":{"const":"4663"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"4663"}}}},{"if":{"properties":{"source_chain_id":{"const":"5042"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"5042"}}}},{"if":{"properties":{"source_chain_id":{"const":"8453"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"8453"}}}},{"if":{"properties":{"source_chain_id":{"const":"42161"}},"required":["source_chain_id"]},"then":{"properties":{"destination_chain_id":{"const":"42161"}}}}],"description":"Prepared same-chain EVM limit authorization for the authenticated owned EVM wallet. It contains no guaranteed output, native wrapping or cross-chain execution. Sell-all becomes one exact live balance snapshot. Client confirms any required approval, signs the returned typed data, and submits through the separate edge origin. EVM placement requires the explicit matching chain_id query on edge."},"OrderBundleTermsV2":{"type":"object","additionalProperties":false,"properties":{"destination_chain_id":{"type":"string","const":"8453"},"source_budget_usdc_atomic":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"target_asset":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"limit_price_usd":{"type":"string","maxLength":37,"pattern":"^(?!0(?:\\.0+)?$)(?:0|[1-9][0-9]{0,17})(?:\\.[0-9]{1,18})?$","description":"Positive USD limit price with at most 18 integer and 18 fractional digits. Exponents and leading zeroes are rejected."},"expire_time":{"type":"string","format":"date-time","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$","description":"Valid future UTC timestamp at whole-second precision, at most 30 days from preparation. The server checks calendar validity and rejects expired timestamps."}},"required":["destination_chain_id","source_budget_usdc_atomic","target_asset","limit_price_usd","expire_time"],"description":"Client checkpoint terms for Solana USDC to Base USDC to an ERC-20 limit buy. Terms are untrusted inputs, not a signed allocation or server workflow. Expiry is future UTC seconds within 30 days for preparation; return recovery may use the original expired terms."},"OrderBundleContextV2":{"type":"object","additionalProperties":false,"properties":{"terms":{"$ref":"#/components/schemas/OrderBundleTermsV2"},"funding_request_id":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"source_transaction_id":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{64,88}$"}},"required":["terms","funding_request_id","source_transaction_id"]},"OrderBundleReturnContextV2":{"type":"object","additionalProperties":false,"properties":{"terms":{"$ref":"#/components/schemas/OrderBundleTermsV2"},"funding_request_id":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"source_transaction_id":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{64,88}$"},"order_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,256}$"}},"required":["terms","funding_request_id","source_transaction_id"]},"OrderBundleWaitV2":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","enum":["pending","needs_review"]},"reason":{"type":"string","minLength":1,"maxLength":100}},"required":["state","reason"]},"OrderBundleBridgeEvidenceV2":{"type":"object","additionalProperties":false,"properties":{"request_id":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"source_transaction_id":{"type":"string","minLength":64,"maxLength":88},"destination_transaction_ids":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","minLength":64,"maxLength":88}},"sent_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"received_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"source_commitment":{"type":"string","enum":["confirmed","canonical_mined"]},"destination_commitment":{"type":"string","enum":["confirmed","canonical_mined"]},"source_block":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"destination_blocks":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"}}},"required":["request_id","source_transaction_id","destination_transaction_ids","sent_atomic","received_atomic","source_commitment","destination_commitment","source_block","destination_blocks"],"description":"Owned provider request cross-checked with chain receipts. Confirmed Solana or canonical mined Base observations can reorganize; this is not an irreversible settlement or exclusive allocation proof."},"OrderBundlePreparedV2":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"ready"},"terms":{"$ref":"#/components/schemas/OrderBundleTermsV2"},"owned_wallets":{"type":"object","additionalProperties":false,"properties":{"solana":{"type":"string","minLength":32,"maxLength":44},"evm":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"required":["solana","evm"]},"funding":{"$ref":"#/components/schemas/SvmToEvmQuoteV2"}},"required":["state","terms","owned_wallets","funding"]},"OrderBundleOrderReadyV2":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"ready"},"terms":{"$ref":"#/components/schemas/OrderBundleTermsV2"},"funding":{"$ref":"#/components/schemas/OrderBundleBridgeEvidenceV2"},"order":{"$ref":"#/components/schemas/EvmLimitExecutionPreviewV2"}},"required":["state","terms","funding","order"]},"OrderBundleOrderPreparedV2":{"oneOf":[{"$ref":"#/components/schemas/OrderBundleOrderReadyV2"},{"$ref":"#/components/schemas/OrderBundleWaitV2"}]},"OrderBundleReturnReadyV2":{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"ready"},"return_quote":{"$ref":"#/components/schemas/EvmToSvmQuoteV2"},"remaining_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"accounting":{"type":"object","additionalProperties":false,"properties":{"funded_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"order_input_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"confirmed_spent_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"live_balance_atomic":{"type":"string","pattern":"^(0|[1-9][0-9]{0,77})$"},"allocation":{"type":"string","const":"client_checkpoint"}},"required":["funded_atomic","order_input_atomic","confirmed_spent_atomic","live_balance_atomic","allocation"]}},"required":["state","return_quote","remaining_atomic","accounting"],"description":"Fresh exact-amount quote for the user to sign. Does not reserve funds, prove original bundle/order causality, or exclude a prior return attempt. The client must hold the original placement acknowledgment and stop after any return attempt or ambiguous/lost checkpoint."},"OrderBundleReturnPreparedV2":{"oneOf":[{"$ref":"#/components/schemas/OrderBundleReturnReadyV2"},{"$ref":"#/components/schemas/OrderBundleWaitV2"},{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"not_required"},"reason":{"type":"string","const":"no_remaining_usdc"}},"required":["state","reason"]}]},"OrderBundleBridgeStatusV2":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"state":{"type":"string","const":"ready"},"bridge":{"$ref":"#/components/schemas/OrderBundleBridgeEvidenceV2"}},"required":["state","bridge"]},{"$ref":"#/components/schemas/OrderBundleWaitV2"}]}},"securitySchemes":{"adminBearerAuth":{"bearerFormat":"opaque-admin-session","description":"App-owned opaque administrator session; never interchangeable with a Privy user token.","scheme":"bearer","type":"http"},"bearerAuth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"},"mobileReleaseId":{"description":"Unique bounded delivery identifier included in the signed bytes.","in":"header","name":"x-arbital-release-id","type":"apiKey"},"mobileReleaseSignature":{"description":"v1 base64 HMAC-SHA256 over id.timestamp.rawBody.","in":"header","name":"x-arbital-release-signature","type":"apiKey"},"mobileReleaseTimestamp":{"description":"Unix timestamp in seconds included in the signed bytes.","in":"header","name":"x-arbital-release-timestamp","type":"apiKey"},"priceWsTicket":{"description":"Sec-WebSocket-Protocol contains arbital.market.prices.v1 first and the short-lived opaque arbital.market.prices.ticket.<UUID> value second.","in":"header","name":"Sec-WebSocket-Protocol","type":"apiKey"},"rpcWsTicket":{"description":"Sec-WebSocket-Protocol contains arbital.rpc.v1 and the short-lived arbital.ticket.<JWT> value.","in":"header","name":"Sec-WebSocket-Protocol","type":"apiKey"},"terminalWsTicket":{"description":"Sec-WebSocket-Protocol contains arbital.terminal.v1 and the short-lived opaque arbital.terminal.ticket.<UUID> value.","in":"header","name":"Sec-WebSocket-Protocol","type":"apiKey"},"messagingWsTicket":{"description":"Sec-WebSocket-Protocol contains arbital.messaging.v1 and the short-lived opaque arbital.messaging.ticket.<UUID> value.","in":"header","name":"Sec-WebSocket-Protocol","type":"apiKey"}}},"info":{"title":"Arbital API","version":"0.1.0"},"openapi":"3.1.0","paths":{"/v2/chat-invites/{invite_id}/accept":{"post":{"operationId":"acceptChatInvite","parameters":[{"$ref":"#/components/parameters/ChatInviteId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedChatInvite"}}},"description":"Invitation accepted and membership activated"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chat-invites/{invite_id}/decline":{"post":{"operationId":"declineChatInvite","parameters":[{"$ref":"#/components/parameters/ChatInviteId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatInvite"}}},"description":"Invitation declined"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/dm":{"post":{"operationId":"createDirectChat","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDirectChatRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Chat"}}},"description":"Direct chat created or returned idempotently"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/group":{"post":{"operationId":"createGroupChat","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupChatRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Chat"}}},"description":"Group chat created with the caller as owner"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/{chat_id}":{"get":{"operationId":"getChat","parameters":[{"$ref":"#/components/parameters/ChatId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Chat"}}},"description":"Authorized chat metadata"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/{chat_id}/invites":{"post":{"operationId":"createChatInvite","parameters":[{"$ref":"#/components/parameters/ChatId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChatInviteRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatInvite"}}},"description":"Seven-day chat invitation created"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]},"get":{"operationId":"listChatInvites","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatInviteStateFilter"},{"$ref":"#/components/parameters/MessagingCursor"},{"$ref":"#/components/parameters/MessagingPageLimit"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatInvitePage"}}},"description":"Cursor page of pending, unexpired invitations"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Owners and admins only; members receive 403 and non-members 404. Invitees keep using GET /v2/me/chat-invites."}},"/v2/chats/{chat_id}/messages":{"get":{"operationId":"listChatMessages","parameters":[{"$ref":"#/components/parameters/ChatId"},{"in":"query","name":"before","required":false,"schema":{"maxLength":19,"minLength":1,"pattern":"^[1-9][0-9]*$","type":"string"}},{"in":"query","name":"after","required":false,"schema":{"maxLength":19,"minLength":1,"pattern":"^[1-9][0-9]*$","type":"string"}},{"$ref":"#/components/parameters/MessagingPageLimit"},{"$ref":"#/components/parameters/PositionSnapshotVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessagePage"},"examples":{"externalGifReply":{"summary":"Illustrative history page containing a GIF-only reply","value":{"messages":[{"message_id":"33333333-3333-4333-8333-333333333333","chat_id":"44444444-4444-4444-8444-444444444444","author_user_id":"55555555-5555-4555-8555-555555555555","client_message_id":"11111111-1111-4111-8111-111111111111","body":"","reply_to_message_id":"22222222-2222-4222-8222-222222222222","sequence":"12","version":"1","created_at_unix_ms":1790726400000,"edited_at_unix_ms":null,"deleted_at_unix_ms":null,"author":{"user_id":"55555555-5555-4555-8555-555555555555","username":"alice","display_name":null,"avatar_url":null},"gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}],"next_cursor":null}}}}},"description":"Authorized cursor page of chat messages"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Pages through authorized DM or group messages, including optional saved external GIF references. References remain readable when new GIF writes are disabled and are omitted when absent or deleted. Resolve the exact provider/id/slug from the end-user client; Arbital returns no KLIPY rendition URLs or bytes. Existing sequence cursors and membership/block checks are unchanged."},"post":{"operationId":"sendChatMessage","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/PositionSnapshotVersion"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendChatMessageRequest"},"examples":{"text":{"value":{"body":"Hello","client_message_id":"11111111-1111-4111-8111-111111111111"}},"media":{"summary":"Bind an approved upload for this exact chat","value":{"body":"","client_message_id":"11111111-1111-4111-8111-111111111111","media_ids":["22222222-2222-4222-8222-222222222222"]}},"externalGif":{"summary":"An illustrative KLIPY reference selected in the client; no caption or upload required","value":{"client_message_id":"11111111-1111-4111-8111-111111111111","gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}},"externalGifReply":{"summary":"Reply with a KLIPY GIF to an existing message in the same DM or group chat; IDs are illustrative","value":{"client_message_id":"11111111-1111-4111-8111-111111111111","reply_to_message_id":"22222222-2222-4222-8222-222222222222","body":"My reaction","gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}}}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessage"},"examples":{"externalGifReply":{"summary":"Illustrative GIF-only reply; provider identifiers are fixtures, not verified live media","value":{"message_id":"33333333-3333-4333-8333-333333333333","chat_id":"44444444-4444-4444-8444-444444444444","author_user_id":"55555555-5555-4555-8555-555555555555","client_message_id":"11111111-1111-4111-8111-111111111111","body":"","reply_to_message_id":"22222222-2222-4222-8222-222222222222","sequence":"12","version":"1","created_at_unix_ms":1790726400000,"edited_at_unix_ms":null,"deleted_at_unix_ms":null,"author":{"user_id":"55555555-5555-4555-8555-555555555555","username":"alice","display_name":null,"avatar_url":null},"gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}}}}},"description":"Durably committed chat message"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"413":{"$ref":"#/components/responses/MessagingProblem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Sends text, approved message media_ids, or one external KLIPY gif reference to a DM or group chat after current membership and bilateral block checks. reply_to_message_id optionally identifies an existing parent in this exact chat. Without gif, body remains required and an empty body requires media. With gif, body may be omitted or empty and captions may contain at most 2000 Unicode code points. gif and nonempty media_ids cannot be combined. Ordered media IDs bind atomically with the message; a GIF reference stores only provider/id/slug and requires no upload. With GIF writes enabled, identical currently authorized retries return the existing message; ordered uploaded-media slots retain their current deletion state and cannot be revived. Changed body, reply target, ordered media IDs or GIF reference returns 409 messaging_conflict. Retrying an erased GIF reference also conflicts. SOCIAL_EXTERNAL_GIFS_ENABLED defaults to false; disabled GIF writes return 503 messaging_unavailable for every submitted gif, including retries. Reconcile prior sends through GET history when writes are disabled. A disabled uploaded-media write gate also returns 503 messaging_unavailable. Malformed or unusable attachments return 400 invalid_messaging_request. The backend makes no provider calls or GIF-byte moderation; the client resolves KLIPY items and applies receiver-side filtering. HTTP history and message.created WebSocket frames return the same reference without URLs, even when GIF writes are disabled."}},"/v2/chats/{chat_id}/read":{"put":{"operationId":"setChatRead","parameters":[{"$ref":"#/components/parameters/ChatId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetChatReadRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatReadState"}}},"description":"Monotonic read position for the authenticated chat member"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Monotonic read acknowledgement. Read implies delivered, so the delivered watermark advances too. A sequence past the latest committed message is 400 sequence_out_of_range."}},"/v2/me/chat-invites":{"get":{"operationId":"listMyChatInvites","parameters":[{"$ref":"#/components/parameters/MessagingCursor"},{"$ref":"#/components/parameters/MessagingPageLimit"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatInvitePage"}}},"description":"Unexpired pending invitations for the caller"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/me/chats":{"get":{"operationId":"listMyChats","parameters":[{"$ref":"#/components/parameters/MessagingCursor"},{"$ref":"#/components/parameters/MessagingPageLimit"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatPage"}}},"description":"Cursor page of the caller's chats"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/messaging/ws/tickets":{"post":{"description":"Mints an opaque one-time Messaging WebSocket ticket that expires after 45 seconds. Offer ticket_protocol as a WebSocket subprotocol; never place it in a URL.","operationId":"createMessagingWebSocketTicket","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagingWebSocketTicket"}}},"description":"One-time Messaging WebSocket ticket","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"413":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"parameters":[{"$ref":"#/components/parameters/PositionSnapshotVersion"}]}},"/v2/messaging/ws":{"get":{"description":"Upgrades to the authenticated Messaging event stream. Offer arbital.messaging.v1 and the ticket_protocol returned by POST /v2/messaging/ws/tickets as WebSocket subprotocols. Reconcile HTTP state after every connection or resync_required frame.","operationId":"openMessagingWebSocketV1","parameters":[{"in":"query","name":"version","schema":{"const":"1","default":"1","type":"string"}},{"in":"query","name":"position_snapshot_version","required":false,"schema":{"type":"string","enum":["1","2"],"default":"1"},"description":"Maximum position snapshot version understood by this connection. Protocol version remains 1; stored v1 remains v1."}],"responses":{"101":{"description":"Messaging WebSocket upgrade accepted"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"messagingWsTicket":[]}],"tags":["Messaging"],"x-websocket-schema":"docs/messaging/ws-messaging-v1.schema.json"}},"/v2/admin-auth/oidc-challenges":{"post":{"operationId":"createAdminOidcChallenge","responses":{"201":{"description":"Single-use OIDC nonce challenge","content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"challenge_id":{"format":"uuid","type":"string"},"expires_at_unix":{"type":"integer"},"nonce":{"minLength":32,"maxLength":128,"type":"string","writeOnly":true}},"required":["challenge_id","expires_at_unix","nonce"],"type":"object"}}}},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Admin authentication"]}},"/v2/admin-auth/oidc-sessions":{"post":{"operationId":"verifyAdminOidcSession","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"challenge_id":{"format":"uuid","type":"string"},"id_token":{"minLength":20,"maxLength":16384,"type":"string","writeOnly":true},"nonce":{"minLength":32,"maxLength":128,"type":"string","writeOnly":true}},"required":["challenge_id","id_token","nonce"],"type":"object"}}}},"responses":{"200":{"description":"Recent-MFA challenge for a pre-provisioned administrator","content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"challenge_id":{"format":"uuid","type":"string"},"expires_at_unix":{"type":"integer"},"mfa_ticket":{"minLength":32,"maxLength":128,"type":"string","writeOnly":true}},"required":["challenge_id","expires_at_unix","mfa_ticket"],"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Admin authentication"]}},"/v2/admin-auth/mfa-sessions":{"post":{"operationId":"createAdminMfaSession","requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"challenge_id":{"format":"uuid","type":"string"},"code":{"pattern":"^[0-9]{6}$","type":"string","writeOnly":true},"mfa_ticket":{"minLength":32,"maxLength":128,"type":"string","writeOnly":true}},"required":["challenge_id","code","mfa_ticket"],"type":"object"}}}},"responses":{"201":{"description":"Opaque, revocable administrator session","content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"expires_at_unix":{"type":"integer"},"session_token":{"minLength":32,"maxLength":128,"type":"string","writeOnly":true}},"required":["expires_at_unix","session_token"],"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Admin authentication"]}},"/v2/admin-auth/session":{"get":{"operationId":"getAdminSession","responses":{"200":{"description":"Current administrator session and authorization"},"401":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"adminBearerAuth":[]}],"tags":["Admin authentication"]},"delete":{"operationId":"revokeAdminSession","responses":{"204":{"description":"Session revoked"},"401":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"adminBearerAuth":[]}],"tags":["Admin authentication"]}},"/v2/admin-approvals":{"post":{"operationId":"createAdminApproval","responses":{"201":{"description":"Pending request-bound independent approval"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"adminBearerAuth":[]}],"tags":["Admin approvals"]}},"/v2/admin-approvals/{approvalId}/approve":{"post":{"operationId":"approveAdminApproval","parameters":[{"in":"path","name":"approvalId","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Approval granted by a distinct recent-MFA administrator"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"adminBearerAuth":[]}],"tags":["Admin approvals"]}},"/health/live":{"get":{"operationId":"getLiveness","responses":{"204":{"description":"Process is alive"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"}},"tags":["System"]}},"/health/ready":{"get":{"operationId":"getReadiness","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}},"description":"Service and database are ready"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["System"]}},"/support":{"get":{"description":"Public CALLD safety and support page with working contact information. No authentication is required.","operationId":"getCalldSupportPage","responses":{"200":{"content":{"text/html":{"schema":{"type":"string"}}},"description":"CALLD safety and support page"}},"tags":["System"]}},"/openapi.json":{"get":{"operationId":"getOpenApiDocument","responses":{"200":{"description":"OpenAPI 3.1 document"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"}},"tags":["System"]}},"/v1/webhooks/mobile-release-publications":{"post":{"description":"Accepts a store-published build assertion from the authenticated mobile release pipeline. Equal and lower builds are idempotent no-ops.","operationId":"publishMobileRelease","parameters":[{"in":"header","name":"x-arbital-release-id","required":true,"schema":{"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]*$","type":"string"}},{"in":"header","name":"x-arbital-release-timestamp","required":true,"schema":{"pattern":"^[1-9][0-9]*$","type":"string"}},{"in":"header","name":"x-arbital-release-signature","required":true,"schema":{"maxLength":256,"pattern":"^v1,[A-Za-z0-9+/]+={0,2}$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"build":{"maximum":2147483647,"minimum":1,"type":"integer"},"platform":{"enum":["ios","android"],"type":"string"}},"required":["platform","build"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"latest_build":{"minimum":1,"type":"integer"},"minimum_supported_build":{"minimum":1,"type":"integer"},"outcome":{"enum":["advanced","already_current","superseded"],"type":"string"},"platform":{"enum":["ios","android"],"type":"string"},"requested_build":{"minimum":1,"type":"integer"}},"required":["platform","requested_build","latest_build","minimum_supported_build","outcome"],"type":"object"}}},"description":"The policy converged monotonically on the published build.","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"mobileReleaseId":[],"mobileReleaseSignature":[],"mobileReleaseTimestamp":[]}],"tags":["Mobile"]}},"/v1/notification-devices":{"put":{"description":"Registers or refreshes one authenticated app installation. The user is always derived from the bearer token.","operationId":"registerNotificationDevice","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationDeviceRegistration"}}},"required":true},"responses":{"204":{"description":"Installation registered"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Notifications"]}},"/v1/notification-devices/{installation_id}":{"delete":{"description":"Idempotently disables an installation owned by the authenticated user.","operationId":"removeNotificationDevice","parameters":[{"in":"path","name":"installation_id","required":true,"schema":{"maxLength":128,"minLength":16,"pattern":"^[A-Za-z0-9._:-]+$","type":"string"}}],"responses":{"204":{"description":"Installation disabled or already absent"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Notifications"]}},"/v1/notifications":{"get":{"description":"Returns the authenticated user's durable in-app inbox newest first. Pages may be short or empty while next_cursor is non-null; continue until next_cursor is null. Visibility checks examine a bounded history window per request. Read state combines individual acknowledgements with the user's mark-all cutoff. Older activity covered by that cutoff stays read if it later becomes visible; newer activity can make an existing group unread. Current visibility is always checked independently. Contract 2 supports 18 kinds. Legacy responses preserve 11 kinds and omit unsupported new-only rows while advancing the cursor; pure mentions never masquerade as direct replies.","operationId":"listNotifications","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/NotificationPage"},{"$ref":"#/components/schemas/NotificationPageV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Notifications"]}},"/v1/notifications/{id}/read":{"patch":{"description":"Idempotently acknowledges currently authorized, unsuppressed activity on one owned notification through the requested activity revision. Hidden activity is not individually acknowledged. Legacy bodyless requests acknowledge the server-observed boundary and return 204. A prior mark-all cutoff remains effective independently.","operationId":"markNotificationRead","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationSingleReadV2"}}}},"204":{"description":"Notification marked read"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Notifications"],"requestBody":{"required":false,"description":"Required only for contract=2. Legacy requests remain bodyless and return 204.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"through_activity_revision":{"type":"string","pattern":"^(0|[1-9][0-9]{0,18})$","maxLength":19}},"required":["through_activity_revision"]}}}}}},"/v1/funding/usdc":{"get":{"operationId":"getUsdcFundingInstructions","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcFundingInstructions"}}},"description":"Canonical Solana USDC settlement destination for wallet funding providers"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Funding"]}},"/v1/me":{"get":{"deprecated":true,"description":"Use the corresponding /v2/me operation. V2 adds username and cross-chain delivery readiness.","operationId":"getMe","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}},"description":"Profile and active wallet"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}},"description":"Profile created while wallet provisioning continues"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]},"patch":{"deprecated":true,"description":"Use the corresponding /v2/me operation. V2 adds username and cross-chain delivery readiness.","operationId":"updateMe","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}},"description":"Profile updated with an active wallet"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}},"description":"Profile updated while wallet provisioning continues"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]}},"/v1/product-access":{"get":{"deprecated":true,"description":"Optional UX preflight only. Clients may stop calling this route and handle typed execution denials; backend product-access enforcement remains mandatory.","operationId":"getProductAccess","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAccess"}}},"description":"Current product-access decision"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Product Access"]}},"/v2/mobile/version-policy":{"get":{"description":"Returns the operator-managed release policy for one mobile platform.","operationId":"getMobileVersionPolicy","parameters":[{"in":"query","name":"platform","required":true,"schema":{"enum":["ios","android"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MobileVersionPolicy"}}},"description":"Current mobile release policy","headers":{"Cache-Control":{"description":"Allows clients and shared caches to reuse the policy for five minutes.","schema":{"const":"public, max-age=300","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[],"tags":["Mobile"]}},"/v2/market/ai-picks":{"get":{"description":"Returns a 90-day newest-first feed of deterministic exact-contract market-attention picks. Use the opaque revision-scoped cursor to continue into older observations without offset drift.","operationId":"getProductMarketAiPicksV2","parameters":[{"in":"query","name":"evidence","required":false,"schema":{"type":"string","enum":["ai-picks-v1"]},"description":"Opt into independent input clocks and coverage. Omit for the legacy response shape. Unknown capabilities return invalid_ai_picks_query. Top-level freshness remains refresh health, not per-item market freshness. Market deadlines come from ranking; attention deadlines are persisted at retrieval using that generation's stale-after duration and twice that duration for usability. Serving policy cannot renew them. Missing historical attention policy or evidence means unavailable, never fresh; negative historical dollar fields are null in both modes."},{"in":"query","name":"view","required":false,"schema":{"default":"global","enum":["global","memes","robinhood"],"type":"string"}},{"in":"query","name":"horizon","required":false,"schema":{"const":"24h","default":"24h","type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","required":false,"schema":{"maxLength":180,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketAiPicksResponseV2"}}},"description":"A bounded page from the AI picks feed"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/charts/ws":{"get":{"description":"Upgrades to a pooled provider-independent live OHLCV stream for one canonical asset and resolution. Arc uses the Mobula chart path; Birdeye-only streams do not admit Arc. Messages carry generation, sequence, server time, and an opaque resume cursor; an unavailable cursor produces resync_required followed by current state.","operationId":"openProductMarketLiveChartWebSocketV1","parameters":[{"in":"query","name":"version","required":false,"schema":{"default":1,"enum":[1],"type":"integer"}},{"in":"query","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"query","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}},{"in":"query","name":"resolution","required":true,"schema":{"enum":["1s","15s","30s","1m","5m","1h","4h","1d"],"type":"string"}},{"description":"Opaque cursor from the last received chart state message. Exact current cursors resume; older or retired generations require history resynchronization.","in":"query","name":"resume_cursor","required":false,"schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"101":{"description":"Live chart WebSocket protocol upgrade accepted"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market Realtime"],"x-websocket-schema":"docs/market-data/ws-product-chart-v1.schema.json"}},"/v2/market/prices/ws/tickets":{"post":{"description":"Mints an opaque one-time live-price WebSocket ticket that expires after 45 seconds. Offer protocol first and ticket_protocol second as WebSocket subprotocols; never place the credential in a URL.","operationId":"createProductMarketLivePriceWebSocketTicketV1","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketLivePriceWebSocketTicketV1"}}},"description":"One-time browser live-price WebSocket ticket","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Product Market Realtime"]}},"/v2/market/prices/ws":{"get":{"description":"Upgrades to a pooled provider-independent live USD price stream. Native clients may use a Privy bearer header. Browser version-1 clients offer protocol and ticket_protocol from POST /v2/market/prices/ws/tickets in that order. Version 1 accepts up to 64 canonical assets and preserves its wire shape. Both versions accept optional price_status: v1 on subscribe to expose per-token freshness, safe update reasons, original provider observation times and finite deadlines. The legacy aggregate status is price availability, never client connection health; use actual WebSocket events and heartbeat timeouts for connection health. Without this capability the original item shape is preserved. Version 2 accepts up to 3 assets and supports per-item evidence when its subscribe message requests evidence: price-v1; omission preserves the prior strict v2 shape. Evidence includes (availability, coverage, original source/method clocks and finite expiry); evidence absence in an older release means unknown. Prices become stale after 5 seconds and null after 120 seconds from their original observation, independently of heartbeats or other assets. Version 2 continuation accepts only the current generation/revision, otherwise returns resync_required plus current state; it does not replay history. Equivalent configured source policies share logical asset subscriptions below independent route admission. WS schemas: /schemas/product-prices-ws-v1.json and /schemas/product-prices-ws-v2.json. These indicative observations cannot authorize holdings, portfolio totals, quotes or execution.","operationId":"openProductMarketPricesWebSocketV1","parameters":[{"description":"WebSocket message protocol. Omit for backward-compatible version 1; select version 2 for token_info.","in":"query","name":"version","required":false,"schema":{"default":1,"enum":[1,2],"type":"integer"}}],"responses":{"101":{"description":"Live price WebSocket protocol upgrade accepted"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{"priceWsTicket":[]}],"tags":["Product Market Realtime"],"x-websocket-schema":"docs/market-data/ws-product-prices-v1.schema.json","x-websocket-schemas":{"1":"docs/market-data/ws-product-prices-v1.schema.json","2":"docs/market-data/ws-product-prices-v2.schema.json"}}},"/v2/market/search":{"get":{"description":"q alone preserves six legacy matches or one exact address result. Any asset_class, chain_id, cursor or limit opts into catalogue search (default 20, max 50). Tokens use positive audited crypto identities; Stocks use issuer-verified exact contracts; unknowns appear only in All. Class/network filters precede ranking of the full collected catalogues. Ranking is exact symbol/name, prefix, then substring, with canonical identity tie-break. All adds at most 20 Codex candidates; coverage is explicitly non-exhaustive. Exact addresses obey filters. Cursors pin a process-local snapshot for 30 seconds and bind q, class, chain and limit; expiration, eviction or restart requires restarting search. Missing or possibly truncated required catalogues return 503.","operationId":"searchProductMarketTokensV1","parameters":[{"in":"query","name":"q","required":true,"schema":{"maxLength":64,"minLength":2,"type":"string"}},{"in":"query","name":"asset_class","schema":{"type":"string","enum":["all","tokens","stocks"],"default":"all"}},{"in":"query","name":"chain_id","schema":{"type":"string","enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"]}},{"in":"query","name":"cursor","schema":{"type":"string","maxLength":256,"pattern":"^[A-Za-z0-9_-]{1,256}$"}},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAssetSearchResponse"}}},"description":"A bounded relevance-ranked token result set","headers":{"Cache-Control":{"description":"No-store when provider/search evidence is present.","schema":{"type":"string","const":"no-store"}}}},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/tokens/summaries":{"post":{"description":"Returns lightweight token detail projections for up to 20 unique canonical assets. Input order is preserved and provider failures are represented independently per item.","operationId":"summarizeProductMarketTokensV1","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketTokenSummariesRequestV1"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketTokenSummariesResponseV1"}}},"description":"Ordered token summaries and per-asset resolution statuses"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/tokens/{chain_id}/{address}":{"get":{"description":"Returns bounded provider-normalized metadata and market detail plus nullable informational Birdeye security signals for one canonical asset. Arc detail is Mobula-backed and intentionally receives no Birdeye security enrichment. Token detail remains available when security enrichment is unavailable.","operationId":"getProductMarketTokenV1","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTokenDetailResponseV1"}}},"description":"Current token metadata, market detail, and optional security enrichment"},"400":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/tokens/{chain_id}/{address}/holders":{"get":{"description":"Returns a bounded, display-only Mobula top-holder snapshot enriched from permitted public CALLD, FOMO, and Pump identities. Known pools, contracts, and lockers are excluded; unclassified addresses remain visible and are not verified human wallets. Arc remains outside the existing chain allowlist. Buy/sell counts are provider totals; P&L is a provider gross estimate with fees excluded. Holder facts are request-time observations and are never portfolio, quote, or execution authority.","operationId":"getProductMarketHolderProfilesV1","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:4663","eip155:8453"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}},{"description":"Maximum rows to return from the filtered provider window, including unclassified addresses. Defaults to 100.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page and bound to that provider snapshot. A 409 response means the snapshot changed and pagination must restart.","in":"query","name":"cursor","required":false,"schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketHolderProfilesResponseV1"}}},"description":"Current holder facts plus available public platform identity matches"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Product Market"]}},"/v2/market/tokens/{chain_id}/{address}/candles":{"get":{"description":"Returns sorted, timestamp-deduplicated USD OHLCV history for one canonical asset. Arc history uses Mobula. A missing candle bucket means no trades occurred; it does not indicate missing data, and the server does not synthesize zero-volume candles. The all range returns up to 1,500 one-minute candles and supports backward pagination with before_ms. The five_minutes, thirty_minutes, and two_hours ranges seed the sub-minute live resolutions (1s, 15s, 30s). The chart WebSocket sends the latest active candle on connection and subsequent revisions.","operationId":"getProductMarketTokenCandlesV1","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}},{"in":"query","name":"range","required":false,"schema":{"default":"day","enum":["five_minutes","thirty_minutes","hour","two_hours","day","week","month","year","all"],"type":"string"}},{"description":"Exclusive millisecond upper bound for loading the page before the oldest currently loaded candle.","in":"query","name":"before_ms","required":false,"schema":{"pattern":"^[1-9][0-9]*$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTokenChartResponseV1"}}},"description":"Chronological USD OHLCV candles"},"400":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/tokens/{chain_id}/{address}/trades":{"get":{"description":"Returns a newest-first, provider-normalized page of observed on-chain token trades with an opaque next_cursor. Default application/json remains the strict legacy representation. Send the exact Accept value application/vnd.arbital.trade-page+json to request optional evidence; other Accept values retain legacy JSON. Responses vary by Accept and are no-store. Older servers may return legacy JSON to this request; consumers must tolerate absent evidence without inventing it. Arc history uses Mobula. Values are display-only market data and are not settlement or execution authority.","operationId":"getProductMarketTokenTradesV1","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque cursor returned as next_cursor by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}},{"deprecated":true,"description":"Legacy offset. Use cursor for new integrations; do not send both.","in":"query","name":"offset","required":false,"schema":{"default":0,"maximum":10000,"minimum":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductTokenTradePageV1"}},"application/vnd.arbital.trade-page+json":{"schema":{"$ref":"#/components/schemas/ProductTokenTradePageV2"}}},"description":"Bounded on-chain token trade page"},"400":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/stats/ws":{"get":{"description":"Public current snapshots and updates of liquidity, rolling volumes and percentage changes, trade-flow windows, supply and holder statistics for one canonical token. All viewers share one Mobula subscription per asset, throttled at the provider to 30 updates/minute. Field receipt and expiry are independent; heartbeat does not freshen statistics. No price/valuation remapping, identity or safety overlay. Reconnect for a current snapshot; use HTTP detail for initialization/recovery. Capacity errors permit bounded retry. See docs/market-data/live-token-statistics.md for limits and freshness.","operationId":"openProductMarketTokenStatsWebSocketV1","parameters":[{"in":"query","name":"version","required":true,"schema":{"default":1,"enum":[1],"type":"integer"}},{"in":"query","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"query","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}}],"responses":{"101":{"description":"Token statistics WebSocket upgrade accepted"},"400":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market Realtime"],"x-websocket-schema":"docs/market-data/ws-product-token-stats-v1.schema.json"}},"/v2/market/trades/ws":{"get":{"description":"Upgrades to a pooled Birdeye live on-chain trade stream for one canonical token. Arc is intentionally unsupported and returns terminal HTTP 422 live_token_trades_unsupported; use its Mobula REST history. Connect before loading history, then deduplicate by event_id. No replay: reconnecting, disconnect or consumer_lagged requires bounded history reseed without claiming complete missed-event delivery. Provider/capacity failures permit bounded retry.","operationId":"openProductMarketLiveTradesWebSocketV1","parameters":[{"in":"query","name":"version","required":false,"schema":{"default":1,"enum":[1],"type":"integer"}},{"in":"query","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:8453","eip155:42161"],"type":"string"}},{"in":"query","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}}],"responses":{"101":{"description":"Live token trade WebSocket protocol upgrade accepted"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"description":"Permanent live capability gap: live_token_trades_unsupported. Do not retry this live subscription; REST history remains independent.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market Realtime"],"x-websocket-schema":"docs/market-data/ws-product-token-trades-v1.schema.json"}},"/v2/market/gainers":{"get":{"description":"Returns the top gainers by rolling 24-hour percentage price change, with the largest gain first. Category all composes the existing canonical Crypto and Stocks catalogues with an independent, filtered Codex open-market memecoin ranking; category can select one universe. Values are percentage points, zero and missing changes are excluded, and exact contract duplicates follow curated-source priority. Reads only shared server snapshots refreshed every 30 seconds; no request-time provider or chart fan-out. Missing categories are explicit and usable snapshots expire after five minutes. An available empty list is distinct from 503 unavailability. Fetch mini-charts separately from the candles endpoint using each item asset and range=day.","operationId":"getProductMarketGainersV1","tags":["Product Market"],"parameters":[{"name":"category","in":"query","required":false,"description":"Explore tab. all combines the three supported product universes. memecoins uses the eligible open-market launchpad universe.","schema":{"type":"string","enum":["all","crypto","memecoins","stocks"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows in this ranked list. Use 2 for the Explore cards.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"A ranked snapshot, with explicit category availability and freshness","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketMoversResponseV1"}}}},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/market/losers":{"get":{"description":"Returns the top losers by rolling 24-hour percentage price change, with the largest decline first. Category all composes the existing canonical Crypto and Stocks catalogues with an independent, filtered Codex open-market memecoin ranking; category can select one universe. Values are percentage points, zero and missing changes are excluded, and exact contract duplicates follow curated-source priority. Reads only shared server snapshots refreshed every 30 seconds; no request-time provider or chart fan-out. Missing categories are explicit and usable snapshots expire after five minutes. An available empty list is distinct from 503 unavailability. Fetch mini-charts separately from the candles endpoint using each item asset and range=day.","operationId":"getProductMarketLosersV1","tags":["Product Market"],"parameters":[{"name":"category","in":"query","required":false,"description":"Explore tab. all combines the three supported product universes. memecoins uses the eligible open-market launchpad universe.","schema":{"type":"string","enum":["all","crypto","memecoins","stocks"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum rows in this ranked list. Use 2 for the Explore cards.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"A ranked snapshot, with explicit category availability and freshness","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketMoversResponseV1"}}}},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/market/hot-searches":{"get":{"description":"Returns a bounded GMGN hot-search ranking. Arc is intentionally unsupported because GMGN does not cover it. Values are display-only observations and are never balance, quote, or execution authority.","operationId":"getProductMarketHotSearchesV1","parameters":[{"description":"Canonical chain to rank.","in":"query","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:4663","eip155:8453"],"type":"string"}},{"description":"Ranking and activity window. Defaults to 24h.","in":"query","name":"interval","required":false,"schema":{"default":"24h","enum":["1m","5m","1h","6h","24h"],"type":"string"}},{"description":"Maximum rows to return. Defaults to 100.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketHotSearchResponseV1"}}},"description":"A cached hot-search snapshot for the selected chain and interval"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/surge":{"get":{"description":"Returns GMGN positive token-signal market-cap moves for the selected window, ranked by change. Arc is intentionally unsupported. Omit chain_id to merge all supported chains. Values are display-only observations and never execution authority.","operationId":"getProductMarketSurgeV1","parameters":[{"description":"Canonical supported chain. Omit for All chains.","in":"query","name":"chain_id","required":false,"schema":{"enum":["solana:mainnet-beta","eip155:56","eip155:4663"],"type":"string"}},{"description":"Signal lookback window. Defaults to 1h.","in":"query","name":"interval","required":false,"schema":{"default":"1h","enum":["1m","5m","1h","6h","24h"],"type":"string"}},{"description":"Maximum rows to return. Defaults to 20.","in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":20,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketSurgeResponseV1"}}},"description":"A cached Surge snapshot ranked by positive market-cap change"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/trending":{"get":{"description":"Returns the shared server-polled Trending snapshot for the All selection or one canonical supported chain. To opt into pagination for a ranked market tab, provide view and follow next_cursor while preserving view and limit. Ranked-view cursors are snapshot-bound and return 409 after a rerank. chain_id and view are mutually exclusive.","operationId":"getProductMarketTrendingV1","parameters":[{"description":"Canonical selected chain. Omit for the All selection.","in":"query","name":"chain_id","required":false,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"description":"Ranked market view to page. Omit to preserve the legacy All/per-chain snapshot contract.","in":"query","name":"view","required":false,"schema":{"enum":["global","crypto","stocks","graduated","bonding","memes","most_held","robinhood"],"type":"string"}},{"description":"Maximum ranked-view rows to return. Used only with view and defaults to 20.","in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous ranked-view page. Preserve view and limit across requests.","in":"query","name":"cursor","required":false,"schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"query","name":"evidence","required":false,"description":"Opt into ranking-v1 evidence. Omit for legacy payloads. Unknown capabilities return 400; reconnect obtains only the current snapshot, never replay.","schema":{"type":"string","enum":["ranking-v1"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductMarketTrendingResponseV1"}}},"description":"A bounded legacy Trending snapshot or one optional ranked-view page"},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market"]}},"/v2/market/ws":{"get":{"description":"Upgrades to the provider-independent token-discovery WebSocket protocol for Trending, Crypto, Solana Stocks, Graduated, Bonding, memes, and Robinhood views. Version 2 supports opt-in coalesced changed-row delivery for live market values.","operationId":"openProductMarketWebSocketV1","parameters":[{"description":"WebSocket message protocol. Omit for the backward-compatible three-view version 1 contract; select version 2 for named views or version 3 for stock categories.","in":"query","name":"version","required":false,"schema":{"default":1,"enum":[1,2,3],"type":"integer"}},{"in":"query","name":"evidence","required":false,"description":"Opt into ranking-v1 evidence. Omit for legacy payloads. Unknown capabilities return 400; reconnect obtains only the current snapshot, never replay.","schema":{"type":"string","enum":["ranking-v1"]}}],"responses":{"101":{"description":"WebSocket protocol upgrade accepted"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Product Market Realtime"],"x-websocket-schema":"docs/market-data/ws-product-market-v1.schema.json","x-websocket-schemas":{"1":"docs/market-data/ws-product-market-v1.schema.json","2":"docs/market-data/ws-product-market-v2.schema.json","3":"docs/market-data/ws-product-market-v3.schema.json"}}},"/v2/me":{"get":{"operationId":"getMeV2","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeV2"}}},"description":"Profile and active wallet"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeV2"}}},"description":"Profile created while wallet provisioning continues"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]},"patch":{"operationId":"updateMeV2","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeV2Request"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeV2"}}},"description":"Profile updated with an active wallet"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeV2"}}},"description":"Profile updated while wallet provisioning continues"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]}},"/v2/me/wallet-link/preflight":{"post":{"description":"Checks a wallet-only Privy identity before profile or managed-wallet provisioning. A collision returns an opaque recovery token, the surviving account's available social login methods, and masked account and wallet hints.","operationId":"preflightWalletLinkRecoveryV2","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"maxProperties":0,"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"continue"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"expires_at":{"format":"date-time","type":"string"},"provider_hints":{"additionalProperties":false,"maxProperties":2,"properties":{"google":{"maxLength":13,"pattern":"^[^@*\\s]{1,4}\\*{4}@[a-zA-Z0-9]\\*{3}$","type":"string"},"twitter":{"maxLength":7,"pattern":"^@[a-zA-Z0-9_]{1,3}\\*{3}$","type":"string"}},"type":"object"},"providers":{"items":{"enum":["google","twitter"],"type":"string"},"maxItems":2,"minItems":1,"type":"array","uniqueItems":true},"recovery_token":{"maxLength":4096,"minLength":100,"type":"string"},"state":{"const":"recovery_required"},"wallet_hint":{"maxLength":10,"minLength":10,"pattern":"^0x[0-9a-f]{2}\\*{3}[0-9a-f]{3}$","type":"string"}},"required":["expires_at","provider_hints","providers","recovery_token","state","wallet_hint"],"type":"object"}]}}},"description":"Wallet onboarding may continue, or an existing parent must be recovered"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]}},"/v2/me/wallet-link/authorize":{"post":{"description":"Proves that the current social login is the exact surviving parent authorized for a pending Privy account transfer.","operationId":"authorizeWalletLinkRecoveryV2","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"recovery_token":{"maxLength":4096,"minLength":100,"type":"string"}},"required":["recovery_token"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"expires_at":{"format":"date-time","type":"string"},"recovery_token":{"maxLength":4096,"minLength":100,"type":"string"},"state":{"const":"authorized"},"wallet_address":{"pattern":"^0x[0-9a-f]{40}$","type":"string"}},"required":["expires_at","recovery_token","state","wallet_address"],"type":"object"}}},"description":"The exact surviving parent is authorized to receive the wallet"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]}},"/v2/me/wallet-link/complete":{"post":{"description":"Revalidates the completed Privy transfer, finalizes the Dex parent retirement, and atomically reconciles the external wallet to the surviving Arbital user.","operationId":"completeWalletLinkRecoveryV2","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"recovery_token":{"maxLength":4096,"minLength":100,"type":"string"}},"required":["recovery_token"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"state":{"const":"completed"}},"required":["state"],"type":"object"}}},"description":"Wallet login now resolves to the surviving Arbital and Dex account"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]}},"/v2/me/username-availability":{"get":{"description":"Checks a normalized CALLD username and returns up to three available alternatives. This response is advisory: PATCH /v2/me is the only atomic claim authority.","operationId":"getUsernameAvailability","parameters":[{"in":"query","name":"username","required":true,"schema":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameAvailability"}}},"description":"Advisory availability result","headers":{"Cache-Control":{"schema":{"const":"private, no-store"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity"]}},"/v2/me/blocks":{"get":{"description":"Lists the authenticated user's private block list. Responses are private and must not be stored.","operationId":"listBlockedUsers","parameters":[{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockedUserPage"}}},"description":"Private page of blocked users","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social Safety"]}},"/v2/me/blocks/{user_id}":{"delete":{"description":"Idempotently unblocks a user without restoring prior follows. The private response must not be stored.","operationId":"unblockUser","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockState"}}},"description":"Canonical private block state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social Safety"]},"put":{"description":"Idempotently blocks a user and removes follows in both directions. The private response must not be stored.","operationId":"blockUser","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockState"}}},"description":"Canonical private block state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social Safety"]}},"/v2/me/follow-suggestion-dismissals/{user_id}":{"put":{"description":"Idempotently suppresses one X-derived suggestion for the authenticated user. The private response must not be stored.","operationId":"dismissFollowSuggestion","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionDismissal"}}},"description":"Canonical private dismissal state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social Safety"]}},"/v2/me/follow-suggestions":{"get":{"description":"Lists private X-derived follow suggestions without creating follow edges.","operationId":"listXFollowSuggestions","parameters":[{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FollowSuggestionPage"}}},"description":"X-derived Arbital profile matches","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/following/{user_id}":{"delete":{"description":"Idempotently removes a follow edge.","operationId":"unfollowUser","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FollowState"}}},"description":"Canonical idempotent follow state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]},"put":{"description":"Idempotently follows an active Arbital user.","operationId":"followUser","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FollowState"}}},"description":"Canonical idempotent follow state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/profile-media/{kind}":{"put":{"description":"Uploads a JPEG or PNG profile image of at most 2 MiB. The backend strips metadata and publishes the image only after moderation approves it. Moderation failure is fail-closed. Cover uploads remain disabled. Community media uses the separate authenticated /v2/social-media API.","operationId":"uploadProfileMedia","parameters":[{"in":"path","name":"kind","required":true,"schema":{"enum":["profile"],"type":"string"}},{"in":"query","name":"expected_profile_version","required":true,"schema":{"minimum":1,"type":"integer"}}],"requestBody":{"content":{"image/jpeg":{"schema":{"format":"binary","maxLength":2097152,"type":"string"}},"image/png":{"schema":{"format":"binary","maxLength":2097152,"type":"string"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileMediaUpload"}}},"description":"Approved profile image published and profile version advanced"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/profile-media/x-avatar":{"post":{"description":"Imports the avatar from the authenticated user's Privy-verified X account. The backend downloads from the pinned X CDN, normalizes it, and publishes it only after moderation approves it. The request has no body and moderation failure is fail-closed.","operationId":"importXAvatar","parameters":[{"in":"query","name":"expected_profile_version","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileMediaUpload"}}},"description":"Approved X avatar published and profile version advanced"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/social-post-media":{"post":{"deprecated":true,"description":"Retired post-media upload route. Authenticated requests always receive 422 content_rejected before body storage. Use POST /v2/social-media with an intended scope, then bind its ID on a supported parent write.","operationId":"uploadSocialPostMedia","requestBody":{"content":{"image/gif":{"schema":{"format":"binary","type":"string"}},"image/jpeg":{"schema":{"format":"binary","type":"string"}},"image/png":{"schema":{"format":"binary","type":"string"}},"image/webp":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/me/watchlist":{"get":{"description":"Lists the authenticated user's private watchlist in newest-first order. Entries contain stable identities only; mutable market metadata comes from the market APIs.","operationId":"listWatchlist","parameters":[{"in":"query","name":"kind","required":false,"schema":{"default":"all","enum":["all","token"],"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistPage"}}},"description":"Private watchlist page","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-user watchlist request budget exhausted","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}},"Retry-After":{"description":"Whole seconds until the user's watchlist route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}}},"security":[{"bearerAuth":[]}],"tags":["Watchlist"]}},"/v2/me/watchlist/tokens/{chain_id}/{address}":{"delete":{"description":"Idempotently removes the Token target from the authenticated user's watchlist.","operationId":"removeTokenFromWatchlist","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistState"}}},"description":"Current private membership state","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-user watchlist request budget exhausted","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}},"Retry-After":{"description":"Whole seconds until the user's watchlist route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}}},"security":[{"bearerAuth":[]}],"tags":["Watchlist"]},"get":{"description":"Reads the authenticated user's Token watchlist membership.","operationId":"getTokenWatchlistMembership","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistState"}}},"description":"Current private membership state","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-user watchlist request budget exhausted","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}},"Retry-After":{"description":"Whole seconds until the user's watchlist route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}}},"security":[{"bearerAuth":[]}],"tags":["Watchlist"]},"put":{"description":"Idempotently adds the Token target to the authenticated user's watchlist.","operationId":"addTokenToWatchlist","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":44,"minLength":32,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistState"}}},"description":"Current private membership state","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-user watchlist request budget exhausted","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}},"Retry-After":{"description":"Whole seconds until the user's watchlist route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private watchlist problem","headers":{"Cache-Control":{"description":"Private user-specific state must not be stored","schema":{"const":"private, no-store"}}}}},"security":[{"bearerAuth":[]}],"tags":["Watchlist"]}},"/v2/me/trader-follows":{"get":{"description":"Lists the authenticated user's private follows for Fomo and Pump profiles in the active monitored cohorts.","operationId":"listTraderFollows","parameters":[{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderFollowPage"}}},"description":"Private trader-follow page"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Graph"]}},"/v2/me/trader-follows/{platform}/{platform_actor_id}":{"parameters":[{"in":"path","name":"platform","required":true,"schema":{"enum":["fomo","pump"],"type":"string"}},{"in":"path","name":"platform_actor_id","required":true,"schema":{"maxLength":180,"minLength":1,"type":"string"}}],"get":{"description":"Reads private follow state for one monitored public trader profile.","operationId":"getTraderFollow","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderFollowState"}}},"description":"Canonical trader-follow state"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Graph"]},"put":{"description":"Idempotently follows a public trader profile that is already in an active monitored cohort.","operationId":"followTrader","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderFollowState"}}},"description":"Canonical trader-follow state"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Graph"]},"delete":{"description":"Idempotently unfollows a public trader profile.","operationId":"unfollowTrader","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderFollowState"}}},"description":"Canonical trader-follow state"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Graph"]}},"/v2/me/x-discovery":{"get":{"description":"Returns the authenticated user's server-owned X discovery authorization state. Tokens are never returned.","operationId":"getXDiscoveryStatus","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XDiscoveryStatus"}}},"description":"X identity and discovery authorization state"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social"]},"delete":{"description":"Revokes CALLD's stored X discovery authorization and clears the reusable server-owned credentials.","operationId":"disconnectXDiscovery","responses":{"204":{"description":"X discovery authorization disconnected"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/x-discovery/oauth-start":{"post":{"description":"Creates a one-time X OAuth 2.0 PKCE flow for discovery using only tweet.read, users.read, follows.read, and offline.access. The connected X identity must match the Privy-verified X account.","operationId":"startXDiscoveryAuthorization","parameters":[{"description":"Relative frontend path to resume after the callback.","in":"query","name":"return_path","required":false,"schema":{"default":"/onboarding","maxLength":512,"pattern":"^/(?!/)[^\\\\?#\\x00-\\x1F\\x7F]*$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XDiscoveryAuthorizationStart"}}},"description":"One-time X authorization URL"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/x-following-syncs":{"post":{"description":"Starts a staged X following import and processes its first page. Omit the body (preferred) to use the server-owned discovery authorization, or send the legacy x_access_token request.","operationId":"startXFollowingSync","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XFollowSyncRequest"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XFollowSync"}}},"description":"X following import finished or reached a terminal state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XFollowSync"}}},"description":"X following import requires another continuation call","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"examples":{"localBudget":{"value":{"code":"social_rate_limited","message":"social request budget is temporarily exhausted"}},"upstreamX":{"value":{"code":"x_rate_limited","message":"X following synchronization is temporarily rate limited"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"The app user's shared route budget or upstream X request budget is exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the local route window resets or the bounded upstream retry delay elapses","schema":{"maximum":900,"minimum":1,"type":"integer"}}}},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/x-following-syncs/{sync_id}/continue":{"post":{"description":"Fetches and matches the next page for an existing X following import. Omit the body (preferred) to use the server-owned discovery authorization, or send the legacy x_access_token request.","operationId":"continueXFollowingSync","parameters":[{"in":"path","name":"sync_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XFollowSyncRequest"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XFollowSync"}}},"description":"X following import finished or reached a terminal state","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XFollowSync"}}},"description":"X following import requires another continuation call","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"examples":{"localBudget":{"value":{"code":"social_rate_limited","message":"social request budget is temporarily exhausted"}},"upstreamX":{"value":{"code":"x_rate_limited","message":"X following synchronization is temporarily rate limited"}}},"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"The app user's shared route budget or upstream X request budget is exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the local route window resets or the bounded upstream retry delay elapses","schema":{"maximum":900,"minimum":1,"type":"integer"}}}},"502":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/me/x-publishing":{"get":{"operationId":"getPulseXPublishingStatus","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Successful Pulse response"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Pulse"]}},"/v2/me/x-publishing/disconnect":{"delete":{"operationId":"disconnectPulseXPublishing","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Successful Pulse response"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Pulse"]}},"/v2/me/x-publishing/oauth-start":{"post":{"operationId":"startPulseXPublishingOAuth","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Successful Pulse response"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Pulse"]}},"/v3/portfolio":{"get":{"description":"Request-time Codex wallet snapshot for the authenticated principal's server-resolved Privy wallets. Codex supplies holdings, quantities, token cards, and matching wallet-position cost basis without a direct-chain display overlay. There is no PostgreSQL portfolio fallback. Not quote or sell authority; the quote path still revalidates a live chain balance.","operationId":"getPortfolioV3","parameters":[{"description":"Compatibility flag accepted after a confirmed wallet change. Every request already reads Codex, so this does not change snapshot retention. When set, a live Solana or EVM balance read does not join an overlapping in-flight balance read.","in":"query","name":"refresh","required":false,"schema":{"enum":["1"],"type":"string"}},{"description":"Opt in to a display-only provider position recap on eligible balance rows. Omit this parameter to preserve the legacy terminal response shape.","in":"query","name":"include","required":false,"schema":{"enum":["position_recap"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodexWatchPortfolio"}}},"description":"Observed wallet balances and market cards","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v3/portfolio/indexer":{"get":{"description":"Returns the existing portfolio response shape using finalized Arbital Indexer quantities and eligible indexed cost basis on Indexer-supported chains. Identity-checked Codex token metadata and market marks enrich indexed holdings; Codex wallet quantities and display basis are used only on supported EVM chains outside Indexer coverage. A failed Indexer read never falls back to Codex on a chain owned by the Indexer. Reads create no portfolio or trading state.","operationId":"getIndexerPortfolioV3","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodexWatchPortfolio"}}},"description":"Indexer-owned holdings plus Codex fallback holdings outside Indexer chain coverage in the existing response shape","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v3/portfolio/performance":{"get":{"description":"Returns current complete marked spot-wallet equity, canonical Solana USDC cash, raw equity change, and actual historical observations for the authenticated principal. The server records at most one complete observation per UTC hour. Native gas assets are included only when priced; Hyperliquid/perps and pending cross-chain arrivals are not included.","operationId":"getPortfolioPerformance","parameters":[{"in":"query","name":"range","required":true,"schema":{"enum":["24h","7d","30d","all"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioPerformance"}}},"description":"Current portfolio totals and bounded historical observations","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v3/portfolio/swaps":{"get":{"description":"Request-time swap history from Codex for the principal's server-resolved Privy wallets. There is no PostgreSQL or social trade-history fallback. Same-chain DEX pool events only; platformFee, trade ids, referral, and Relay bridges are null. Combines up to ten verified canonical wallets across supported chains, newest first, at most 50 events per page. Equal-second events preserve provider order within a wallet/chain and canonical source order across sources. Pagination replays the consumed boundary-second prefix; it is not an immutable provider snapshot. Any unavailable source or exhausted request budget fails the whole page without advancing. Unknown wallet identity is unavailable. Display only; never balance, quote, execution or settlement authority.","operationId":"getPortfolioSwaps","parameters":[{"description":"Opaque next_cursor returned by the previous page (maximum 2048 characters); bound to the current verified wallet set. Pass unchanged. ISO-8601 and legacy v1 cursors are accepted only as exclusive time seeks, not exact continuations. Changed boundary history or wallet identity requires restarting without a cursor.","in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":2048}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodexWatchSwapHistory"}}},"description":"Observed same-chain DEX swaps","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v3/portfolio/swaps/{chain_id}/{address}":{"get":{"description":"Request-time swap history of one token on one chain from Codex for the principal's server-resolved Privy wallets. Only wallets on the token's chain are read and the provider filters to swaps whose input or output is that token; a chain without a wallet returns an empty complete page. Native coins trade through their wrapped token: address native is rejected with 400. Same page shape, ordering, cursor rules and failure semantics as GET /v3/portfolio/swaps; the cursor is bound to the wallet set and the token. Display only; never balance, quote, execution or settlement authority.","operationId":"getPortfolioAssetSwaps","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},{"description":"Canonical Solana mint or nonzero EVM token address, or native for the chain native asset. EVM case is normalized.","in":"path","name":"address","required":true,"schema":{"minLength":1,"maxLength":128,"type":"string"}},{"description":"Opaque next_cursor returned by the previous page of this token's history (maximum 2048 characters); bound to the current verified wallet set and the token. Pass unchanged. A cursor from the unscoped history or another token is rejected with 400.","in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":2048}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodexWatchSwapHistory"}}},"description":"Observed same-chain DEX swaps","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v2/profile-media/default/v1/{character}/{hue_file}":{"get":{"description":"Returns one immutable, pre-approved CALLD meme-character avatar composite. These shared defaults bypass user-content moderation; uploaded and X-imported profile images do not.","operationId":"getDefaultProfileAvatar","parameters":[{"in":"path","name":"character","required":true,"schema":{"enum":["01-frog","02-doge","03-ape","04-cat","05-pengu","06-moonboy","07-bull","08-bear","09-whale","10-caller"],"type":"string"}},{"in":"path","name":"hue_file","required":true,"schema":{"enum":["01-orange.png","02-lime.png","03-cyan.png","04-indigo.png","05-green.png","06-yellow.png","07-red.png","08-pink.png"],"type":"string"}}],"responses":{"200":{"content":{"image/png":{"schema":{"format":"binary","type":"string"}}},"description":"Immutable 512 by 512 default profile avatar"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Identity"]}},"/v2/profile-media/{user_id}/{kind}/{asset}":{"get":{"description":"Reads an approved profile image through the backend-owned immutable media URL. Unapproved, superseded, unsafe, cover, and post assets are indistinguishable from missing assets.","operationId":"getProfileMedia","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"kind","required":true,"schema":{"enum":["profile"],"type":"string"}},{"in":"path","name":"asset","required":true,"schema":{"pattern":"^[0-9a-f-]+\\.(jpg|png)$","type":"string"}}],"responses":{"200":{"content":{"image/jpeg":{"schema":{"format":"binary","type":"string"}},"image/png":{"schema":{"format":"binary","type":"string"}}},"description":"Approved immutable profile image"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Social"]}},"/v2/social/x-discovery/callback":{"get":{"description":"X OAuth callback consumed by the backend. On success or failure it redirects to the configured frontend return URL with an x_discovery outcome query parameter.","operationId":"completeXDiscoveryAuthorization","parameters":[{"in":"query","name":"code","required":false,"schema":{"maxLength":4096,"type":"string"}},{"in":"query","name":"state","required":false,"schema":{"pattern":"^[0-9a-f]{64}$","type":"string"}},{"in":"query","name":"error","required":false,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect to the configured frontend onboarding path","headers":{"Location":{"description":"Frontend URL containing x_discovery=authorized, denied, or invalid_callback.","schema":{"format":"uri","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Social"]}},"/v2/social/assets/{chain_id}/{address}/comments":{"get":{"description":"Lists visible root token comments only, including deletion tombstones, newest first. Reports current holder and restriction-aware posting eligibility. Replies are paged separately through their exact parent.","operationId":"listSocialAssetComments","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetCommentPage"}}},"description":"Visible token comments and current posting eligibility"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"post":{"description":"Creates a token comment after strict input validation and a fresh positive direct chain balance check.","operationId":"createSocialAssetComment","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialAssetCommentRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetComment"}}},"description":"Token comment created","headers":{"Idempotent-Replay":{"description":"true for a successful matching committed replay.","schema":{"type":"string","enum":["true"]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"description":"content_idempotency_conflict or mention_target_changed; no partial creation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/assets/{chain_id}/{address}/comments/{comment_id}/replies":{"get":{"description":"Lists visible direct replies to this exact token comment, newest first by creation time and ID. Use next_cursor for older replies in the same token and parent scope. Deleted parents remain readable but cannot receive replies. Hidden, removed, blocked or inactive-author ancestry is inaccessible. Requires authentication; no holder balance is required to read. Eligibility uses a fresh balance and social restrictions; an unavailable provider returns 503. Visible native replies may contain an external gif reference. Resolve it from the end-user client; provider failure does not invalidate the reply page. Deleted placeholders omit gif. Turning off GIF-reference writes does not remove saved references from reads.","operationId":"listSocialAssetCommentReplies","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"path","name":"comment_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Direct replies, active count and current participation eligibility","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetCommentReplyPage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"post":{"description":"Creates a direct reply to the exact visible undeleted token comment. The authenticated account must be unrestricted and hold a fresh positive live balance of this token. Stores the token and direct parent; cannot create replies in another token or private chat. Accepts ordered asset_comment_reply media_ids and an optional caption; media-only replies keep the same fresh holder and text moderation checks. Nonempty media_ids returns 503 social_media_disabled while writes are disabled; invalid media returns 400 invalid_social_media. Also accepts one public KLIPY gif reference with optional caption, without a media upload. Reject gif with nonempty media_ids, null references, arbitrary URLs and unknown reference fields. SOCIAL_EXTERNAL_GIFS_ENABLED defaults false; disabled GIF-reference writes return 503 social_media_disabled independently of the upload gate. The backend stores the reference atomically and performs no provider calls or GIF-byte moderation. Receiver lookup restrictions must be reviewed before activation.","operationId":"createSocialAssetCommentReply","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"path","name":"comment_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialAssetCommentReplyRequest"},"examples":{"text":{"value":{"body":"A reply"}},"media":{"summary":"Bind an approved upload with the reply scope","value":{"media_ids":["11111111-1111-4111-8111-111111111111"]}},"gif":{"summary":"GIF-only external reference (illustrative identifiers; opt-in feature gate)","value":{"gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}},"captioned_gif":{"summary":"Caption with the same single external reference","value":{"body":"My reaction","gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}}}}},"required":true},"responses":{"201":{"description":"Token comment reply created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetComment"}}},"headers":{"Idempotent-Replay":{"description":"true for a successful matching committed replay.","schema":{"type":"string","enum":["true"]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"description":"content_idempotency_conflict or mention_target_changed; no partial creation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/assets/{chain_id}/{address}/comments/{comment_id}":{"delete":{"description":"Soft-deletes a root comment or reply owned by the authenticated viewer in this exact token. Retains a body-null tombstone and descendants. Owners can remove their content even if no longer a token holder or socially restricted. Other owners, missing IDs and IDs from other assets return 404.","operationId":"deleteSocialAssetComment","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"path","name":"comment_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Comment deleted"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts":{"get":{"description":"Lists the community post feed. A valid bearer token adds viewer-specific like and block filtering; anonymous reads are allowed. Pinned posts sort first, then creation time and ID. Pass next_cursor unchanged: it captures the complete ordering position. Legacy cursors remain accepted. Pin changes are live rather than a snapshot; refresh to restart the current ordering. Explicit sort opts into the combined live pagination contract; new filters without sort are invalid. Legacy requests keep their previous response. Opt-in native post items remain raw SocialRankedPost objects. Checkpoints are null for anonymous reads and continuation pages; retain the accepted first-page checkpoint. Live rank changes may skip or repeat items; deduplicate by post id. Old combined snapshot cursors require a first-page refresh (410).","operationId":"listSocialPosts","parameters":[{"in":"query","name":"sort","schema":{"type":"string","enum":["latest","top","most_discussed"]},"description":"latest: original publication time; top: versioned fixed-point score with stable diversity rounds; most_discussed: known discussion counts, participants, publication time and stable identity. Unknown discussion counts sort after known counts without removing the content."},{"in":"query","name":"category","schema":{"type":"string","enum":["all","memes","equities"]},"description":"Applied to current canonical subject evidence before each owner limit. Unknown classifications are eligible only for all."},{"in":"query","name":"period","schema":{"type":"string","enum":["24h","7d","30d"]}},{"in":"query","name":"sources","schema":{"type":"string","maxLength":32}},{"in":"query","name":"asset","schema":{"type":"string","maxLength":200}},{"in":"query","name":"company","schema":{"type":"string","maxLength":128},"description":"Canonical company ID (company:aapl), explicit ticker (AAPL), or an unambiguous alias in the complete canonical registry. Unknown canonical IDs return an empty result. Does not infer a company from a token ticker."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"in":"query","name":"cursor","schema":{"type":"string","maxLength":8192},"description":"Pass the opaque next_cursor unchanged. Combined live cursors require the same filters, page size and viewer; legacy combined snapshot cursors return 410."}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialPostPage"},{"$ref":"#/components/schemas/SocialRankedPostPage"}]}}},"description":"Community posts"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"501":{"description":"A required capability is unavailable; no sample fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedCapabilityProblem"}}}},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]},"post":{"description":"Creates a community post containing text and/or structured token, post or position attachments. Send a position with chain_id and address, without snapshot, to capture the authenticated owner's current Codex holding as provider_reported. Caller-supplied snapshots remain author_claimed. Parent and attachment inserts are atomic. Unavailable or incomplete position observations return 503 position_snapshot_unavailable with no post written. Missing holdings or invisible source references return 404 attachment_reference_not_found. Approved post media_ids may accompany text and structured attachments or create a media-only post; publish_to_x must be explicitly false. A nonempty retired media URL array returns 422. A disabled media write gate returns 503 social_media_disabled; invalid ownership, scope, gallery or binding returns 400 invalid_social_media.","operationId":"createSocialPost","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialPostRequest"},"examples":{"text":{"value":{"body":"A community update","publish_to_x":false}},"media":{"summary":"Bind an approved post upload","value":{"media_ids":["11111111-1111-4111-8111-111111111111"],"publish_to_x":false}}}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPost"}}},"description":"Community post created","headers":{"Idempotent-Replay":{"description":"true for a successful matching committed replay.","schema":{"type":"string","enum":["true"]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/SocialRestricted"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"description":"content_idempotency_conflict or mention_target_changed; no partial creation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/ContentRejected"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}":{"delete":{"description":"Deletes an authenticated user's community post.","operationId":"deleteSocialPost","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Also delete the published X copy before deleting the local post.","in":"query","name":"delete_from_x","schema":{"default":false,"type":"boolean"}}],"responses":{"204":{"description":"Post deleted"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"get":{"description":"Returns one community post. A valid bearer token adds viewer-specific state; anonymous reads are allowed.","operationId":"getSocialPost","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPost"}}},"description":"Community post"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}/like":{"delete":{"operationId":"unlikeSocialPost","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Like removed"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"put":{"operationId":"likeSocialPost","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Post liked"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}/pin":{"delete":{"operationId":"unpinSocialPost","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Post unpinned"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"put":{"operationId":"pinSocialPost","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Post pinned"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}/x-retry":{"post":{"description":"Retries X publishing for an existing community post.","operationId":"retrySocialPostOnX","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"x_post_url":{"format":"uri","type":"string"}},"required":["x_post_url"],"type":"object"}}},"description":"Community post published to X"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/profiles":{"get":{"description":"Searches active Arbital community profiles by username prefix. A conventional leading @ is accepted and ignored. context=mention requires authentication and returns compact native targets without holdings/counts. It accepts a 1–30 ASCII username prefix after one optional @, defaults to 10 results (maximum 20), and uses a strict viewer/prefix-bound cursor of at most 512 bytes. Current status and bilateral blocks apply before LIMIT. Ordinary search remains unchanged.","operationId":"searchSocialCommunityProfiles","parameters":[{"in":"query","name":"query","required":true,"schema":{"maxLength":31,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page.","in":"query","name":"cursor","schema":{"maxLength":1024,"minLength":1,"type":"string"}},{"in":"query","name":"context","required":false,"schema":{"type":"string","enum":["mention"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PublicProfilePage"},{"$ref":"#/components/schemas/NativeMentionSearchPage"}]}}},"description":"Matching community profiles"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Graph"]}},"/v2/social/profiles/{username}":{"get":{"description":"Returns an Arbital community profile with relationship counts and optional viewer context.","operationId":"getSocialCommunityProfile","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":50,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialCommunityProfile"}}},"description":"Community profile"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]}},"/v2/social/profiles/{username}/posts":{"get":{"description":"Lists community posts created by an Arbital profile. Pinned posts sort first, then creation time and ID. Pass next_cursor unchanged: it captures the complete ordering position. Legacy cursors remain accepted. Pin changes are live rather than a snapshot; refresh to restart the current ordering.","operationId":"listSocialProfilePosts","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":50,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque posts cursor returned by the previous page.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPostPage"}}},"description":"Profile community posts"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]}},"/v2/social/profiles/{username}/mutuals":{"get":{"description":"Lists mutual follows for the requested community profile and authenticated viewer.","operationId":"listSocialProfileMutuals","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":50,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque mutuals cursor returned by the previous page.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialMutualPage"}}},"description":"Mutual community profiles"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/x/callback":{"get":{"description":"Completes X publishing OAuth and redirects to the configured frontend return URL.","operationId":"completeSocialXPublishingOAuth","responses":{"302":{"description":"Redirect to the frontend with the X publishing outcome","headers":{"Location":{"schema":{"format":"uri","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Social Community"]}},"/v2/quote":{"post":{"description":"Creates one short-lived same-chain buy/sell or cross-chain quote without an Idempotency-Key, lease, durable quote state, or pulse attribution. The client user-signs and broadcasts the returned transaction. Sell quotes revalidate the controlled wallet's live chain balance before provider work or sponsor signing and return that observation as source_balance_observation. Every response carries X-Request-ID, and every problem body carries the same value as request_id. A Relay no-route response returns 422 with code relay_no_swap_routes_found. With execution_mode=server and local signed-quote enablement, returns accepted limits and an expiring signed token instead of transaction bytes. This branch performs no quote/job/reservation writes and no signing. Same-user refreshes are coalesced and limited to one start per second per process; Retry-After accompanies 429. Explicit order_type=limit supports same-chain Solana USDC and supported EVM ERC-20 buy/sell for authenticated owned wallets under chain-specific admission when enabled in local or staging; no manual wallet or mint allowlist is required. Solana preparation and placement verify the target and USDC as initialized classic SPL mints through live RPC. EVM verifies distinct non-native ERC-20 contracts on the configured selected chain, with the funder resolved from authenticated EVM identity. The approved Arbital integrator fee is 50 bps (0.5%), separate from provider fees. Production limit orders remain disabled; sell_all snapshots a fixed live balance. Solana returns prepared.kind=signed_order; EVM returns prepared.kind=typed_order with optional funder-paid ERC-20 approval and exact EIP-712 order/Permit2 strings. Both omit provider and guaranteed-output fields. EVM requests use chain_id, asset_address, quote_asset_address and exact_input_atomic or sell_all; wallet identity comes from authentication. The client signs returned typed data and echoes the original strings with its hexadecimal signatures when submitting to edge. Sign and place through the separate edge origin POST /v1/orders after setup confirmation. Disabled or unavailable limit preparation returns 503; Solana server-execution wallets remain excluded; this Solana policy does not change EVM wallet ownership. TWAP, triggers, brackets and cross-chain limits are unsupported.","operationId":"createQuoteV2","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQuoteRequestV2"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteV2"}}},"description":"Client-signable market transaction or limit-order authorization, or opt-in signed server-execution terms","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"X-Request-ID":{"description":"Request correlation identifier for backend logs and provider diagnostics.","schema":{"minLength":1,"type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Execution Quotes"]}},"/v2/rpc-ws/tickets":{"post":{"description":"Mints a one-time, 45-second, chain-bound browser WebSocket ticket. The ticket is returned as a Sec-WebSocket-Protocol value and the response must never be stored.","operationId":"createRpcWebSocketTicket","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRpcWebSocketTicketRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RpcWebSocketTicket"}}},"description":"One-time RPC WebSocket ticket","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["RPC WebSocket"]}},"/v2/rpc-ws/{chain_id}":{"get":{"description":"Upgrades to the browser-safe, read-only JSON-RPC subscription gateway. Clients offer both arbital.rpc.v1 and the ticket_protocol returned by the ticket endpoint as WebSocket subprotocols.","operationId":"connectRpcWebSocket","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"$ref":"#/components/schemas/RpcWebSocketChainId"}}],"responses":{"101":{"description":"WebSocket protocol arbital.rpc.v1"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"rpcWsTicket":[]}],"tags":["RPC WebSocket"],"x-websocket-schema":"docs/rpc/ws-rpc-proxy-v1.schema.json"}},"/v2/social/token-feed/ws":{"get":{"description":"Upgrades to the durable public tweet-to-token feed. Exact assets are canonical; ambiguous cashtags remain explicitly ambiguous candidates.","operationId":"openSocialTokenFeedWebSocketV1","responses":{"101":{"description":"Social token feed WebSocket upgrade accepted"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Social Realtime"],"x-websocket-schema":"docs/market-data/ws-social-token-feed-v1.schema.json"}},"/v2/social/traders":{"get":{"description":"Without mode, legacy search requires query and supports limit 1-20; its 200 items shape is unchanged. mode selects a Fomo-only discovery page: new = Recently discovered by Arbital, for_you = Suggested traders, top_returns = Top traders. Suggested traders and Top traders retain the Fomo seven-day provider ranking within its top 100 candidates; Suggested traders excludes watched and dismissed profiles. No ML scoring or comparable thirty-day return ranking is claimed. Recently discovered uses the Indexer first-discovery clock, not account creation time, with no age cutoff. Omit period for new. The other modes default to 7d and accept explicit period=7d. Explicit period=30d, any period with new, missing discovery configuration or an unavailable Indexer recent-profile capability returns 501 trader_discovery_unsupported without retry instructions; thirty-day requests are never silently replaced with seven-day data. Transient source/admission failures return 503 with Retry-After; read-budget exhaustion returns 429. query cannot accompany mode. Discovery responses after authentication are private, no-store. Pagination pins source ordering and reapplies current profile eligibility and supported application exclusions. When exact-handle discovery is enabled, a successful empty indexed search may return discovery metadata. This queues bounded FOMO handle acquisition; it never treats a local index failure as a provider miss. Retry the same search after retry_after_seconds for queued/running/retry_scheduled/indexed states. not_found means FomoScan has no matching record, not that the person does not exist. Existing items remain authoritative and unchanged.","operationId":"searchSocialTraderProfiles","parameters":[{"in":"query","name":"query","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"},"description":"Required without mode; incompatible with mode."},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"},"description":"Legacy maximum 20; discovery mode maximum 50."},{"in":"query","name":"mode","schema":{"type":"string","enum":["for_you","top_returns","new"]},"description":"Stable wire keys: for_you means Suggested traders; top_returns means Top traders (provider ranking, not comparable returns); new means Recently discovered."},{"in":"query","name":"period","schema":{"type":"string","enum":["7d","30d"]},"description":"Discovery only. Omit for new. for_you and top_returns default to 7d; explicit 7d is supported. Explicit 30d or any period with new returns 501 unsupported, never a substituted success."},{"in":"query","name":"cursor","schema":{"type":"string","minLength":1,"maxLength":4096,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Discovery only. Reuse next_cursor unchanged with the same authenticated viewer, mode and limit; malformed or mismatched cursors return 400. Null next_cursor marks exhaustion; underfilled or empty pages may have a continuation."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTraderDirectoryResponse"}}},"description":"Unchanged legacy search items without mode, or a discovery page with items, next_cursor and honest source metadata when mode is supplied.","headers":{"Retry-After":{"description":"Seconds before retrying discovery; absent when no discovery is pending or delayed.","schema":{"type":"integer","minimum":0,"maximum":86400}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/TraderPrivateProblem"},"501":{"$ref":"#/components/responses/TraderDiscoveryUnsupported"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/resolve":{"get":{"description":"Resolves an eligible Fomo or pump.fun platform identity from a terminal event into its stable external trader profile. This does not resolve or return a CALLD user identity.","operationId":"resolveExternalTraderProfile","parameters":[{"in":"query","name":"platform","required":true,"schema":{"enum":["fomo","pump"],"type":"string"}},{"in":"query","name":"platform_subject_id","required":true,"schema":{"maxLength":180,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderProfile"}}},"description":"Eligible external trader profile","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/{trader_profile_id}":{"get":{"description":"Returns the public Fomo/pump.fun accounts and provider-verified wallets attached to one opaque external trader profile id. It never accepts a caller-supplied wallet override and never resolves to a CALLD user. Includes independent followers/watchers source counts and clocks, nullable totals, overlap disclosure and nullable viewer is_watching. External content remains request-time Indexer data.","operationId":"getExternalTraderProfile","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderProfileDetail"}}},"description":"External trader profile","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/TraderPrivateProblem"},"401":{"$ref":"#/components/responses/TraderPrivateProblem"},"404":{"$ref":"#/components/responses/TraderPrivateProblem"},"409":{"$ref":"#/components/responses/TraderPrivateProblem"},"429":{"$ref":"#/components/responses/TraderPrivateProblem"},"503":{"$ref":"#/components/responses/TraderPrivateProblem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/{trader_profile_id}/performance":{"get":{"description":"Returns the latest stored provider leaderboard summary for each eligible Fomo/pump.fun account. Coverage is provider_leaderboard_snapshot, not a wallet equity curve. period=30d opts into unsupported capability with null metrics/chart for visible subjects. Hidden/missing subjects remain 404 and identity/provider failures remain 503.","operationId":"getExternalTraderPerformance","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"period","schema":{"type":"string","const":"30d"},"description":"Omit for legacy seven-day/weekly summaries. 30d returns explicit unsupported capability, never a substituted shorter period."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderPerformanceResponse"}}},"description":"Latest provider leaderboard summaries","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/TraderPrivateProblem"},"401":{"$ref":"#/components/responses/TraderPrivateProblem"},"404":{"$ref":"#/components/responses/TraderPrivateProblem"},"409":{"$ref":"#/components/responses/TraderPrivateProblem"},"429":{"$ref":"#/components/responses/TraderPrivateProblem"},"503":{"$ref":"#/components/responses/TraderPrivateProblem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/{trader_profile_id}/history":{"get":{"operationId":"listSocialTraderHistory","summary":"Imported theses by a tracked trader","description":"Authenticated person history for a tracked Fomo/Pump trader: the theses they published across every token, newest first by the time Arbital observed them at the provider, each at its latest revision. Items use the same thesis shape and kind/source tags as the token discussion history, so clients can merge them with a CALLD profile's comments. source filters by platform. cursor is bound to this trader and pages on (observed_at_ms, sequence). 404 when no Fomo/Pump account maps to the profile id. Private/no-store; shares the asset comment read budget.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"maxLength":256,"minLength":1,"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"in":"query","name":"source","required":false,"schema":{"enum":["fomo","pump"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTraderHistoryPage"}}},"description":"The trader's imported theses, newest first","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Vary":{"schema":{"type":"string","const":"Authorization"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/traders/{trader_profile_id}/activity":{"get":{"description":"Returns newest-first Social Engine trades observed for this profile's eligible platform accounts. Coverage is observed_only and is not guaranteed complete wallet history.","operationId":"getExternalTraderActivity","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"maxLength":256,"minLength":1,"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderActivityPage"}}},"description":"Observed external trader activity","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/{trader_profile_id}/portfolio":{"get":{"description":"Reads Codex at request time for only the server-resolved, provider-verified public wallets attached to the profile. Coverage is verified_wallets. Provider failure is explicit and never becomes an empty portfolio. Optional include=position_recap adds current position recaps and experimental closed-position recaps without changing wallet authority or holdings.","operationId":"getExternalTraderPortfolio","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Opt in to current display-only Codex position recaps and experimental closed-position recaps. Closed recaps require complete bounded provider history; missing evidence stays unavailable. Default requests do not fetch closed-position history.","in":"query","name":"include","required":false,"schema":{"enum":["position_recap"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderPortfolio"}}},"description":"Request-time portfolio for verified external-trader wallets","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/{trader_profile_id}/swaps":{"get":{"description":"Reads Codex swap history for only the server-resolved, provider-verified public wallets attached to the profile. Coverage is provider_wallet_history. Combines up to ten verified canonical wallets across supported chains, newest first, at most 50 events per page. Equal-second events preserve provider order within a wallet/chain and canonical source order across sources. Pagination replays the consumed boundary-second prefix; it is not an immutable provider snapshot. Any unavailable source or exhausted request budget fails the whole page without advancing. Unknown wallet identity is unavailable. Display only; never balance, quote, execution or settlement authority.","operationId":"getExternalTraderSwaps","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":2048},"description":"Opaque next_cursor returned by the previous page (maximum 2048 characters); bound to the current verified wallet set. Pass unchanged. ISO-8601 and legacy v1 cursors are accepted only as exclusive time seeks, not exact continuations. Changed boundary history or wallet identity requires restarting without a cursor."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderSwaps"}}},"description":"Provider wallet swap history","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/traders/{trader_profile_id}/swaps/{chain_id}/{address}":{"get":{"description":"Swap history of one token on one chain, read from the same server-resolved, provider-verified public wallets as the unscoped history and filtered by the provider to swaps whose input or output is that token. Only wallets on the token's chain are read, so a token on a chain the profile has no wallet on returns an empty complete page. Native coins trade through their wrapped token: address native is rejected with 400. Same page shape, ordering, cursor rules and failure semantics as the unscoped history; the cursor is bound to the wallet set and the token. Display only; never balance, quote, execution or settlement authority.","operationId":"getExternalTraderAssetSwaps","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"chain_id","required":true,"schema":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},{"description":"Canonical Solana mint or nonzero EVM token address, or native for the chain native asset. EVM case is normalized.","in":"path","name":"address","required":true,"schema":{"minLength":1,"maxLength":128,"type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":2048},"description":"Opaque next_cursor returned by the previous page of this token's history (maximum 2048 characters); bound to the current verified wallet set and the token. Pass unchanged. A cursor from the unscoped history or another token is rejected with 400."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderAssetSwaps"}}},"description":"Provider wallet swap history for one token","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/wallets/{chain_id}/{address}":{"get":{"description":"Returns the canonical public-wallet profile subject and supported tabs. This is the destination for holder-row wallet navigation; provider metadata remains navigation context rather than profile identity. Wallet performance is not available.","operationId":"getWalletProfile","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletProfile"}}},"description":"Canonical wallet profile and capabilities","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/wallets/{chain_id}/{address}/portfolio":{"get":{"description":"Reads a request-time Codex portfolio for the canonical wallet identified by the path. Coverage is requested_wallet. Provider failure is explicit and never becomes an empty portfolio. Optional include=position_recap adds current position recaps and experimental closed-position recaps without changing wallet authority or holdings.","operationId":"getWalletProfilePortfolio","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Opt in to current display-only Codex position recaps and experimental closed-position recaps. Closed recaps require complete bounded provider history; missing evidence stays unavailable. Default requests do not fetch closed-position history.","in":"query","name":"include","required":false,"schema":{"enum":["position_recap"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletProfilePortfolio"}}},"description":"Request-time wallet portfolio","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/wallets/{chain_id}/{address}/swaps":{"get":{"description":"Reads request-time Codex swap history for the canonical wallet identified by the path. Coverage is provider_wallet_history. Combines up to ten verified canonical wallets across supported chains, newest first, at most 50 events per page. Equal-second events preserve provider order within a wallet/chain and canonical source order across sources. Pagination replays the consumed boundary-second prefix; it is not an immutable provider snapshot. Any unavailable source or exhausted request budget fails the whole page without advancing. Unknown wallet identity is unavailable. Display only; never balance, quote, execution or settlement authority.","operationId":"getWalletProfileSwaps","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":2048},"description":"Opaque next_cursor returned by the previous page (maximum 2048 characters); bound to the current verified wallet set. Pass unchanged. ISO-8601 and legacy v1 cursors are accepted only as exclusive time seeks, not exact continuations. Changed boundary history or wallet identity requires restarting without a cursor."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletProfileSwaps"}}},"description":"Provider wallet swap history","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/assets/recent-buyers":{"post":{"description":"Returns each tracked Fomo or pump.fun trader profile's latest observed buy in the last seven days for the requested assets. Entries are public trade observations, not current holdings or portfolio PnL. Counts cover matching current, unretracted trades for the requested assets; unrelated activity does not truncate coverage. Very expensive reads fail explicitly with 503 rather than returning partial counts as zero.","operationId":"getSocialAssetRecentBuyers","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetRecentBuyersRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetRecentBuyersResponse"}}},"description":"Recent buyers and their latest observed entry trades"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/activity/ws/tickets":{"post":{"description":"Mints an opaque, one-time Social Activity WebSocket ticket that expires after 45 seconds. Offer ticket_protocol as a WebSocket subprotocol; never place it in a URL.","operationId":"createSocialActivityWebSocketTicket","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialActivityWebSocketTicket"}}},"description":"One-time Social Activity WebSocket ticket","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/activity/events":{"get":{"description":"Returns durable, newest-first Top Wallet trade activity by default. To page theses for the current Arbital Trending membership, set kind=thesis_published and asset_scope=trending together. Cursors are exclusive and bound to their filters; Trending-thesis cursors are also bound to the current canonical membership.","operationId":"listSocialActivityEvents","parameters":[{"description":"Opaque exclusive continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Maximum events to return. Defaults to 50.","in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Optionally restrict activity to one source platform.","in":"query","name":"source","required":false,"schema":{"enum":["fomo","pump"],"type":"string"}},{"description":"Optionally restrict activity to buys or sells.","in":"query","name":"side","required":false,"schema":{"enum":["buy","sell"],"type":"string"}},{"description":"Select thesis history explicitly; omitted requests preserve the Top Wallet trade default.","in":"query","name":"kind","required":false,"schema":{"enum":["trade_executed","thesis_published"],"type":"string"}},{"description":"Required with kind=thesis_published. Restricts results to the current canonical Arbital Trending membership.","in":"query","name":"asset_scope","required":false,"schema":{"const":"trending","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialActivityEventPage"}}},"description":"A bounded page of durable trade activity or explicitly requested Trending thesis history","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/activity/ws":{"get":{"description":"Upgrades to the authenticated provider-neutral Social Activity feed. Offer arbital.terminal.v1 and the ticket_protocol returned by POST /v2/social/activity/ws/tickets as WebSocket subprotocols. Every thesis-containing column is server-normalized to asset_scope=trending, including legacy columns that omit it and combined trade-plus-thesis columns. Every snapshot is a total replacement rebuilt from current committed activity and Trending theses, with reserved capacity for both. When external theses and application trades use independent sources, the server sends total replacement snapshots; item sequences belong to their source and the snapshot watermark is a summary, not a cross-source replay cursor. Clients replace the snapshot atomically and must not discard items by comparing sequences across sources.","operationId":"openSocialActivityWebSocketV1","parameters":[{"in":"query","name":"version","schema":{"const":"1","default":"1","type":"string"}}],"responses":{"101":{"description":"Social Activity WebSocket upgrade accepted"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"terminalWsTicket":[]}],"tags":["Social Activity"],"x-websocket-schema":"docs/market-data/ws-social-terminal-v1.schema.json"}},"/v2/users":{"get":{"description":"Searches active Arbital profiles by username prefix. A conventional leading @ is accepted and ignored. context=mention requires authentication and returns compact native targets without holdings/counts. It accepts a 1–30 ASCII username prefix after one optional @, defaults to 10 results (maximum 20), and uses a strict viewer/prefix-bound cursor of at most 512 bytes. Current status and bilateral blocks apply before LIMIT. Ordinary search remains unchanged.","operationId":"searchSocialProfiles","parameters":[{"in":"query","name":"query","required":true,"schema":{"maxLength":31,"minLength":1,"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}},{"in":"query","name":"context","required":false,"schema":{"type":"string","enum":["mention"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PublicProfilePage"},{"$ref":"#/components/schemas/NativeMentionSearchPage"}]}}},"description":"Matching public profiles","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/users/{user_id}/reports":{"post":{"description":"Idempotently records a private report for the authenticated reporter, canonical target, reported user, and reason tuple. The server verifies target ownership and chat access, captures immutable canonical evidence, and never accepts client-submitted evidence text.","operationId":"reportUser","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportView"}}},"description":"Private report acknowledgement","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social Safety"]}},"/v2/users/{username}/portfolio":{"get":{"description":"Returns a redacted request-time Codex portfolio for an active, viewer-visible CALLD profile. The owner can read their own portfolio; other authenticated viewers require explicit portfolio_public consent. The server resolves active Privy-managed wallets from the username; clients cannot supply wallet addresses. Managed-wallet address, walletId, address-derived lot ID, and userAddress fields are omitted. A 503 public_profile_portfolio_authorization_unavailable does not prove consent; 503 portfolio_unavailable is returned only after authorization succeeded and Codex failed. Every request reads Codex and the backend retains no completed portfolio snapshot; only overlapping requests for the same wallet pair may share in-flight work. There is no PostgreSQL portfolio fallback, and this display data is never quote, sell, or execution authority.","operationId":"getPublicProfilePortfolioV2","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePortfolio"}}},"description":"Current portfolio for the server-resolved managed wallets","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v2/users/{username}":{"get":{"description":"Returns an active user's public profile and viewer-relative follow state.","operationId":"getSocialProfile","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfile"}}},"description":"Public profile","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/users/{username}/followers":{"get":{"description":"Lists active users following this profile.","operationId":"listSocialFollowers","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePage"}}},"description":"Page of public profiles","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/users/{username}/following":{"get":{"description":"Lists active users this profile follows.","operationId":"listSocialFollowing","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":30,"minLength":3,"pattern":"^[A-Za-z0-9_]+$","type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":1024,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfilePage"}}},"description":"Page of public profiles","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/version":{"get":{"operationId":"getVersion","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildInfo"}}},"description":"Build metadata"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"}},"tags":["System"]}},"/v1/webhooks/privy":{"post":{"description":"Svix-authenticated Privy wallet-action evidence. Events are applied idempotently to the matching withdrawal saga.","operationId":"receivePrivyWebhook","parameters":[{"in":"header","name":"svix-id","required":true,"schema":{"maxLength":180,"minLength":1,"type":"string"}},{"in":"header","name":"svix-timestamp","required":true,"schema":{"maxLength":13,"type":"string"}},{"in":"header","name":"svix-signature","required":true,"schema":{"maxLength":4096,"minLength":1,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}},"required":true},"responses":{"204":{"description":"Authenticated event durably accepted or replayed"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"tags":["Privy Webhook"]}},"/v2/user-transfer-quotes":{"post":{"operationId":"createUserTransferQuote","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewUserTransferRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTransferPreview"}}},"description":"Short-lived user-transfer preview","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Transfers"]}},"/v2/user-transfers":{"post":{"operationId":"createUserTransfer","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":16,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserTransferRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserTransferResponse"}}},"description":"Idempotent replay","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserTransferResponse"}}},"description":"Reserved user transfer","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"410":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Transfers"]}},"/v2/user-transfers/{id}":{"get":{"operationId":"getUserTransfer","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTransfer"}}},"description":"Durable user-transfer state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Transfers"]}},"/v2/user-transfers/{id}/signing":{"get":{"operationId":"prepareUserTransferSignature","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcWithdrawalSigningRequest"}}},"description":"Exact authorization artifact","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Transfers"]},"post":{"operationId":"submitUserTransferSignature","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitUsdcWithdrawalSignatureRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserTransfer"}}},"description":"Durable user-transfer state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Transfers"]}},"/v2/withdrawal-quotes":{"post":{"description":"Creates a short-lived, server-owned preview for an exact-input Privy Transfer. Source is always the authenticated user-owned Solana wallet and canonical USDC. Cross-chain output and fees are indicative until Privy creates the wallet action.","operationId":"previewUsdcWithdrawal","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewUsdcWithdrawalRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcWithdrawalPreview"}}},"description":"Short-lived withdrawal preview","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Funding"]}},"/v2/withdrawals":{"post":{"description":"Consumes an unexpired server preview, durably reserves finalized Solana USDC, and creates or replays an owner-scoped withdrawal. No source wallet, chain, asset, route economics, or Privy request is accepted from the client.","operationId":"createUsdcWithdrawal","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":16,"pattern":"^[A-Za-z0-9._-]+$","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUsdcWithdrawalRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUsdcWithdrawalResponse"}}},"description":"Idempotent replay","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUsdcWithdrawalResponse"}}},"description":"Reserved withdrawal awaiting user authorization","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"410":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Funding"]}},"/v2/withdrawals/{id}":{"get":{"description":"Returns and advances the authenticated owner's durable withdrawal from Privy action readback and finalized Solana debit evidence.","operationId":"getUsdcWithdrawal","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcWithdrawal"}}},"description":"Durable withdrawal state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Funding"]}},"/v2/withdrawals/{id}/signing":{"get":{"description":"Returns the exact canonical Privy Transfer request bytes for user authorization. The artifact can also be recovered after an outcome-unknown submission.","operationId":"getUsdcWithdrawalSigningRequest","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcWithdrawalSigningRequest"}}},"description":"Exact authorization artifact","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Funding"]},"post":{"description":"Consumes one user authorization over the exact persisted artifact and submits the fixed request to Privy with a stable provider idempotency key. Outcome-unknown submissions retain their reservation.","operationId":"submitUsdcWithdrawalSignature","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitUsdcWithdrawalSignatureRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsdcWithdrawal"}}},"description":"Durable withdrawal state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Funding"]}},"/v2/perp-transfer-quotes/hyperliquid":{"post":{"description":"Quotes the Relay v2 Spot USDC-to-Solana leg of a withdrawal for the authenticated user's linked Hyperliquid account. For a perps withdrawal, the client must first complete the same-amount perps_to_spot transfer through /v2/perp-transfers/hyperliquid. The response then contains two ordered EIP-712 payloads; the client signs the nonce mapping first and the sendAsset action second.","operationId":"createHyperliquidTransferQuoteV2","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHyperliquidTransferQuoteRequestV2"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidTransferQuoteV2"}}},"description":"A server-bound Hyperliquid-to-Solana quote and ordered signing payloads"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal paid quote request budget exhausted","headers":{"Retry-After":{"description":"Whole seconds until the principal may submit a new quote key","schema":{"minimum":1,"type":"integer"}}}},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Execution Quotes"]}},"/v2/perp-transfers/hyperliquid":{"post":{"description":"Creates or replays a direct user-owned Hyperliquid spot/perps USDC transfer for classic standard-account balances. Input equals expected output and all Arbital, builder, priority, and total fees are zero; unified portfolio abstraction is not enabled by this endpoint.","operationId":"createHyperliquidInternalTransfer","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":128,"minLength":16,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHyperliquidInternalTransferRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidInternalTransferIntent"}}},"description":"Idempotent signing-intent replay","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidInternalTransferIntent"}}},"description":"New exact signing intent","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Perpetuals"]}},"/v2/perp-transfers/hyperliquid/{transfer_id}":{"get":{"description":"Returns the owner's immutable typed data and durable state. Submission-unknown is preserved without balance-delta inference.","operationId":"getHyperliquidInternalTransfer","parameters":[{"in":"path","name":"transfer_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidInternalTransferIntent"}}},"description":"Durable transfer and signing intent","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Perpetuals"]}},"/v2/perp-transfers/hyperliquid/{transfer_id}/submission":{"post":{"description":"Verifies the owner signature, commits submission-unknown before network I/O, and submits the exact usdClassTransfer action at most once.","operationId":"submitHyperliquidInternalTransfer","parameters":[{"in":"path","name":"transfer_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitHyperliquidInternalTransferRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidInternalTransfer"}}},"description":"Definitive or replayed transfer state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidInternalTransfer"}}},"description":"Provider result remains ambiguous","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"401":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"404":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"503":{"$ref":"#/components/responses/Problem","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Perpetuals"]}},"/v2/me/perp-accounts/hyperliquid":{"get":{"description":"Returns the authenticated user's enrolled Hyperliquid master account and the reviewed builder metadata used by client-direct orders.","operationId":"getHyperliquidAccount","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidAccount"}}},"description":"Enrolled Hyperliquid master account"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity","Perpetuals"]},"put":{"description":"Idempotently links the user's server-resolved active Privy Ethereum wallet as their Hyperliquid master account. No client-selected address or provider identifier is accepted.","operationId":"ensureHyperliquidAccount","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidAccount"}}},"description":"Hyperliquid master account enrolled"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HyperliquidAccountProvisioning"}}},"description":"Privy Ethereum wallet provisioning continues","headers":{"Retry-After":{"description":"Minimum polling delay in seconds","schema":{"minimum":1,"type":"integer"}}}},"401":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Identity","Perpetuals"]}},"/v2/social/assets/{chain_id}/{address}/history":{"get":{"description":"Returns one token's complete discussion history, newest first: native root comments (with deletion tombstones, blocks and moderation applied exactly as the comments list) merged with imported Fomo and Pump theses for this canonical asset. Results do not depend on Arbital Trending membership. Each item carries a stable id, its source and observation time; theses also carry the provider's original source_event_id. kind selects one source; source filters theses only. Cursors are opaque, exclusive and bound to kind and source. Optional period (5m/1h/4h/24h) anchors an exclusive upper cutoff for all pages and includes live roots AND replies by their own creation time, preserving ancestor visibility. Theses filter original publication time after latest-revision/retraction resolution. No-period behavior is unchanged. Period native totals count all viewer-visible stored posts and distinct authors. External totals count at most 100 examined stored publications; counts are null if scanning is incomplete and collection_complete is always false. History source totals count all stored publications, while recap applies additional text curation. Cursors also bind the token and period; period cursors expire after 24 hours.","operationId":"listSocialAssetHistory","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"description":"Which sources to include. Defaults to all.","in":"query","name":"kind","required":false,"schema":{"default":"all","enum":["all","comment","thesis"],"type":"string"}},{"description":"Restrict imported theses to one platform. Rejected with kind=comment.","in":"query","name":"source","required":false,"schema":{"enum":["fomo","pump"],"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque exclusive continuation cursor returned by the previous page.","in":"query","name":"cursor","required":false,"schema":{"maxLength":768,"minLength":1,"type":"string"}},{"in":"query","name":"period","required":false,"schema":{"type":"string","enum":["5m","1h","4h","24h"]},"description":"Optional fixed rolling period; includes replies and period-scoped totals."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetHistoryPage"}}},"description":"A merged, newest-first page of native comments and imported theses for this token","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/profiles/{username}/comments":{"get":{"description":"Lists one Arbital profile's undeleted token comments and replies across every token, newest first, each with the exact token it belongs to. Comments the viewer cannot see (blocks, moderation, inactive authors, or an inaccessible thread ancestry) are omitted. An unknown username returns an empty page. Cursors are the last returned comment_id and are scoped to this author. Native replies preserve their optional external gif reference, with the same current access checks as their token thread. GIF bytes and provider URLs are not included.","operationId":"listSocialProfileComments","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":50,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Last returned comment_id from the previous page.","in":"query","name":"cursor","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialProfileCommentPage"}}},"description":"The author's visible token comments, newest first","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/assets/{chain_id}/{address}/x-highlights":{"get":{"operationId":"getSocialTokenXHighlights","summary":"Real X posts about a token for a period","description":"Authenticated list of real X posts about the token, newest first, collected once for all users through the reviewed TwitterAPI.io search provider for the current top trending tokens. Each post carries its author, link, publication time, available engagement, and the match evidence: the exact contract address, or the cashtag together with the token name (a ticker alone never counts). labels hold relevance labels with their evidence once a label model is adopted and are empty until then. coverage reports whether the token is followed and when it was last collected, so an empty list is never mistaken for no discussion. period defaults to 24h; limit defaults to 20 (max 50). Private/no-store; shares the asset comment read budget.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"query","name":"period","required":false,"schema":{"type":"string","enum":["5m","1h","4h","24h"],"default":"24h"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTokenXHighlights"}}},"description":"Stored X posts for the token in the period with collection coverage","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Vary":{"schema":{"type":"string","const":"Authorization"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/assets/{chain_id}/{address}/recap":{"get":{"operationId":"getSocialTokenRecap","summary":"Token-wide recap of market activity and discussion","description":"Authenticated structured facts for a token page. period defaults to 24h; supports 5m/1h/4h/24h only. Market facts describe the provider rolling window and retain independent upstream observation/retrieval clocks, with unknown exhaustiveness (complete=null). Recent trades are at most 20 in-period rows from one 50-row provider page, never totals. Native counts are exact for viewer-visible stored roots and replies; imported counts are limited to eligible stored publications and never imply complete provider collection. Curated original excerpts preserve author and source ids. Selection uses fresh holder observations, active Fomo/Pump leaderboard snapshots and recency, with explicit bounded coverage. No generated prose, themes or fictional X highlights. An available status describes read availability, not exhaustiveness. Missing provider data stays null; an unavailable response does not imply the token has no activity. Private/no-store; 30 requests per user per minute.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"query","name":"period","required":false,"schema":{"type":"string","enum":["5m","1h","4h","24h"],"default":"24h"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTokenRecap"}}},"description":"Token recap with independent section availability and completeness","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Vary":{"schema":{"type":"string","const":"Authorization"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/posts/{post_id}/replies":{"get":{"description":"Lists visible direct replies to a community post, newest first, including deletion tombstones. Anonymous readers see what the post itself allows; signed-in readers additionally have blocks applied. Replies to replies are paged through their exact parent. Returns 404 when the post is deleted or not visible to the viewer. Visible native replies may contain an external gif reference. Resolve it from the end-user client; provider failure does not invalidate the reply page. Deleted placeholders omit gif. Turning off GIF-reference writes does not remove saved references from reads.","operationId":"listSocialPostReplies","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque post_replies cursor returned by the previous page; scoped to this post and parent.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPostReplyPage"}}},"description":"Visible replies in this scope, newest first"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]},"post":{"description":"Replies to a community post. Participation is community: any authenticated, unrestricted account that can read the post and has no block in either direction with the post author. Nothing is published to X. Caption is at most 2000 Unicode code points after trimming; C0 controls other than tab, newline and carriage return are rejected. Accepts ordered post_reply media_ids; body may be omitted or empty only with nonempty media or an external gif reference. Binding commits with the reply. Disabled writes return 503 social_media_disabled and invalid media returns 400 invalid_social_media. Also accepts one public KLIPY gif reference with optional caption, without a media upload. Reject gif with nonempty media_ids, null references, arbitrary URLs and unknown reference fields. SOCIAL_EXTERNAL_GIFS_ENABLED defaults false; disabled GIF-reference writes return 503 social_media_disabled independently of the upload gate. The backend stores the reference atomically and performs no provider calls or GIF-byte moderation. Receiver lookup restrictions must be reviewed before activation.","operationId":"createSocialPostReply","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialPostReplyRequest"},"examples":{"text":{"value":{"body":"A reply"}},"media":{"summary":"Bind an approved upload with the reply scope","value":{"media_ids":["11111111-1111-4111-8111-111111111111"]}},"gif":{"summary":"GIF-only external reference (illustrative identifiers; opt-in feature gate)","value":{"gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}},"captioned_gif":{"summary":"Caption with the same single external reference","value":{"body":"My reaction","gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}}}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPostReply"}}},"description":"The created reply","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Idempotent-Replay":{"description":"true for a successful matching committed replay.","schema":{"type":"string","enum":["true"]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"description":"content_idempotency_conflict or mention_target_changed; no partial creation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}/replies/{reply_id}/replies":{"get":{"description":"Lists visible direct replies to one reply on a community post, newest first, including deletion tombstones. The whole path from the post to this reply must be visible to the viewer; deleted parents remain readable but cannot receive replies. Visible native replies may contain an external gif reference. Resolve it from the end-user client; provider failure does not invalidate the reply page. Deleted placeholders omit gif. Turning off GIF-reference writes does not remove saved references from reads.","operationId":"listSocialPostReplyReplies","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"reply_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque post_replies cursor returned by the previous page; scoped to this post and parent.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPostReplyPage"}}},"description":"Visible replies in this scope, newest first"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]},"post":{"description":"Replies to a reply on a community post. Same participation rule as replying to the post, additionally requiring no block in either direction with any author on the path to this reply. A deleted parent returns 404. Accepts ordered post_reply media_ids; body may be omitted or empty only with nonempty media or an external gif reference. Binding commits with the reply. Disabled writes return 503 social_media_disabled and invalid media returns 400 invalid_social_media. Also accepts one public KLIPY gif reference with optional caption, without a media upload. Reject gif with nonempty media_ids, null references, arbitrary URLs and unknown reference fields. SOCIAL_EXTERNAL_GIFS_ENABLED defaults false; disabled GIF-reference writes return 503 social_media_disabled independently of the upload gate. The backend stores the reference atomically and performs no provider calls or GIF-byte moderation. Receiver lookup restrictions must be reviewed before activation.","operationId":"createSocialPostReplyReply","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"reply_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialPostReplyRequest"},"examples":{"text":{"value":{"body":"A reply"}},"media":{"summary":"Bind an approved upload with the reply scope","value":{"media_ids":["11111111-1111-4111-8111-111111111111"]}},"gif":{"summary":"GIF-only external reference (illustrative identifiers; opt-in feature gate)","value":{"gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}},"captioned_gif":{"summary":"Caption with the same single external reference","value":{"body":"My reaction","gif":{"provider":"klipy","id":"6914457558367152","slug":"selected-gif-slug"}}}}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPostReply"}}},"description":"The created reply","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Idempotent-Replay":{"description":"true for a successful matching committed replay.","schema":{"type":"string","enum":["true"]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"description":"content_idempotency_conflict or mention_target_changed; no partial creation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}/replies/{reply_id}":{"delete":{"description":"Author-only soft deletion of a reply. Keeps a tombstone so descendants stay attached. Remains permitted when the author is restricted or blocked. Missing, foreign or already deleted replies return 404.","operationId":"deleteSocialPostReply","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"reply_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Reply deleted"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/posts/{post_id}/reactions":{"get":{"description":"CALLD emoji reaction counts on a community post, grouped by emoji, plus which the viewer selected. Anonymous readers see counts where the post is public. Counts never include external-platform engagement. Returns 404 when the post is deleted or not visible to the viewer. Deprecated: use `GET /v2/social/reactions` with `kind` and `id`.","operationId":"listSocialPostReactions","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"],"deprecated":true}},"/v2/social/posts/{post_id}/reactions/{emoji}":{"put":{"description":"Adds the viewer's reaction with this emoji to a community post. Idempotent: repeating the request never counts twice. Requires an unrestricted account and a post visible to the viewer with no block either way. Returns the updated summary. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"addSocialPostReaction","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."},{"in":"header","name":"Idempotency-Key","required":false,"description":"Required with contract=2. Stable UUID scoped to the authenticated actor.","schema":{"type":"string","format":"uuid"}},{"in":"header","name":"If-Match","required":false,"description":"Required with contract=2. Quoted per-emoji revision including absent tombstones.","schema":{"type":"string","pattern":"^\"(0|[1-9][0-9]{0,18})\"$"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true},"delete":{"description":"Removes the viewer's reaction with this emoji from a community post. Idempotent; always allowed for the viewer's own reaction. Returns the updated summary. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"removeSocialPostReaction","parameters":[{"in":"path","name":"post_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."},{"in":"header","name":"Idempotency-Key","required":false,"description":"Required with contract=2. Stable UUID scoped to the authenticated actor.","schema":{"type":"string","format":"uuid"}},{"in":"header","name":"If-Match","required":false,"description":"Required with contract=2. Quoted per-emoji revision including absent tombstones.","schema":{"type":"string","pattern":"^\"(0|[1-9][0-9]{0,18})\"$"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/assets/{chain_id}/{address}/comments/{comment_id}/reactions":{"get":{"description":"CALLD emoji reaction counts on a token comment or reply, grouped by emoji, plus which the viewer selected. Requires authentication like the comment thread itself; hidden, removed, deleted or blocked ancestry returns 404. Deprecated: use `GET /v2/social/reactions` with `kind` and `id`.","operationId":"listSocialAssetCommentReactions","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"path","name":"comment_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/assets/{chain_id}/{address}/comments/{comment_id}/reactions/{emoji}":{"put":{"description":"Adds the viewer's reaction with this emoji to a token comment or reply. Idempotent. Requires an unrestricted account and a comment whose whole thread is visible to the viewer. No token balance is required to react. Returns the updated summary. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"addSocialAssetCommentReaction","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"path","name":"comment_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."},{"in":"header","name":"Idempotency-Key","required":false,"description":"Required with contract=2. Stable UUID scoped to the authenticated actor.","schema":{"type":"string","format":"uuid"}},{"in":"header","name":"If-Match","required":false,"description":"Required with contract=2. Quoted per-emoji revision including absent tombstones.","schema":{"type":"string","pattern":"^\"(0|[1-9][0-9]{0,18})\"$"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true},"delete":{"description":"Removes the viewer's reaction with this emoji from a token comment or reply. Idempotent; always allowed for the viewer's own reaction. Returns the updated summary. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"removeSocialAssetCommentReaction","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"in":"path","name":"comment_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."},{"in":"header","name":"Idempotency-Key","required":false,"description":"Required with contract=2. Stable UUID scoped to the authenticated actor.","schema":{"type":"string","format":"uuid"}},{"in":"header","name":"If-Match","required":false,"description":"Required with contract=2. Quoted per-emoji revision including absent tombstones.","schema":{"type":"string","pattern":"^\"(0|[1-9][0-9]{0,18})\"$"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/assets/{chain_id}/{address}/theses/{event_id}/replies":{"get":{"description":"Lists the CALLD discussion under an imported Fomo or pump.fun thesis: direct replies newest first, including deletion tombstones, with the same visibility rules as token comments. Deeper replies are paged through each reply's own /comments/{comment_id}/replies. The thesis must be a published, unretracted thesis whose latest revision names exactly this token; otherwise 404. Requires authentication; posting eligibility uses a fresh balance and social restrictions.","operationId":"listSocialAssetThesisReplies","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"description":"The thesis's durable social feed eventId, as returned by the activity and token history reads.","in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Last returned comment_id from the previous page; scoped to this thesis.","in":"query","name":"cursor","schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetCommentReplyPage"}}},"description":"Direct replies to the thesis and current posting eligibility"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"post":{"description":"Replies to an imported thesis inside CALLD. The reply is a token comment anchored to the thesis, so it appears here and in the author's comment history but never in the plain token root feed, and it is never posted back to Fomo or pump.fun. Requires a positive live token balance and an unrestricted account, like any token comment.","operationId":"createSocialAssetThesisReply","parameters":[{"in":"path","name":"chain_id","required":true,"schema":{"enum":["solana:mainnet-beta","eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161"],"type":"string"}},{"in":"path","name":"address","required":true,"schema":{"minLength":1,"type":"string"}},{"description":"The thesis's durable social feed eventId, as returned by the activity and token history reads.","in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialAssetCommentRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialAssetComment"}}},"description":"The created reply","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Idempotent-Replay":{"description":"true for a successful matching committed replay.","schema":{"type":"string","enum":["true"]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"description":"content_idempotency_conflict or mention_target_changed; no partial creation.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/leaderboards/{cohort}":{"get":{"description":"Lists one provider leaderboard cohort, rank 1 first, from the immutable snapshot that is currently active. A cursor pins the snapshot it was issued from so paging stays stable when a newer snapshot activates; isCurrent reports whether that snapshot is still the active one. Metrics are exact provider-observed strings; null means the provider did not report the value. traderProfileId is set only when the account resolves through /v2/social/traders/{trader_profile_id}. Returns 404 while no snapshot has been observed. Rankings of posts and tokens remain deferred; this read exposes stored provider results only.","operationId":"listSocialLeaderboard","parameters":[{"in":"path","name":"cohort","required":true,"schema":{"enum":["fomo_top_100_7d","pump_top_100_weekly"],"type":"string"}},{"description":"Maximum entries to return. Defaults to the whole cohort.","in":"query","name":"limit","required":false,"schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque exclusive continuation cursor returned by the previous page; bound to the cohort and its snapshot.","in":"query","name":"cursor","required":false,"schema":{"maxLength":256,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialLeaderboardPage"}}},"description":"One page of the cohort snapshot in rank order","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/me/feed":{"get":{"description":"The viewer's relationship feed: friends (accounts that follow the viewer back) or watching (accounts the viewer follows plus the Fomo/pump.fun traders they chose to watch). Merges community posts, token comments and published trades newest first with per-item read state. Every item has a stable record_id, the actor with its identity (calld, fomo or pump), observed_at_ms (when Arbital recorded it), posted_at_ms (original time when known) and the actions the viewer may take. Blocks, moderation, deleted content and inactive accounts are applied. Cursors are opaque, exclusive and bound to the relationship. If a source fails, successful rows remain visible with unavailable_sources; its cursor does not advance. If no successful rows remain while a source is unavailable, returns 503. Explicit sort opts into the combined live pagination contract; new filters without sort are invalid. Legacy requests keep their previous response. Opt-in items retain the combined FeedItem wrapper. Checkpoints are null for anonymous reads and continuation pages; retain the accepted first-page checkpoint. Live rank changes may skip or repeat items; deduplicate record_id. Old combined snapshot cursors require a first-page refresh (410). Optional include_reactions and include_reply_preview enrich returned items without changing the default response; both options are independent.","operationId":"listSocialRelationshipFeed","parameters":[{"in":"query","name":"relationship","required":true,"schema":{"enum":["friends","watching"],"type":"string"}},{"in":"query","name":"sort","schema":{"type":"string","enum":["latest","top","most_discussed"]},"description":"latest: original publication time; top: versioned fixed-point score with stable diversity rounds; most_discussed: known discussion counts, participants, publication time and stable identity. Unknown discussion counts sort after known counts without removing the content."},{"in":"query","name":"category","schema":{"type":"string","enum":["all","memes","equities"]},"description":"Applied to current canonical subject evidence before each owner limit. Unknown classifications are eligible only for all."},{"in":"query","name":"period","schema":{"type":"string","enum":["24h","7d","30d"]}},{"in":"query","name":"sources","schema":{"type":"string","maxLength":32}},{"in":"query","name":"asset","schema":{"type":"string","maxLength":200}},{"in":"query","name":"company","schema":{"type":"string","maxLength":128},"description":"Canonical company ID (company:aapl), explicit ticker (AAPL), or an unambiguous alias in the complete canonical registry. Unknown canonical IDs return an empty result. Does not infer a company from a token ticker."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"in":"query","name":"cursor","schema":{"type":"string","maxLength":8192},"description":"Pass the opaque next_cursor unchanged. Combined live cursors require the same filters, page size and viewer; legacy combined snapshot cursors return 410."},{"in":"query","name":"include_reactions","required":false,"schema":{"type":"boolean","default":false},"description":"Include current viewer-specific reaction_summary on each item to avoid initial per-card reaction reads. Native posts/comments use contract 2; imported trades, theses and X posts use contract 1. Native CALLD trades return null. Omitted or false preserves the existing response. Supported on /v2/me/feed both without sort (legacy) and with sort (combined); not supported on /v2/social/posts. Enrichment failure returns 503."},{"name":"include_reply_preview","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Include reply_preview on each item with up to two discussion rows, a nondeleted direct reply count and continuation cursor. Independent of include_reactions. Native CALLD trades, X posts and theses without an asset return null. Omitted or false preserves the existing response. Supported on both legacy and combined /v2/me/feed; not supported on /v2/social/posts. Preview failure returns 503, never a fabricated empty preview. Does not evaluate token-holder eligibility."},{"name":"include_position_entry","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Include position_entry on each thesis item: the indexer's prepared position for a Solana thesis (entry timestamp of the cycle that includes the thesis, lifecycle state, observation time and freshness) plus its request_status, so the card paints without a second request. Theses without a Solana asset and every non-thesis item carry null or no field. Omitted or false preserves the existing response. Combined feed only: on /v2/me/feed it needs sort like every combined parameter. Entry failure returns 503, never a fabricated entry; a thesis with no prepared position returns request_status.state unavailable with reason not_found."},{"name":"min_trade_usd","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":999999999999},"description":"Select only trade items whose USD size is at least this many whole dollars; trades with no known USD size are excluded. Posts, comments, theses and X posts are unaffected. 0 or omitted applies no size filter. The cursor binds the value like every other filter; a continuation with a different value is rejected."}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialRelationshipFeedPage"},{"$ref":"#/components/schemas/SocialCombinedFeedPage"}]}}},"description":"A merged, newest-first page of the relationship feed","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"501":{"description":"A required capability is unavailable; no sample fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedCapabilityProblem"}}}},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/me/feed/reads":{"put":{"description":"Marks up to 100 feed records as read for the viewer, one record at a time; nothing else is marked. Idempotent.","operationId":"markSocialRelationshipFeedRead","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkSocialFeedReadRequest"}}},"required":true},"responses":{"204":{"description":"Records marked read"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social-media":{"post":{"operationId":"uploadSocialMedia","security":[{"bearerAuth":[]}],"tags":["Social Community"],"description":"Uploads one binary JPEG, PNG, still WebP or GIF, at most 15 MiB. The server validates and normalizes decoded content, strips metadata and approves every rendered GIF frame before storing it privately. Processing permits at most 16 million decoded pixels across at most 60 GIF frames. Scope is immutable; message uploads require the exact chat_id and current membership. An optional canonical Tenor URL is attribution only for GIFs and is never fetched. A 201 response contains approved metadata without an ordinal; use its id in media_ids on a supported parent write within 24 hours. Uploads remain disabled until the runtime write gate and storage/moderation providers are ready. No multipart, base64 JSON, remote URL ingestion, public URL or CDN access is supported. When CDN delivery is enabled, approved upload metadata can include short-lived viewer-specific delivery URLs and a WebP thumbnail. These capabilities are optional; access_path remains the authenticated fallback.","parameters":[{"in":"query","name":"scope","required":true,"schema":{"type":"string","enum":["post","post_reply","asset_comment_reply","message"]}},{"in":"query","name":"chat_id","description":"Required exactly when scope=message; forbidden for all other scopes.","schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}},{"in":"query","name":"source_tenor_url","description":"Optional attribution for a GIF body only. Does not authorize a server fetch.","schema":{"type":"string","maxLength":512,"pattern":"^https://tenor\\.com/view/[a-zA-Z0-9-]+-[0-9]{1,24}$"}}],"requestBody":{"required":true,"content":{"image/jpeg":{"schema":{"type":"string","format":"binary","maxLength":15728640}},"image/png":{"schema":{"type":"string","format":"binary","maxLength":15728640}},"image/webp":{"schema":{"type":"string","format":"binary","maxLength":15728640}},"image/gif":{"schema":{"type":"string","format":"binary","maxLength":15728640}}}},"responses":{"201":{"description":"Approved private upload, ready for one atomic parent binding","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}},"Vary":{"description":"Includes Authorization for viewer-specific CDN delivery metadata.","schema":{"type":"string","example":"Authorization"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialMediaUpload"}}}},"400":{"description":"invalid_social_media: malformed scope, chat, attribution, type, dimensions or decoded content","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication is missing or invalid","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"social_restricted: the active account is restricted from social uploads","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"social_media_not_found: inactive account or unavailable chat/current membership","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"408":{"description":"social_media_timeout: upload body or processing exceeded its deadline","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"The binary body exceeds 15 MiB","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"content_rejected: moderation rejected the normalized content or a rendered GIF frame","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"social_rate_limited: the uploader's media budget is exhausted","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}},"Retry-After":{"required":true,"schema":{"type":"integer","minimum":1}},"X-Request-ID":{"required":true,"schema":{"type":"string","minLength":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"social_media_busy (retry after 1 second), social_media_disabled or social_media_unavailable; approval is never assumed after a provider failure","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}},"Retry-After":{"required":true,"schema":{"type":"integer","minimum":1}},"X-Request-ID":{"required":true,"schema":{"type":"string","minLength":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v2/social-media/{id}":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid","pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}}],"get":{"operationId":"readSocialMedia","security":[{"bearerAuth":[]}],"tags":["Social Community"],"description":"Returns approved bytes after fresh authentication and current Community parent/ancestor authorization or Messaging membership/block authorization. An unbound ready upload is previewable only by its uploader; a public group does not grant nonmember access. Authorization and media state are checked again after storage retrieval before bytes are sent. Pending, expired, deleted or currently inaccessible media returns 404. Subsequent reads fail after revocation; bytes already delivered cannot be recalled. Every response is private, no-store and nosniff. Disabling new writes does not remove this reader.","responses":{"200":{"description":"The approved normalized file","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}},"Content-Length":{"required":true,"schema":{"type":"integer","minimum":1,"maximum":15728640}}},"content":{"image/jpeg":{"schema":{"type":"string","format":"binary","maxLength":15728640}},"image/png":{"schema":{"type":"string","format":"binary","maxLength":15728640}},"image/webp":{"schema":{"type":"string","format":"binary","maxLength":15728640}},"image/gif":{"schema":{"type":"string","format":"binary","maxLength":15728640}}}},"400":{"description":"invalid_social_media: the ID is not a canonical UUID","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication is missing or invalid","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"social_media_not_found: no currently authorized ready/attached media","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"social_media_busy or social_media_unavailable: storage or current authorization could not complete","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}},"Retry-After":{"required":true,"schema":{"type":"integer","minimum":1}},"X-Request-ID":{"required":true,"schema":{"type":"string","minLength":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"deleteSocialMedia","security":[{"bearerAuth":[]}],"tags":["Social Community"],"description":"The active uploader may remove their own media, including after losing parent visibility or chat membership. The database tombstone immediately denies later byte reads; private object removal is retried separately. Repeating deletion of an owned ID returns 204. Bound slots retain exactly id, ordinal and deleted:true; deleting the last image preserves a media-only parent. Message removal advances message/chat versions without changing sequence, read cursor or unread count. Clients should refresh visible history when the chat version changes. This operation remains available when new media writes are disabled.","responses":{"204":{"description":"Owned media is deleted; no response body","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}}},"400":{"description":"invalid_social_media: the ID is not a canonical UUID","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Authentication is missing or invalid","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"social_media_not_found: missing media, another uploader's media or inactive account","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"social_media_unavailable: durable deletion could not complete","headers":{"Cache-Control":{"required":true,"schema":{"type":"string","const":"private, no-store"}},"X-Content-Type-Options":{"required":true,"schema":{"type":"string","const":"nosniff"}},"Retry-After":{"required":true,"schema":{"type":"integer","minimum":1}},"X-Request-ID":{"required":true,"schema":{"type":"string","minLength":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v2/social/theses/{event_id}/reactions":{"get":{"description":"Authenticated CALLD emoji reaction counts and viewer selections on an imported thesis identified by its stable eventId. Current upstream visibility is required. External-platform counts are never merged. Missing or removed theses return 404; upstream failures return 503. Deprecated: use `GET /v2/social/reactions` with `kind` and `id`.","operationId":"listSocialThesisReactions","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Reaction counts grouped by emoji with the viewer's own selections"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/theses/{event_id}/reactions/{emoji}":{"put":{"description":"Idempotently add the authenticated viewer's emoji reaction to a currently available imported thesis. Requires an unrestricted account. Only identity and app-owned interaction data are stored; upstream content is not copied. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"addSocialThesisReaction","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Updated reaction summary","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true},"delete":{"description":"Idempotently remove the authenticated viewer's own emoji reaction, including when restricted or after upstream removal. Removal commits before current visibility is checked for returning counts; a subsequent 404 or 503 does not undo removal. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"removeSocialThesisReaction","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Updated reaction summary","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/trades/{event_id}/replies":{"get":{"description":"Authenticated native community discussion on the latest committed Fomo/Pump trade event UUID. Current external actor visibility is checked through SocialQuery; hidden, missing, CALLD and retracted targets return 404, upstream outage returns 503. Native moderation and bilateral blocks apply. No token holding is required.","operationId":"listSocialTradeReplies","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque trade_replies cursor returned by the previous page; scoped to this trade and parent.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTradeReplyPage"}}},"description":"Visible replies in this scope, newest first"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"post":{"description":"Authenticated native community discussion on the latest committed Fomo/Pump trade event UUID. Current external actor visibility is checked through SocialQuery; hidden, missing, CALLD and retracted targets return 404, upstream outage returns 503. Native moderation and bilateral blocks apply. No token holding is required.","operationId":"createSocialTradeReply","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialTradeReplyRequest"},"examples":{"text":{"value":{"body":"A reply"}},"media":{"summary":"Bind an approved upload with the reply scope","value":{"media_ids":["11111111-1111-4111-8111-111111111111"]}}}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTradeReply"}}},"description":"The created reply","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/trades/{event_id}/replies/{reply_id}/replies":{"get":{"description":"Authenticated native community discussion on the latest committed Fomo/Pump trade event UUID. Current external actor visibility is checked through SocialQuery; hidden, missing, CALLD and retracted targets return 404, upstream outage returns 503. Native moderation and bilateral blocks apply. No token holding is required.","operationId":"listSocialTradeReplyReplies","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"reply_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque trade_replies cursor returned by the previous page; scoped to this trade and parent.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTradeReplyPage"}}},"description":"Visible replies in this scope, newest first"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]},"post":{"description":"Authenticated native community discussion on the latest committed Fomo/Pump trade event UUID. Current external actor visibility is checked through SocialQuery; hidden, missing, CALLD and retracted targets return 404, upstream outage returns 503. Native moderation and bilateral blocks apply. No token holding is required.","operationId":"createSocialTradeReplyReply","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"reply_id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSocialTradeReplyRequest"},"examples":{"text":{"value":{"body":"A reply"}},"media":{"summary":"Bind an approved upload with the reply scope","value":{"media_ids":["11111111-1111-4111-8111-111111111111"]}}}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialTradeReply"}}},"description":"The created reply","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/trades/{event_id}/replies/{reply_id}":{"delete":{"description":"Idempotently delete the caller's native reply, retaining a tombstone. Stored ownership permits removal after restriction, retraction or upstream outage.","operationId":"deleteSocialTradeReply","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"reply_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Reply deleted"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/trades/{event_id}/reactions":{"get":{"description":"Authenticated CALLD reactions on a stable local Fomo/Pump trade event UUID. Latest upsert and current external actor visibility are required (404 hidden, 503 unavailable). PUT and DELETE are idempotent. DELETE commits own removal before the optional visible summary, even after restriction or retraction. Deprecated: use `GET /v2/social/reactions` with `kind` and `id`.","operationId":"listSocialTradeReactions","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Reaction counts grouped by emoji with the viewer's own selections"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/trades/{event_id}/reactions/{emoji}":{"put":{"description":"Authenticated CALLD reactions on a stable local Fomo/Pump trade event UUID. Latest upsert and current external actor visibility are required (404 hidden, 503 unavailable). PUT and DELETE are idempotent. DELETE commits own removal before the optional visible summary, even after restriction or retraction. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"addSocialTradeReaction","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Updated reaction summary","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true},"delete":{"description":"Authenticated CALLD reactions on a stable local Fomo/Pump trade event UUID. Latest upsert and current external actor visibility are required (404 hidden, 503 unavailable). PUT and DELETE are idempotent. DELETE commits own removal before the optional visible summary, even after restriction or retraction. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"removeSocialTradeReaction","parameters":[{"in":"path","name":"event_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Updated reaction summary","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/posts/{post_id}/attachments/{attachment_id}/position-history":{"get":{"operationId":"listSocialPositionHistory","description":"Requires a Privy bearer token and visibility of the parent post. Returns paginated retained cycles for a tracked position attachment; invisible/deleted posts or untracked attachments return 404. Initially supports non-native Solana positions. Current status and freshness are in attachment.lifecycle; missing or stale observations are unknown, not closed, and their summary P&L/current cycle are null. Closed history survives later purchases that reopen the same thesis. All financial figures are Codex provider estimates with fees unavailable. Unknown query parameters and invalid pagination return 400.","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":2048},"description":"Opaque cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Retained position cycles visible to the authenticated viewer.","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPositionHistoryPage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v2/social/traders/{trader_profile_id}/positions/{chain_id}/{address}":{"get":{"description":"Reads current Codex holdings on the requested chain across only the author's server-resolved, provider-verified public wallets, then enriches only the requested token. No caller wallet overrides or query parameters. No history or closed-position reconstruction. Position quantity, price and basis completeness are independent of the whole portfolio. Missing basis preserves available quantity/value; incomplete holdings never become zero or a closed position. Provider failure or quarantined holdings are explicitly unavailable. Uses the authenticated social read budget and private, no-store responses. Display only, never quote or execution authority.","operationId":"getExternalTraderPosition","parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"path","name":"chain_id","required":true,"schema":{"enum":["eip155:1","eip155:56","eip155:143","eip155:4663","eip155:5042","eip155:8453","eip155:42161","solana:mainnet-beta"],"type":"string"}},{"description":"Canonical Solana mint or nonzero EVM token address, or native for the chain native asset. EVM case is normalized.","in":"path","name":"address","required":true,"schema":{"minLength":1,"maxLength":128,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalTraderPosition"}}},"description":"Requested current position across relevant verified wallets, with explicit per-asset completeness","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Activity"]}},"/v2/social/x/feed":{"get":{"operationId":"listSocialXFeed","summary":"X posts for Early's Top and Latest with server-side filters","description":"Authenticated page of real X posts about covered markets, served from the indexer's shared collection (collected once for all users; no request ever triggers a provider search). order=top ranks by substance, freshness and engagement with per-author and per-asset caps inside a score generation; order=latest is newest by original publication time. Filters apply across all eligible content: market (crypto includes memecoins; memecoins narrows), content (news or discussions), and one asset (<chain_id>:<address>) or company (ticker). Paging is anchored so later pages never reshuffle; a Top cursor whose generation expired returns 409 and the client restarts. availability distinguishes nothing-found (available with an empty list) from not-yet-monitored/pending, delayed or budget-exhausted (partial, cached posts usable) and unavailable. Requesting an asset nobody covers yet registers it for shared collection and answers pending. Posts stay attributed to X; Early reactions never post back to X. Private/no-store; own read budget.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"order","required":false,"schema":{"type":"string","enum":["top","latest"],"default":"latest"},"description":"Ranking or recency."},{"in":"query","name":"market","required":false,"schema":{"type":"string","enum":["all","crypto","memecoins","stocks"],"default":"all"},"description":"Market category set membership."},{"in":"query","name":"content","required":false,"schema":{"type":"string","enum":["all","news","discussions"],"default":"all"},"description":"News (publisher or news link without first-person markers) or discussion."},{"in":"query","name":"asset","required":false,"schema":{"type":"string","maxLength":200},"description":"<chain_id>:<address> of one token; mutually exclusive with company."},{"in":"query","name":"company","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.]{1,12}$"},"description":"Underlying company ticker such as AAPL; mutually exclusive with asset."},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":"Page size."},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","minLength":1,"maxLength":512},"description":"Opaque cursor from next_cursor; bound to the same filters."}],"responses":{"200":{"description":"One page of X posts with availability and the next cursor","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Vary":{"schema":{"type":"string","const":"Authorization"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialXFeedPage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/x/coverage":{"get":{"operationId":"getSocialXCoverage","summary":"X collection coverage for one asset or company","description":"Per-subject collection state from the indexer: not_monitored (no subject), pending (active, nothing collected yet), collected (success within twice the refresh interval), delayed (older success; cache usable up to 24h), budget_exhausted (daily credit cap reached; cache usable) or unavailable (provider permanent error). Private/no-store; shares the X feed read budget.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"asset","required":false,"schema":{"type":"string","maxLength":200},"description":"<chain_id>:<address>; exactly one of asset or company."},{"in":"query","name":"company","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9_.]{1,12}$"},"description":"Underlying company ticker; exactly one of asset or company."}],"responses":{"200":{"description":"Coverage state for the subject","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"Vary":{"schema":{"type":"string","const":"Authorization"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialXCoverage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/x/posts/{x_post_id}/reactions":{"get":{"description":"Authenticated Early emoji reaction counts and viewer selections on an X post served by the X feed. Counts are Early-only (`source: calld`) and are never merged with X engagement. A post Indexer no longer holds returns 409 `x_post_expired`; Indexer failures return 503. Deprecated: use `GET /v2/social/reactions` with `kind` and `id`.","operationId":"listSocialXPostReactions","parameters":[{"in":"path","name":"x_post_id","required":true,"schema":{"type":"string","pattern":"^[0-9]{1,20}$"},"description":"The X post id (`x_post_id` on SocialXFeedPost). The stored target is the post's Early UUID (`id`)."}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Reaction counts grouped by emoji with the viewer's own selections"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/x/posts/{x_post_id}/reactions/{emoji}":{"put":{"description":"Idempotently add the authenticated viewer's emoji reaction to an X post that Indexer currently holds. Requires an unrestricted account. Only identity and Early interaction data are stored; X content is not copied. The first reaction pins the post against feed expiry; nothing is posted to X. Expired posts return 409 `x_post_expired`. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"addSocialXPostReaction","parameters":[{"in":"path","name":"x_post_id","required":true,"schema":{"type":"string","pattern":"^[0-9]{1,20}$"},"description":"The X post id (`x_post_id` on SocialXFeedPost). The stored target is the post's Early UUID (`id`)."},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Updated reaction summary","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true},"delete":{"description":"Idempotently remove the authenticated viewer's own emoji reaction. Removal commits before the post's current availability is checked for returning counts; a subsequent 409 or 503 does not undo removal. Deprecated: use `POST /v2/social/reactions` with a `SocialReactionCommand` body.","operationId":"removeSocialXPostReaction","parameters":[{"in":"path","name":"x_post_id","required":true,"schema":{"type":"string","pattern":"^[0-9]{1,20}$"},"description":"The X post id (`x_post_id` on SocialXFeedPost). The stored target is the post's Early UUID (`id`)."},{"description":"One emoji, URL-encoded: a pictograph with optional skin tone, presentation selector or ZWJ sequence, a flag pair, or a keycap. Any supported emoji is accepted; clients decide which to show first.","in":"path","name":"emoji","required":true,"schema":{"maxLength":16,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionSummary"}}},"description":"Updated reaction summary","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"],"deprecated":true}},"/v2/social/traders/summaries":{"post":{"operationId":"summarizeSocialTraders","summary":"Resolve ordered trader summaries with explicit 30-day capability","description":"One to six native/imported subjects. Preserves input order and duplicates, deduplicates identity work and isolates per-item failures. Resolved identities have status ok but explicit unavailable performance with null metrics/chart. Service unavailable returns 503. Private/no-store including handler errors.","tags":["Social Activity"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderSummariesRequest"}}}},"responses":{"200":{"description":"Ordered identity resolution and performance capability results","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderSummariesResponse"}}}},"400":{"$ref":"#/components/responses/TraderPrivateProblem"},"401":{"$ref":"#/components/responses/TraderPrivateProblem"},"409":{"$ref":"#/components/responses/TraderPrivateProblem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/TraderPrivateProblem"},"503":{"$ref":"#/components/responses/TraderPrivateProblem"}}}},"/v2/chats/{chat_id}/members":{"get":{"operationId":"listChatMembers","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/MessagingCursor"},{"$ref":"#/components/parameters/MessagingPageLimit"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMemberPage"}}},"description":"Cursor page of active members"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Active members of a chat the caller may read (member, or public-read group). Non-members of private chats receive 404."}},"/v2/chats/{chat_id}/members/{user_id}":{"delete":{"operationId":"removeChatMember","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMemberUserId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMember"}}},"description":"Member is no longer active; repeated removal returns the same state"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Owners remove admins and members; admins remove members. The owner cannot be removed and nobody removes themself. The chat version advances so other members refresh. Idempotent by current state."},"patch":{"operationId":"updateChatMemberRole","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMemberUserId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChatMemberRoleRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMember"}}},"description":"Member role after the change; assigning the current role changes nothing"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Owner only. Promotes a member to admin or demotes an admin to member. The owner role never changes through this route."}},"/v2/chat-invites/{invite_id}/revoke":{"post":{"operationId":"revokeChatInvite","parameters":[{"$ref":"#/components/parameters/ChatInviteId"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatInvite"}}},"description":"Invitation revoked (or already expired); repeated revocation returns the same invitation"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"],"description":"Owner or admin of the invitation's chat. Accepted or declined invitations conflict with 409."}},"/v2/social/theses/{event_id}/position-history":{"get":{"tags":["Social Community"],"summary":"Read imported thesis position history","operationId":"listExternalSocialPositionHistory","description":"Requires Privy bearer authentication. Reads prepared external Fomo/Pump thesis results through the authenticated indexer SocialQuery service; never fetches Codex history on the request. The event_id is the backend public thesis UUID, not the provider post ID. Rechecks current post/profile visibility and provider wallet association on every page. Initial supported coverage is unambiguous non-native Solana wallet/token positions. Current status older than five minutes becomes unknown while previously observed closed cycles remain. Cursors are opaque, bound to this thesis and the observation revision; a changed revision returns 400 and the client must restart without a cursor. An unavailable or older indexer without this RPC returns 503, never an empty successful history. Results are gross provider estimates with unavailable fees and must not authorize portfolios or trading. request_status distinguishes pending acquisition, retry scheduling, available observations, and terminal unavailable results. This GET never creates or prioritizes work.","security":[{"bearerAuth":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":1024}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Retained position cycles visible to the authenticated viewer.","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalSocialPositionHistoryPage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/theses/{event_id}/position-history/ensure":{"post":{"tags":["Social Community"],"summary":"Request imported thesis position enrichment","operationId":"ensureExternalSocialPositionHistory","security":[{"bearerAuth":[]}],"description":"Requires Privy bearer authentication and the existing social-write rate budget. Body must be empty or {}; query parameters are forbidden. Server resolves the public event UUID to the current visible provider post and identity. Never accepts a wallet, provider target or forced refresh. Returns cached available or explicitly unavailable results immediately. Otherwise invokes the separately credentialed narrow Projector request RPC once with a 1500ms deadline, returning 202 only after durable queue acknowledgment; lost acknowledgment/unconfigured service returns 503. An identical retry deduplicates at Projector. Existing closed results may accompany pending status. No waiting loop or provider acquisition runs in the HTTP request. Unsupported visible theses may return 200 unavailable. Poll the read-only history GET after Retry-After; do not automatically POST on every view.","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"maxProperties":0}}}},"responses":{"200":{"description":"Cached available or explicitly unavailable position result","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalSocialPositionEnsureResult"}}}},"202":{"description":"Durably acknowledged queued, running, or retry-scheduled acquisition; honor Retry-After and poll GET","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalSocialPositionEnsureResult"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"413":{"description":"Request body exceeds 1024 bytes"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/chats/{chat_id}/messages/{message_id}/reactions/{emoji}":{"put":{"operationId":"setChatMessageReaction","description":"Sets the caller's reaction. Members only; a public-read group does not grant reacting. Repeating the call changes nothing and emits no frame or notification. A deleted message conflicts with 409. Contract 2 requires ?contract=2, UUID Idempotency-Key and a quoted per-edge If-Match, with an empty body. Identical command replay returns its original transition/edge version with the current authorized summary; changed command intent 409, fresh stale edge 412, malformed contract/header 400. Legacy requests remain unconditional and cannot distinguish delayed fresh intent from retry.","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMessageId"},{"$ref":"#/components/parameters/ChatReactionEmoji"},{"$ref":"#/components/parameters/ChatReactionContract"},{"$ref":"#/components/parameters/ChatReactionCommandId"},{"$ref":"#/components/parameters/ChatReactionEdgeVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ChatReactionState"},{"$ref":"#/components/schemas/ChatReactionStateV2"}]}}},"description":"Canonical reaction state; unchanged when the reaction already existed"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"412":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]},"delete":{"operationId":"clearChatMessageReaction","description":"Clears the caller's reaction. Idempotent. Contract 2 requires ?contract=2, UUID Idempotency-Key and a quoted per-edge If-Match, with an empty body. Identical command replay returns its original transition/edge version with the current authorized summary; changed command intent 409, fresh stale edge 412, malformed contract/header 400. Legacy requests remain unconditional and cannot distinguish delayed fresh intent from retry.","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMessageId"},{"$ref":"#/components/parameters/ChatReactionEmoji"},{"$ref":"#/components/parameters/ChatReactionContract"},{"$ref":"#/components/parameters/ChatReactionCommandId"},{"$ref":"#/components/parameters/ChatReactionEdgeVersion"}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ChatReactionState"},{"$ref":"#/components/schemas/ChatReactionStateV2"}]}}},"description":"Canonical reaction state; unchanged when the reaction was already absent"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"412":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/{chat_id}/messages/{message_id}/reactions":{"get":{"operationId":"listChatMessageReactors","description":"Who reacted with what, for reaction popovers. Readers of the chat may list them. With contract=2, returns the caller's per-edge versions including absent tombstones; limit 1–100, default 50. Use edge_cursor for subsequent pages; legacy cursor and emoji filters are rejected. Only after complete enumeration may a never-used edge be treated as revision 0.","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMessageId"},{"$ref":"#/components/parameters/ChatReactionEmojiFilter"},{"$ref":"#/components/parameters/MessagingCursor"},{"$ref":"#/components/parameters/MessagingPageLimit"},{"$ref":"#/components/parameters/ChatReactionContract"},{"name":"edge_cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":512},"description":"Opaque next_edge_cursor for contract=2 only. Do not combine contract 2 with the legacy cursor or emoji filter."}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ChatReactionActorPage"},{"$ref":"#/components/schemas/ChatReactionEdgePageV2"}]}}},"description":"Cursor page of reactors, oldest first"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/{chat_id}/delivered":{"put":{"operationId":"setChatDelivered","description":"Explicit device acknowledgement that messages up to the sequence were received. Lower or equal values are no-ops; a sequence past the latest committed message is 400 sequence_out_of_range. Never derived from push-provider receipts.","parameters":[{"$ref":"#/components/parameters/ChatId"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetChatDeliveredRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatReadState"}}},"description":"Monotonic delivered watermark for the authenticated chat member"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"409":{"$ref":"#/components/responses/MessagingProblem"},"429":{"$ref":"#/components/responses/MessagingRateLimited"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/chats/{chat_id}/messages/{message_id}/receipts":{"get":{"operationId":"listChatMessageReceipts","description":"Members only. Eligible recipients are the members present when the message was sent, excluding the author; late joiners never appear and former members keep what they earned. Each recipient includes conversation-wide last_read_sequence and last_delivered_sequence when supported. To render a receipt only on the latest outgoing message, fetch this endpoint for that message, follow every next_cursor, and compare its sequence with each recipient's read position. A nonempty complete eligible set must cover the message before showing Read by all. Refetch for a new outgoing message, membership change or reconnect; receipt.updated can advance known recipients between fetches. Groups above 50 members require on-demand refresh. Existing read/delivered flags and summary remain available, including as fallback when cursor fields are absent during rollout. Receipts stay inside the chat and never notify.","parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMessageId"},{"$ref":"#/components/parameters/MessagingCursor"},{"$ref":"#/components/parameters/MessagingPageLimit"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessageReceiptPage"}}},"description":"Eligible recipients and whether their watermarks cover the message"},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}},"security":[{"bearerAuth":[]}],"tags":["Messaging"]}},"/v2/users/by-id/{user_id}":{"get":{"description":"Authenticated stable native user lookup. A rename never redirects to a new owner of the old handle. Missing, inactive and blocked users are indistinguishable 404s. No holdings/provider calls.","operationId":"getSocialProfileById","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicProfile"}}},"description":"Public profile","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"408":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Per-principal or anonymous-peer social request budget exhausted","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}},"Retry-After":{"description":"Whole seconds until the caller's route budget resets","schema":{"minimum":1,"type":"integer"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Stable machine-readable private social problem","headers":{"Cache-Control":{"description":"Prevents shared or private caches from storing viewer-dependent data","schema":{"example":"private, no-store","type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Social"]}},"/v2/users/{username}/posts":{"get":{"description":"Lists community posts created by an Arbital profile. Pinned posts sort first, then creation time and ID. Pass next_cursor unchanged: it captures the complete ordering position. Legacy cursors remain accepted. Pin changes are live rather than a snapshot; refresh to restart the current ordering. Compatibility alias of the social-profile posts route.","operationId":"listUserProfilePosts","parameters":[{"in":"path","name":"username","required":true,"schema":{"maxLength":50,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":20,"maximum":50,"minimum":1,"type":"integer"}},{"description":"Opaque posts cursor returned by the previous page.","in":"query","name":"cursor","schema":{"maxLength":512,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialPostPage"}}},"description":"Profile community posts"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"408":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]}},"/v2/social/feed":{"get":{"operationId":"listSocialCombinedFeed","summary":"Read the combined stable feed","description":"Latest reads current eligible native/Fomo/Pump/X records by original publication time. Top and Most discussed use current committed rankings with current filters and visibility. Filters precede each owner limit. Pagination is live: ranks, membership and relationship scope can change between pages, so clients should deduplicate record_id and refresh for the current head. Opaque cursors bind filters, page size and viewer; they retain seek positions only. Latest does not depend on rank publication. Missing or stale required rankings and source failures return 503; old frozen cursors return 410 and require first-page refresh. Pages and activity probes do not mark items read. The rollout flag is disabled by default. Private, no-store; Vary: Authorization. Optional include_reactions and include_reply_preview enrich returned items without changing the default response; both options are independent.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"sort","schema":{"type":"string","enum":["latest","top","most_discussed"]},"description":"latest: original publication time; top: versioned fixed-point score with stable diversity rounds; most_discussed: known discussion counts, participants, publication time and stable identity. Unknown discussion counts sort after known counts without removing the content."},{"in":"query","name":"category","schema":{"type":"string","enum":["all","memes","equities"]},"description":"Applied to current canonical subject evidence before each owner limit. Unknown classifications are eligible only for all."},{"in":"query","name":"period","schema":{"type":"string","enum":["24h","7d","30d"]}},{"in":"query","name":"sources","schema":{"type":"string","maxLength":32}},{"in":"query","name":"asset","schema":{"type":"string","maxLength":200}},{"in":"query","name":"company","schema":{"type":"string","maxLength":128},"description":"Canonical company ID (company:aapl), explicit ticker (AAPL), or an unambiguous alias in the complete canonical registry. Unknown canonical IDs return an empty result. Does not infer a company from a token ticker."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"in":"query","name":"cursor","schema":{"type":"string","maxLength":8192},"description":"Pass the opaque next_cursor unchanged. Combined live cursors require the same filters, page size and viewer; legacy combined snapshot cursors return 410."},{"in":"query","name":"include_reactions","required":false,"schema":{"type":"boolean","default":false},"description":"Include current viewer-specific reaction_summary on each item to avoid initial per-card reaction reads. Native posts/comments use contract 2; imported trades, theses and X posts use contract 1. Native CALLD trades return null. Omitted or false preserves the existing response. Supported on /v2/me/feed both without sort (legacy) and with sort (combined); not supported on /v2/social/posts. Enrichment failure returns 503."},{"name":"include_reply_preview","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Include reply_preview on each item with up to two discussion rows, a nondeleted direct reply count and continuation cursor. Independent of include_reactions. Native CALLD trades, X posts and theses without an asset return null. Omitted or false preserves the existing response. Supported on both legacy and combined /v2/me/feed; not supported on /v2/social/posts. Preview failure returns 503, never a fabricated empty preview. Does not evaluate token-holder eligibility."},{"name":"include_position_entry","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Include position_entry on each thesis item: the indexer's prepared position for a Solana thesis (entry timestamp of the cycle that includes the thesis, lifecycle state, observation time and freshness) plus its request_status, so the card paints without a second request. Theses without a Solana asset and every non-thesis item carry null or no field. Omitted or false preserves the existing response. Combined feed only: on /v2/me/feed it needs sort like every combined parameter. Entry failure returns 503, never a fabricated entry; a thesis with no prepared position returns request_status.state unavailable with reason not_found."},{"name":"min_trade_usd","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":999999999999},"description":"Select only trade items whose USD size is at least this many whole dollars; trades with no known USD size are excluded. Posts, comments, theses and X posts are unaffected. 0 or omitted applies no size filter. The cursor binds the value like every other filter; a continuation with a different value is rejected."}],"responses":{"200":{"description":"Frozen feed evidence with current authorized content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialCombinedFeedPage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"501":{"description":"A required capability is unavailable; no sample fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedCapabilityProblem"}}}},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/feed/top":{"get":{"operationId":"listSocialCombinedTopFeed","summary":"Read the combined stable feed in Top order","description":"Latest reads current eligible native/Fomo/Pump/X records by original publication time. Top and Most discussed use current committed rankings with current filters and visibility. Filters precede each owner limit. Pagination is live: ranks, membership and relationship scope can change between pages, so clients should deduplicate record_id and refresh for the current head. Opaque cursors bind filters, page size and viewer; they retain seek positions only. Latest does not depend on rank publication. Missing or stale required rankings and source failures return 503; old frozen cursors return 410 and require first-page refresh. Pages and activity probes do not mark items read. The rollout flag is disabled by default. Private, no-store; Vary: Authorization. Omit sort or use sort=top; other sorts fail. Optional include_reactions and include_reply_preview enrich returned items without changing the default response; both options are independent.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"sort","schema":{"type":"string","enum":["top"]},"description":"top only: this route is the Top feed alias of /v2/social/feed. Other sorts answer 400 invalid_feed_query; use /v2/social/feed for latest or most_discussed."},{"in":"query","name":"category","schema":{"type":"string","enum":["all","memes","equities"]},"description":"Applied to current canonical subject evidence before each owner limit. Unknown classifications are eligible only for all."},{"in":"query","name":"period","schema":{"type":"string","enum":["24h","7d","30d"]}},{"in":"query","name":"sources","schema":{"type":"string","maxLength":32}},{"in":"query","name":"asset","schema":{"type":"string","maxLength":200}},{"in":"query","name":"company","schema":{"type":"string","maxLength":128},"description":"Canonical company ID (company:aapl), explicit ticker (AAPL), or an unambiguous alias in the complete canonical registry. Unknown canonical IDs return an empty result. Does not infer a company from a token ticker."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"in":"query","name":"cursor","schema":{"type":"string","maxLength":8192},"description":"Pass the opaque next_cursor unchanged. Combined live cursors require the same filters, page size and viewer; legacy combined snapshot cursors return 410."},{"in":"query","name":"include_reactions","required":false,"schema":{"type":"boolean","default":false},"description":"Include current viewer-specific reaction_summary on each item to avoid initial per-card reaction reads. Native posts/comments use contract 2; imported trades, theses and X posts use contract 1. Native CALLD trades return null. Omitted or false preserves the existing response. Supported on /v2/me/feed both without sort (legacy) and with sort (combined); not supported on /v2/social/posts. Enrichment failure returns 503."},{"name":"include_reply_preview","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Include reply_preview on each item with up to two discussion rows, a nondeleted direct reply count and continuation cursor. Independent of include_reactions. Native CALLD trades, X posts and theses without an asset return null. Omitted or false preserves the existing response. Supported on both legacy and combined /v2/me/feed; not supported on /v2/social/posts. Preview failure returns 503, never a fabricated empty preview. Does not evaluate token-holder eligibility."},{"name":"include_position_entry","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Include position_entry on each thesis item: the indexer's prepared position for a Solana thesis (entry timestamp of the cycle that includes the thesis, lifecycle state, observation time and freshness) plus its request_status, so the card paints without a second request. Theses without a Solana asset and every non-thesis item carry null or no field. Omitted or false preserves the existing response. Combined feed only: on /v2/me/feed it needs sort like every combined parameter. Entry failure returns 503, never a fabricated entry; a thesis with no prepared position returns request_status.state unavailable with reason not_found."},{"name":"min_trade_usd","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":999999999999},"description":"Select only trade items whose USD size is at least this many whole dollars; trades with no known USD size are excluded. Posts, comments, theses and X posts are unaffected. 0 or omitted applies no size filter. The cursor binds the value like every other filter; a continuation with a different value is rejected."}],"responses":{"200":{"description":"Frozen feed evidence with current authorized content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialCombinedFeedPage"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"501":{"description":"A required capability is unavailable; no sample fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedCapabilityProblem"}}}},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/feed/activity":{"get":{"operationId":"readSocialFeedActivity","summary":"Observe snapshot-coupled feed updates without changing pages","description":"Compares the current first visible page with an authenticated first-page checkpoint. This is a bounded refresh hint, not an inventory of all changes: changes below the first page may be missed. Keep the accepted baseline while showing the hint; new_checkpoint is an observation, never an acknowledgment. Pagination pages return null checkpoints. Required source failure returns 503 rather than a false quiet result. Checkpoints bind scope, filters and viewer and expire after 15 minutes (410); legacy cf1_ checkpoints also require refresh. The social endpoint accepts discovery/native_posts; the me endpoint accepts friends/watching. Probes never mark items read.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"checkpoint","required":true,"schema":{"type":"string","maxLength":8192}}],"responses":{"200":{"description":"Frozen feed evidence with current authorized content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedActivity"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"501":{"description":"A required capability is unavailable; no sample fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedCapabilityProblem"}}}},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/me/feed/activity":{"get":{"operationId":"readRelationshipFeedActivity","summary":"Observe snapshot-coupled feed updates without changing pages","description":"Compares the current first visible page with an authenticated first-page checkpoint. This is a bounded refresh hint, not an inventory of all changes: changes below the first page may be missed. Keep the accepted baseline while showing the hint; new_checkpoint is an observation, never an acknowledgment. Pagination pages return null checkpoints. Required source failure returns 503 rather than a false quiet result. Checkpoints bind scope, filters and viewer and expire after 15 minutes (410); legacy cf1_ checkpoints also require refresh. The social endpoint accepts discovery/native_posts; the me endpoint accepts friends/watching. Probes never mark items read.","tags":["Social Community"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"query","name":"checkpoint","required":true,"schema":{"type":"string","maxLength":8192}}],"responses":{"200":{"description":"Frozen feed evidence with current authorized content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedActivity"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"501":{"description":"A required capability is unavailable; no sample fallback","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialFeedCapabilityProblem"}}}},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/notifications/unread-count":{"get":{"operationId":"getNotificationUnreadCount","description":"Authenticated current-policy notification operation. Responses are private, no-store. Capability gates may keep this operation unavailable until the reviewed migration and source contracts are admitted.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationReadViewV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/notifications/read-all":{"post":{"operationId":"markNotificationsReadThrough","description":"Atomically marks every owned notification admission at or below the live server-issued checkpoint read, including activity currently hidden or suppressed. Older activity remains read if it later becomes visible; activity admitted above the checkpoint stays unread, including on an older group. updated_activity_count reports only currently authorized, unsuppressed newly acknowledged admissions, so a hidden-only cutoff advance can return zero while advancing inbox_revision once. Repeating the same or an older cutoff does not change read state. List, count and target authorization remain current; unavailable required source visibility or a deadline failure rolls back the entire operation. Responses are private, no-store. Reviewed capability and migration gates still apply.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationReadAllV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"through":{"type":"string","format":"uuid"}},"required":["through"]}}},"description":"Only an opaque, live checkpoint issued to this recipient is accepted; clients cannot supply a timestamp or raw revision. The checkpoint covers hidden as well as visible older activity."}}},"/v1/notification-preferences":{"get":{"operationId":"getNotificationPreferences","description":"Read current global/category push settings, message/financial preview policy, three default-off source opt-ins and implemented capability scope. Private, no-store. Capability scope is not an activation/deployment attestation.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferencesV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}},"patch":{"operationId":"updateNotificationPreferences","description":"Compare-and-set current preferences with expected_version; stale versions return409. Category/global controls affect push while preserving required inbox history. Optional source subscriptions additionally gate admission of that optional reason; enabling/re-enabling never replays older source events. selected_posts supports separately typed native and imported trader selections. Private, no-store.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferencesV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferencesPatchV2"}}}}}},"/v2/chats/{chat_id}/notification-preferences":{"get":{"operationId":"getChatNotificationPreferences","description":"Authenticated current-policy notification operation. Responses are private, no-store. Capability gates may keep this operation unavailable until the reviewed migration and source contracts are admitted.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"chat_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatNotificationPreferencesV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}},"put":{"operationId":"replaceChatNotificationPreferences","description":"Authenticated current-policy notification operation. Responses are private, no-store. Capability gates may keep this operation unavailable until the reviewed migration and source contracts are admitted.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"chat_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatNotificationPreferencesV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatNotificationPreferencesPutV2"}}}}}},"/v1/notifications/{id}/target":{"get":{"operationId":"resolveNotificationTarget","description":"Exact source-owned context after current authorization. Missing/deleted/revoked sources return unavailable; an unreadable dependency returns 503 rather than partial data. Another inbox owner receives 404. Reading a target does not acknowledge messages, mutate the source, poll a financial provider or create notifications. Responses are private, no-store.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Authorized notification response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationTargetResponseV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"410":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/notification-subscriptions/selected-posts":{"get":{"operationId":"listSelectedPostNotificationSubscriptions","description":"List the caller's enabled native-author selections (maximum 100). This private read does not enroll a source or create notifications.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativePostNotificationSelections"}}}},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/notification-subscriptions/selected-posts/{user_id}":{"get":{"operationId":"getSelectedPostNotificationSubscription","description":"Read the caller's native author selection, including a retained disabled version. No prior selection returns enabled=false and version=\"0\".","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Native CALLD author user ID; never an imported trader/profile ID."}],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativePostNotificationSelection"}}}},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}},"put":{"operationId":"selectPostNotificationAuthor","description":"Enable notifications for an actively followed, eligible native author using expected_version. An already enabled identical selection is an idempotent success; a stale new change returns 409. Maximum 100 active selections. Delivery also requires the global selected_posts opt-in. Enabling/re-enabling starts a new source episode and does not replay earlier publications. Native posts and post replies are supported; imported trader selections use their separate typed routes.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Native CALLD author user ID; never an imported trader/profile ID."}],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativePostNotificationSelection"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativePostNotificationSelectionRequest"}}}}},"delete":{"operationId":"removePostNotificationAuthor","description":"Idempotently disable the caller's native author selection. Returns 204 even when already absent. No request body/version is required; retained versions can be read with GET. Existing authorized history and independent reply/mention reasons remain.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Native CALLD author user ID; never an imported trader/profile ID."}],"responses":{"204":{"description":"Selection disabled or already absent"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/chats/{chat_id}/messages/{message_id}":{"get":{"operationId":"getChatMessage","description":"Read one exact authorized message, including its current media/GIF/position context, independent of message pagination. A mismatched chat, inaccessible or deleted source is404. This read does not acknowledge delivered/read receipts or emit a notification.","tags":["Messaging"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/ChatId"},{"$ref":"#/components/parameters/ChatMessageId"},{"$ref":"#/components/parameters/PositionSnapshotVersion"}],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatMessage"}}}},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}}}},"/v2/chat-invites/{invite_id}":{"get":{"operationId":"getChatInvite","description":"Read one exact invitation and current accept/decline capabilities. Entitled invitees and current chat managers can read safe terminal history; expired/accepted/declined/revoked invitations have false action capabilities. This read performs no response or membership mutation.","tags":["Messaging"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/ChatInviteId"}],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExactChatInvite"}}}},"400":{"$ref":"#/components/responses/MessagingProblem"},"401":{"$ref":"#/components/responses/MessagingProblem"},"403":{"$ref":"#/components/responses/MessagingProblem"},"404":{"$ref":"#/components/responses/MessagingProblem"},"503":{"$ref":"#/components/responses/MessagingProblem"}}}},"/v1/notification-subscriptions/selected-trader-posts":{"get":{"operationId":"listSelectedTraderPostNotificationSubscriptions","description":"List up to 100 enabled imported trader selections. This private read does not subscribe, poll providers or create notifications.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportedPostNotificationSelections"}}}},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/notification-preferences/traders/{trader_profile_id}/posts":{"get":{"operationId":"getSelectedTraderPostNotificationSubscription","description":"Read the caller's imported trader selection including a retained disabled version. An absent selection returns enabled=false/version=0.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"trader_profile_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Backend imported Fomo/Pump trader profile UUID; never a native CALLD user ID."}],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportedPostNotificationSelection"}}}},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}},"put":{"operationId":"selectPostNotificationTrader","description":"Enable a currently followed public Fomo/Pump trader with expected_version. Active identical replay succeeds before requiring another upstream head; stale new changes return 409. The server captures the current committed publication head and original-created-time floor. Global selected_posts also defaults off and must be enabled. Enabling/re-enabling never replays earlier original publications, edits or late imports. Maximum 100 enabled imported selections. Missing current source proof fails closed; upstream outage returns 503.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"trader_profile_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Backend imported Fomo/Pump trader profile UUID; never a native CALLD user ID."}],"responses":{"200":{"description":"Authorized current source response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportedPostNotificationSelection"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportedPostNotificationSelectionRequest"}}}}},"delete":{"operationId":"removePostNotificationTrader","description":"Disable an imported trader selection idempotently with no body and return 204. Retain its version and authorized history; cancel its pending optional pushes. A later enable starts a new source episode.","tags":["Notifications"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"trader_profile_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Backend imported Fomo/Pump trader profile UUID; never a native CALLD user ID."}],"responses":{"204":{"description":"Selection disabled or already absent"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v3/portfolio/history":{"get":{"description":"Returns on-demand Mobula historical net worth for the authenticated principal’s current managed wallets. The Portfolio service caches complete results. Incomplete backfill returns 202, never an empty successful chart. Only range is accepted; callers cannot supply wallet addresses or another user. Existing /v3/portfolio/performance retains its observed equity/cash contract.","operationId":"getPortfolioHistory","parameters":[{"in":"query","name":"range","required":true,"schema":{"type":"string","enum":["24h","7d","30d"]}}],"responses":{"200":{"description":"Complete reconstructed history","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioHistory"}}}},"202":{"description":"Provider history is being prepared; retry after the stated interval","headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}},"Retry-After":{"schema":{"type":"string","pattern":"^\\d+$"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioHistoryPending"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Portfolio history temporarily unavailable. Capacity exhaustion returns code portfolio_history_busy with bounded Retry-After guidance; provider backfill instead returns HTTP 202. Other failures return portfolio_history_unavailable.","headers":{"Retry-After":{"description":"Seconds before retrying an HTTP 429 or 503 response.","schema":{"minimum":1,"type":"integer"}},"X-Request-ID":{"description":"Request correlation identifier returned with an HTTP 429 or 503 response.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":[]}],"tags":["Portfolio"]}},"/v1/execute":{"post":{"security":[{"bearerAuth":[]}],"tags":["Execution Preparations"],"x-local-only":true,"operationId":"createExecutionPreparation","summary":"Create or recover an execution job","description":"Enabled only in configured local or staging execution cohorts. With quote-ID admission configured, accepts only {quote_id} and Idempotency-Key. The engine resolves and verifies the signed quote; the API atomically stores its immutable snapshot, accepted limits and signed submission deadline before queueing. Only eligible fee-aware DFlow Solana USDC routes are executable. Same accepted quote recovers its job even after expiry or Redis loss. An Idempotency-Key already bound to a different quote conflicts; alternate recovery keys are not stored as aliases. Legacy {quote_token} and raw preparation contracts retain their existing behavior.","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{1,128}$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExecutionPreparationInput"},{"$ref":"#/components/schemas/ExecuteSignedQuoteInput"},{"$ref":"#/components/schemas/ExecuteQuoteIdInput"}]}}}},"responses":{"202":{"description":"Existing or newly created job; acceptance is not trade success","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExecutionPreparation"},{"$ref":"#/components/schemas/ExecutionTradeJob"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v1/execute/{id}":{"get":{"security":[{"bearerAuth":[]}],"tags":["Execution Preparations"],"x-local-only":true,"operationId":"getExecutionPreparation","summary":"Read your preparation test progress","description":"Local-only authenticated status read. Missing and foreign jobs both return 404. Transaction bytes and wallet-provider references are never returned.","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Preparation job and current public status","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ExecutionPreparation"},{"$ref":"#/components/schemas/ExecutionTradeJob"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/me/execution-signer/prepare":{"post":{"operationId":"prepareExecutionSignerV2","summary":"Prepare or reconcile automatic Solana server-signing setup","description":"Authenticates the user, resolves the managed wallet and reads authoritative Privy user/wallet evidence. Returns disabled outside the enabled execution cohort. For an eligible wallet with no signer, durably prepares an exact owner-authorized PATCH with a 90-second expiry. Existing active enrollment is reused; recorded revocation is not restored. Grants removed before enrollment history existed cannot be distinguished from never-enrolled wallets using current provider state alone. Only never-dispatched prepared requests can be renewed. This endpoint never sends the Privy wallet update.","tags":["Identity"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"maxProperties":0}}}},"responses":{"200":{"description":"Current setup state; a funded trade is never submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionSignerSetupV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/me/execution-signer/authorize":{"post":{"operationId":"authorizeExecutionSignerV2","summary":"Submit a prepared wallet-owner authorization once","description":"Validates the owner signature encoding and the exact prepared expiry, rechecks wallet ownership/signing evidence, and commits the submitted state before one Privy PATCH. Requires the matching enrollment ID and expires_at_unix_ms from prepare. Repeated calls do not resend a submitted update. Provider timeout or failure is reconciled by reads; unresolved submissions become needs_attention after expiry. Direct external Privy updates can race this operation; expiry bounds but does not eliminate that window. This endpoint does not execute a trade.","tags":["Identity"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionSignerAuthorizationV2Request"}}}},"responses":{"200":{"description":"Current setup state; a funded trade is never submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionSignerSetupV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/social/reactions":{"get":{"description":"CALLD emoji reaction counts on any supported target, grouped by emoji, plus which the viewer selected. Replaces the per-kind `/reactions` paths. Post targets allow anonymous reads where the post is public; every other kind requires sign-in. Returns 404 when the target is deleted or not visible to the viewer.","operationId":"getSocialReactions","parameters":[{"in":"query","name":"kind","required":true,"schema":{"type":"string","enum":["post","asset_comment","thesis","trade","x_post"]}},{"in":"query","name":"id","required":true,"schema":{"type":"string","minLength":1,"maxLength":40},"description":"Target UUID, or the numeric X post id for `x_post`."},{"in":"query","name":"chain_id","required":false,"schema":{"type":"string"},"description":"Required with `kind=asset_comment`."},{"in":"query","name":"address","required":false,"schema":{"type":"string"},"description":"Required with `kind=asset_comment`."},{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."}],"responses":{"200":{"description":"Reaction summary for the target","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]},{}],"tags":["Social Community"]},"post":{"description":"Adds or removes the viewer's emoji reaction on any supported target in one command. Replaces the per-kind `PUT`/`DELETE .../reactions/{emoji}` paths. Adding requires an unrestricted account and a target visible to the viewer with no block either way; removing is always allowed for the viewer's own reaction. Returns the updated summary.","operationId":"setSocialReaction","parameters":[{"in":"query","name":"contract","required":false,"schema":{"type":"string","enum":["2"]},"description":"Explicit v2 negotiation. Omission preserves the strict legacy contract."},{"in":"header","name":"Idempotency-Key","required":false,"description":"Required with contract=2 for post and asset_comment targets. Stable UUID scoped to the authenticated actor.","schema":{"type":"string","format":"uuid"}},{"in":"header","name":"If-Match","required":false,"description":"Required with contract=2. Quoted per-emoji revision including absent tombstones.","schema":{"type":"string","pattern":"^\"(0|[1-9][0-9]{0,18})\"$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialReactionCommand"}}}},"responses":{"200":{"description":"Reaction summary for the target","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SocialReactionSummary"},{"$ref":"#/components/schemas/SocialReactionSummaryV2"}]}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"404":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"412":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}],"tags":["Social Community"]}},"/v3/quote":{"post":{"operationId":"createQuoteV3","tags":["Execution Quotes"],"security":[{"bearerAuth":[]}],"description":"Authenticates the caller, forwards exact inputs and principal wallet addresses to the private gRPC Quote service, and returns quote_id plus the signed payload after Redis storage succeeds. The API gateway performs no additional balance or metadata reads. Client-supplied identity, wallet addresses and decimals are rejected. An explicit amount_atomic is required; sell_all is rejected. When prepared execution is explicitly enabled, the winning eligible DFlow Solana USDC quote contains validated, simulated, sponsor-signed transaction bytes in prepared_transaction. Quote reads fresh chain balances and mint metadata for this preparation. Authenticated POST /v1/execute with quote_id approves user signing and submission through the existing enrolled backend signer; no extra client signature is required. Acceptance and submission must occur before the same signed expiry. Other routes remain price discovery only and cannot be executed by quote ID. Existing /v2/quote behavior is unchanged. Requires QUOTE_GRPC_TARGET, otherwise returns 503.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQuoteV3Request"}}}},"responses":{"200":{"description":"Signed quote stored; ID and the exact signed payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQuoteV3Response"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"413":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}}}},"/v2/me/trader-discovery-dismissals/{trader_profile_id}":{"put":{"operationId":"dismissTraderDiscoveryProfile","description":"Dismiss an external trader in Suggested traders for the authenticated user. Does not change Watching or the other discovery modes. Requires an empty request: no body or query parameters. Returns the resulting dismissal state; PUT sets is_dismissed=true and DELETE sets it to false. PUT returns 404 for an unknown external trader or 409 at the dismissal limit of 1000 profiles per user. DELETE is idempotent, including after the external identity is removed; missing preferences configuration returns 501 without retry instructions, budget exhaustion returns 429, and transient failures return 503. All responses are private, no-store.","tags":["Social Activity"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Resulting viewer-specific dismissal state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderDiscoveryDismissalResponse"}}},"headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}}},"400":{"$ref":"#/components/responses/TraderPrivateProblem"},"401":{"$ref":"#/components/responses/TraderPrivateProblem"},"404":{"$ref":"#/components/responses/TraderPrivateProblem"},"409":{"$ref":"#/components/responses/TraderPrivateProblem"},"429":{"$ref":"#/components/responses/TraderPrivateProblem"},"501":{"$ref":"#/components/responses/TraderDiscoveryUnsupported"},"503":{"$ref":"#/components/responses/TraderPrivateProblem"}}},"delete":{"operationId":"restoreTraderDiscoveryProfile","description":"Remove dismissal for an external trader in Suggested traders for the authenticated user. Does not change Watching or the other discovery modes. Requires an empty request: no body or query parameters. Returns the resulting dismissal state; PUT sets is_dismissed=true and DELETE sets it to false. PUT returns 404 for an unknown external trader or 409 at the dismissal limit of 1000 profiles per user. DELETE is idempotent, including after the external identity is removed; missing preferences configuration returns 501 without retry instructions, budget exhaustion returns 429, and transient failures return 503. All responses are private, no-store.","tags":["Social Activity"],"security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"trader_profile_id","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Resulting viewer-specific dismissal state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TraderDiscoveryDismissalResponse"}}},"headers":{"Cache-Control":{"schema":{"type":"string","const":"private, no-store"}}}},"400":{"$ref":"#/components/responses/TraderPrivateProblem"},"401":{"$ref":"#/components/responses/TraderPrivateProblem"},"404":{"$ref":"#/components/responses/TraderPrivateProblem"},"409":{"$ref":"#/components/responses/TraderPrivateProblem"},"429":{"$ref":"#/components/responses/TraderPrivateProblem"},"501":{"$ref":"#/components/responses/TraderDiscoveryUnsupported"},"503":{"$ref":"#/components/responses/TraderPrivateProblem"}}}},"/v2/order-bundles/prepare":{"post":{"operationId":"prepareOrderBundleV2","description":"Prepare a client-signed funding bridge with existing market fee policy and owned wallets. No user signature, broadcast or workflow is performed. Solana server-execution wallets are excluded.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundleTermsV2"}}}},"responses":{"200":{"description":"Stateless client preparation or explicit pending/manual-review state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"X-Request-ID":{"description":"Request correlation identifier for backend logs and provider diagnostics.","schema":{"minLength":1,"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundlePreparedV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}]}},"/v2/order-bundles/prepare-order":{"post":{"operationId":"prepareFundedBundleOrderV2","description":"Verify owned forward bridge and observed Base USDC credit, then prepare an exact received-amount Base limit buy at 50 bps. Requires a later EVM signature; does not promise an upfront destination quote.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundleContextV2"}}}},"responses":{"200":{"description":"Stateless client preparation or explicit pending/manual-review state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"X-Request-ID":{"description":"Request correlation identifier for backend logs and provider diagnostics.","schema":{"minLength":1,"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundleOrderPreparedV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}]}},"/v2/order-bundles/prepare-return":{"post":{"operationId":"prepareOrderBundleReturnV2","description":"Prepare a fresh exact-amount return quote from verified funding and, when supplied, an owned terminal order with reconciled fill receipts. No-order path requires the client checkpoint to prove no placement was attempted. Client must stop on lost/ambiguous checkpoint or any prior return attempt; API is not a replay-proof allocation ledger. Remaining amount is bounded by funding and live balance; it never sweeps the wallet.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundleReturnContextV2"}}}},"responses":{"200":{"description":"Stateless client preparation or explicit pending/manual-review state","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"X-Request-ID":{"description":"Request correlation identifier for backend logs and provider diagnostics.","schema":{"minLength":1,"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundleReturnPreparedV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}]}},"/v2/order-bundles/bridge-status":{"get":{"operationId":"getOrderBundleBridgeStatusV2","description":"Read owned Relay request status with source and destination receipt verification, for a funding or return bridge. Provider IDs are checked against authenticated participants; no balance increase heuristic or arbitrary URL is accepted.","parameters":[{"name":"request_id","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"}},{"name":"direction","in":"query","required":true,"schema":{"type":"string","enum":["funding","return"]}},{"name":"source_transaction_id","in":"query","required":true,"schema":{"type":"string","minLength":64,"maxLength":88}}],"responses":{"200":{"description":"Owned bridge observation","headers":{"Cache-Control":{"schema":{"const":"private, no-store","type":"string"}},"X-Request-ID":{"description":"Request correlation identifier for backend logs and provider diagnostics.","schema":{"minLength":1,"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBundleBridgeStatusV2"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"403":{"$ref":"#/components/responses/Problem"},"409":{"$ref":"#/components/responses/Problem"},"503":{"$ref":"#/components/responses/Problem"}},"security":[{"bearerAuth":[]}]}}}}