Link
Link shortening and dynamic URL routing API for Smallplate
Plate-Link is a URL shortening and resolving service for Smallplate.
It provides:
- authenticated management APIs (
create,update,delete, metadata) - public redirect API (
/url/{id}) - public JSON resolve API (
/{plateId}/resolve/{id})
Base URL
[base-url]/...Plate management endpoints are scoped by /{plateId}/....
Authentication
Management endpoints require Authorization with your plate API key:
Authorization: YOUR_API_KEYPublic endpoints do not require auth.
Response Format
Success responses:
{
"ok": true,
"data": {
"any": "payload"
}
}Error responses:
{
"ok": false,
"error": {
"code": "invalid_request",
"message": "human readable message"
}
}Endpoint Groups
| Group | Endpoints | Purpose |
|---|---|---|
| Management | POST /{plateId}/create, POST /{plateId}/create/dynamic, GET /{plateId}/links, GET /{plateId}/links/{id}, POST /{plateId}/links/{id}/update, POST /{plateId}/links/{id}/metadata, DELETE /{plateId}/links/{id} | Create/manage short links |
| Resolve JSON | GET /{plateId}/resolve/{id}, GET /{plateId}/resolve/{id}/{tail...} | Resolve destination with CORS |
| Redirect | GET /url/{id}, GET /url/{id}/{tail...} | Redirect directly |
Language Examples
Link Creation
Create static link
POST /{plateId}/createRequest:
{
"destination": "https://example.com/product/123",
"expires_at": 0,
"max_uses": 0,
"id_prefix": "prod_",
"metadata": {
"campaign": "spring"
}
}Create dynamic link
POST /{plateId}/create/dynamicRequest:
{
"template": "https://mycoolwebsite.com/product/{}?ref={}",
"id_prefix": "dyn_"
}Dynamic Placeholder Behavior
Positional placeholders ({})
Template:
https://mycoolwebsite.com/product/{}?ref={}Request:
GET /url/{id}/test/googleResolved destination:
https://mycoolwebsite.com/product/test?ref=googleNamed placeholders ({name})
Template:
https://test.com/{product}Request:
GET /url/{id}?product=testResolved destination:
https://test.com/testUpdate and Metadata
Update link fields
POST /{plateId}/links/{id}/updateRequest supports optional fields:
destinationtemplateexpires_atmax_usesenabledmetadata
Update metadata only
POST /{plateId}/links/{id}/metadataRequest:
{
"metadata": {
"owner": "growth-team",
"channel": "ads"
}
}Resolve API (recommended for custom domains)
Use resolve endpoint from your app/server, then redirect yourself.
GET /{plateId}/resolve/{id}
GET /{plateId}/resolve/{id}/{tail...}Resolve response data includes:
idplate_iddestinationstatususes
Redirect API
GET /url/{id}
GET /url/{id}/{tail...}Returns an HTTP redirect to resolved destination.
ID Rules
- Full custom IDs are not allowed.
- Users may only provide
id_prefix. - Random suffix uses
[a-zA-Z0-9]. - Suffix starts at length
5. - On collision: retry up to
10times for that length. - Then increase length (
6, then7, ...).
Quick cURL examples
# create static link
curl -X POST "[base-url]/[plateId]/create" \
-H "Authorization: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"destination":"https://example.com","id_prefix":"go_"}'
# resolve via JSON
curl "[base-url]/[plateId]/resolve/[id]"
# direct redirect
curl -i "[base-url]/url/[id]"