Iniciar sesión
Características Video IA Precios Comparar Blog Empieza ahora
DOCUMENTACIÓN PARA DESARROLLADORES

Referência da API

Referencia completa de la API REST de InMedia. Todos los endpoints requieren autenticación mediante API key.

URL base: https://useinmedia.com

Autenticação

Every request must include your API key as a Bearer token and your Workspace ID. You can create API keys from Dashboard → Settings → API Keys (Growth plan required).

Encabezados obligatorios

Authorization: Bearer sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd
Content-Type: application/json

El espacio de trabajo se determina automáticamente a partir de la clave API. No se necesita encabezado X-Workspace-Id. La clave solo se muestra una vez al crearla; guárdela de forma segura.

Ejemplo rápido. Crear una publicación

curl https://useinmedia.com/api/v1/posts \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{"title":"My post","prompt":"Bold product post for Instagram"}'
import requests

response = requests.post(
    "https://useinmedia.com/api/v1/posts",
    headers={"Authorization": "Bearer sk_..."},
    json={
        "title": "My post",
        "prompt": "Bold product post for Instagram",
    }
)
post = response.json()
const response = await fetch("https://useinmedia.com/api/v1/posts", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    title: "My post",
    prompt: "Bold product post for Instagram",
  }),
});
const post = await response.json();
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer sk_...");

var payload = new {
    title = "My post",
    prompt = "Bold product post for Instagram"
};
var response = await client.PostAsJsonAsync(
    "https://useinmedia.com/api/v1/posts", payload);
var post = await response.Content.ReadFromJsonAsync<JsonDocument>();
<?php
$ch = curl_init("https://useinmedia.com/api/v1/posts");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer sk_...",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        "title"  => "My post",
        "prompt" => "Bold product post for Instagram",
    ]),
]);
$post = json_decode(curl_exec($ch), true);

Códigos de error

CodeSignificado
400Solicitud inválida. Parámetros incorrectos
401No autorizado. Falta o clave API inválida
403Prohibido. Recurso no disponible en tu plan
404No encontrado. El recurso no existe
429Límite de velocidad excedido. Reduzca la frecuencia

Eventos de Webhooks

Pasa una lista separada por comas de nombres de eventos al campo events al crear un webhook.

post.generated
Activado cuando la IA termina de generar una publicación
post.published
Activado cuando una publicación se publica correctamente
post.scheduled
Activado cuando una publicación está programada para publicación futura
post.failed
Activado cuando la generación o publicación de una publicación falla
video.completed
Activado cuando un trabajo de renderizado de video se completa
video.failed
Activado cuando un trabajo de renderizado de video falla

Formato del payload

Cada entrega de webhook es una solicitud POST con el siguiente cuerpo JSON:

{
  "event": "post.published",
  "workspaceId": "a1b2c3d4-...",
  "timestamp": "2026-04-14T15:30:00Z",
  "data": {
    "id": "3f7a1b2c-...",
    "title": "Air Jordan launch",
    "status": "published",
    "imageUrl": "https://...",
    "publishedAt": "2026-04-14T15:30:00Z"
  }
}

Segurança do Webhook

Si proporcionas un secreto al crear un webhook, InMedia firmará cada entrega con HMAC-SHA256. Verifica la firma para asegurar que la solicitud provenga de InMedia.

Encabezado de firma

X-InMedia-Signature: sha256=abc123...

El valor es el digest hex de HMAC-SHA256 del cuerpo de la solicitud sin procesar usando tu secreto de webhook como clave.

Verificación de firma

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret)
          .update(payload, 'utf8')
          .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}
import hmac, hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = 'sha256=' + hmac.new(
        secret.encode(), payload, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)
using System.Security.Cryptography;
using System.Text;

bool VerifySignature(byte[] payload, string signature, string secret)
{
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var hash     = hmac.ComputeHash(payload);
    var expected = "sha256=" + Convert.ToHexString(hash).ToLower();
    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(signature),
        Encoding.UTF8.GetBytes(expected)
    );
}
<?php
function verify_signature(
    string $payload,
    string $signature,
    string $secret
): bool {
    $expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
    return hash_equals($expected, $signature);
}

Posts

Crear y gestionar publicaciones. Llama a POST /{id}/generate después de crear una publicación para generar contenido AI.

