Update a short link (republishes edge config)
const url = 'https://app.routeseam.com/api/v1/domains/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/short_links/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PATCH', headers: {'X-Api-Key': '<X-Api-Key>', 'Content-Type': 'application/json'}, body: '{"destination_url":"https://docs.example.com/v2","enabled":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://app.routeseam.com/api/v1/domains/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/short_links/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Content-Type: application/json' \ --header 'X-Api-Key: <X-Api-Key>' \ --data '{ "destination_url": "https://docs.example.com/v2", "enabled": true }'Every field is optional and an omitted field is left unchanged, so an
empty body succeeds and changes nothing. An explicit null means “not
supplied” for every field except expires_at, where null clears the
expiry. A 422 carries the reason in error; validation_errors stays
empty. Every body field must be a single scalar — a list or an object in
place of one is a 422 naming the field.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Body
Section titled “Request Body”Every field is optional; an omitted field is left unchanged.
object
Same format as on create. A blank slug is rejected here — omit the key to keep the current one.
An explicit null here is a no-op that leaves the stored code untouched, not the 422 the same value produces on create. The column is not nullable, so a status code can be changed but never cleared.
An explicit null means “not supplied” and leaves the stored value untouched.
An explicit null means “not supplied” and leaves the stored value untouched.
Must be in the future. An explicit null clears the expiry; omitting the key leaves it unchanged. A scalar that is not a date, such as true, answers 422 with “Set an expiry date in the future, or leave it empty.”
Example
{ "destination_url": "https://docs.example.com/v2", "enabled": true}Responses
Section titled “Responses”OK
object
Exactly the keys Api::V1::ShortLinkSerializer emits. preserve_path and kind are deliberately absent: the edge ignores preserve_path for short links, and kind is an internal discriminator.
object
Canonical stored form, always with a leading slash. Matched exactly and case-sensitively at the edge.
Https:// + the domain’s hostname + path.
Example
{ "short_link": { "path": "/docs", "url": "https://go.example.com/docs", "status_code": 301 }}Missing or invalid API key
The ONLY error envelope — produced by Api::V1::BaseController#render_error_response
object
object
Example
{ "error": "Invalid API key", "errors": [], "validation_errors": {}}API access has not been enabled; org suspended; or owner email unverified
The ONLY error envelope — produced by Api::V1::BaseController#render_error_response
object
object
Examplegenerated
{ "error": "example", "errors": [ "example" ], "validation_errors": { "additionalProperty": [ "example" ] }}Not found (cross-tenant ids are indistinguishable from missing ones)
The ONLY error envelope — produced by Api::V1::BaseController#render_error_response
object
object
Example
{ "error": "Not found", "errors": [], "validation_errors": {}}Validation failed (validation_errors keyed by attribute)
The ONLY error envelope — produced by Api::V1::BaseController#render_error_response
object
object
Examplegenerated
{ "error": "example", "errors": [ "example" ], "validation_errors": { "additionalProperty": [ "example" ] }}Over 300 requests/minute for this key
The ONLY error envelope — produced by Api::V1::BaseController#render_error_response
object
object
Example
{ "error": "Rate limit exceeded", "errors": [], "validation_errors": {}}