One call to ship
Post a long URL, receive a short URL, and keep the workflow moving without extra platform setup.
Zrl.app keeps it simple: send one long URL to one clean endpoint and get a short URL back.
$ 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 stays intentionally narrow: one endpoint, predictable output, and docs that are easy to copy into product code or agent tooling.
Post a long URL, receive a short URL, and keep the workflow moving without extra platform setup.
The request and response shape works cleanly in backend jobs, internal tools, and tool-calling agents.
Use plain HTTP from Node.js, Python, Go, Java, or whatever already runs in your environment.
Create a key, call POST /api/v1/short-urls, and use the returned short_url anywhere you need a compact link.
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.
These terms govern access to and use of the Zrl.app website, API, and related services.
By accessing or using Zrl.app, you agree to these Terms of Service. If you do not agree, do not use the service.
You may use Zrl.app only in compliance with applicable law. You are responsible for the URLs, content, and destinations you submit through the service.
You are responsible for keeping API keys and account access secure. Activity performed with your credentials is treated as your activity unless reported as unauthorized.
Zrl.app acts as infrastructure for creating short links. You retain responsibility for the underlying destination URLs and any content users reach through those links.
The service may change over time, including rate limits, endpoints, UI, and access controls. We may suspend or restrict service to protect reliability, safety, or legal compliance.
Zrl.app is provided on an “as is” and “as available” basis. To the maximum extent permitted by law, we disclaim warranties and are not liable for indirect, incidental, special, consequential, or punitive damages arising from use of the service.
If you have questions about these terms, contact the Zrl.app operator through the official project channels associated with your account or onboarding flow.
This page explains the categories of data Zrl.app may process when you use the website, portal, and API.
Zrl.app may collect account information, API usage metadata, submitted destination URLs, service logs, and operational telemetry needed to run, secure, and improve the service.
We retain data for as long as reasonably necessary to operate the service, comply with legal obligations, resolve disputes, and enforce agreements. Retention periods may vary by data type and operational need.
We do not sell personal information. Data may be shared with infrastructure providers and service partners acting on our behalf, or when required by law, legal process, or to protect the service and its users.
We use reasonable administrative, technical, and organizational safeguards to protect service data. No system is perfectly secure, so users should avoid placing secrets or unnecessary sensitive data in destination URLs.
Depending on jurisdiction, you may have rights to access, correct, or delete certain personal data. Requests should be made through the official project or support channels tied to your account.
This policy may be updated from time to time. Material changes will be reflected by updating the effective date on this page.