The Snipvio API lets you create links from your own scripts, tools, and automations.
Authentication
Generate a key at Dashboard → API Keys. The full key is shown once at creation and never again, because only a hash of it is stored. Copy it somewhere safe immediately.
Send it as a bearer token:
Authorization: Bearer snip_your_key_here
Revoke a key at any time from the same page. Revocation takes effect instantly.
Create a link
POST /api/v1/links
Content-Type: application/json
Authorization: Bearer snip_your_key_here
{ "url": "https://example.com/a/very/long/link" }
Response:
{
"code": "x7Kp2Qa",
"shortUrl": "https://snipvio.com/x7Kp2Qa",
"destination": "https://example.com/a/very/long/link"
}
List your links
GET /api/v1/links
Authorization: Bearer snip_your_key_here
Returns your 100 most recent links, newest first. There is no pagination, so links beyond the most recent 100 are not reachable through the API:
{
"links": [
{
"code": "x7Kp2Qa",
"destination": "https://example.com/page",
"shortUrl": "https://snipvio.com/x7Kp2Qa",
"createdAt": "2026-08-07T12:59:13.000Z"
}
]
}
Example: curl
curl -X POST https://snipvio.com/api/v1/links \
-H "Authorization: Bearer snip_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/page"}'
Example: JavaScript
const res = await fetch("https://snipvio.com/api/v1/links", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SNIPVIO_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com/page" }),
});
const { shortUrl } = await res.json();
Example: Python
import os, requests
r = requests.post(
"https://snipvio.com/api/v1/links",
headers={"Authorization": f"Bearer {os.environ['SNIPVIO_KEY']}"},
json={"url": "https://example.com/page"},
)
print(r.json()["shortUrl"])
Status codes
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | The URL is missing or not a valid http/https address |
| 401 | The API key is missing, malformed, or revoked |
| 403 | Monthly link limit reached. Only possible on the free plan, so you will see this if a paid plan has lapsed |
| 429 | Too many requests. See rate limits below |
Error responses
Errors return JSON with a single error field. A 401 returns an empty body.
// 400
{ "error": "Only http and https URLs can be shortened." }
// 403
{ "error": "Monthly link limit reached." }
// 429
{ "error": "Too many requests. Please wait a moment and try again." }
A 401 has no body. Check the status code rather than parsing it.
Rate limits
Creating links is limited to 120 requests per minute per account. Going over returns 429 with a Retry-After header giving the seconds to wait.
What the API does not do
These two endpoints are the whole API. There is no update or delete endpoint, and listing does not paginate. To change a destination or remove a link, use the dashboard.
Notes
- Links created through the API appear in your dashboard like any other and count toward your monthly allowance.
- Keep keys server-side. A key in browser JavaScript can be read and used by anyone.
- API access requires a Premium plan or higher.
Frequently asked questions
Which plans include API access?
API access is a Premium feature and is available on Premium and above.
What are the API rate limits?
Creating links is limited to 120 requests per minute per account. Exceeding it returns a 429 response with a Retry-After header giving the number of seconds to wait.
I lost my API key, can I see it again?
No. Only a hash of the key is stored, so the full value is shown once at creation and never again. Generate a new key and revoke the old one, which takes effect instantly.
Can I update or delete links through the API?
Not currently. The API creates and lists links; changing a destination or removing a link is done from the dashboard.