Skip to main content
POST
Every row is validated before anything is created: if any row fails, nothing is created and the response lists every failing row. The same rules as the dashboard’s bulk creator apply. Two rows that would create the same link (the same slug on the same domain, or the same path on a custom domain) fail as duplicates.

Request

Headers

string
required
Must be application/json

Body

Array of link objects to create (max: 1,000). Each object can contain:
  • url (required) - Destination URL. Must be a valid HTTP or HTTPS URL
  • slug - Slug for the short URL. Required on bouncy.ai and system domains: 3 to 50 letters, numbers, hyphens and underscores, not a reserved word (for example admin, api, www). On a custom domain it is used as the path
  • domain - bouncy.ai (default), a system domain from GET /v1/domains, or one of your custom domains. Premium system domains need a paid plan; custom domains must be connected and verified
  • customPath - Path on a custom domain (takes precedence over slug there)
  • behavior - Redirect behavior, as in Create Link. Free plans are saved as conservative
  • geoPresetId - ID of a saved geo preset from GET /v1/geo-presets. The link’s geo rule uses the preset’s saved country list. Rows with geoPresetId must also provide alternateUrl; unknown preset IDs fail that row’s validation
  • geoPreset and geoCountries - A geo rule from a country list (ignored when geoPresetId is set)
  • alternateUrl - Redirect destination for visitors matching the geo rule. Required when geoPresetId is set
  • languagePreset, selectedLanguages and languageUrl - A language rule
  • linkType: "app" with appLinkConfig - Create an app link instead of a deeplink

Plan limits

  • If the batch would take the account past its total link limit, the request fails with 403 and nothing is created.
  • Links count toward the active limit in row order. Once the active limit is reached, the remaining rows are created inactive (the same as a single create at the limit). Activate them later with Toggle Link Status after freeing a slot.

Response

boolean
Whether the batch was created
integer
Number of links created
integer
Number of links created active
integer
Number of links created inactive because the active limit was reached
The created links, in request order
array
Only when the batch includes custom-domain links: one entry per custom-domain row with domain, path and success. Each custom domain is deployed once for the whole batch, so every row of a domain shares that deployment’s result