Skip to main content
POST

Request

Headers

string
required
Must be application/json

Body

string
required
The destination URL where the short link should redirect. Must be an absolute HTTP or HTTPS URL (surrounding spaces are trimmed). Anything else returns 400 with code: "INVALID_DESTINATION_URL".Links on bouncy.ai itself cannot point at a small set of blocked destinations (the same rule as the dashboard, also checked for geoRules and languageRules redirect URLs): the request returns 400 with code: "BLOCKED_BOUNCY_DESTINATION". Use a system domain or your own domain for those.Example: https://example.com/my-page
string
required
Slug for the short URL. Required on bouncy.ai and system domains. 3 to 50 characters: letters, numbers, hyphens and underscores (stored lowercase). Reserved words used by Bouncy’s own pages (for example admin, api, login, www) are rejected. Invalid slugs return 400 with code: "INVALID_SLUG".Example: summer-sale
string
Title for SEO and social media sharingExample: Summer Sale 2026
string
Description for SEO and social media cardsExample: Get 50% off all products this summer
array
Array of tags for organizing links (non-string entries are dropped)Example: ["marketing", "summer", "instagram"]
string
Domain to use for the short URL: bouncy.ai, a system domain (e.g., tapmy.social, mybouncy.link) or a custom domain connected and verified in your account. GET /v1/domains lists both. Premium system domains need a paid plan (judged on the link owner’s plan).Example: bouncy.ai Default: bouncy.ai
string
ID of one of the link owner’s groups (GET /v1/groups) to add this link to. An unknown group returns 400 with code: "GROUP_NOT_FOUND".Example: grp_abc123
string
Redirect behavior. One of: conservative (default), aggressive, basic, non-meta, experimental, experimental2, reddit. Free plans are saved as conservative whatever is sent. GET /v1/account/limits lists the behaviors your plan can use.
true creates the link in your team owner’s account (it counts toward the owner’s limits). Requires an active, non-viewer membership of the team; otherwise the request fails with 400, 403 or 404 like the dashboard. Any teamOwnerId in the body is ignored.
array
Array of geographic filtering rules. Rules are evaluated in order and the first matching rule wins. Visitors who match no rule are redirected to the main destination url.Each rule is an object with:
  • countries (array) - ISO 3166-1 alpha-2 codes (e.g., US, GB) or full country names
  • presetId (string) - ID of a saved geo preset, as returned by GET /v1/geo-presets. Use this in place of countries: the server fills the rule’s countries from the preset’s saved country list when the link is saved. An unknown presetId returns a 400 error
  • cities (array) - City names, matched as case-insensitive substrings. Can be combined with either countries or presetId
  • redirectUrl (string) - Destination URL for visitors matching this rule. Always required, including when the rule uses presetId
Preset countries are copied into the rule at save time. Editing the preset later does not change links it was already applied to.Example:
array
Array of language-based filtering rules

Plan limits

  • At the account’s total link limit the request returns 403 with code: "TOTAL_LINK_LIMIT_REACHED", currentUsed, totalLimit and plan. Nothing is created.
  • At the active link limit the link is still created, but inactive: the response has isActive: false and inactiveReason: "active_limit_reached". Activate it later with Toggle Link Status after freeing a slot.
  • Unlimited plans never hit either limit. GET /v1/account/limits shows the current numbers.

Response

boolean
Whether the operation succeeded
object
The created link object