← Back ClipSend

πŸ“š API Documentation

Integrate ClipSend into your applications with our REST API

Enter your API Key and all code examples will update automatically so you can copy and paste directly.

πŸ” Authentication

All API requests require authentication via the header X-API-Key.

curl -H "X-API-Key: YOUR_API_KEY" \
     https://www.clipsend.net/api/usage
import requests

headers = {
    "X-API-Key": "YOUR_API_KEY"
}

response = requests.get(
    "https://www.clipsend.net/api/usage",
    headers=headers
)
print(response.json())
const response = await fetch("https://www.clipsend.net/api/usage", {
    headers: {
        "X-API-Key": "YOUR_API_KEY"
    }
});

const data = await response.json();
console.log(data);
<?php
$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => "https://www.clipsend.net/api/usage",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "X-API-Key: YOUR_API_KEY"
    ]
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
print_r($data);
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://www.clipsend.net/api/usage", nil)
    req.Header.Set("X-API-Key", "YOUR_API_KEY")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
require 'net/http'
require 'json'

uri = URI("https://www.clipsend.net/api/usage")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = "YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(request)
end

puts JSON.parse(response.body)

πŸ“ Endpoints

POST /api/links

Create a new link with content that will self-destruct after being viewed.

Parameter Type Description
content required string The secret content to share
max_uses optional integer Number of allowed views: 1, 2, 5, 10. Default: 1
slug optional string Custom slug for the URL. If not provided, a random one will be generated
curl -X POST https://www.clipsend.net/api/links \
     -H "X-API-Key: YOUR_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{"content": "Mi mensaje secreto", "max_uses": 1, "slug": "mi-slug"}'
import requests

response = requests.post(
    "https://www.clipsend.net/api/links",
    headers={
        "X-API-Key": "YOUR_API_KEY",
        "Content-Type": "application/json"
    },
    json={
        "content": "Mi mensaje secreto",
        "max_uses": 1,
        "slug": "mi-slug"  # opcional
    }
)

data = response.json()
print(f"Link creado: {data['link']}")
const response = await fetch("https://www.clipsend.net/api/links", {
    method: "POST",
    headers: {
        "X-API-Key": "YOUR_API_KEY",
        "Content-Type": "application/json"
    },
    body: JSON.stringify({
        content: "Mi mensaje secreto",
        max_uses: 1,
        slug: "mi-slug"  // opcional
    })
});

const data = await response.json();
console.log(`Link creado: ${data.link}`);
<?php
$ch = curl_init();

$payload = json_encode([
    "content" => "Mi mensaje secreto",
    "max_uses" => 1,
    "slug" => "mi-slug"  // opcional
]);

curl_setopt_array($ch, [
    CURLOPT_URL => "https://www.clipsend.net/api/links",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_HTTPHEADER => [
        "X-API-Key: YOUR_API_KEY",
        "Content-Type: application/json"
    ]
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
echo "Link creado: " . $data['link'];
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    payload, _ := json.Marshal(map[string]interface{}{
        "content":  "Mi mensaje secreto",
        "max_uses": 1,
        "slug":     "mi-slug",
    })

    req, _ := http.NewRequest("POST", "https://www.clipsend.net/api/links", 
        bytes.NewBuffer(payload))
    req.Header.Set("X-API-Key", "YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
require 'net/http'
require 'json'

uri = URI("https://www.clipsend.net/api/links")
request = Net::HTTP::Post.new(uri)
request["X-API-Key"] = "YOUR_API_KEY"
request["Content-Type"] = "application/json"
request.body = {
    content: "Mi mensaje secreto",
    max_uses: 1,
    slug: "mi-slug"
}.to_json

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(request)
end

data = JSON.parse(response.body)
puts "Link creado: #{data['link']}"

βœ… Successful Response (201)

{
    "success": true,
    "link": "https://www.clipsend.net/mi-slug",
    "slug": "mi-slug",
    "max_uses": 1
}
GET /api/links

Retrieves all active links and reserved slugs for the user.

curl "https://www.clipsend.net/api/links" \
     -H "X-API-Key: YOUR_API_KEY"
import requests

response = requests.get(
    "https://www.clipsend.net/api/links",
    headers={"X-API-Key": "YOUR_API_KEY"}
)

print(response.json())
const response = await fetch("https://www.clipsend.net/api/links", {
    headers: {
        "X-API-Key": "YOUR_API_KEY"
    }
});

const data = await response.json();
console.log(data);

βœ… Successful Response (200)

{
    "success": true,
    "links": {
        "mi-slug": {
            "type": "link",
            "slug": "mi-slug",
            "content": "Mi mensaje secreto",
            "current_uses": 0,
            "remaining_uses": 1,
            "created_at": "2025-12-13 14:59:43",
            "max_uses": 1,
            "url": "https://www.clipsend.net/mi-slug"
        },
        "mi-marca": {
            "type": "reserved",
            "slug": "mi-marca",
            "url": "https://www.clipsend.net/mi-marca",
            "is_paid": true,
            "created_at": "2025-12-10 09:30:00"
        }
    }
}
GET /api/links?slug={slug}

Retrieves the content of a link. ⚠️ This action consumes one use of the link (burn after reading).

ParΓ‘metro Tipo DescripciΓ³n
slug required string The unique identifier of the link
curl "https://www.clipsend.net/api/links?slug=mi-slug" \
     -H "X-API-Key: YOUR_API_KEY"
import requests

response = requests.get(
    "https://www.clipsend.net/api/links",
    params={"slug": "mi-slug"},
    headers={"X-API-Key": "YOUR_API_KEY"}
)

data = response.json()
print(f"Contenido: {data['content']}")
const response = await fetch(
    "https://www.clipsend.net/api/links?slug=mi-slug",
    {
        headers: {
            "X-API-Key": "YOUR_API_KEY"
        }
    }
);

const data = await response.json();
console.log(`Contenido: ${data.content}`);
<?php
$ch = curl_init();

curl_setopt_array($ch, [
    CURLOPT_URL => "https://www.clipsend.net/api/links?slug=mi-slug",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "X-API-Key: YOUR_API_KEY"
    ]
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
echo "Contenido: " . $data['content'];

βœ… Respuesta exitosa (200)

{
    "success": true,
    "content": "Mi mensaje secreto",
    "remaining_uses": 0,
    "slug": "mi-slug"
}
GET /api/usage

Check your current API key usage for this month.

curl https://www.clipsend.net/api/usage \
     -H "X-API-Key: YOUR_API_KEY"
import requests

response = requests.get(
    "https://www.clipsend.net/api/usage",
    headers={"X-API-Key": "YOUR_API_KEY"}
)

data = response.json()
print(f"Llamadas este mes: {data['calls_this_month']}/{data['limit']}")
const response = await fetch("https://www.clipsend.net/api/usage", {
    headers: {
        "X-API-Key": "YOUR_API_KEY"
    }
});

const data = await response.json();
console.log(`Llamadas este mes: ${data.calls_this_month}/${data.limit}`);

βœ… Respuesta exitosa (200)

{
    "success": true,
    "calls_this_month": 42,
    "limit": 1000,
    "remaining": 958
}

❌ Error Codes

The API uses standard HTTP status codes to indicate the result of requests.

400 Bad Request

Invalid or missing parameters

401 Unauthorized

Invalid or missing API key

403 Forbidden

You do not have access to the API (free plan)

404 Not Found

Link does not exist

410 Gone

Link has expired or reached maximum uses

429 Too Many Requests

Monthly API limit reached