GET /api/v1/posts Listar todas las publicaciones
Parâmetros de Query
NombreTipoObrigatórioDescrição
status string optional Filtrar por estado: borrador | programado | publicado | fallido
page integer optional Número de página (predeterminado: 1)
pageSize integer optional Elementos por página, máximo 100 (predeterminado: 20)
cURL
curl https://useinmedia.com/api/v1/posts \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "3f7a1b2c-...",
    "workspaceId": "a1b2c3d4-...",
    "projectId": "e5f6g7h8-...",
    "title": "Air Jordan launch",
    "prompt": "Bold Instagram post for sneaker drop",
    "status": "published",
    "imageUrl": "https://...",
    "hasVideo": false,
    "format": "instagram_square",
    "createdAt": "2026-04-14T12:00:00Z"
  }
]
POST /api/v1/posts Crear una publicación
Parámetros del Body
NombreTipoObrigatórioDescrição
title string required Título de la publicación (máx 200 caracteres)
prompt string required Prompt de generación (máx 5000 caracteres)
projectId guid required Proyecto para asociar la publicación
brandKitId guid optional Brand Kit a aplicar en la generación
Body de la solicitud
{
  "title": "Air Jordan launch",
  "prompt": "Bold Instagram post for a sneaker drop. Black and gold palette.",
  "projectId": "e5f6g7h8-...",
  "brandKitId": "k1l2m3n4-..."
}
cURL
curl https://useinmedia.com/api/v1/posts \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "title": "Air Jordan launch", "prompt": "Bold Instagram post for a sneaker drop. Black and gold palette.", "projectId": "e5f6g7h8-...", "brandKitId": "k1l2m3n4-..." }'
Respuesta
{
  "id": "3f7a1b2c-...",
  "title": "Air Jordan launch",
  "status": "draft",
  "imageUrl": "https://...",
  "hasVideo": false,
  "createdAt": "2026-04-14T12:00:00Z"
}
GET /api/v1/posts/ {id} Recuperar publicación por ID
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -H "Authorization: Bearer sk_..."
Respuesta
{
  "id": "3f7a1b2c-...",
  "workspaceId": "a1b2c3d4-...",
  "projectId": "e5f6g7h8-...",
  "title": "Air Jordan launch",
  "prompt": "Bold Instagram post for sneaker drop",
  "status": "published",
  "imageUrl": "https://...",
  "hasVideo": false,
  "format": "instagram_square",
  "brandKitId": null,
  "scheduledAt": null,
  "publishedAt": "2026-04-14T15:30:00Z",
  "createdAt": "2026-04-14T12:00:00Z",
  "updatedAt": "2026-04-14T15:30:00Z"
}
GET /api/v1/posts/project/ {projectId} Listar publicaciones de un proyecto
cURL
curl https://useinmedia.com/api/v1/posts/project/<projectId> \
  -H "Authorization: Bearer sk_..."
Respuesta
[ { "id": "...", "title": "..." } ]
PUT /api/v1/posts/ {id} Actualizar una publicación
Parámetros del Body
NombreTipoObrigatórioDescrição
title string optional Nuevo título (máx 200 caracteres)
prompt string optional Nuevo prompt (máx 5000 caracteres)
status string optional draft | scheduled | published | failed
scheduledAt datetime optional Fecha/hora programada ISO 8601
brandKitId guid optional Kit de marca a aplicar
Body de la solicitud
{ "title": "Updated title", "status": "draft" }
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "title": "Updated title", "status": "draft" }'
Respuesta
{
  "id": "3f7a1b2c-...",
  "title": "Updated title",
  "status": "draft",
  "updatedAt": "2026-04-14T13:00:00Z"
}
DELETE /api/v1/posts/ {id} Eliminar una publicación
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content
POST /api/v1/posts/ {id} /generate Generar (o regenerar) contenido AI para una publicación
Parámetros del Body
NombreTipoObrigatórioDescrição
prompt string optional Nuevo prompt; omitir para regenerar con el prompt existente
format string optional Proporção: 1:1 | 9:16 | 16:9 (padrão: 1:1)
Body de la solicitud
{ "prompt": "Make it more energetic", "format": "1:1" }
cURL
curl https://useinmedia.com/api/v1/posts/<id>/generate \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "prompt": "Make it more energetic", "format": "1:1" }'
Respuesta
{
  "post": {
    "id": "3f7a1b2c-...",
    "status": "draft",
    "imageUrl": "https://...",
    "hasVideo": false,
    "updatedAt": "2026-04-14T13:00:00Z"
  },
  "respond": "Updated the design with more vibrant colors."
}
POST /api/v1/posts/ {id} /render Renderizar la versión actual de la publicación en imagen (PNG/JPEG)
cURL
curl https://useinmedia.com/api/v1/posts/<id>/render \
  -X POST \
  -H "Authorization: Bearer sk_..."
