{"openapi":"3.1.0","info":{"title":"Nonli Developer API","version":"2.1","description":"API reference for Nonli clients and AI agents. Use Authorization: Bearer with an API token for authenticated calls. API tokens represent a company role, not a web user session; use GET /brands?size=1&fields=id,name to validate a token, and do not use /me with Bearer tokens."},"servers":[{"url":"https://api.nonli.com/v2.1","description":"Production API v2.1"}],"security":[{"NonliBearer":[]}],"tags":[{"name":"Brands","description":"Read the brands attached to the authenticated company. Brand IDs are required by publishing and shortlink workflows."},{"name":"Social Accounts","description":"Read connected social accounts and quota data required before creating or scheduling posts."},{"name":"Posts","description":"Search, create, update, and delete social posts. Bulk write endpoints accept arrays so integrations can synchronize several posts at once."},{"name":"Shortlinks","description":"Create and search shortened URLs used by Nonli posts and attribution workflows."},{"name":"Social Listening","description":"Search social-network performance and organic website content signals."},{"name":"Organic Listening","description":"Search social-network performance and organic website content signals."},{"name":"Themes","description":"Read saved theme filters used by listening, publishing, and automation workflows."},{"name":"Bots","description":"Manage automation bots that transform sources such as feeds, themes, or social accounts into publishable posts."},{"name":"Media","description":"Search reusable media and metadata used by the publishing composer."},{"name":"Upload","description":"Upload images, videos, and documents before attaching them to posts."}],"paths":{"/brands":{"get":{"tags":["Brands"],"summary":"Search brands","description":"Return the brands visible to the API token role in the authenticated company.\n\nRequires an Authorization: Bearer API token.","operationId":"get-brands","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 50.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"sort","in":"query","description":"Sort expression. Default: -id.","schema":{"type":"string","description":"Sort expression."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"embed","in":"query","description":"Can embed urlParameters, domains, geoblocking, smart image configs, smart message configs, and URLs to stalk.","schema":{"type":"string","description":"Can embed urlParameters, domains, geoblocking, smart image configs, smart message configs, and URLs to stalk."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows":{"type":"array","description":"Brands found on the requested page.","items":{"type":"object","description":"Brands found on the requested page.","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Unique brand ID."},"name":{"type":"string","description":"Brand name."},"shortDomain":{"type":"string","description":"Brand short domain."}}}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/brands/{brandId}":{"get":{"tags":["Brands"],"summary":"Get a brand","description":"Return one brand with optional embedded configuration used for publishing, shortlinks, smart images, and URL parameters.\n\nRequires an Authorization: Bearer API token.","operationId":"get-brands-brandId","security":[{"NonliBearer":[]}],"parameters":[{"name":"brandId","in":"path","required":true,"description":"brandId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}},{"name":"embed","in":"query","description":"Can embed urlParameters, domains, geoblocking, smart image configs, smart message configs, and URLs to stalk.","schema":{"type":"string","description":"Can embed urlParameters, domains, geoblocking, smart image configs, smart message configs, and URLs to stalk."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Unique brand ID."},"name":{"type":"string","description":"Brand name."},"shortDomain":{"type":"string","description":"Brand short domain."},"domains":{"type":"array","description":"Configured brand domains when embedded.","items":{"type":"object","description":"Configured brand domains when embedded.","additionalProperties":true}},"urlParameters":{"type":"array","description":"URL parameter configuration when embedded.","items":{"type":"object","description":"URL parameter configuration when embedded.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/social-accounts":{"get":{"tags":["Social Accounts"],"summary":"Search social accounts","description":"Return social accounts available to the authenticated company and user.\n\nRequires an Authorization: Bearer API token.","operationId":"get-social-accounts","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 50.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"embed","in":"query","description":"Optional related data to embed.","schema":{"type":"string","description":"Optional related data to embed."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows":{"type":"array","description":"Social accounts found on the requested page.","items":{"type":"object","description":"Social accounts found on the requested page.","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Social account ID."},"externalId":{"type":"string","description":"Social network account/page ID."},"name":{"type":"string","description":"Account display name."},"type":{"type":"string","description":"Network type: facebook, linkedin, twitter, instagram, etc."},"brandId":{"type":"integer","format":"int32","description":"Associated brand ID."},"status":{"type":"string","description":"Connection or publishing status."}}}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/social-accounts/{socialAccountId}":{"get":{"tags":["Social Accounts"],"summary":"Get a social account","description":"Return one connected social account with publishing metadata.\n\nRequires an Authorization: Bearer API token.","operationId":"get-social-accounts-socialAccountId","security":[{"NonliBearer":[]}],"parameters":[{"name":"socialAccountId","in":"path","required":true,"description":"socialAccountId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Social account ID."},"externalId":{"type":"string","description":"Social network account/page ID."},"name":{"type":"string","description":"Account display name."},"type":{"type":"string","description":"Network type."},"brandId":{"type":"integer","format":"int32","description":"Associated brand ID."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/social-accounts/publishing-quota":{"get":{"tags":["Social Accounts"],"summary":"Get publishing quota","description":"Return publishing quota information for selected social accounts before scheduling posts.\n\nRequires an Authorization: Bearer API token.","operationId":"get-social-accounts-publishing-quota","security":[{"NonliBearer":[]}],"parameters":[{"name":"socialAccounts","in":"query","description":"Comma-separated social account IDs or formatted account descriptors.","schema":{"type":"string","description":"Comma-separated social account IDs or formatted account descriptors."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"quota":{"type":"object","description":"Quota information grouped by account or network.","additionalProperties":true},"usage":{"type":"object","description":"Current usage grouped by account or network.","additionalProperties":true}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/social-accounts/youtube/playlists":{"get":{"tags":["Social Accounts"],"summary":"Get YouTube playlists","description":"Return YouTube playlists for connected YouTube social accounts.\n\nRequires an Authorization: Bearer API token.","operationId":"get-social-accounts-youtube-playlists","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of playlists found."},"rows":{"type":"array","description":"YouTube playlists available for publishing options.","items":{"type":"object","description":"YouTube playlists available for publishing options.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/social-accounts/pinterest/boards":{"get":{"tags":["Social Accounts"],"summary":"Get Pinterest boards","description":"Return Pinterest boards for connected Pinterest social accounts.\n\nRequires an Authorization: Bearer API token.","operationId":"get-social-accounts-pinterest-boards","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of boards found."},"rows":{"type":"array","description":"Pinterest boards available for publishing options.","items":{"type":"object","description":"Pinterest boards available for publishing options.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts":{"get":{"tags":["Posts"],"summary":"Search posts","description":"Search posts published or scheduled through Nonli.\n\nRate limit: 720 calls every 12 hours for API users.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 20.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"withDeleted","in":"query","description":"Include deleted posts in the results.","schema":{"type":"boolean","description":"Include deleted posts in the results."}},{"name":"embed","in":"query","description":"Allowed value: sharedPost.","schema":{"type":"string","description":"Allowed value: sharedPost."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows":{"type":"array","description":"Posts found on the requested page.","items":{"type":"object","description":"Posts found on the requested page.","additionalProperties":true,"properties":{"author":{"type":"string","description":"Post author."},"createdAt":{"type":"string","format":"date-time","description":"Creation date in UTC format."},"updatedAt":{"type":"string","format":"date-time","description":"Last update date in UTC format."},"publishedAt":{"type":"string","format":"date-time","description":"Publication date in UTC format."},"message":{"type":"string","description":"Post message."},"postType":{"type":"string","description":"Post type: text, link, photo, album, video, flying, reel, document, etc."},"socialAccount":{"type":"object","description":"Target social account.","additionalProperties":true},"status":{"type":"integer","format":"int32","description":"Post status."},"counters.total":{"type":"array","description":"Aggregated counters.","items":{"type":"object","description":"Aggregated counters.","additionalProperties":true}}}}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/{postId}":{"get":{"tags":["Posts"],"summary":"Get a post","description":"Return one post by ID with optional filters and field selection.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-postId","security":[{"NonliBearer":[]}],"parameters":[{"name":"postId","in":"path","required":true,"description":"postId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}},{"name":"filters","in":"query","description":"Optional filters used to optimize lookup, such as createdAt.","schema":{"type":"string","description":"Optional filters used to optimize lookup, such as createdAt."}},{"name":"embed","in":"query","description":"Optional related data to embed.","schema":{"type":"string","description":"Optional related data to embed."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Post ID."},"createdAt":{"type":"string","format":"date-time","description":"Creation date."},"publishedAt":{"type":"string","format":"date-time","description":"Publication date."},"message":{"type":"string","description":"Post message."},"postType":{"type":"string","description":"Post type."},"socialAccount":{"type":"object","description":"Target social account.","additionalProperties":true},"status":{"type":"integer","format":"int32","description":"Post status."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/categories":{"get":{"tags":["Posts"],"summary":"Get post categories","description":"Return category aggregations used by post filters and dashboards.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-categories","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of categories found."},"rows.key":{"type":"string","description":"Category value."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of posts in the category."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/brands":{"get":{"tags":["Posts"],"summary":"Get post brands","description":"Return brand aggregations for posts visible to the API token role.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-brands","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of brands found."},"rows.key":{"type":"string","description":"Brand identifier or name."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of posts for the brand."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/users":{"get":{"tags":["Posts"],"summary":"Get post users","description":"Return user aggregations for post author and collaboration filters.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-users","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of users found."},"rows.key":{"type":"string","description":"User identifier or name."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of posts for the user."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/languages":{"get":{"tags":["Posts"],"summary":"Get post languages","description":"Return language aggregations for post filters.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-languages","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of languages found."},"rows.key":{"type":"string","description":"Language code."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of posts for the language."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/histogram":{"get":{"tags":["Posts"],"summary":"Get post histogram","description":"Return time-bucketed post counts or counter values for graphing.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-histogram","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"histogramField","in":"query","description":"Field used as the histogram date source.","schema":{"type":"string","description":"Field used as the histogram date source."}},{"name":"histogramInterval","in":"query","description":"Bucket interval such as hour, day, week, or month.","schema":{"type":"string","description":"Bucket interval such as hour, day, week, or month."}},{"name":"histogramTimezone","in":"query","description":"Timezone offset used to build buckets.","schema":{"type":"string","description":"Timezone offset used to build buckets."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"buckets":{"type":"array","description":"Histogram buckets.","items":{"type":"object","description":"Histogram buckets.","additionalProperties":true}},"buckets.key":{"type":"string","description":"Bucket key or date."},"buckets.doc_count":{"type":"integer","format":"int32","description":"Number of posts in the bucket."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/aggregation":{"get":{"tags":["Posts"],"summary":"Get post aggregation","description":"Return generic aggregations for post dashboards and filter facets.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-aggregation","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"field","in":"query","description":"Field to aggregate.","schema":{"type":"string","description":"Field to aggregate."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of aggregation buckets."},"rows.key":{"type":"string","description":"Bucket key."},"rows.doc_count":{"type":"integer","format":"int32","description":"Bucket count."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/stats":{"get":{"tags":["Posts"],"summary":"Get post stats","description":"Return aggregated post performance statistics for dashboard widgets.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-stats","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"rows":{"type":"array","description":"Stat rows returned by the selected filters.","items":{"type":"object","description":"Stat rows returned by the selected filters.","additionalProperties":true}},"total":{"type":"integer","format":"int32","description":"Total matching posts or stats rows."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/check":{"post":{"tags":["Posts"],"summary":"Check post content","description":"Validate post content before publishing. The BO uses this endpoint to surface publication warnings.\n\nRequires an Authorization: Bearer API token.","operationId":"post-posts-check","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"message":{"type":"string","description":"Post message to validate."},"title":{"type":"string","description":"Post title."},"description":{"type":"string","description":"Post description."},"socialAccount.type":{"type":"string","description":"Target social network type."},"brandId":{"type":"integer","format":"int32","description":"Brand ID."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"valid":{"type":"boolean","description":"Whether the post content passed validation."},"warnings":{"type":"array","description":"Warnings returned by publication checks.","items":{"type":"object","description":"Warnings returned by publication checks.","additionalProperties":true}},"errors":{"type":"array","description":"Blocking validation errors.","items":{"type":"object","description":"Blocking validation errors.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/tags":{"get":{"tags":["Posts"],"summary":"Get post tags","description":"Return matching tags for autocomplete and reporting filters.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-tags","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 10.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"prefix","in":"query","description":"Tag prefix.","schema":{"type":"string","description":"Tag prefix."}},{"name":"selected","in":"query","description":"Already selected tags, comma separated.","schema":{"type":"string","description":"Already selected tags, comma separated."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows.key":{"type":"string","description":"Tag."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of posts where the tag was found."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/topics":{"get":{"tags":["Posts"],"summary":"Get post topics","description":"Return matching topics for autocomplete and reporting filters.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-topics","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 10.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"prefix","in":"query","description":"Topic prefix.","schema":{"type":"string","description":"Topic prefix."}},{"name":"selected","in":"query","description":"Already selected topics, comma separated.","schema":{"type":"string","description":"Already selected topics, comma separated."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows.key":{"type":"string","description":"Topic."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of posts where the topic was found."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/posts/bulk":{"post":{"tags":["Posts"],"summary":"Create posts in bulk","description":"Create a collection of posts. Use postType \"flying\" with a shortlink mappingId to publish a flying link.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"post-posts-bulk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["post"],"properties":{"post":{"type":"array","description":"Array of post objects.","items":{"type":"object","description":"Array of post objects.","additionalProperties":true,"properties":{"brandId":{"type":"integer","format":"int32","description":"Brand ID used to create the post."},"postType":{"type":"string","description":"Nonli post type: text, video, link, photo, album, flying, reel, document, etc."},"shortlink.mappingId":{"type":"string","description":"Related shortlink ID."},"message":{"type":"string","description":"Post message."},"title":{"type":"string","description":"Displayed post title."},"description":{"type":"string","description":"Link or media description."},"schedule.startDate":{"type":"string","format":"date-time","description":"Scheduled publication start date. If schedule is omitted, the post is published now."},"image[].fontanSlug":{"type":"string","description":"Fontan image slug."},"image[].url":{"type":"string","description":"External image URL."},"video[].mappingId":{"type":"string","description":"Uploaded video ID."}}}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"Post[]":{"type":"array","description":"Created posts with status and additional values.","items":{"type":"object","description":"Created posts with status and additional values.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"put":{"tags":["Posts"],"summary":"Update posts in bulk","description":"Update a collection of posts. Send post.id and, when available, createdAt to optimize lookup.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"put-posts-bulk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["post"],"properties":{"checkBeforeUpdate":{"type":"boolean","description":"Check posts before updating them and skip update if checks fail."},"updatePostOnNetwork":{"type":"boolean","description":"Update posts on the social network. Set false to update Nonli only."},"post":{"type":"array","description":"Array of post objects to update.","items":{"type":"object","description":"Array of post objects to update.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Post ID."},"createdAt":{"type":"string","format":"date-time","description":"Creation date, used to optimize the update request."},"shortId":{"type":"string","description":"New short ID."},"schedule":{"type":"object","description":"Scheduling information. Empty object publishes now.","additionalProperties":true},"message":{"type":"string","description":"Updated post message."}}}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"Post[]":{"type":"array","description":"Updated posts with status and additional values.","items":{"type":"object","description":"Updated posts with status and additional values.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"delete":{"tags":["Posts"],"summary":"Delete posts in bulk","description":"Delete a collection of posts. The async flag can be used for background deletion.\n\nRate limit: 100 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"delete-posts-bulk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["post"],"properties":{"post":{"type":"array","description":"Array of posts to delete.","items":{"type":"object","description":"Array of posts to delete.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Post ID to delete."},"socialAccountExternalId":{"type":"string","description":"External social account ID."},"createdAt":{"type":"string","format":"date-time","description":"Creation date of the post to delete."}}}},"async":{"type":"boolean","description":"Delete posts asynchronously."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"Post[]":{"type":"array","description":"Deleted posts or per-item errors.","items":{"type":"object","description":"Deleted posts or per-item errors.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks":{"get":{"tags":["Shortlinks"],"summary":"Search shortlinks","description":"Search shortlinks and retrieve counters, target URLs, metadata, and publication information.\n\nRate limit: 720 calls every 12 hours for API users.\n\nRequires an Authorization: Bearer API token.","operationId":"get-shortlinks","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 10.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"excludeFields","in":"query","description":"Comma-separated fields to exclude from each item. Default: counters.","schema":{"type":"string","description":"Comma-separated fields to exclude from each item."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows":{"type":"array","description":"Shortlinks found on the requested page.","items":{"type":"object","description":"Shortlinks found on the requested page.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Shortlink identifier."},"createdAt":{"type":"string","format":"date-time","description":"Creation date."},"targetUrl":{"type":"string","description":"Target URL."},"canonicalUrl":{"type":"string","description":"Canonical URL."},"title":{"type":"string","description":"Title."},"author":{"type":"string","description":"Author."},"counters.total":{"type":"array","description":"Aggregated counters.","items":{"type":"object","description":"Aggregated counters.","additionalProperties":true}}}}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"post":{"tags":["Shortlinks"],"summary":"Create a shortlink","description":"Create or extract a shortlink for a target URL.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"post-shortlinks","security":[{"NonliBearer":[]}],"parameters":[{"name":"fields","in":"query","description":"Comma-separated fields to include in the response.","schema":{"type":"string","description":"Comma-separated fields to include in the response."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["targetUrl"],"properties":{"targetUrl":{"type":"string","description":"The target URL to shorten."},"brandId":{"type":"integer","format":"int32","description":"Brand ID to associate with the shortlink. If missing, the first company brand is used."},"maxImages":{"type":"integer","format":"int32","description":"Maximum images to retrieve while scraping."},"needOrganicIndexation":{"type":"boolean","description":"Index data as organic."},"forceCanonical":{"type":"boolean","description":"Force canonical URL handling."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Shortlink identifier."},"createdAt":{"type":"string","format":"date-time","description":"Creation date."},"canonicalUrl":{"type":"string","description":"Canonical URL."},"targetUrl":{"type":"string","description":"Target URL."},"title":{"type":"string","description":"Title."},"fontanSlug":{"type":"array","description":"Shortlink images.","items":{"type":"string","description":"Shortlink images."}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks/{shortlinkId}":{"get":{"tags":["Shortlinks"],"summary":"Get a shortlink","description":"Return one shortlink by ID with optional counters and field selection.\n\nRequires an Authorization: Bearer API token.","operationId":"get-shortlinks-shortlinkId","security":[{"NonliBearer":[]}],"parameters":[{"name":"shortlinkId","in":"path","required":true,"description":"shortlinkId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}},{"name":"filters","in":"query","description":"Optional filters, for example counters.graph.counter.","schema":{"type":"string","description":"Optional filters, for example counters.graph.counter."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Shortlink identifier."},"createdAt":{"type":"string","format":"date-time","description":"Creation date."},"targetUrl":{"type":"string","description":"Target URL."},"canonicalUrl":{"type":"string","description":"Canonical URL."},"title":{"type":"string","description":"Title."},"counters.total":{"type":"array","description":"Aggregated counters.","items":{"type":"object","description":"Aggregated counters.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"put":{"tags":["Shortlinks"],"summary":"Update a shortlink","description":"Update target URL, metadata, images, brand association, and sponsor information for a shortlink.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"put-shortlinks-shortlinkId","security":[{"NonliBearer":[]}],"parameters":[{"name":"shortlinkId","in":"path","required":true,"description":"shortlinkId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include in the response.","schema":{"type":"string","description":"Comma-separated fields to include in the response."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"targetUrl":{"type":"string","description":"New target URL."},"createdAt":{"type":"string","description":"Creation date used to optimize lookup."},"brandId":{"type":"integer","format":"int32","description":"Brand ID to associate with the shortlink."},"title":{"type":"string","description":"Title."},"description":{"type":"string","description":"Description."},"scrape":{"type":"boolean","description":"Scrape the target."},"fontanSlug":{"type":"array","description":"Shortlink images.","items":{"type":"string","description":"Shortlink images."}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Shortlink identifier."},"targetUrl":{"type":"string","description":"Target URL."},"canonicalUrl":{"type":"string","description":"Canonical URL."},"title":{"type":"string","description":"Title."},"description":{"type":"string","description":"Description."},"fontanSlug":{"type":"array","description":"Shortlink images.","items":{"type":"string","description":"Shortlink images."}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks/stats":{"get":{"tags":["Shortlinks"],"summary":"Get shortlink stats","description":"Return aggregated shortlink performance statistics.\n\nRequires an Authorization: Bearer API token.","operationId":"get-shortlinks-stats","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"rows":{"type":"array","description":"Shortlink stat rows.","items":{"type":"object","description":"Shortlink stat rows.","additionalProperties":true}},"total":{"type":"integer","format":"int32","description":"Total number of matching stat rows."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks/authors":{"get":{"tags":["Shortlinks"],"summary":"Get shortlink authors","description":"Return author aggregations used by shortlink filters.\n\nRequires an Authorization: Bearer API token.","operationId":"get-shortlinks-authors","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of authors found."},"rows.key":{"type":"string","description":"Author name or identifier."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of shortlinks for the author."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks/brands":{"get":{"tags":["Shortlinks"],"summary":"Get shortlink brands","description":"Return brand aggregations used by shortlink filters.\n\nRequires an Authorization: Bearer API token.","operationId":"get-shortlinks-brands","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of brands found."},"rows.key":{"type":"string","description":"Brand identifier or name."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of shortlinks for the brand."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks/bulk":{"post":{"tags":["Shortlinks"],"summary":"Create shortlinks in bulk","description":"Create several shortlinks in one request.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"post-shortlinks-bulk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["shortlink"],"properties":{"shortlink":{"type":"array","description":"Array of shortlink objects.","items":{"type":"object","description":"Array of shortlink objects.","additionalProperties":true,"properties":{"targetUrl":{"type":"string","description":"Target URL to shorten."},"brandId":{"type":"integer","format":"int32","description":"Brand ID to associate."},"title":{"type":"string","description":"Optional title override."}}}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"Shortlink[]":{"type":"array","description":"Created shortlinks with IDs and metadata.","items":{"type":"object","description":"Created shortlinks with IDs and metadata.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/shortlinks/{shortlinkId}/generate-message":{"post":{"tags":["Shortlinks"],"summary":"Generate a message for a shortlink","description":"Generate suggested social copy for a shortlink and content type.\n\nRequires an Authorization: Bearer API token.","operationId":"post-shortlinks-shortlinkId-generate-message","security":[{"NonliBearer":[]}],"parameters":[{"name":"shortlinkId","in":"path","required":true,"description":"shortlinkId path parameter.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["contentType"],"properties":{"contentType":{"type":"string","description":"Target content type or network context."},"language":{"type":"string","description":"Language code for the generated message."},"tone":{"type":"string","description":"Optional tone or editorial instruction."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"message":{"type":"string","description":"Generated message."},"alternatives":{"type":"array","description":"Alternative generated messages when available.","items":{"type":"string","description":"Alternative generated messages when available."}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/listening/social":{"get":{"tags":["Social Listening"],"summary":"Get social listening","description":"Search social posts and counters collected from supported social networks.\n\nRate limit: 720 calls every 12 hours for API users.\n\nRequires an Authorization: Bearer API token.","operationId":"get-listening-social","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 50.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows":{"type":"array","description":"Social listening posts found on the requested page.","items":{"type":"object","description":"Social listening posts found on the requested page.","additionalProperties":true}},"rows.socialAccount.type":{"type":"string","description":"Social network: facebook, linkedin, twitter, instagram, etc."},"rows.counters.total.field":{"type":"string","description":"Counter field."},"rows.counters.total.value":{"type":"integer","format":"int32","description":"Counter total value."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/listening/organic":{"get":{"tags":["Organic Listening"],"summary":"Get organic listening","description":"Search website content indexed by Organic Listening.\n\nRate limit: 720 calls every 12 hours for API users.\n\nRequires an Authorization: Bearer API token.","operationId":"get-listening-organic","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 10.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"excludeFields","in":"query","description":"Comma-separated fields not to return.","schema":{"type":"string","description":"Comma-separated fields not to return."}},{"name":"histogramDateTimeRange","in":"query","description":"Histogram date-time range for sort aggregation.","schema":{"type":"string","description":"Histogram date-time range for sort aggregation."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows":{"type":"array","description":"Organic content found on the requested page.","items":{"type":"object","description":"Organic content found on the requested page.","additionalProperties":true}},"rows.canonicalUrl":{"type":"string","description":"Canonical URL."},"rows.title":{"type":"string","description":"Title."},"rows.type":{"type":"string","description":"Content type: article, product, website, etc."},"rows.counters.total.value":{"type":"integer","format":"int32","description":"Counter total value."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/listening/organic/{organicId}":{"get":{"tags":["Organic Listening"],"summary":"Get organic content","description":"Return one indexed organic content item by ID.\n\nRequires an Authorization: Bearer API token.","operationId":"get-listening-organic-organicId","security":[{"NonliBearer":[]}],"parameters":[{"name":"organicId","in":"path","required":true,"description":"organicId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Organic content ID."},"canonicalUrl":{"type":"string","description":"Canonical URL."},"title":{"type":"string","description":"Title."},"description":{"type":"string","description":"Description."},"publishedAt":{"type":"string","format":"date-time","description":"Publication date."},"counters.total":{"type":"array","description":"Aggregated counters.","items":{"type":"object","description":"Aggregated counters.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/listening/organic/stats":{"get":{"tags":["Organic Listening"],"summary":"Get organic stats","description":"Return aggregated Organic Listening performance statistics.\n\nRequires an Authorization: Bearer API token.","operationId":"get-listening-organic-stats","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"rows":{"type":"array","description":"Stat rows returned by the selected filters.","items":{"type":"object","description":"Stat rows returned by the selected filters.","additionalProperties":true}},"total":{"type":"integer","format":"int32","description":"Total matching content or stats rows."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/listening/organic/aggregation":{"get":{"tags":["Organic Listening"],"summary":"Get organic aggregation","description":"Return generic aggregations for Organic Listening dashboards and filters.\n\nRequires an Authorization: Bearer API token.","operationId":"get-listening-organic-aggregation","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"field","in":"query","description":"Field to aggregate.","schema":{"type":"string","description":"Field to aggregate."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of buckets."},"rows.key":{"type":"string","description":"Bucket key."},"rows.doc_count":{"type":"integer","format":"int32","description":"Bucket count."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/listening/organic/suggest/{field}":{"get":{"tags":["Organic Listening"],"summary":"Suggest organic filter values","description":"Return autocomplete suggestions for an Organic Listening field.\n\nRequires an Authorization: Bearer API token.","operationId":"get-listening-organic-suggest-field","security":[{"NonliBearer":[]}],"parameters":[{"name":"field","in":"path","required":true,"description":"field path parameter.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Suggestion query.","schema":{"type":"string","description":"Suggestion query."}},{"name":"size","in":"query","description":"Count of suggestions to return. Default: 10.","schema":{"type":"integer","format":"int32","description":"Count of suggestions to return."}},{"name":"filters","in":"query","description":"Optional filters to constrain suggestions.","schema":{"type":"string","description":"Optional filters to constrain suggestions."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"rows":{"type":"array","description":"Suggested field values.","items":{"type":"object","description":"Suggested field values.","additionalProperties":true}},"rows.key":{"type":"string","description":"Suggested value."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/themes":{"get":{"tags":["Themes"],"summary":"Search themes","description":"Return team, bot, or public themes visible to the API token role.\n\nRate limit: 720 calls every 12 hours for API users.\n\nRequires an Authorization: Bearer API token.","operationId":"get-themes","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 1000.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"sort","in":"query","description":"Sort expression.","schema":{"type":"string","description":"Sort expression."}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}},{"name":"filters","in":"query","description":"AND filters on item fields.","schema":{"type":"string","description":"AND filters on item fields."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields.","schema":{"type":"string","description":"OR filters on item fields."}},{"name":"scopes","in":"query","description":"Theme visibility for API tokens: team, bot, public. Private themes are user-scoped and are not returned for Bearer API tokens. Default: team.","schema":{"type":"string","description":"Theme visibility for API tokens: team, bot, public. Private themes are user-scoped and are not returned for Bearer API tokens."}},{"name":"types","in":"query","description":"Theme types. Defaults to listening.","schema":{"type":"string","description":"Theme types. Defaults to listening."}},{"name":"embed","in":"query","description":"Use embed=roles to include associated roles.","schema":{"type":"string","description":"Use embed=roles to include associated roles."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of items found."},"rows.id":{"type":"integer","format":"int32","description":"Unique theme ID."},"rows.name":{"type":"string","description":"Name."},"rows.value":{"type":"string","description":"Theme filters object."},"rows.scope":{"type":"string","description":"Visibility scope."},"rows.roles":{"type":"array","description":"Associated roles when embedded.","items":{"type":"object","description":"Associated roles when embedded.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"post":{"tags":["Themes"],"summary":"Create a theme","description":"Create a saved theme from listening or post filters.\n\nRequires an Authorization: Bearer API token.","operationId":"post-themes","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","type","value"],"properties":{"name":{"type":"string","description":"Theme name."},"type":{"type":"string","description":"Theme type, for example listening or post."},"scope":{"type":"string","description":"Visibility scope for API tokens: team, bot, or public."},"lang":{"type":"string","description":"Language code."},"value":{"type":"object","description":"Theme filters and section configuration.","additionalProperties":true}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Created theme ID."},"name":{"type":"string","description":"Theme name."},"queryStrings":{"type":"object","description":"Prebuilt query strings.","additionalProperties":true}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/themes/{themeId}":{"get":{"tags":["Themes"],"summary":"Get a theme","description":"Return one saved theme by ID.\n\nRequires an Authorization: Bearer API token.","operationId":"get-themes-themeId","security":[{"NonliBearer":[]}],"parameters":[{"name":"themeId","in":"path","required":true,"description":"themeId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}},{"name":"embed","in":"query","description":"Use embed=roles to include associated roles.","schema":{"type":"string","description":"Use embed=roles to include associated roles."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Unique theme ID."},"name":{"type":"string","description":"Name."},"value":{"type":"string","description":"Theme filters object."},"queryStrings":{"type":"object","description":"Prebuilt query strings for matching sections.","additionalProperties":true},"scope":{"type":"string","description":"Visibility scope."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"put":{"tags":["Themes"],"summary":"Update a theme","description":"Update a saved theme and rebuild its query strings when the value changes.\n\nRequires an Authorization: Bearer API token.","operationId":"put-themes-themeId","security":[{"NonliBearer":[]}],"parameters":[{"name":"themeId","in":"path","required":true,"description":"themeId path parameter.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Theme name."},"scope":{"type":"string","description":"Visibility scope."},"value":{"type":"object","description":"Theme filters and section configuration.","additionalProperties":true}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"integer","format":"int32","description":"Updated theme ID."},"name":{"type":"string","description":"Theme name."},"queryStrings":{"type":"object","description":"Prebuilt query strings.","additionalProperties":true}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"delete":{"tags":["Themes"],"summary":"Delete a theme","description":"Delete a saved theme.\n\nRequires an Authorization: Bearer API token.","operationId":"delete-themes-themeId","security":[{"NonliBearer":[]}],"parameters":[{"name":"themeId","in":"path","required":true,"description":"themeId path parameter.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"deleted":{"type":"boolean","description":"Whether the theme was deleted."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/themes/roles":{"get":{"tags":["Themes"],"summary":"Get theme roles","description":"Return roles that can be associated with team-scoped themes.\n\nRequires an Authorization: Bearer API token.","operationId":"get-themes-roles","security":[{"NonliBearer":[]}],"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of roles found."},"rows":{"type":"array","description":"Available roles.","items":{"type":"object","description":"Available roles.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/bots":{"get":{"tags":["Bots"],"summary":"Search bots","description":"Return bots visible to the API token role in the authenticated company.\n\nRequires an Authorization: Bearer API token.","operationId":"get-bots","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 20.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}},{"name":"embed","in":"query","description":"Can embed running and spamControl.","schema":{"type":"string","description":"Can embed running and spamControl."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of bots found."},"rows":{"type":"array","description":"Bots found on the requested page.","items":{"type":"object","description":"Bots found on the requested page.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Bot UUID."},"title":{"type":"string","description":"Bot title."},"brandId":{"type":"integer","format":"int32","description":"Brand attached to the bot."},"auto":{"type":"boolean","description":"Whether the bot publishes automatically."},"activation":{"type":"object","description":"Activation and scheduling state.","additionalProperties":true},"source":{"type":"object","description":"Bot source configuration.","additionalProperties":true},"target":{"type":"array","description":"Bot target configurations.","items":{"type":"object","description":"Bot target configurations.","additionalProperties":true}}}}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/bots/{botId}":{"get":{"tags":["Bots"],"summary":"Get a bot","description":"Return one bot by UUID.\n\nRequires an Authorization: Bearer API token.","operationId":"get-bots-botId","security":[{"NonliBearer":[]}],"parameters":[{"name":"botId","in":"path","required":true,"description":"botId path parameter.","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."}},{"name":"embed","in":"query","description":"Can embed running and spamControl.","schema":{"type":"string","description":"Can embed running and spamControl."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string","description":"Bot UUID."},"title":{"type":"string","description":"Bot title."},"brandId":{"type":"integer","format":"int32","description":"Brand attached to the bot."},"activation":{"type":"object","description":"Activation and scheduling state.","additionalProperties":true},"source":{"type":"object","description":"Source configuration.","additionalProperties":true},"target":{"type":"array","description":"Target configurations.","items":{"type":"object","description":"Target configurations.","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"delete":{"tags":["Bots"],"summary":"Delete a bot","description":"Delete one bot by UUID. A successful deletion returns HTTP 204 with no response body.\n\nRequires an Authorization: Bearer API token.","operationId":"delete-bots-botId","security":[{"NonliBearer":[]}],"parameters":[{"name":"botId","in":"path","required":true,"description":"botId path parameter.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"404":{"description":"The requested resource does not exist or is not visible to your company."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/bots/bulk":{"post":{"tags":["Bots"],"summary":"Create bots in bulk","description":"Create one or more bots. Source and target URNs must reference resources visible to the API token role.\n\nRequires an Authorization: Bearer API token.","operationId":"post-bots-bulk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["bot"],"properties":{"bot":{"type":"array","description":"Bots to create.","items":{"type":"object","description":"Bots to create.","additionalProperties":true,"properties":{"title":{"type":"string","description":"Bot title."},"brandId":{"type":"integer","format":"int32","description":"Brand attached to the bot."},"auto":{"type":"boolean","description":"If false, created posts are kept for review before publishing."},"activation":{"type":"object","description":"Activation state and optional time window.","additionalProperties":true},"timezone":{"type":"string","description":"Timezone used for activation windows."},"runCyclePeriod":{"type":"object","description":"Minimum and maximum minutes between source reads.","additionalProperties":true},"schedule":{"type":"object","description":"Post scheduling options.","additionalProperties":true},"source":{"type":"object","description":"Source object with a Nonli URN.","additionalProperties":true},"target":{"type":"array","description":"Target objects with Nonli URNs.","items":{"type":"object","description":"Target objects with Nonli URNs.","additionalProperties":true}},"post":{"type":"array","description":"Post template configuration.","items":{"type":"object","description":"Post template configuration.","additionalProperties":true}},"fieldMapping":{"type":"array","description":"Source-to-target field mappings.","items":{"type":"object","description":"Source-to-target field mappings.","additionalProperties":true}},"sourceMessage":{"type":"string","description":"Source field used to build the post message."},"sourceTitle":{"type":"string","description":"Source field used to build the post title."},"sourceImage":{"type":"string","description":"Source field used to build the post image."}}}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}},"put":{"tags":["Bots"],"summary":"Update bots in bulk","description":"Update one or more bots. Each item must include the bot UUID and only the fields to change.\n\nRequires an Authorization: Bearer API token.","operationId":"put-bots-bulk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["bot"],"properties":{"bot":{"type":"array","description":"Bots to update.","items":{"type":"object","description":"Bots to update.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Bot UUID."},"title":{"type":"string","description":"Bot title."},"brandId":{"type":"integer","format":"int32","description":"Brand attached to the bot."},"auto":{"type":"boolean","description":"Whether the bot publishes automatically."},"activation":{"type":"object","description":"Activation state and optional time window.","additionalProperties":true},"runCyclePeriod":{"type":"object","description":"Minimum and maximum minutes between source reads.","additionalProperties":true},"schedule":{"type":"object","description":"Post scheduling options.","additionalProperties":true},"source":{"type":"object","description":"Source object with a Nonli URN.","additionalProperties":true},"target":{"type":"array","description":"Target objects with Nonli URNs.","items":{"type":"object","description":"Target objects with Nonli URNs.","additionalProperties":true}},"post":{"type":"array","description":"Post template configuration.","items":{"type":"object","description":"Post template configuration.","additionalProperties":true}},"fieldMapping":{"type":"array","description":"Source-to-target field mappings.","items":{"type":"object","description":"Source-to-target field mappings.","additionalProperties":true}}}}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/bots/info":{"get":{"tags":["Bots"],"summary":"Get bot configuration info","description":"Return schedule periods, target validation rules, and bot configuration constraints used to build valid bot payloads.\n\nRequires an Authorization: Bearer API token.","operationId":"get-bots-info","security":[{"NonliBearer":[]}],"parameters":[{"name":"sourceUrn","in":"query","description":"Optional source URN to evaluate source-specific configuration.","schema":{"type":"string","description":"Optional source URN to evaluate source-specific configuration."}},{"name":"targetUrn","in":"query","description":"Optional target URN to evaluate target-specific configuration.","schema":{"type":"string","description":"Optional target URN to evaluate target-specific configuration."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"schedulePeriods":{"type":"object","description":"Available schedule period identifiers and labels.","additionalProperties":true},"targetValidationConfigs":{"type":"object","description":"Validation rules by target type.","additionalProperties":true},"config":{"type":"object","description":"Bot defaults and constraints, including AI generated text and consultation frequency.","additionalProperties":true}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/media":{"get":{"tags":["Media"],"summary":"Search media","description":"Return media items available to the current company and user.\n\nRequires an Authorization: Bearer API token.","operationId":"get-media","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Count of results to return. Default: 50.","schema":{"type":"integer","format":"int32","description":"Count of results to return."}},{"name":"page","in":"query","description":"Zero-based page number. Default: 0.","schema":{"type":"integer","format":"int32","description":"Zero-based page number."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"fields","in":"query","description":"Comma-separated fields to include in each returned item.","schema":{"type":"string","description":"Comma-separated fields to include in each returned item."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of media found."},"rows":{"type":"array","description":"Media items found on the requested page.","items":{"type":"object","description":"Media items found on the requested page.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Media ID."},"url":{"type":"string","description":"Media URL."},"type":{"type":"string","description":"Media type."},"tag":{"type":"array","description":"Associated tags.","items":{"type":"string","description":"Associated tags."}}}}}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/media/tags":{"get":{"tags":["Media"],"summary":"Get media tags","description":"Return media tags for autocomplete and asset filtering.\n\nRequires an Authorization: Bearer API token.","operationId":"get-media-tags","security":[{"NonliBearer":[]}],"parameters":[{"name":"size","in":"query","description":"Maximum number of results to return. Default: 20 or endpoint-specific.","schema":{"type":"integer","format":"int32","description":"Maximum number of results to return."}},{"name":"q","in":"query","description":"Full-text search query.","schema":{"type":"string","description":"Full-text search query."}},{"name":"qf","in":"query","description":"Comma-separated fields used by the full-text query.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query."}},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges."}},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\".","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\"."}},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value.","schema":{"type":"string","description":"Exclude results when a field contains a value."}},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of tags found."},"rows.key":{"type":"string","description":"Tag value."},"rows.doc_count":{"type":"integer","format":"int32","description":"Number of media items using the tag."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/upload/image":{"post":{"tags":["Upload"],"summary":"Upload an image","description":"Upload a base64 image and receive the Fontan slug used by posts and shortlinks.\n\nRequires an Authorization: Bearer API token.","operationId":"post-upload-image","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["b64Image"],"properties":{"b64Image":{"type":"string","description":"Base64 encoded image."},"keepFormat":{"type":"boolean","description":"Keep the original format when possible."},"faceDetect":{"type":"boolean","description":"Run face detection/cropping assistance."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"slug":{"type":"string","description":"Fontan image slug."},"url":{"type":"string","description":"Image URL when available."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/upload/video/token":{"post":{"tags":["Upload"],"summary":"Create upload video token","description":"Create or resume an upload session. The response includes chunkSize, which defines the maximum chunk size to send.\n\nRequires an Authorization: Bearer API token.","operationId":"post-upload-video-token","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","type","size","md5sum"],"properties":{"name":{"type":"string","description":"File name."},"type":{"type":"string","description":"Video MIME type."},"size":{"type":"integer","format":"int32","description":"File size in bytes."},"md5sum":{"type":"string","description":"Unique video ID, md5 encoded."},"duration":{"type":"integer","format":"int32","description":"Video duration in seconds."},"width":{"type":"integer","format":"int32","description":"Video width in pixels."},"height":{"type":"integer","format":"int32","description":"Video height in pixels."},"title":{"type":"string","description":"Video title."},"description":{"type":"string","description":"Video description."},"customTag":{"type":"array","description":"Video custom tags.","items":{"type":"string","description":"Video custom tags."}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"token":{"type":"string","description":"Upload token."},"size":{"type":"integer","format":"int32","description":"File size in bytes."},"chunkSize":{"type":"integer","format":"int32","description":"Chunk size in bytes."},"chunkIndex":{"type":"integer","format":"int32","description":"Next chunk index."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/upload/video/exists":{"post":{"tags":["Upload"],"summary":"Check uploaded video existence","description":"Check if a video already exists before starting a chunked upload.\n\nRequires an Authorization: Bearer API token.","operationId":"post-upload-video-exists","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["md5sum","name"],"properties":{"md5sum":{"type":"string","description":"Unique video ID, md5 encoded."},"name":{"type":"string","description":"File name."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"exists":{"type":"boolean","description":"Whether the video already exists."},"id":{"type":"string","description":"Existing video ID when found."},"url":{"type":"string","description":"Existing video URL when found."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/upload/video/chunk":{"post":{"tags":["Upload"],"summary":"Upload video chunk","description":"Upload one base64 chunk for a video upload session. The final response includes the video id and URL.\n\nRequires an Authorization: Bearer API token.","operationId":"post-upload-video-chunk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token","chunk","data"],"properties":{"token":{"type":"string","description":"Upload token."},"chunk":{"type":"integer","format":"int32","description":"Chunk number."},"data":{"type":"string","description":"Chunk bytes as base64."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"size":{"type":"integer","format":"int32","description":"Uploaded size after this chunk."},"id":{"type":"string","description":"Video ID, returned when the last chunk has been uploaded."},"url":{"type":"string","description":"Video URL, returned when the last chunk has been uploaded."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/upload/document/token":{"post":{"tags":["Upload"],"summary":"Create upload document token","description":"Create or resume a document upload session. The response includes chunkSize for chunked upload.\n\nRequires an Authorization: Bearer API token.","operationId":"post-upload-document-token","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","type","size","md5sum"],"properties":{"name":{"type":"string","description":"File name."},"type":{"type":"string","description":"Document MIME type, commonly application/pdf."},"size":{"type":"integer","format":"int32","description":"File size in bytes."},"md5sum":{"type":"string","description":"Unique document ID, md5 encoded."},"title":{"type":"string","description":"Document title."},"description":{"type":"string","description":"Document description."},"pageCount":{"type":"integer","format":"int32","description":"Number of pages in the document."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"token":{"type":"string","description":"Upload token."},"size":{"type":"integer","format":"int32","description":"File size in bytes."},"chunkSize":{"type":"integer","format":"int32","description":"Chunk size in bytes."},"chunkIndex":{"type":"integer","format":"int32","description":"Next chunk index."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}},"/upload/document/chunk":{"post":{"tags":["Upload"],"summary":"Upload document chunk","description":"Upload one base64 chunk for a document upload session. The final response includes the document id and URL.\n\nRequires an Authorization: Bearer API token.","operationId":"post-upload-document-chunk","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token","chunk","data"],"properties":{"token":{"type":"string","description":"Upload token."},"chunk":{"type":"integer","format":"int32","description":"Chunk number."},"data":{"type":"string","description":"Chunk bytes as base64."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"size":{"type":"integer","format":"int32","description":"Uploaded size after this chunk."},"id":{"type":"string","description":"Document ID, returned when the last chunk has been uploaded."},"url":{"type":"string","description":"Document URL, returned when the last chunk has been uploaded."}}}}}},"400":{"description":"Bad request. The payload or query parameters were malformed or failed validation."},"401":{"description":"Authentication failed or the Authorization Bearer token is missing or invalid."},"403":{"description":"The API token is valid but lacks permission for this resource."},"429":{"description":"Rate limit reached. Slow down and retry later."},"500":{"description":"Unexpected server error. Retry idempotent reads with backoff."}}}}},"components":{"securitySchemes":{"NonliBearer":{"type":"http","scheme":"bearer","bearerFormat":"Opaque API token","description":"Opaque API token created from the Nonli back office. Send it as Authorization: Bearer YOUR_API_TOKEN."}}}}