{"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":"Themes","description":"Read saved theme filters used by listening, publishing, and automation 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":"Leaderboard","description":"Rank social accounts by an aggregated post counter over any post filter set. Rows combine ranking values with account profile data."},{"name":"Accounts","description":"Search and manage the social accounts tracked by Social Listening, such as media pages and competitors. These are listening entities, distinct from the connected social accounts used for publishing."},{"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."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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, 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."},"allowReserved":true}],"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."},"allowReserved":true}],"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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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."},"allowReserved":true},{"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."},"allowReserved":true},{"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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":"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":"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":"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\nShortlink counter endpoints accept shortlink counters only, currently `click`. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Shortlinks.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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."},"allowReserved":true}],"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\nShortlink counter endpoints accept shortlink counters only, currently `click`. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Shortlinks.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"Optional filters, for example counters.graph.counter.","schema":{"type":"string","description":"Optional filters, for example counters.graph.counter."},"allowReserved":true}],"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."},"allowReserved":true}],"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\nShortlink counter endpoints accept shortlink counters only, currently `click`. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Shortlinks.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nShortlink counter endpoints accept shortlink counters only, currently `click`. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Shortlinks.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nShortlink counter endpoints accept shortlink counters only, currently `click`. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Shortlinks.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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":"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."}}}},"/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."},"allowReserved":true},{"name":"fields","in":"query","description":"Comma-separated fields to include.","schema":{"type":"string","description":"Comma-separated fields to include."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields.","schema":{"type":"string","description":"AND filters on item fields."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields.","schema":{"type":"string","description":"OR filters on item fields."},"allowReserved":true},{"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."},"allowReserved":true},{"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."}}}},"/listening/social":{"get":{"tags":["Social Listening"],"summary":"Get social listening","description":"Search social posts and counters collected from supported social networks.\n\nPost-backed endpoints accept the documented post counters in counter filters and counter sorts, and responses echo the counter names the request used. Historical counter names replaced by public counter names are intentionally omitted.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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, instagram, etc."},"rows.counters.total.field":{"type":"string","description":"Counter metric name."},"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\nOrganic Listening endpoints accept standard Organic Listening counters only. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Organic Listening and return 400 Bad Request.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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.field":{"type":"string","description":"Organic 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/{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."},"allowReserved":true}],"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\nOrganic Listening endpoints accept standard Organic Listening counters only. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Organic Listening and return 400 Bad Request.\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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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\nOrganic Listening endpoints accept standard Organic Listening counters only. Post counters such as `engagement`, `reach`, or `videoViews` are invalid for Organic Listening and return 400 Bad Request.\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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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."},"allowReserved":true}],"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."}}}},"/posts/leaderboard":{"get":{"tags":["Leaderboard"],"summary":"Get the leaderboard","description":"Return social accounts ranked by an aggregated post counter, with per post type breakdowns and account profile data.\n\naggregationField and additionalAggregationFields accept the documented post counter names, such as engagement, reach, videoViews, click, ctr, overperforming, or monetization. The API resolves each documented name to the stored counter internally; historical internal counter names are intentionally undocumented.\n\nCounters built from public network data, such as engagement or videoViews, rank any listened account. Counters that require account ownership automatically restrict the leaderboard to social accounts the API token can access.\n\nLeaderboard filters and sorts accept the shorthand fields name, slug, category, and verificationStatus, resolved to the matching socialAccount fields internally.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-leaderboard","security":[{"NonliBearer":[]}],"parameters":[{"name":"aggregationField","in":"query","required":true,"description":"Documented post counter used to rank accounts, for example engagement, reach, videoViews, click, ctr, overperforming, or monetization.","schema":{"type":"string","description":"Documented post counter used to rank accounts, for example engagement, reach, videoViews, click, ctr, overperforming, or monetization."}},{"name":"additionalAggregationFields","in":"query","description":"Comma-separated additional documented counters to aggregate per account. Each counter is returned on the row under the requested counter name.","schema":{"type":"string","description":"Comma-separated additional documented counters to aggregate per account. Each counter is returned on the row under the requested counter name."},"allowReserved":true},{"name":"size","in":"query","description":"Count of accounts to return, between 1 and 200. Default: 20.","schema":{"type":"integer","format":"int32","description":"Count of accounts to return, between 1 and 200."}},{"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, for example title,message,description,category.","schema":{"type":"string","description":"Comma-separated fields used by the full-text query, for example title,message,description,category."},"allowReserved":true},{"name":"sort","in":"query","description":"Ranking direction. Use counters.total.<counter> with the documented counter name, for example sort=-counters.total.engagement. Defaults to descending on aggregationField.","schema":{"type":"string","description":"Ranking direction. Use counters.total.<counter> with the documented counter name, for example sort=-counters.total.engagement. Defaults to descending on aggregationField."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on post fields, such as publishedAt ranges or socialAccount.type. The shorthand fields name, slug, category, and verificationStatus filter the matching socialAccount fields.","schema":{"type":"string","description":"AND filters on post fields, such as publishedAt ranges or socialAccount.type. The shorthand fields name, slug, category, and verificationStatus filter the matching socialAccount fields."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on post fields.","schema":{"type":"string","description":"OR filters on post fields."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in matching posts.","schema":{"type":"string","description":"Comma-separated fields that must exist in matching posts."},"allowReserved":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","description":"Accounts ranked by the aggregated counter. The response is a JSON array without a total wrapper.","items":{"type":"object","description":"Accounts ranked by the aggregated counter. The response is a JSON array without a total wrapper.","additionalProperties":true,"properties":{"externalId":{"type":"string","description":"Social network account/page ID."},"name":{"type":"string","description":"Account display name."},"type":{"type":"string","description":"Social network: facebook, instagram, linkedin, etc."},"slug":{"type":"string","description":"Account slug."},"picture":{"type":"string","description":"Account profile picture URL."},"website":{"type":"string","description":"Account website."},"docCount":{"type":"integer","format":"int32","description":"Number of posts matching the filters for the account."},"value":{"type":"number","description":"Aggregated aggregationField value across matching posts."},"percent":{"type":"number","description":"Aggregated value relative to the account fan count."},"types":{"type":"object","description":"Per post type breakdown keyed by post type, each entry with type, docCount, value, and percent.","additionalProperties":true},"fanCount":{"type":"integer","format":"int32","description":"Account fan count."},"followerCount":{"type":"integer","format":"int32","description":"Estimated follower count."},"verificationStatus":{"type":"string","description":"Network verification status."},"createdAt":{"type":"string","format":"date-time","description":"Account creation date."},"counters":{"type":"array","description":"Account counter totals.","items":{"type":"object","description":"Account counter totals.","additionalProperties":true}},"<counter>":{"type":"object","description":"One entry per additionalAggregationFields counter, keyed by the requested counter name, with value, docCount, and types.","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/leaderboard/_search":{"post":{"tags":["Leaderboard"],"summary":"Search the leaderboard","description":"Same ranking as GET /posts/leaderboard with parameters sent in the JSON body. Use it when the filter set exceeds URL length limits, for example large theme filters.\n\naggregationField and additionalAggregationFields accept the documented post counter names, such as engagement, reach, videoViews, click, ctr, overperforming, or monetization. The API resolves each documented name to the stored counter internally; historical internal counter names are intentionally undocumented.\n\nCounters built from public network data, such as engagement or videoViews, rank any listened account. Counters that require account ownership automatically restrict the leaderboard to social accounts the API token can access.\n\nLeaderboard filters and sorts accept the shorthand fields name, slug, category, and verificationStatus, resolved to the matching socialAccount fields internally.\n\nRequires an Authorization: Bearer API token.","operationId":"post-posts-leaderboard-search","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["aggregationField"],"properties":{"aggregationField":{"type":"string","description":"Documented post counter used to rank accounts, for example engagement, reach, videoViews, click, ctr, overperforming, or monetization."},"additionalAggregationFields":{"type":"string","description":"Comma-separated additional documented counters to aggregate per account."},"size":{"type":"integer","format":"int32","description":"Count of accounts to return, between 1 and 200."},"page":{"type":"integer","format":"int32","description":"Zero-based page number."},"q":{"type":"string","description":"Full-text search query."},"qf":{"type":"string","description":"Comma-separated fields used by the full-text query."},"sort":{"type":"string","description":"Ranking direction, for example -counters.total.engagement."},"filters":{"type":"string","description":"AND filters on post fields, using the same grammar as query string filters."},"filtersOr":{"type":"string","description":"OR filters on post fields."},"excludes":{"type":"string","description":"Exclude results when a field contains a value."},"exists":{"type":"string","description":"Comma-separated fields that must exist in matching posts."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","description":"Same response as GET /posts/leaderboard.","items":{"type":"object","description":"Same response as GET /posts/leaderboard.","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/leaderboard/categories":{"get":{"tags":["Leaderboard"],"summary":"Get leaderboard categories","description":"Return the per post type counter breakdown for selected leaderboard accounts.\n\naggregationField and additionalAggregationFields accept the documented post counter names, such as engagement, reach, videoViews, click, ctr, overperforming, or monetization. The API resolves each documented name to the stored counter internally; historical internal counter names are intentionally undocumented.\n\nRequires an Authorization: Bearer API token.","operationId":"get-posts-leaderboard-categories","security":[{"NonliBearer":[]}],"parameters":[{"name":"accountIds","in":"query","required":true,"description":"Comma-separated external account IDs, from the externalId of leaderboard rows.","schema":{"type":"string","description":"Comma-separated external account IDs, from the externalId of leaderboard rows."},"allowReserved":true},{"name":"aggregationField","in":"query","required":true,"description":"Documented post counter to aggregate per post type.","schema":{"type":"string","description":"Documented post counter to aggregate per post type."}},{"name":"size","in":"query","description":"Count of accounts to return, between 1 and 200. Default: 20.","schema":{"type":"integer","format":"int32","description":"Count of accounts to return, between 1 and 200."}},{"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on post fields.","schema":{"type":"string","description":"AND filters on post fields."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on post fields.","schema":{"type":"string","description":"OR filters on post fields."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in matching posts.","schema":{"type":"string","description":"Comma-separated fields that must exist in matching posts."},"allowReserved":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","description":"Per account post type breakdown. The response is a JSON array without a total wrapper.","items":{"type":"object","description":"Per account post type breakdown. The response is a JSON array without a total wrapper.","additionalProperties":true,"properties":{"externalId":{"type":"string","description":"Social network account/page ID."},"types":{"type":"object","description":"Breakdown keyed by post type, each entry with value and docCount for the aggregated counter.","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."}}}},"/accounts":{"get":{"tags":["Accounts"],"summary":"Search accounts","description":"Search social accounts tracked by Social Listening, with profile data and account counters.\n\nAccounts endpoints expose account counters only, currently follower_count (account fans or followers). The API resolves this documented name to the stored account counter internally, and responses echo the name the request used. Address it with the full counter path, for example sort=-counters.total.follower_count or filters=counters.graph.counter:follower_count. Post counters such as engagement or reach are invalid for Accounts.\n\nThe category filter and query field resolve to the localized account category internally; filter with category:<value> rather than a localized field path.\n\nRequires an Authorization: Bearer API token.","operationId":"get-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":"sort","in":"query","description":"Sort expression. Counter sorts use the full path, for example sort=-counters.total.follower_count.","schema":{"type":"string","description":"Sort expression. Counter sorts use the full path, for example sort=-counters.total.follower_count."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on account fields. Filter type:<network> to select a network and listeningActivated:true to restrict to accounts with listening enabled. Use counters.graph.counter:<counter> to return counter graphs.","schema":{"type":"string","description":"AND filters on account fields. Filter type:<network> to select a network and listeningActivated:true to restrict to accounts with listening enabled. Use counters.graph.counter:<counter> to return counter graphs."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on account fields.","schema":{"type":"string","description":"OR filters on account fields."},"allowReserved":true},{"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."},"allowReserved":true},{"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."},"allowReserved":true}],"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":"Accounts found on the requested page.","items":{"type":"object","description":"Accounts found on the requested page.","additionalProperties":true,"properties":{"id":{"type":"string","description":"Account document ID, a hash string (listening accounts do not use integer IDs)."},"externalId":{"type":"string","description":"Social network account/page ID."},"name":{"type":"string","description":"Account display name."},"type":{"type":"string","description":"Social network: facebook, instagram, linkedin, etc."},"subType":{"type":"string","description":"Account sub-type on the network, for example page or group."},"slug":{"type":"string","description":"Account slug."},"url":{"type":"string","description":"Account URL on the network."},"picture":{"type":"string","description":"Account profile picture URL."},"website":{"type":"string","description":"Account website."},"about":{"type":"string","description":"Account description."},"category":{"type":"object","description":"Localized account category.","additionalProperties":true},"place":{"type":"object","description":"Localized location data with country, state, and city.","additionalProperties":true},"listeningActivated":{"type":"boolean","description":"Whether listening is enabled for the account."},"verificationStatus":{"type":"string","description":"Network verification status."},"counters.total":{"type":"array","description":"Account counter totals.","items":{"type":"object","description":"Account counter totals.","additionalProperties":true}},"counters.graph":{"type":"array","description":"Counter graphs when requested with counters.graph.counter filters.","items":{"type":"object","description":"Counter graphs when requested with counters.graph.counter filters.","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":["Accounts"],"summary":"Add an account","description":"Add a social account to Social Listening. The account is fetched from the network, activated for listening, and returned. Requires a role with the listening manage permission.\n\nRequires an Authorization: Bearer API token.","operationId":"post-accounts","security":[{"NonliBearer":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["network"],"properties":{"network":{"type":"string","description":"Social network of the account: facebook, instagram, linkedin, etc."},"accountId":{"type":"string","description":"External account ID or slug on the network. Provide accountId or slug."},"slug":{"type":"string","description":"Account slug on the network. Provide accountId or slug."},"instanceUrl":{"type":"string","description":"Instance URL, required for federated networks such as Mastodon."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","description":"Created or updated account, with the same fields as search results.","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."}}}},"/accounts/categories":{"get":{"tags":["Accounts"],"summary":"Get account categories","description":"Return account category aggregations for autocomplete and listening filters.\n\nThe category filter and query field resolve to the localized account category internally; filter with category:<value> rather than a localized field path.\n\nRate limit: 200 calls.\n\nRequires an Authorization: Bearer API token.","operationId":"get-accounts-categories","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":"Category prefix.","schema":{"type":"string","description":"Category prefix."}},{"name":"selected","in":"query","required":true,"description":"Already selected categories, comma separated. Send an empty value when no category is selected yet.","schema":{"type":"string","description":"Already selected categories, comma separated. Send an empty value when no category is selected yet."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on account fields.","schema":{"type":"string","description":"AND filters on account fields."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on account fields.","schema":{"type":"string","description":"OR filters on account fields."},"allowReserved":true},{"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."},"allowReserved":true},{"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."},"allowReserved":true}],"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 accounts 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."}}}},"/accounts/locations":{"get":{"tags":["Accounts"],"summary":"Search account locations","description":"Return location accounts, such as city pages, matching a query. Local index results are combined with a remote network search. A type filter selecting the social network is required.\n\nRequires an Authorization: Bearer API token.","operationId":"get-accounts-locations","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":"q","in":"query","description":"Location search query.","schema":{"type":"string","description":"Location search query."}},{"name":"filters","in":"query","required":true,"description":"AND filters. The type:<network> filter selecting the social network to search is required.","schema":{"type":"string","description":"AND filters. The type:<network> filter selecting the social network to search is required."},"allowReserved":true}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"integer","format":"int32","description":"Total number of locations found."},"rows":{"type":"array","description":"Location accounts, including geoname data.","items":{"type":"object","description":"Location accounts, including geoname data.","additionalProperties":true}},"q":{"type":"string","description":"Echo of the search query."}}}}}},"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."}}}},"/accounts/stats":{"get":{"tags":["Accounts"],"summary":"Get account stats","description":"Return aggregated account counter statistics with optional trend and histogram data.\n\nAccounts endpoints expose account counters only, currently follower_count (account fans or followers). The API resolves this documented name to the stored account counter internally, and responses echo the name the request used. Address it with the full counter path, for example sort=-counters.total.follower_count or filters=counters.graph.counter:follower_count. Post counters such as engagement or reach are invalid for Accounts.\n\nRequires an Authorization: Bearer API token.","operationId":"get-accounts-stats","security":[{"NonliBearer":[]}],"parameters":[{"name":"filters","in":"query","description":"AND filters on account fields.","schema":{"type":"string","description":"AND filters on account fields."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on account fields.","schema":{"type":"string","description":"OR filters on account fields."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each item.","schema":{"type":"string","description":"Comma-separated fields that must exist in each item."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"metric","in":"query","description":"Aggregation metric: sum, avg, med, or percentiles.","schema":{"type":"string","description":"Aggregation metric: sum, avg, med, or percentiles."}},{"name":"dateTimeRange","in":"query","description":"Date-time range used to calculate the trend.","schema":{"type":"string","description":"Date-time range used to calculate the trend."}},{"name":"timezone","in":"query","description":"Timezone used to resolve previous periods for the trend.","schema":{"type":"string","description":"Timezone used to resolve previous periods for the trend."}},{"name":"percentile","in":"query","description":"Queried percentile when metric is percentiles.","schema":{"type":"number","description":"Queried percentile when metric is percentiles."}},{"name":"granularity","in":"query","description":"Histogram granularity: hour, day, week, month, or year. Auto-selected from the filtered period when omitted.","schema":{"type":"string","description":"Histogram granularity: hour, day, week, month, or year. Auto-selected from the filtered period when omitted."}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"properties":{"total":{"type":"array","description":"Aggregated counter totals.","items":{"type":"object","description":"Aggregated counter totals.","additionalProperties":true}},"total.field":{"type":"string","description":"Account counter field."},"total.value":{"type":"number","description":"Aggregated value."},"total.trend":{"type":"number","description":"Trend versus the previous period when dateTimeRange is provided."},"graph":{"type":"array","description":"Counter histograms.","items":{"type":"object","description":"Counter histograms.","additionalProperties":true}},"graph.counter":{"type":"string","description":"Account counter field."},"graph.histogram":{"type":"array","description":"Time-bucketed counter values.","items":{"type":"object","description":"Time-bucketed counter 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."}}}},"/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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true},{"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."},"allowReserved":true},{"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\nBot trigger counters and post-rate metrics use the documented post counters. Percentile-based triggers resolve the documented counter name before calculating the percentile.\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."},"trigger.counter[].field":{"type":"string","description":"Counter field that must reach trigger.counter[].triggerValue before the bot posts. Accepts documented post counter names such as engagement or reach for social-account sources."},"trigger.counter[].triggerValue":{"type":"integer","format":"int32","description":"Counter threshold used by the trigger."},"trigger.counter[].metric":{"type":"string","description":"Optional aggregation metric used to calculate the trigger value, for example percentiles. The trigger counter field is resolved from the documented counter name before the aggregation is built."},"postRate.mode":{"type":"string","description":"Post type selection mode. Use manual for fixed post-type ratios, auto_all to auto-select from all post types, or auto_photo_link to auto-select between photo and link posts."},"postRate.metric":{"type":"string","description":"Performance metric used by automatic post type selection. Accepts documented post counter names such as engagement, reach, videoViews, and monetization."}}}}}}}}},"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\nBot trigger counters and post-rate metrics use the documented post counters. Percentile-based triggers resolve the documented counter name before calculating the percentile.\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}},"trigger.counter[].field":{"type":"string","description":"Counter field that must reach trigger.counter[].triggerValue before the bot posts. Accepts documented post counter names such as engagement or reach for social-account sources."},"trigger.counter[].triggerValue":{"type":"integer","format":"int32","description":"Counter threshold used by the trigger."},"trigger.counter[].metric":{"type":"string","description":"Optional aggregation metric used to calculate the trigger value, for example percentiles. The trigger counter field is resolved from the documented counter name before the aggregation is built."},"postRate.mode":{"type":"string","description":"Post type selection mode. Use manual for fixed post-type ratios, auto_all to auto-select from all post types, or auto_photo_link to auto-select between photo and link posts."},"postRate.metric":{"type":"string","description":"Performance metric used by automatic post type selection. Accepts documented post counter names such as engagement, reach, videoViews, and monetization."}}}}}}}}},"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."},"allowReserved":true},{"name":"sort","in":"query","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data.","schema":{"type":"string","description":"Sort expression. Prefix a field with \"-\" for descending order. Counter-backed endpoints can sort by counters.total.<field> or by the counter shorthand itself, for example sort=-engagement on post/social data or sort=-click on organic data."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"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."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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."},"allowReserved":true},{"name":"filters","in":"query","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"AND filters on item fields. Use semicolons between filters and \"..\" for ranges. Send the separators \":\", \";\", \",\" and \"..\" as raw characters: search endpoints read the raw query string and treat percent-encoded separators as literal value characters. Percent-encode only characters inside values, such as spaces (%20). On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"filtersOr","in":"query","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"OR filters on item fields. Example: \"status:200,203\". On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"excludes","in":"query","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field.","schema":{"type":"string","description":"Exclude results when a field contains a value. On post-backed counter filters, documented counter names are resolved for counters.total.field, counters.graph.counter, counters.histogram.field, and counters.period.field."},"allowReserved":true},{"name":"exists","in":"query","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request.","schema":{"type":"string","description":"Comma-separated fields that must exist in each returned item. Fields must belong to the endpoint entity; invalid fields return 400 Bad Request."},"allowReserved":true}],"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."}}}}