Integra ClipSend en tus aplicaciones con nuestra REST API
Introduce tu API Key y todos los ejemplos de código se actualizarán automáticamente para que puedas copiar y pegar directamente.
Todas las peticiones a la API requieren autenticación mediante el header X-API-Key.
Además del límite mensual, cada plan tiene un límite por hora (Premium: 500 peticiones/hora). Cada respuesta incluye las cabeceras X-RateLimit-Limit, X-RateLimit-Remaining,
X-RateLimit-Reset.
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)
Crea un nuevo enlace con contenido que se autodestruirá después de ser visualizado.
| Parámetro | Tipo | Descripción |
|---|---|---|
| content requerido | string | El contenido secreto a compartir |
| max_uses opcional | integer | Número de visualizaciones permitidas: 1, 2, 5, 10. Por defecto: 1 |
| slug opcional | string | Slug personalizado para la URL. Si no se proporciona, se genera uno aleatorio |
| expires_in opcional | integer | Segundos hasta que caduque: 900, 3600, 86400 o 604800. Por defecto no caduca. |
| notify_on_read opcional | boolean | true para recibir un email cada vez que se lea el enlace. |
| is_code opcional | boolean | true para tratar el contenido como código (se muestra con resaltado de sintaxis). |
| code_language opcional | string | Lenguaje del snippet: javascript, python, php, sql, json... |
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']}"
{
"success": true,
"link": "https://www.clipsend.net/mi-slug",
"slug": "mi-slug",
"max_uses": 1
}
Obtiene todos los links activos y slugs reservados del usuario.
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);
{
"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"
}
}
}
Obtiene el contenido de un enlace. ⚠️ Esta acción consume un uso del enlace (burn after reading).
| Parámetro | Tipo | Descripción |
|---|---|---|
| slug requerido | string | El identificador único del enlace |
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'];
{
"success": true,
"content": "Mi mensaje secreto",
"remaining_uses": 0,
"slug": "mi-slug"
}
Consulta el estado de uno de tus enlaces sin consumir ningún uso.
curl "https://www.clipsend.net/api/links/mi-slug/status" \
-H "X-API-Key: YOUR_API_KEY"
import requests
response = requests.get(
"https://www.clipsend.net/api/links/mi-slug/status",
headers={"X-API-Key": "YOUR_API_KEY"}
)
data = response.json()
print(f"Vivo: {data['alive']}, usos restantes: {data['remaining_uses']}")
const response = await fetch(
"https://www.clipsend.net/api/links/mi-slug/status",
{
headers: {
"X-API-Key": "YOUR_API_KEY"
}
}
);
const data = await response.json();
console.log(`Vivo: ${data.alive}, usos restantes: ${data.remaining_uses}`);
{
"success": true,
"slug": "mi-slug",
"alive": true,
"remaining_uses": 1,
"max_uses": 1,
"expires_at": "2026-07-06 12:00:00",
"is_code": false,
"created_at": "2026-07-05 12:00:00"
}
Consulta el uso actual de tu API key este mes.
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}`);
{
"success": true,
"calls_this_month": 42,
"limit": 1000,
"remaining": 958
}
Registra una URL en tu panel (/dashboard/webhooks) y ClipSend te enviará un POST JSON firmado cuando ocurran los eventos que elijas.
Eventos disponibles: link.read (el enlace se ha leído) y link.expired (el enlace ha caducado sin leerse). Cada entrega incluye las cabeceras X-ClipSend-Event y X-ClipSend-Signature.
{
"event": "link.read",
"data": {
"slug": "abc123",
"url": "https://www.clipsend.net/abc123",
"remaining_uses": 0
},
"sent_at": "2026-07-05T12:00:00+00:00"
}
La firma es el HMAC-SHA256 del cuerpo con tu secreto (se muestra una sola vez al crear el webhook).
$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $secret);
$valid = hash_equals($expected, $_SERVER['HTTP_X_CLIPSEND_SIGNATURE'] ?? '');
La API utiliza códigos de estado HTTP estándar para indicar el resultado de las peticiones.
Parámetros inválidos o faltantes
API key inválida o no proporcionada
No tienes acceso a la API (plan free)
El enlace no existe
El enlace ha expirado o llegó al límite de usos
Límite mensual de API alcanzado