rizamodocs
Links

Create a short link

POST
/links

A short address on Rizamo's link host that sends people on to url and counts each click, by day and country. Nothing about the person who clicks is kept: no IP address, cookie or device. Link previews (Instagram, Facebook, WhatsApp, Slack, X and others) and bots are not counted. Without profileId, the link is yours (the person, key or agent that made it) and people limited to some profiles do not see it. A team makes up to 1,000 links in 24 hours, and only once it has a connected account or a paid plan (403 until then).

Authorization

apiKey
headerAuthorizationBearer <token>

An API key from the web app, under Developers. It starts with rz_live_.

Header Parameters

Idempotency-Key?string

1 to 255 printable characters, new for each request (a UUID); the body up to 1 MB. For 24 hours a repeat with the same key, path and body gets the first answer, with Idempotent-Replayed: true, instead of running again; 5xx, 409 and 429 answers are not kept. Errors, Retries, has the rest.

Length1 <= length <= 255

Request Body

application/json
  1. body
url*string

Where the link sends people: a public http or https address, up to 2,048 characters, without line breaks. It is kept as the URL standard writes it (url in the answer: the host in ASCII, the path encoded). Rizamo's own short links are refused, so a link never points at another.

Match^[^\u0000-\u001f\u007f-\u009f]*$
Lengthlength <= 2048
utm?

UTM tags Rizamo adds to url as utm_* parameters, so your own analytics (Google Analytics and the like) see where visitors came from. A tag the address already has stays as it is, never overwritten; empty ones add nothing. The tagged address is what url shows in the answer, and it must fit in 2,048 characters too.

profileId?string

A profile you reach, which the link belongs to.

Lengthlength <= 100
expiresAt?string

When it stops working, in the future. Left out, it never expires.

Formatdate-time

Response Body

OK

application/json
  1. response
id*string
code*string
shortUrl*string

The link to share. It sends people on to url and counts the click.

url*string

Where it sends people.

profileId*|

The profile it belongs to. Null: it is its creator's (the person, key or agent that made it).

source*|null
createdBy*||||

Null when Rizamo made it on its own, such as for a comment automation.

clicks*integer

Clicks so far. Link previews and bots are not counted; one person clicking twice counts twice.

Range-9007199254740991 <= value <= 9007199254740991
expiresAt*|

From then on the link answers 404. Null: it never expires.

disabledAt*|

When Rizamo disabled it for breaking the Acceptable Use Policy: it answers 404 from then on, whatever changes. Null for every other link.

createdAt*string
Formatdate-time
updatedAt*string
Formatdate-time
Example Request
curl -X POST 'https://api.rizamo.com/v1/links' \  -H 'Idempotency-Key: 4b9e7c1a-2f3d-4e8a-9c6b-1d2e3f4a5b6c' \  -H 'Content-Type: application/json' \  -d '{  "url": "https://cafelumen.pt/menu",  "utm": {    "source": "instagram",    "medium": "social",    "campaign": "winter-menu"  },  "profileId": "prof_01m40k9k80fxd8cvng8derm7g9"}'
Example Response
{  "id": "lnk_01m4b3r6g0e48txnypr2tcytdp",  "code": "k7Qm2p",  "shortUrl": "https://go.rizamo.com/k7Qm2p",  "url": "https://cafelumen.pt/menu?utm_source=instagram&utm_medium=social&utm_campaign=winter-menu",  "profileId": "prof_01m40k9k80fxd8cvng8derm7g9",  "source": null,  "createdBy": {    "type": "agent",    "agent": "claudecode",    "name": "Claude Code",    "agentId": "agac_01m4rmaz80fs9a5amx5zbezkq2",    "onBehalfOf": {      "userId": "user_01m4pc7v40fdm89vjt5k51b5h8",      "name": "Ana Costa"    }  },  "clicks": 0,  "expiresAt": null,  "disabledAt": null,  "createdAt": "2026-11-04T10:12:31.000Z",  "updatedAt": "2026-11-04T10:12:31.000Z"}