This is only a test.
+ */ + html: string; + /** + * @description Plain text rendering of the markdown + * @example This is only a test (https://example.com). + */ + plain: string; + }; + /** @description Embedded user representation (used when user is nested in other resources) */ + EmbeddedUser: { + /** + * @description Unique identifier for the user + * @example 12345 + */ + id: number; + /** + * @description User type (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: "User"; + /** + * @description User's display name + * @example John Doe + */ + name: string; + /** + * @description URL-safe identifier (use this in API paths) + * @example john-doe + */ + slug: string; + /** + * Format: uri + * @description URL to user's avatar image + * @example https://d2w9rnfcy7mm78.cloudfront.net/12345/avatar.jpg + */ + avatar: string | null; + /** + * @description User's initials + * @example JD + */ + initials: string; + }; + /** + * @description Connection metadata that describes how an item is connected to a channel. + * This is only present when the item is returned as part of a channel's contents. + */ + ConnectionContext: { + /** + * @description Unique identifier for the connection + * @example 98765 + */ + id: number; + /** + * @description Position of the item within the channel (for manual ordering) + * @example 1 + */ + position: number; + /** + * @description Whether the item is pinned to the top of the channel + * @example false + */ + pinned: boolean; + /** + * Format: date-time + * @description When the item was connected to the channel + * @example 2023-01-15T10:30:00Z + */ + connected_at: string; + /** @description User who connected this item to the channel */ + connected_by: components["schemas"]["EmbeddedUser"] | null; + }; + /** @description Embedded group representation (used when group is nested in other resources) */ + EmbeddedGroup: { + /** + * @description Unique identifier for the group + * @example 67890 + */ + id: number; + /** + * @description Group type (enum property replaced by openapi-typescript) + * @enum {string} + */ + type: "Group"; + /** + * @description Group's name + * @example Design Team + */ + name: string; + /** + * @description Group's URL slug + * @example design-team-abc123 + */ + slug: string; + /** + * Format: uri + * @description URL to group's avatar image + * @example https://d2w9rnfcy7mm78.cloudfront.net/groups/67890/avatar.jpg + */ + avatar: string | null; + /** + * @description Group's initials + * @example DT + */ + initials: string; + }; + /** @description Full user representation */ + User: components["schemas"]["EmbeddedUser"] & { + /** + * Format: date-time + * @description When the user was created + * @example 2023-01-15T10:30:00Z + */ + created_at: string; + /** + * Format: date-time + * @description When the user was last updated + * @example 2023-06-20T14:45:00Z + */ + updated_at: string; + /** @description User biography with markdown, HTML, and plain text renderings */ + bio?: components["schemas"]["MarkdownContent"] | null; + counts: components["schemas"]["UserCounts"]; + _links: components["schemas"]["Links"] & unknown; + }; + /** @description Counts of various items for the user */ + UserCounts: { + /** + * @description Number of channels owned by the user + * @example 24 + */ + channels: number; + /** + * @description Number of followers + * @example 156 + */ + followers: number; + /** + * @description Number of users being followed + * @example 89 + */ + following: number; + }; + /** @description Full group representation */ + Group: components["schemas"]["EmbeddedGroup"] & { + /** @description Group biography with markdown, HTML, and plain text renderings */ + bio?: components["schemas"]["MarkdownContent"] | null; + /** + * Format: date-time + * @description When the group was created + * @example 2023-01-15T10:30:00Z + */ + created_at: string; + /** + * Format: date-time + * @description When the group was last updated + * @example 2023-06-20T14:45:00Z + */ + updated_at: string; + user: components["schemas"]["EmbeddedUser"] & unknown; + counts: components["schemas"]["GroupCounts"]; + _links: components["schemas"]["Links"] & unknown; + }; + /** @description Counts of various items for the group */ + GroupCounts: { + /** + * @description Number of channels owned by the group + * @example 12 + */ + channels: number; + /** + * @description Number of users in the group + * @example 5 + */ + users: number; + }; + /** + * @description Filter for content types (blocks and channels) + * @enum {string} + */ + ContentTypeFilter: "Text" | "Image" | "Link" | "Attachment" | "Embed" | "Channel" | "Block"; + /** + * @description Filter for searchable content types (includes all content types plus users and groups) + * @enum {string} + */ + SearchTypeFilter: "All" | "Text" | "Image" | "Link" | "Attachment" | "Embed" | "Channel" | "Block" | "User" | "Group"; + /** + * @description Supported file extensions for filtering + * @enum {string} + */ + FileExtension: "aac" | "ai" | "aiff" | "avi" | "avif" | "bmp" | "csv" | "doc" | "docx" | "eps" | "epub" | "fla" | "gif" | "h264" | "heic" | "heif" | "ind" | "indd" | "jpeg" | "jpg" | "key" | "kml" | "kmz" | "latex" | "m4a" | "ma" | "mb" | "mid" | "midi" | "mov" | "mp3" | "mp4" | "mp4v" | "mpeg" | "mpg" | "mpg4" | "numbers" | "oga" | "ogg" | "ogv" | "otf" | "pages" | "pdf" | "pgp" | "png" | "ppt" | "pptx" | "psd" | "svg" | "swa" | "swf" | "tex" | "texi" | "texinfo" | "tfm" | "tif" | "tiff" | "torrent" | "ttc" | "ttf" | "txt" | "wav" | "webm" | "webp" | "wma" | "xls" | "xlsx" | "xlt"; + /** + * @description Sort order for connection lists (channels containing a block/channel, followers) + * @enum {string} + */ + ConnectionSort: "created_at_desc" | "created_at_asc"; + /** + * @description Sort order for channel contents (includes position for manual ordering) + * @enum {string} + */ + ChannelContentSort: "position_asc" | "position_desc" | "created_at_asc" | "created_at_desc" | "updated_at_asc" | "updated_at_desc"; + /** + * @description Sort order for user/group content lists + * @enum {string} + */ + ContentSort: "created_at_asc" | "created_at_desc" | "updated_at_asc" | "updated_at_desc"; + /** + * @description A block is a piece of content on Are.na. Blocks come in different types, + * each with its own set of fields. Use the `type` field to determine which + * fields are available. + */ + Block: components["schemas"]["TextBlock"] | components["schemas"]["ImageBlock"] | components["schemas"]["LinkBlock"] | components["schemas"]["AttachmentBlock"] | components["schemas"]["EmbedBlock"]; + /** @description Common properties shared by all block types */ + BaseBlockProperties: { + /** + * @description Unique identifier for the block + * @example 12345 + */ + id: number; + /** + * @description Base type of the block (always "Block") + * @example Block + * @enum {string} + */ + base_type: "Block"; + /** + * @description Block title + * @example Interesting Article + */ + title?: string | null; + /** @description Block description with multiple renderings */ + description?: components["schemas"]["MarkdownContent"] | null; + /** + * @description Processing state of the block: + * - `available`: Block is ready and fully processed + * - `pending`: Block is queued for processing + * - `processing`: Block is currently being processed (e.g., image thumbnails, metadata extraction) + * - `failed`: Block processing failed (may still be viewable but incomplete) + * @example available + * @enum {string} + */ + state: "available" | "pending" | "failed" | "processing"; + /** + * @description Visibility level of the block: + * - `public`: Visible to everyone + * - `private`: Only visible to the owner + * - `orphan`: Block exists but is not connected to any channel + * @example public + * @enum {string} + */ + visibility: "public" | "private" | "orphan"; + /** + * @description Number of comments on the block + * @example 5 + */ + comment_count: number; + /** + * Format: date-time + * @description When the block was created + * @example 2023-01-15T10:30:00Z + */ + created_at: string; + /** + * Format: date-time + * @description When the block was last updated + * @example 2023-01-15T14:45:00Z + */ + updated_at: string; + user: components["schemas"]["EmbeddedUser"]; + /** @description Source URL and metadata (if block was created from a URL) */ + source?: components["schemas"]["BlockSource"] | null; + _links: components["schemas"]["Links"] & unknown; + /** + * @description Connection context (only present when block is returned as part of channel contents). + * Contains position, pinned status, and information about who connected the block. + */ + connection?: components["schemas"]["ConnectionContext"] | null; + }; + /** @description A text block containing markdown content */ + TextBlock: components["schemas"]["BaseBlockProperties"] & { + /** + * @description Block type (always "Text" for TextBlock) + * @enum {string} + */ + type: "Text"; + /** @description Text content with markdown, HTML, and plain text renderings */ + content: components["schemas"]["MarkdownContent"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "Text"; + }; + /** @description An image block containing an uploaded or scraped image */ + ImageBlock: components["schemas"]["BaseBlockProperties"] & { + /** + * @description Block type (always "Image" for ImageBlock) + * @enum {string} + */ + type: "Image"; + /** @description Image data with multiple resolutions */ + image: components["schemas"]["BlockImage"]; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "Image"; + }; + /** @description A link block representing a URL with optional preview */ + LinkBlock: components["schemas"]["BaseBlockProperties"] & { + /** + * @description Block type (always "Link" for LinkBlock) + * @enum {string} + */ + type: "Link"; + /** @description Preview image (if available) */ + image?: components["schemas"]["BlockImage"] | null; + /** @description Extracted text content from the link */ + content?: components["schemas"]["MarkdownContent"] | null; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "Link"; + }; + /** @description An attachment block containing an uploaded file */ + AttachmentBlock: components["schemas"]["BaseBlockProperties"] & { + /** + * @description Block type (always "Attachment" for AttachmentBlock) + * @enum {string} + */ + type: "Attachment"; + /** @description Attachment file data */ + attachment: components["schemas"]["BlockAttachment"]; + /** @description Preview image (for PDFs and other previewable files) */ + image?: components["schemas"]["BlockImage"] | null; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "Attachment"; + }; + /** @description An embed block containing embedded media (video, audio, etc.) */ + EmbedBlock: components["schemas"]["BaseBlockProperties"] & { + /** + * @description Block type (always "Embed" for EmbedBlock) + * @enum {string} + */ + type: "Embed"; + /** @description Embed data including HTML and dimensions */ + embed: components["schemas"]["BlockEmbed"]; + /** @description Thumbnail image (if available) */ + image?: components["schemas"]["BlockImage"] | null; + } & { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: "Embed"; + }; + BlockSource: { + /** + * Format: uri + * @description Source URL + * @example https://example.com/article + */ + url: string; + /** + * @description Source title + * @example Original Article Title + */ + title?: string | null; + provider?: components["schemas"]["BlockProvider"] | null; + }; + BlockProvider: { + /** + * @description Provider name (from parsed URI host) + * @example Example.com + */ + name: string; + /** + * Format: uri + * @description Provider URL (from parsed URI scheme and host) + * @example https://example.com + */ + url: string; + }; + BlockImage: { + /** + * @description Alternative text associated with the image + * @example Scanned collage of magazine cutouts + */ + alt_text?: string | null; + /** + * @description BlurHash representation of the image for progressive loading + * @example LEHV6nWB2yk8pyo0adR*.7kCMdnj + */ + blurhash?: string | null; + /** + * @description Original image width in pixels + * @example 1920 + */ + width?: number | null; + /** + * @description Original image height in pixels + * @example 1080 + */ + height?: number | null; + /** + * Format: float + * @description Image aspect ratio (width / height) + * @example 1.7778 + */ + aspect_ratio?: number | null; + /** + * @description Image content type + * @example image/jpeg + */ + content_type?: string; + /** + * @description Image filename + * @example image.jpg + */ + filename?: string; + /** + * @description File size in bytes + * @example 1024000 + */ + file_size?: number | null; + /** + * Format: date-time + * @description When the image was last updated + * @example 2023-01-15T14:45:00Z + */ + updated_at?: string; + small: components["schemas"]["ImageVersion"] & unknown; + medium: components["schemas"]["ImageVersion"] & unknown; + large: components["schemas"]["ImageVersion"] & unknown; + square: components["schemas"]["ImageVersion"] & unknown; + }; + /** @description A resized/processed version of an image with multiple resolution URLs */ + ImageVersion: { + /** + * Format: uri + * @description Default image URL (1x resolution) + * @example https://d2w9rnfcy7mm78.cloudfront.net/12345/display_image.jpg + */ + src: string; + /** + * Format: uri + * @description 1x resolution image URL + * @example https://d2w9rnfcy7mm78.cloudfront.net/12345/display_image.jpg + */ + src_1x: string; + /** + * Format: uri + * @description 2x resolution image URL for high DPI displays + * @example https://d2w9rnfcy7mm78.cloudfront.net/12345/display_image@2x.jpg + */ + src_2x: string; + /** + * Format: uri + * @description 3x resolution image URL for very high DPI displays + * @example https://d2w9rnfcy7mm78.cloudfront.net/12345/display_image@3x.jpg + */ + src_3x: string; + /** + * @description Width of the resized image in pixels + * @example 640 + */ + width?: number | null; + /** + * @description Height of the resized image in pixels + * @example 480 + */ + height?: number | null; + }; + BlockEmbed: { + /** + * Format: uri + * @description Embed URL + * @example https://www.youtube.com/embed/abc123 + */ + url?: string | null; + /** + * @description Embed type + * @example youtube + */ + type?: string | null; + /** + * @description Embed title + * @example Video Title + */ + title?: string | null; + /** + * @description Author name + * @example Author Name + */ + author_name?: string | null; + /** + * Format: uri + * @description Author URL + * @example https://example.com/author + */ + author_url?: string | null; + /** + * Format: uri + * @description Embed source URL + * @example https://www.youtube.com/watch?v=abc123 + */ + source_url?: string | null; + /** + * @description Embed width + * @example 640 + */ + width?: number | null; + /** + * @description Embed height + * @example 480 + */ + height?: number | null; + /** + * @description Embed HTML + * @example + */ + html?: string | null; + /** + * Format: uri + * @description Thumbnail URL + * @example https://example.com/thumbnail.jpg + */ + thumbnail_url?: string | null; + }; + BlockAttachment: { + /** + * @description Attachment filename + * @example document.pdf + */ + filename?: string | null; + /** + * @description Attachment content type + * @example application/pdf + */ + content_type?: string | null; + /** + * @description File size in bytes + * @example 2048000 + */ + file_size?: number | null; + /** + * @description File extension + * @example pdf + */ + file_extension?: string | null; + /** + * Format: date-time + * @description When the attachment was last updated + */ + updated_at?: string | null; + /** + * Format: uri + * @description Attachment download URL + * @example https://attachments.are.na/12345/document.pdf + */ + url: string; + }; + /** @description A comment on a block */ + Comment: { + /** + * @description Unique identifier for the comment + * @example 12345 + */ + id: number; + /** + * @description Comment type + * @example Comment + * @enum {string} + */ + type: "Comment"; + /** @description Comment body with markdown, HTML, and plain text renderings */ + body?: components["schemas"]["MarkdownContent"] | null; + /** + * Format: date-time + * @description When the comment was created + * @example 2023-01-15T10:30:00Z + */ + created_at: string; + /** + * Format: date-time + * @description When the comment was last updated + * @example 2023-01-15T14:45:00Z + */ + updated_at: string; + user: components["schemas"]["EmbeddedUser"]; + _links: components["schemas"]["Links"] & unknown; + }; + Channel: { + /** + * @description Unique identifier for the channel + * @example 12345 + */ + id: number; + /** + * @description Channel type + * @example Channel + * @enum {string} + */ + type: "Channel"; + /** + * @description Channel URL slug + * @example my-collection-abc123 + */ + slug: string; + /** + * @description Channel title + * @example My Collection + */ + title: string; + /** @description Channel description with multiple renderings */ + description?: components["schemas"]["MarkdownContent"] | null; + /** + * @description Lifecycle state of the channel: + * - `available`: Channel is active and accessible + * - `deleted`: Channel has been soft-deleted + * @example available + * @enum {string} + */ + state: "available" | "deleted"; + /** + * @description Visibility level of the channel: + * - `public`: Anyone can view and connect to the channel + * - `private`: Only the owner and collaborators can view + * - `closed`: Anyone can view, but only collaborators can add content + * @example public + * @enum {string} + */ + visibility: "public" | "private" | "closed"; + /** + * Format: date-time + * @description When the channel was created + * @example 2023-01-15T10:30:00Z + */ + created_at: string; + /** + * Format: date-time + * @description When the channel was last updated + * @example 2023-01-15T14:45:00Z + */ + updated_at: string; + owner: components["schemas"]["ChannelOwner"]; + counts: components["schemas"]["ChannelCounts"]; + _links: components["schemas"]["Links"] & unknown; + /** + * @description Connection context (only present when channel is returned as part of another channel's contents). + * Contains position, pinned status, and information about who connected the channel. + */ + connection?: components["schemas"]["ConnectionContext"] | null; + }; + /** @description Channel owner (User or Group) */ + ChannelOwner: components["schemas"]["EmbeddedUser"] | components["schemas"]["EmbeddedGroup"]; + /** @description Counts of various items in the channel */ + ChannelCounts: { + /** + * @description Number of blocks in the channel + * @example 42 + */ + blocks: number; + /** + * @description Number of channels connected to this channel + * @example 8 + */ + channels: number; + /** + * @description Total number of contents (blocks + channels) + * @example 50 + */ + contents: number; + /** + * @description Number of collaborators on the channel + * @example 3 + */ + collaborators: number; + }; + /** @description Pagination metadata when total counts are available */ + PaginationMetaWithCount: { + /** + * @description Current page number + * @example 1 + */ + current_page: number; + /** + * @description Next page number (null if last page) + * @example 2 + */ + next_page?: number | null; + /** @description Previous page number (null if first page) */ + prev_page?: number | null; + /** + * @description Number of items per page + * @example 25 + */ + per_page: number; + /** + * @description Total number of pages available + * @example 5 + */ + total_pages: number; + /** + * @description Total number of items available + * @example 120 + */ + total_count: number; + /** + * @description Whether there are more pages available + * @example true + */ + has_more_pages: boolean; + }; + /** @description Pagination metadata when total counts are not available */ + PaginationMetaWithoutCount: { + /** + * @description Current page number + * @example 1 + */ + current_page: number; + /** + * @description Next page number (null if last page) + * @example 2 + */ + next_page?: number | null; + /** @description Previous page number (null if first page) */ + prev_page?: number | null; + /** + * @description Number of items per page + * @example 25 + */ + per_page: number; + /** + * @description Whether there are more pages available + * @example true + */ + has_more_pages: boolean; + }; + /** @description Pagination metadata union matching pagination behavior with and without total counts */ + PaginationMeta: components["schemas"]["PaginationMetaWithCount"] | components["schemas"]["PaginationMetaWithoutCount"]; + /** @description Base schema for all paginated responses (use allOf to extend with specific data type) */ + PaginatedResponseBase: { + meta: components["schemas"]["PaginationMeta"]; + }; + /** @description Base schema for paginated responses with total count (use allOf to extend with specific data type) */ + PaginatedResponseWithCountBase: { + meta: components["schemas"]["PaginationMetaWithCount"]; + }; + /** @description Data payload containing an array of users */ + UserList: { + /** @description Array of users */ + data: components["schemas"]["User"][]; + }; + /** @description Data payload containing an array of channels */ + ChannelList: { + /** @description Array of channels */ + data: components["schemas"]["Channel"][]; + }; + /** @description Data payload containing mixed content that can be connected to channels (blocks and channels) */ + ConnectableList: { + /** @description Array of blocks and channels */ + data: (components["schemas"]["TextBlock"] | components["schemas"]["ImageBlock"] | components["schemas"]["LinkBlock"] | components["schemas"]["AttachmentBlock"] | components["schemas"]["EmbedBlock"] | components["schemas"]["Channel"])[]; + }; + /** @description Data payload containing followable items (users, channels, and groups) */ + FollowableList: { + /** @description Array of users, channels, and/or groups */ + data: (components["schemas"]["User"] | components["schemas"]["Channel"] | components["schemas"]["Group"])[]; + }; + /** @description Data payload containing all content types */ + EverythingList: { + /** @description Array of results (blocks, channels, users, or groups) */ + data: (components["schemas"]["TextBlock"] | components["schemas"]["ImageBlock"] | components["schemas"]["LinkBlock"] | components["schemas"]["AttachmentBlock"] | components["schemas"]["EmbedBlock"] | components["schemas"]["Channel"] | components["schemas"]["User"] | components["schemas"]["Group"])[]; + }; + /** @description Paginated list of users with total count */ + UserListResponse: components["schemas"]["UserList"] & components["schemas"]["PaginatedResponseWithCountBase"]; + /** @description Paginated list of channels with total count */ + ChannelListResponse: components["schemas"]["ChannelList"] & components["schemas"]["PaginatedResponseWithCountBase"]; + /** @description Paginated list of connectable content (blocks and channels) */ + ConnectableListResponse: components["schemas"]["ConnectableList"] & components["schemas"]["PaginatedResponseBase"]; + /** @description Paginated list of followable items (users, channels, and groups) with total count */ + FollowableListResponse: components["schemas"]["FollowableList"] & components["schemas"]["PaginatedResponseWithCountBase"]; + /** @description Paginated list of all content types with total count */ + EverythingListResponse: components["schemas"]["EverythingList"] & components["schemas"]["PaginatedResponseWithCountBase"]; + /** @description Data payload containing an array of comments */ + CommentList: { + /** @description Array of comments */ + data: components["schemas"]["Comment"][]; + }; + /** @description Paginated list of comments with total count */ + CommentListResponse: components["schemas"]["CommentList"] & components["schemas"]["PaginatedResponseWithCountBase"]; + /** @description Health check response */ + PingResponse: { + /** + * @example ok + * @enum {string} + */ + status: "ok"; + }; + }; + responses: { + /** @description Unauthorized */ + UnauthorizedResponse: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description Resource not found */ + NotFoundResponse: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description Validation error */ + ValidationErrorResponse: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description Forbidden - insufficient permissions to access this resource */ + ForbiddenResponse: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Error"]; + }; + }; + /** @description Rate limit exceeded */ + RateLimitResponse: { + headers: { + /** + * @description Seconds to wait before retrying + * @example 65 + */ + "Retry-After"?: string; + /** + * @description Request limit per minute + * @example 30 + */ + "X-RateLimit-Limit"?: string; + /** + * @description User's current tier + * @example guest + */ + "X-RateLimit-Tier"?: string; + /** + * @description Time window in seconds + * @example 60 + */ + "X-RateLimit-Window"?: string; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RateLimitError"]; + }; + }; + }; + parameters: { + /** + * @description Page number for pagination + * @example 1 + */ + PageParam: number; + /** + * @description Number of items per page (max 100) + * @example 24 + */ + PerParam: number; + /** @description Resource ID */ + IdParam: number; + /** @description Resource ID or slug */ + SlugOrIdParam: string; + /** + * @description Sort order (by created_at) + * @example created_at_desc + */ + ConnectionSortParam: components["schemas"]["ConnectionSort"]; + /** + * @description Sort order for content lists + * @example created_at_desc + */ + ContentSortParam: components["schemas"]["ContentSort"]; + /** + * @description Sort order for channel contents + * @example position_asc + */ + ChannelContentSortParam: components["schemas"]["ChannelContentSort"]; + /** + * @description Filter by content type + * @example Image + */ + ContentTypeFilterParam: components["schemas"]["ContentTypeFilter"]; + }; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record