---
title: "Per-network publication limits"
method: GET
path: "/social_limits"
tags: ["catalog"]
---

# Per-network publication limits

`GET /social_limits`

## Request

- Base URL: `https://api.planvortex.com/v1.0.0`
- URL: `https://api.planvortex.com/v1.0.0/social_limits`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (client credentials, token URL `https://api.planvortex.com/v1.0.0/oauth/token`)

Every limit a publication is validated against, indexed by limit and then by network.

Read it before building a composer. A few traps worth knowing:

• **`characters` is not always the only text limit.** Bluesky counts 300 *graphemes* **and** 3.000 *bytes*; the second one travels in `max_post_bytes`, where `0` means "this network does not measure text in bytes". A family emoji is one grapheme and eleven UTF-16 units, so counting with `String.length` is wrong in both directions.
• **`0` in `title_characters` means the network has no title field**, not a title of zero length.
• **`comment_characters` is a different limit from `characters`.** Facebook takes 63.206 in a post and 8.000 in a comment.
• **`characters` is not one number per network either.** Telegram takes 4.096 in a text post and **1.024** in the caption of a photo or a video, and it is the same composer field: the second number is the key `telegram_media`. Over the limit the publication is created in state `withErrors` with `publication_errors[].code = 967`, which carries `characters`, `max_characters` and `has_media`.
• Every network in `/social_networks` appears in every map. A missing key is a bug, and the backend's conformance suite fails on it.

## Response `200`

Limits per network

- CatalogSocialLimits
  - `characters` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.
  - `max_post_bytes` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.
  - `comment_characters` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.
  - `title_characters` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.
  - `total_images` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.
  - `video_duration_in_seconds` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.
  - `max_file_size_mb` CatalogSocialLimitsMap, required: One number per network. Every network in `/social_networks` is present. **And a few keys are not a network.** Some limits depend on the *kind* of publication rather than on the network alone, and those get a compound key next to the plain one: `instagram_story`, `facebook_reel`, `telegram_media`. Read the plain key by default and the compound one when it applies.

## Other responses

- `400`: Error

---

[API](https://skmtc.dev/planvortex/apis/planvortex-api.md) · [All operations](https://skmtc.dev/planvortex/apis/planvortex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/planvortex/apis/planvortex-api/revisions/abedbbc1cd52?raw)