Respuesta
{ "id": "...", "imageUrl": "https://...", "status": "draft" }
POST /api/v1/posts/ {id} /publish Marcar una publicación como publicada
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish \
  -X POST \
  -H "Authorization: Bearer sk_..."
Respuesta
{ "id": "...", "status": "published", "publishedAt": "2026-04-14T15:30:00Z" }
POST /api/v1/posts/ {id} /schedule Programar una publicación para publicación futura
Parámetros del Body
NombreTipoObrigatórioDescrição
scheduledAt datetime required Fecha/hora de publicación ISO 8601 (UTC)
Body de la solicitud
{ "scheduledAt": "2026-04-15T09:00:00Z" }
cURL
curl https://useinmedia.com/api/v1/posts/<id>/schedule \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "scheduledAt": "2026-04-15T09:00:00Z" }'
Respuesta
{ "id": "...", "status": "scheduled", "scheduledAt": "2026-04-15T09:00:00Z" }
POST /api/v1/posts/ {id} /publish-social Publicar (o programar) una publicación en redes sociales conectadas
Parámetros del Body
NombreTipoObrigatórioDescrição
connectionIds guid[] required Lista de IDs de conexión social para publicar
scheduledAt datetime optional Si se indica, programar en lugar de publicar inmediatamente
Body de la solicitud
{
  "connectionIds": ["conn-uuid-1", "conn-uuid-2"],
  "scheduledAt": null
}
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish-social \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "connectionIds": ["conn-uuid-1", "conn-uuid-2"], "scheduledAt": null }'
Respuesta
[
  {
    "connectionId": "conn-uuid-1",
    "platform": "Instagram",
    "status": "Published",
    "externalPostId": "ext-123",
    "errorMessage": null
  }
]
GET /api/v1/posts/ {id} /publish-targets Consultar destinos de publicación social y estado de una publicación
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish-targets \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "connectionId": "conn-uuid-1",
    "platform": "Instagram",
    "status": "Published",
    "externalPostId": "ext-123",
    "errorMessage": null
  }
]
GET /api/v1/posts/ {id} /download Descargar la imagen de la publicación como archivo
Parâmetros de Query
NombreTipoObrigatórioDescrição
format string optional png (padrão) ou jpg
cURL
curl https://useinmedia.com/api/v1/posts/<id>/download \
  -H "Authorization: Bearer sk_..."
Respuesta
Archivo binario (image/png o image/jpeg)
GET /api/v1/posts/ {id} /versions Listar versiones guardadas de una publicación
cURL
curl https://useinmedia.com/api/v1/posts/<id>/versions \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "ver-uuid-...",
    "versionNumber": 3,
    "label": "Dark theme variant",
    "createdAt": "2026-04-14T12:00:00Z"
  }
]
POST /api/v1/posts/ {id} /versions/ {versionId} /restore Restaurar una publicación a una versión anterior
cURL
curl https://useinmedia.com/api/v1/posts/<id>/versions/<versionId>/restore \
  -X POST \
  -H "Authorization: Bearer sk_..."
Respuesta
{ "id": "...", "status": "draft", "imageUrl": "https://...", "updatedAt": "2026-04-14T13:00:00Z" }

Projects

Organiza publicaciones bajo proyectos. El plan Starter está limitado a 3 proyectos activos.

