Developer docs
Create and manage short links and QR codes from your own tools, with a REST API or an MCP server for AI assistants.
Two ways to connect
Scripts and integrations
JSON over HTTPS. Create links one at a time or in bulk, read stats, and download QR codes.
Read the reference →MCP serverAI assistants
Let an assistant that supports MCP list links, check stats and create links with a key you control.
Set up MCP →Quickstart
1. Create an API key
In the Qodeveo app, open your workspace and go to API. Give the key a name and choose its access:
- Read only can list links and read stats, QR codes and usage. It can't change anything.
- Read & write can also create links, edit them and set redirect rules. New links count against your plan's monthly allowance.
Then choose where the key can be used: the REST API, the MCP server, or both. We suggest a separate key for AI assistants and another for your scripts. The key is shown once, so copy it right away.
2. Make your first request
Send the key as a Bearer token. Every request and response body is JSON.
curl -X POST https://app.qodeveo.com/api/v1/links \
-H "Authorization: Bearer shk_..." \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/spring-menu", "title": "Spring menu"}'A successful request returns 201 Created with the new link:
{
"id": "0b7e3f0c-…",
"code": "a1b2c3",
"short_url": "https://…/a1b2c3",
"url": "https://example.com/spring-menu",
"title": "Spring menu",
"active": true,
"expires_at": null,
"created_at": "2026-11-03T14:05:00Z",
"updated_at": "2026-11-03T14:05:00Z"
}The short_url is the link to share. Its QR code is available from the QR endpoint.
3. Fetch the QR code
curl -H "Authorization: Bearer shk_..." \
"https://app.qodeveo.com/api/v1/links/LINK_ID/qr.png?size=600" -o qr.pngExamples
import requests
API = "https://app.qodeveo.com/api/v1"
HEADERS = {"Authorization": "Bearer shk_..."}
# Create one link
r = requests.post(f"{API}/links", headers=HEADERS,
json={"url": "https://example.com/spring-menu", "title": "Spring menu"})
r.raise_for_status()
link = r.json()
print(link["short_url"])
# Download its QR code as a PNG
qr = requests.get(f"{API}/links/{link['id']}/qr.png", headers=HEADERS, params={"size": 600})
open("spring-menu-qr.png", "wb").write(qr.content)const API = "https://app.qodeveo.com/api/v1";
const headers = { Authorization: "Bearer shk_...", "Content-Type": "application/json" };
// Create one link
const res = await fetch(`${API}/links`, {
method: "POST",
headers,
body: JSON.stringify({ url: "https://example.com/spring-menu", title: "Spring menu" }),
});
if (!res.ok) throw new Error((await res.json()).error);
const link = await res.json();
console.log(link.short_url);Good to know
- Every link has a QR code. Creating a QR code doesn't use any extra allowance. Links created through the API count toward your monthly allowance of new links, the same as links created in the app.
- Keys belong to one workspace. A key can only see and change links in the workspace it was created in.
- Rate limit. 600 requests per minute per key.
- Keep keys secret. Don't put them in client-side code or public repositories. If a key leaks, revoke it on the API page and create a new one.
Next: the REST API reference, or connect an AI assistant over MCP.
1,000 New Links. 1,000 QR Codes. Every Month.
Every short link includes its own QR code, with a custom domain, team collaboration, smart regional routing and developer automation on one simple price.
