Docs

Morphr API v1

A JSON REST API with a published OpenAPI spec. Every route below is versioned under /v1.

Base URL

https://api.morphr.link/v1

Auth

Bearer token. Send the session JWT from the auth service as Authorization: Bearer <token>.

Create a link

Links live inside a workspace. Pass the workspace id in the path.

curl -X POST https://api.morphr.link/v1/workspaces/$WORKSPACE_ID/links \
  -H "Authorization: Bearer $MORPHR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "domain_id": "dom_1a2b3c",
    "slug": "spring-launch",
    "target_url": "https://example.com/spring"
  }'

Endpoints

POST
/workspaces/{workspace_id}/links
GET
/workspaces/{workspace_id}/links
GET
/workspaces/{workspace_id}/links/{link_id}
PATCH
/workspaces/{workspace_id}/links/{link_id}
DELETE
/workspaces/{workspace_id}/links/{link_id}
GET
/workspaces/{workspace_id}/slugs/availability
GET
/workspaces/{workspace_id}/slugs/suggestion
GET
/workspaces/{workspace_id}/folders · /tags · /domains
GET
/me

Roles

Workspace membership decides what a token can do. An editor creates, updates and deletes links; a viewer reads them and gets 403 on writes. A link id from another workspace returns 404, not 403 — workspaces don't leak.

Versioning

Authenticated routes version together under one prefix, so a future /v2 doesn't move routes piecemeal. The spec at /open is deliberately unversioned: it always describes what is live.