SmallPlate

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_KEY

Public 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

GroupEndpointsPurpose
ManagementPOST /{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 JSONGET /{plateId}/resolve/{id}, GET /{plateId}/resolve/{id}/{tail...}Resolve destination with CORS
RedirectGET /url/{id}, GET /url/{id}/{tail...}Redirect directly

Language Examples

POST /{plateId}/create

Request:

{
  "destination": "https://example.com/product/123",
  "expires_at": 0,
  "max_uses": 0,
  "id_prefix": "prod_",
  "metadata": {
    "campaign": "spring"
  }
}
POST /{plateId}/create/dynamic

Request:

{
  "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/google

Resolved destination:

https://mycoolwebsite.com/product/test?ref=google

Named placeholders ({name})

Template:

https://test.com/{product}

Request:

GET /url/{id}?product=test

Resolved destination:

https://test.com/test

Update and Metadata

POST /{plateId}/links/{id}/update

Request supports optional fields:

  • destination
  • template
  • expires_at
  • max_uses
  • enabled
  • metadata

Update metadata only

POST /{plateId}/links/{id}/metadata

Request:

{
  "metadata": {
    "owner": "growth-team",
    "channel": "ads"
  }
}

Use resolve endpoint from your app/server, then redirect yourself.

GET /{plateId}/resolve/{id}
GET /{plateId}/resolve/{id}/{tail...}

Resolve response data includes:

  • id
  • plate_id
  • destination
  • status
  • uses

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 10 times for that length.
  • Then increase length (6, then 7, ...).

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]"

On this page