API · v1

API de Cut

Genera enlaces cortos desde tu código con una sola llamada HTTP. Sin registro, respuesta en JSON.

Endpoint

Una sola ruta para crear enlaces. Envía la URL larga por POST y recibe el enlace corto.

POST https://c.devex.pe/api/cut

Cuerpo

Acepta application/x-www-form-urlencoded o application/json.

CampoTipoRequeridoDescripción
urlstringSíLa URL larga que quieres acortar.
ttlintegerNoMinutos 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.url La URL original recibida.
  • data.code Código único del enlace.
  • data.cutted El enlace corto, listo para compartir.
  • data.ttl Minutos de vida pedidos, o null si es permanente.
  • data.expires_at Fecha de vencimiento en UTC (ISO 8601), o null si 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: 60 El enlace vive una hora.
  • ttl: 1440 El enlace vive un día.
  • Sin ttl El 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.

GET https://c.devex.pe/{code} 302 → URL original

¿Prefieres hacerlo sin código?

Acorta cualquier enlace desde la web en un segundo.

Acortar un enlace