Create link
Create a short link. Requires an agency key (ak_). An initial uptime check runs synchronously and its result is returned under uptime.
curl -X POST "https://mythic-analytics.gulp.workers.dev/client/v1/links?location_id=example_string" \
-H "Content-Type: application/json" \
-H "X-Location-Id: example_string" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"destination_url": "https://acme-retail.com/summer-sale",
"slug": "summer-sale",
"title": "Summer Sale Campaign",
"redirect_type": 42,
"enabled": true,
"utm_passthrough": true,
"metadata": {},
"expires_at": "2024-12-25T10:00:00Z"
}'
import requests
import json
url = "https://mythic-analytics.gulp.workers.dev/client/v1/links?location_id=example_string"
headers = {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"destination_url": "https://acme-retail.com/summer-sale",
"slug": "summer-sale",
"title": "Summer Sale Campaign",
"redirect_type": 42,
"enabled": true,
"utm_passthrough": true,
"metadata": {},
"expires_at": "2024-12-25T10:00:00Z"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://mythic-analytics.gulp.workers.dev/client/v1/links?location_id=example_string", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Location-Id": "example_string",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"destination_url": "https://acme-retail.com/summer-sale",
"slug": "summer-sale",
"title": "Summer Sale Campaign",
"redirect_type": 42,
"enabled": true,
"utm_passthrough": true,
"metadata": {},
"expires_at": "2024-12-25T10:00:00Z"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"destination_url": "https://acme-retail.com/summer-sale",
"slug": "summer-sale",
"title": "Summer Sale Campaign",
"redirect_type": 42,
"enabled": true,
"utm_passthrough": true,
"metadata": {},
"expires_at": "2024-12-25T10:00:00Z"
}`)
req, err := http.NewRequest("POST", "https://mythic-analytics.gulp.workers.dev/client/v1/links?location_id=example_string", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Location-Id", "example_string")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://mythic-analytics.gulp.workers.dev/client/v1/links?location_id=example_string')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['X-Location-Id'] = 'example_string'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"destination_url": "https://acme-retail.com/summer-sale",
"slug": "summer-sale",
"title": "Summer Sale Campaign",
"redirect_type": 42,
"enabled": true,
"utm_passthrough": true,
"metadata": {},
"expires_at": "2024-12-25T10:00:00Z"
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"id": "4f9a2c1e-8b3d-4e7a-9c2f-1a2b3c4d5e6f",
"location_id": "acme-retail",
"slug": "summer-sale",
"destination_url": "https://acme-retail.com/summer-sale",
"title": "Summer Sale Campaign",
"redirect_type": 302,
"enabled": true,
"utm_passthrough": true,
"metadata": {},
"expires_at": "2024-12-25T10:00:00Z",
"created_at": "2024-06-01T12:00:00.000Z",
"updated_at": "2024-06-15T08:30:00.000Z",
"click_count": 1247,
"uptime": {
"is_up": true,
"status_code": 200,
"response_time_ms": 142,
"error_type": null,
"error_message": null,
"checked_at": "2024-06-01T12:00:00.500Z"
}
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "Unauthorized",
"message": "Authentication required. Please provide a valid API token",
"code": 401
}
{
"error": "Forbidden",
"message": "You don't have permission to access this resource",
"code": 403
}
{
"error": "Conflict",
"message": "The request conflicts with the current state of the resource",
"code": 409,
"details": "Resource already exists"
}
/links
Target server for requests. Edit to use your own host.
Client API key as a bearer token. Use an agency key (ak_..., read-write) or a location secret key (sk_..., read-only). Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need links:read or links:write. See Using an mcp_ key over HTTP.
ak_..., read-write) or a location secret key (sk_..., read-only). Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need links:read or links:write. See Using an mcp_ key over HTTP.Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the X-Location-Id header. Ignored for secret keys, which resolve their own location.
The media type of the request body
Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the location_id query parameter. Ignored for secret keys.
Target URL. Must start with http:// or https://.
Custom slug, 1-128 chars of [a-zA-Z0-9_-]. Auto-generated by the database if omitted.
Human-readable title.
HTTP redirect status. Defaults to 302.
Whether the link is active.
Whether inbound UTM parameters are forwarded to the destination.
Arbitrary JSON metadata.
Optional expiration timestamp.
Request Preview
Response
Response will appear here after sending the request
Authentication
Bearer token. Client API key as a bearer token. Use an agency key (ak_..., read-write) or a location secret key (sk_..., read-only). Format: Bearer ak_... or Bearer sk_.... Scoped keys (mcp_) are accepted too and need links:read or links:write. See Using an mcp_ key over HTTP.
Query Parameters
Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the X-Location-Id header. Ignored for secret keys, which resolve their own location.
Headers
Target location (client) id. Required when authenticating with an agency key (ak_); alternative to the location_id query parameter. Ignored for secret keys.
Body
Target URL. Must start with http:// or https://.
https://acme-retail.com/summer-saleCustom slug, 1-128 chars of [a-zA-Z0-9_-]. Auto-generated by the database if omitted.
summer-saleWhether the link is active.
Whether inbound UTM parameters are forwarded to the destination.
Arbitrary JSON metadata.
Optional expiration timestamp.