GET /api/v1/projects Listar proyectos
Parâmetros de Query
NombreTipoObrigatórioDescrição
status string optional Filtro: activo | archivado
cURL
curl https://useinmedia.com/api/v1/projects \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "e5f6g7h8-...",
    "name": "Nike Campaign",
    "description": "Q2 2026 drop",
    "icon": "👟",
    "color": "#00f2ff",
    "status": "active",
    "createdAt": "2026-01-10T09:00:00Z"
  }
]
POST /api/v1/projects Crear un proyecto
Parámetros del Body
NombreTipoObrigatórioDescrição
name string required Nombre del proyecto
description string optional Descripción opcional
icon string optional Icono de emoji
color string optional Color hex, por ejemplo: #00f2ff
Body de la solicitud
{
  "name": "Nike Campaign",
  "description": "Q2 2026 drop",
  "icon": "👟",
  "color": "#00f2ff"
}
cURL
curl https://useinmedia.com/api/v1/projects \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Nike Campaign", "description": "Q2 2026 drop", "icon": "👟", "color": "#00f2ff" }'
Respuesta
{
  "id": "e5f6g7h8-...",
  "name": "Nike Campaign",
  "status": "active",
  "createdAt": "2026-04-14T12:00:00Z"
}
PUT /api/v1/projects/ {id} Actualizar un proyecto
Parámetros del Body
NombreTipoObrigatórioDescrição
name string optional Nuevo nombre
description string optional Nueva descripción
status string optional activo | archivado
Body de la solicitud
{ "name": "Nike Campaign v2", "status": "archived" }
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Nike Campaign v2", "status": "archived" }'
Respuesta
{ "id": "...", "name": "Nike Campaign v2", "status": "archived" }
GET /api/v1/projects/ {id} Buscar un proyecto por ID
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -H "Authorization: Bearer sk_..."
Respuesta
{
  "id": "e5f6g7h8-...",
  "name": "Nike Campaign",
  "description": "Q2 2026 drop",
  "icon": "👟",
  "color": "#00f2ff",
  "status": "active",
  "coverUrl": "https://...",
  "createdAt": "2026-01-10T09:00:00Z"
}
POST /api/v1/projects/ {id} /cover Subir imagen de portada a un proyecto (multipart/form-data)
Parámetros del Body
NombreTipoObrigatórioDescrição
file file required JPEG, PNG o WebP. Máx 10 MB
cURL
curl https://useinmedia.com/api/v1/projects/<id>/cover \
  -X POST \
  -H "Authorization: Bearer sk_..."
Respuesta
{ "id": "...", "coverUrl": "https://...", "name": "Nike Campaign" }
DELETE /api/v1/projects/ {id} /cover Eliminar la imagen de portada de un proyecto
cURL
curl https://useinmedia.com/api/v1/projects/<id>/cover \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content
DELETE /api/v1/projects/ {id} Eliminar un proyecto
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content

Brand Kits

Almacena colores de marca, fuentes y logotipos. El plan Starter está limitado a 1 Brand Kit.

GET /api/v1/brandkits Listar kits de marca
cURL
curl https://useinmedia.com/api/v1/brandkits \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "k1l2m3n4-...",
    "name": "Main Brand",
    "colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
    "fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
    "logoUrl": "https://..."
  }
]
POST /api/v1/brandkits Crear un Brand Kit
Parámetros del Body
NombreTipoObrigatórioDescrição
name string required Nombre del Brand Kit
colors.primary string optional Color principal hex
colors.secondary string optional Color secundario hex
colors.accent string optional Color de acento hex
colors.neutral string optional Color neutro hex
fonts.heading string optional Fuente de título
fonts.body string optional Fuente del cuerpo
logoUrl string optional URL pública de la imagen del logotipo
Body de la solicitud
{
  "name": "Main Brand",
  "colors": {
    "primary": "#00f2ff",
    "secondary": "#020408",
    "accent": "#ffffff",
    "neutral": "#888888"
  },
  "fonts": {
    "heading": "Plus Jakarta Sans",
    "body": "Inter"
  },
  "logoUrl": "https://example.com/logo.png"
}
cURL
curl https://useinmedia.com/api/v1/brandkits \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Main Brand", "colors": { "primary": "#00f2ff", "secondary": "#020408", "accent": "#ffffff", "neutral": "#888888" }, "fonts": { "heading": "Plus Jakarta Sans", "body": "Inter" }, "logoUrl": "https://example.com/logo.png" }'
Respuesta
{ "id": "k1l2m3n4-...", "name": "Main Brand", ... }
PUT /api/v1/brandkits/ {id} Actualizar un Brand Kit
Parámetros del Body
NombreTipoObrigatórioDescrição
name string optional Nuevo nombre
colors object optional Colores a actualizar (mismo formato de crear)
fonts object optional Fuentes a actualizar
Body de la solicitud
{ "colors": { "primary": "#ff5733" } }
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "colors": { "primary": "#ff5733" } }'
Respuesta
{ "id": "...", "name": "Main Brand", ... }
GET /api/v1/brandkits/ {id} Buscar un Brand Kit por ID
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -H "Authorization: Bearer sk_..."
Respuesta
{
  "id": "k1l2m3n4-...",
  "name": "Main Brand",
  "colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
  "fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
  "logoUrl": "https://..."
}
DELETE /api/v1/brandkits/ {id} Eliminar un Brand Kit
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content

