Redirects

Redirects map one browser-relative path to another inside a publication. The API returns a redirect record; it does not send an HTTP redirect response itself.

Authentication

Management routes require a bearer token and the listed capability. /redirect/resolve is public. Use redirect_id when available; otherwise management routes need a publication selector and source_path.

Routes

Route Methods Authorization Required input Optional input and behavior Success result
/redirect/list GET, POST redirect.list Publication selector Pagination Paginated redirects.
/redirect/get POST redirect.list redirect_id, or publication selector plus source_path redirect.
/redirect/save POST redirect.save Create: publication selector, source_path, destination_path; update: redirect_id status_code Saved redirect.
/redirect/delete POST redirect.delete redirect_id, or publication selector plus source_path Deleted redirect_id.
/redirect/resolve GET, POST None Publication selector, source_path Public redirect.

Save fields

Field Required Type Description
redirect_id No UUID Updates this redirect. Omit to create.
publication_id / publication_slug Required on create and public resolve UUID / String Selects the publication.
source_path Yes on create String Browser-relative source path.
destination_path Yes on create String Browser-relative destination path.
status_code No 301, 302, 307, or 308 Defaults to 301 when creating.
curl -sS https://api.blog.service.m7.org/v1/redirect/save \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "publication_slug":"engineering-notes",
    "source_path":"/old-release-notes",
    "destination_path":"/release-notes",
    "status_code":301
  }'

Paths are normalized with one leading slash and no trailing slash except /. They cannot contain whitespace, backslashes, query strings, fragments, . or .. segments, or a URL scheme. A source path is unique within its publication and must differ from the destination. The API rejects loops and chains deeper than 32 redirects with 409.

Public resolution

{
  "publication_slug": "engineering-notes",
  "source_path": "/old-release-notes"
}
{
  "redirect": {
    "source_path": "/old-release-notes",
    "destination_path": "/release-notes",
    "status_code": 301
  }
}

After a successful resolve, the caller performs the browser redirect using the returned destination_path and status_code. An unknown path returns 404.