Agent-ready short URL flow
Designed for report delivery, chat replies, signed links, and tool-calling workflows where an agent needs a safe shareable URL.
Zrl.app gives you an API First short URL service with a contract that fits cleanly into backend code, workflow tools, and LLM actions. Send a long URL, get a short URL back, and move on.
$ curl --location 'https://api.zrl.app/api/v1/short-urls' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data '{
"original_url": "https://your-app.com/reports/april-summary?token=xyz123abc"
}'
# Response
{
"short_id": "fYolGcAs",
"original_url": "https://your-app.com/reports/april-summary?token=xyz123abc",
"short_url": "https://zrl.app/fYolGcAs",
"created_at": "2026-04-05T07:08:56.326888Z"
}
Zrl.app keeps the value prop narrow on purpose: one reliable endpoint for creating short URLs without dashboard-heavy friction.
Designed for report delivery, chat replies, signed links, and tool-calling workflows where an agent needs a safe shareable URL.
No SDK lock-in. Use fetch, requests, Go net/http, Java HttpClient, or any internal tool runner that can speak JSON over HTTP.
The page keeps one primary action—get the API key—while examples and docs stay visible enough for quick evaluation.
Keep the integration lightweight: issue an API key, call one endpoint, and return the resulting short URL to your UI, your backend jobs, or your agent runtime.
const response = await fetch('https://api.zrl.app/api/v1/short-urls', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
body: JSON.stringify({
original_url: 'https://example.com/reports/april-summary'
})
});
const data = await response.json();
console.log(data.short_url);
import requests
response = requests.post(
'https://api.zrl.app/api/v1/short-urls',
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
json={
'original_url': 'https://example.com/reports/april-summary'
}
)
print(response.json()['short_url'])
payload := strings.NewReader(`{"original_url":"https://example.com/reports/april-summary"}`)
req, _ := http.NewRequest(http.MethodPost, "https://api.zrl.app/api/v1/short-urls", payload)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.zrl.app/api/v1/short-urls"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(
"{\"original_url\":\"https://example.com/reports/april-summary\"}"
))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
# Tool.md
## create_short_url
Create an agent-ready short URL for a long destination.
### request
POST https://api.zrl.app/api/v1/short-urls
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"original_url": "https://example.com/reports/april-summary"
}
### response
{
"short_url": "https://zrl.app/fYolGcAs"
}
Keep the path short: open portal.zrl.app, issue a key, copy a request example, and wire Zrl.app into your workflow.