Programaciones

Automatiza la generación de contenido recurrente con horarios cron. Requiere el plan Growth.

Requiere plan Growth+
GET /api/v1/schedules Listar programaciones
cURL
curl https://useinmedia.com/api/v1/schedules \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "s1s2s3s4-...",
    "name": "Daily Instagram Post",
    "cronExpression": "0 9 * * *",
    "isActive": true,
    "promptTemplate": "Generate a motivational post for today.",
    "nextRunAt": "2026-04-15T09:00:00Z"
  }
]
POST /api/v1/schedules Crear una programación Growth+
Parámetros del Body
NombreTipoObrigatórioDescrição
name string required Nombre de la programación
cronExpression string required Expresión cron de 5 campos ej.: "0 9 * * 1"
promptTemplate string optional Prompt usado en cada ejecución (máx 5000 caracteres)
projectId guid optional Proyecto de publicaciones generadas
brandKitId guid optional Kit de marca a aplicar
Body de la solicitud
{
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "promptTemplate": "Generate a motivational post for today.",
  "projectId": "e5f6g7h8-...",
  "brandKitId": "k1l2m3n4-..."
}
cURL
curl https://useinmedia.com/api/v1/schedules \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Daily Instagram Post", "cronExpression": "0 9 * * *", "promptTemplate": "Generate a motivational post for today.", "projectId": "e5f6g7h8-...", "brandKitId": "k1l2m3n4-..." }'
Respuesta
{
  "id": "s1s2s3s4-...",
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "isActive": true,
  "nextRunAt": "2026-04-15T09:00:00Z"
}
PUT /api/v1/schedules/ {id} Actualizar una programación
Parámetros del Body
NombreTipoObrigatórioDescrição
name string optional Nuevo nombre
cronExpression string optional Nueva expresión cron
isActive boolean optional Activar o desactivar el horario
promptTemplate string optional Nuevo template de prompt
Body de la solicitud
{ "isActive": false }
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "isActive": false }'
Respuesta
{ "id": "...", "isActive": false, ... }
GET /api/v1/schedules/ {id} Buscar un horario por ID
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -H "Authorization: Bearer sk_..."
Respuesta
{
  "id": "s1s2s3s4-...",
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "isActive": true,
  "promptTemplate": "Generate a motivational post for today.",
  "lastRunAt": "2026-04-13T09:00:00Z",
  "nextRunAt": "2026-04-15T09:00:00Z"
}
DELETE /api/v1/schedules/ {id} Eliminar un horario
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content

Webhooks

Recibe notificaciones HTTP en tiempo real cuando ocurran eventos en tu espacio de trabajo. Requiere el plan Growth.

