Skip to content

Update a short link (republishes edge config)

PATCH
/api/v1/domains/{domain_id}/short_links/{id}
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.

domain_id
required
string format: uuid
id
required
string format: uuid
Media typeapplication/json

Every field is optional; an omitted field is left unchanged.

object
slug

Same format as on create. A blank slug is rejected here — omit the key to keep the current one.

string
<= 200 characters
destination_url
string format: uri
status_code

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.

integer
Allowed values: 301 302 307 308
preserve_query

An explicit null means “not supplied” and leaves the stored value untouched.

boolean
enabled

An explicit null means “not supplied” and leaves the stored value untouched.

boolean
expires_at

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.”

string | null format: date-time
Example
{
"destination_url": "https://docs.example.com/v2",
"enabled": true
}

OK

Media typeapplication/json
object
short_link
required

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
id
required
string format: uuid
domain_id
required
string format: uuid
path
required

Canonical stored form, always with a leading slash. Matched exactly and case-sensitively at the edge.

string
url
required

Https:// + the domain’s hostname + path.

string format: uri
destination_url
required
string format: uri
status_code
required
integer
Allowed values: 301 302 307 308
preserve_query
required
boolean
enabled
required
boolean
expires_at
required
string | null format: date-time
created_at
required
string format: date-time
Example
{
"short_link": {
"path": "/docs",
"url": "https://go.example.com/docs",
"status_code": 301
}
}

Missing or invalid API key

Media typeapplication/json

The ONLY error envelope — produced by Api::V1::BaseController#render_error_response

object
error
required
string
errors
Array<string>
validation_errors
object
key
additional properties
Array<string>
Example
{
"error": "Invalid API key",
"errors": [],
"validation_errors": {}
}

API access has not been enabled; org suspended; or owner email unverified

Media typeapplication/json

The ONLY error envelope — produced by Api::V1::BaseController#render_error_response

object
error
required
string
errors
Array<string>
validation_errors
object
key
additional properties
Array<string>
Examplegenerated
{
"error": "example",
"errors": [
"example"
],
"validation_errors": {
"additionalProperty": [
"example"
]
}
}

Not found (cross-tenant ids are indistinguishable from missing ones)

Media typeapplication/json

The ONLY error envelope — produced by Api::V1::BaseController#render_error_response

object
error
required
string
errors
Array<string>
validation_errors
object
key
additional properties
Array<string>
Example
{
"error": "Not found",
"errors": [],
"validation_errors": {}
}

Validation failed (validation_errors keyed by attribute)

Media typeapplication/json

The ONLY error envelope — produced by Api::V1::BaseController#render_error_response

object
error
required
string
errors
Array<string>
validation_errors
object
key
additional properties
Array<string>
Examplegenerated
{
"error": "example",
"errors": [
"example"
],
"validation_errors": {
"additionalProperty": [
"example"
]
}
}

Over 300 requests/minute for this key

Media typeapplication/json

The ONLY error envelope — produced by Api::V1::BaseController#render_error_response

object
error
required
string
errors
Array<string>
validation_errors
object
key
additional properties
Array<string>
Example
{
"error": "Rate limit exceeded",
"errors": [],
"validation_errors": {}
}