Endpoint
Una sola ruta para crear enlaces. Envía la URL larga por POST y recibe el enlace corto.
https://c.devex.pe/api/cut
Cuerpo
Acepta application/x-www-form-urlencoded o application/json.
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
url | string | Sí | La URL larga que quieres acortar. |
ttl | integer | No | Minutos de vida del enlace, de 1 a 525600 (un año). Si no lo envías, el enlace es permanente. Ver enlaces temporales |
Ejemplos
Elige tu lenguaje y copia el snippet. Todos hacen la misma llamada.
curl -X POST https://c.devex.pe/api/cut \
-d "url=https://ejemplo.com/una-ruta/muy-larga?con=parametros"
curl -X POST https://c.devex.pe/api/cut \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com/una-ruta/muy-larga"}'
const res = await fetch('https://c.devex.pe/api/cut', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url: 'https://ejemplo.com/una-ruta/muy-larga' })
});
const { data } = await res.json();
console.log(data.cutted); // https://c.devex.pe/xxxxxxxx
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]string{
"url": "https://ejemplo.com/una-ruta/muy-larga",
})
resp, err := http.Post("https://c.devex.pe/api/cut", "application/json", bytes.NewReader(body))
if err != nil {
panic(err)
}
defer resp.Body.Close()
var out struct {
Data struct {
Cutted string `json:"cutted"`
} `json:"data"`
}
json.NewDecoder(resp.Body).Decode(&out)
fmt.Println(out.Data.Cutted) // https://c.devex.pe/xxxxxxxx
}
<?php
$ch = curl_init('https://c.devex.pe/api/cut');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['url' => 'https://ejemplo.com/una-ruta/muy-larga']),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $res['data']['cutted']; // https://c.devex.pe/xxxxxxxx
Respuesta
200 OK con Content-Type: application/json.
data.urlLa URL original recibida.data.codeCódigo único del enlace.data.cuttedEl enlace corto, listo para compartir.data.ttlMinutos de vida pedidos, onullsi es permanente.data.expires_atFecha de vencimiento en UTC (ISO 8601), onullsi es permanente.
{
"status": 200,
"message": "Operación correcta",
"data": {
"url": "https://ejemplo.com/una-ruta/muy-larga",
"code": "af27e949",
"cutted": "https://c.devex.pe/af27e949",
"ttl": null,
"expires_at": null
}
}
Enlaces temporales
Envía ttl con los minutos que debe vivir el enlace. Al cumplirse ese tiempo, el enlace deja de funcionar y se elimina definitivamente.
ttl: 60El enlace vive una hora.ttl: 1440El enlace vive un día.- Sin
ttlEl enlace es permanente.
Cada llamada con ttl genera un enlace nuevo con su propio vencimiento, aunque la URL ya tenga uno permanente.
Solicitudcurl -X POST https://c.devex.pe/api/cut \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com/promo-flash","ttl":60}'
Respuesta{
"status": 200,
"message": "Operación correcta",
"data": {
"url": "https://ejemplo.com/promo-flash",
"code": "5c0e19ab",
"cutted": "https://c.devex.pe/5c0e19ab",
"ttl": 60,
"expires_at": "2026-10-17T15:30:00Z"
}
}
Errores
Si falta la URL, no es válida o el ttl no es un entero de minutos entre 1 y 525600, responde 400 con el motivo en message.
{
"status": 400,
"message": "Debe ingresar una URL",
"data": []
}
Usar el enlace
Al abrir el enlace corto, Cut responde 302 y redirige a la URL original. Si es un enlace temporal y ya venció, redirige al inicio de Cut.
https://c.devex.pe/{code}
302 → URL original
¿Prefieres hacerlo sin código?
Acorta cualquier enlace desde la web en un segundo.