Requiere plan Growth+
GET /api/v1/webhooks Listar webhooks
cURL
curl https://useinmedia.com/api/v1/webhooks \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "w1w2w3w4-...",
    "url": "https://yourapp.com/hooks/inmedia",
    "events": "post.published,post.failed",
    "isActive": true,
    "lastTriggeredAt": "2026-04-14T10:00:00Z"
  }
]
POST /api/v1/webhooks Registrar un webhook Growth+
Parámetros del Body
NombreTipoObrigatórioDescrição
url string required Endpoint HTTPS para recibir eventos
events string required Nombres de eventos separados por comas (ver sección de Eventos)
secret string optional Secreto opcional para verificación de firma HMAC-SHA256
Body de la solicitud
{
  "url": "https://yourapp.com/hooks/inmedia",
  "events": "post.published,post.failed",
  "secret": "my-webhook-secret"
}
cURL
curl https://useinmedia.com/api/v1/webhooks \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://yourapp.com/hooks/inmedia", "events": "post.published,post.failed", "secret": "my-webhook-secret" }'
Respuesta
{
  "id": "w1w2w3w4-...",
  "url": "https://yourapp.com/hooks/inmedia",
  "events": "post.published,post.failed",
  "isActive": true,
  "createdAt": "2026-04-14T12:00:00Z"
}
PUT /api/v1/webhooks/ {id} Actualizar un webhook
Parámetros del Body
NombreTipoObrigatórioDescrição
url string optional Nueva URL del endpoint
events string optional Nueva lista de eventos
isActive boolean optional Activar o desactivar
Body de la solicitud
{ "isActive": false }
cURL
curl https://useinmedia.com/api/v1/webhooks/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "isActive": false }'
Respuesta
{ "id": "...", "isActive": false, ... }
DELETE /api/v1/webhooks/ {id} Eliminar un webhook
cURL
curl https://useinmedia.com/api/v1/webhooks/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content

Video

Consulta trabajos de generación de video y recupera URLs prefirmadas. La generación de video se inicia desde el editor del panel.

Requiere plan Growth+
GET /api/v1/video/jobs/ {jobId} Consultar el estado de un job de generación de vídeo Growth+
cURL
curl https://useinmedia.com/api/v1/video/jobs/<jobId> \
  -H "Authorization: Bearer sk_..."
Respuesta
{
  "status": "done",
  "postId": "e5f6g7h8-...",
  "videoUrl": "https://presigned-s3-url...",
  "message": "Video generated successfully!",
  "error": null
}
GET /api/v1/video/presign/ {postId} Obtener URL firmada actualizada para el video de una publicación Growth+
cURL
curl https://useinmedia.com/api/v1/video/presign/<postId> \
  -H "Authorization: Bearer sk_..."
Respuesta
{ "url": "https://presigned-s3-url..." }

Uso

Verifica la cuota de tu plan y la actividad de generación.

GET /api/v1/usage/activity Consultar actividades de generación
Parâmetros de Query
NombreTipoObrigatórioDescrição
page integer optional Número de página (predeterminado: 1)
pageSize integer optional Elementos por página (predeterminado: 50)
cURL
curl https://useinmedia.com/api/v1/usage/activity \
  -H "Authorization: Bearer sk_..."
Respuesta
{
  "activity": [
    {
      "id": "t1t2t3t4-...",
      "type": "PostGeneration",
      "typeLabel": "Content generation",
      "description": "Air Jordan launch",
      "createdAt": "2026-04-14T12:00:00Z"
    }
  ]
}

API Keys

Crear y gestionar claves API programáticas. Requiere el plan Growth.

Requiere plan Growth+
GET /api/v1/api-keys Listar claves de API
cURL
curl https://useinmedia.com/api/v1/api-keys \
  -H "Authorization: Bearer sk_..."
Respuesta
[
  {
    "id": "key-uuid-...",
    "name": "Production key",
    "keyPrefix": "sk_abcd",
    "isActive": true,
    "lastUsedAt": "2026-04-13T08:00:00Z",
    "expiresAt": null,
    "createdAt": "2026-01-01T00:00:00Z"
  }
]
POST /api/v1/api-keys Crear una clave de API Growth+
Parámetros del Body
NombreTipoObrigatórioDescrição
name string required Nombre descriptivo para la clave
expiresAt datetime optional Expiración opcional (ISO 8601)
Body de la solicitud
{ "name": "Production key" }
cURL
curl https://useinmedia.com/api/v1/api-keys \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Production key" }'
Respuesta
{
  "id": "key-uuid-...",
  "key": "sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd",
  "prefix": "sk_aBcDe",
  "name": "Production key"
}
DELETE /api/v1/api-keys/ {id} Revocar una clave API
cURL
curl https://useinmedia.com/api/v1/api-keys/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Respuesta
204 No Content
POST /api/v1/api-keys/ {id} /regenerate Regenerar una clave API
cURL
curl https://useinmedia.com/api/v1/api-keys/<id>/regenerate \
  -X POST \
  -H "Authorization: Bearer sk_..."
Respuesta
{ "id": "...", "key": "sk_NEW...", "prefix": "sk_NEW" }