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
| Code | Significado |
|---|---|
| 400 | Solicitud inválida. Parámetros incorrectos |
| 401 | No autorizado. Falta o clave API inválida |
| 403 | Prohibido. Recurso no disponible en tu plan |
| 404 | No encontrado. El recurso no existe |
| 429 | Lí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.
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.
| Nombre | Tipo | Obrigatório | Descriçã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 https://useinmedia.com/api/v1/posts \ -H "Authorization: Bearer sk_..."
[
{
"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"
}
]| Nombre | Tipo | Obrigatório | Descriçã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 |
{
"title": "Air Jordan launch",
"prompt": "Bold Instagram post for a sneaker drop. Black and gold palette.",
"projectId": "e5f6g7h8-...",
"brandKitId": "k1l2m3n4-..."
}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-..." }'
{
"id": "3f7a1b2c-...",
"title": "Air Jordan launch",
"status": "draft",
"imageUrl": "https://...",
"hasVideo": false,
"createdAt": "2026-04-14T12:00:00Z"
}curl https://useinmedia.com/api/v1/posts/<id> \ -H "Authorization: Bearer sk_..."
{
"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"
}curl https://useinmedia.com/api/v1/posts/project/<projectId> \ -H "Authorization: Bearer sk_..."
[ { "id": "...", "title": "..." } ]| Nombre | Tipo | Obrigatório | Descriçã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 |
{ "title": "Updated title", "status": "draft" }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" }'
{
"id": "3f7a1b2c-...",
"title": "Updated title",
"status": "draft",
"updatedAt": "2026-04-14T13:00:00Z"
}curl https://useinmedia.com/api/v1/posts/<id> \ -X DELETE \ -H "Authorization: Bearer sk_..."
204 No Content
| Nombre | Tipo | Obrigatório | Descriçã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) |
{ "prompt": "Make it more energetic", "format": "1:1" }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" }'
{
"post": {
"id": "3f7a1b2c-...",
"status": "draft",
"imageUrl": "https://...",
"hasVideo": false,
"updatedAt": "2026-04-14T13:00:00Z"
},
"respond": "Updated the design with more vibrant colors."
}curl https://useinmedia.com/api/v1/posts/<id>/render \ -X POST \ -H "Authorization: Bearer sk_..."
{ "id": "...", "imageUrl": "https://...", "status": "draft" }curl https://useinmedia.com/api/v1/posts/<id>/publish \ -X POST \ -H "Authorization: Bearer sk_..."
{ "id": "...", "status": "published", "publishedAt": "2026-04-14T15:30:00Z" }| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| scheduledAt | datetime | required | Fecha/hora de publicación ISO 8601 (UTC) |
{ "scheduledAt": "2026-04-15T09:00:00Z" }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" }'
{ "id": "...", "status": "scheduled", "scheduledAt": "2026-04-15T09:00:00Z" }| Nombre | Tipo | Obrigatório | Descriçã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 |
{
"connectionIds": ["conn-uuid-1", "conn-uuid-2"],
"scheduledAt": null
}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 }'
[
{
"connectionId": "conn-uuid-1",
"platform": "Instagram",
"status": "Published",
"externalPostId": "ext-123",
"errorMessage": null
}
]curl https://useinmedia.com/api/v1/posts/<id>/publish-targets \ -H "Authorization: Bearer sk_..."
[
{
"connectionId": "conn-uuid-1",
"platform": "Instagram",
"status": "Published",
"externalPostId": "ext-123",
"errorMessage": null
}
]| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| format | string | optional | png (padrão) ou jpg |
curl https://useinmedia.com/api/v1/posts/<id>/download \ -H "Authorization: Bearer sk_..."
Archivo binario (image/png o image/jpeg)
curl https://useinmedia.com/api/v1/posts/<id>/versions \ -H "Authorization: Bearer sk_..."
[
{
"id": "ver-uuid-...",
"versionNumber": 3,
"label": "Dark theme variant",
"createdAt": "2026-04-14T12:00:00Z"
}
]curl https://useinmedia.com/api/v1/posts/<id>/versions/<versionId>/restore \ -X POST \ -H "Authorization: Bearer sk_..."
{ "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.
| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| status | string | optional | Filtro: activo | archivado |
curl https://useinmedia.com/api/v1/projects \ -H "Authorization: Bearer sk_..."
[
{
"id": "e5f6g7h8-...",
"name": "Nike Campaign",
"description": "Q2 2026 drop",
"icon": "👟",
"color": "#00f2ff",
"status": "active",
"createdAt": "2026-01-10T09:00:00Z"
}
]| Nombre | Tipo | Obrigatório | Descriçã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 |
{
"name": "Nike Campaign",
"description": "Q2 2026 drop",
"icon": "👟",
"color": "#00f2ff"
}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" }'
{
"id": "e5f6g7h8-...",
"name": "Nike Campaign",
"status": "active",
"createdAt": "2026-04-14T12:00:00Z"
}| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | optional | Nuevo nombre |
| description | string | optional | Nueva descripción |
| status | string | optional | activo | archivado |
{ "name": "Nike Campaign v2", "status": "archived" }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" }'
{ "id": "...", "name": "Nike Campaign v2", "status": "archived" }curl https://useinmedia.com/api/v1/projects/<id> \ -H "Authorization: Bearer sk_..."
{
"id": "e5f6g7h8-...",
"name": "Nike Campaign",
"description": "Q2 2026 drop",
"icon": "👟",
"color": "#00f2ff",
"status": "active",
"coverUrl": "https://...",
"createdAt": "2026-01-10T09:00:00Z"
}| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| file | file | required | JPEG, PNG o WebP. Máx 10 MB |
curl https://useinmedia.com/api/v1/projects/<id>/cover \ -X POST \ -H "Authorization: Bearer sk_..."
{ "id": "...", "coverUrl": "https://...", "name": "Nike Campaign" }curl https://useinmedia.com/api/v1/projects/<id>/cover \ -X DELETE \ -H "Authorization: Bearer sk_..."
204 No Content
curl https://useinmedia.com/api/v1/projects/<id> \ -X DELETE \ -H "Authorization: Bearer sk_..."
204 No Content
Brand Kits
Almacena colores de marca, fuentes y logotipos. El plan Starter está limitado a 1 Brand Kit.
curl https://useinmedia.com/api/v1/brandkits \ -H "Authorization: Bearer sk_..."
[
{
"id": "k1l2m3n4-...",
"name": "Main Brand",
"colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
"fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
"logoUrl": "https://..."
}
]| Nombre | Tipo | Obrigatório | Descriçã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 |
{
"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 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" }'
{ "id": "k1l2m3n4-...", "name": "Main Brand", ... }| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | optional | Nuevo nombre |
| colors | object | optional | Colores a actualizar (mismo formato de crear) |
| fonts | object | optional | Fuentes a actualizar |
{ "colors": { "primary": "#ff5733" } }curl https://useinmedia.com/api/v1/brandkits/<id> \
-X PUT \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{ "colors": { "primary": "#ff5733" } }'
{ "id": "...", "name": "Main Brand", ... }curl https://useinmedia.com/api/v1/brandkits/<id> \ -H "Authorization: Bearer sk_..."
{
"id": "k1l2m3n4-...",
"name": "Main Brand",
"colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
"fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
"logoUrl": "https://..."
}curl https://useinmedia.com/api/v1/brandkits/<id> \ -X DELETE \ -H "Authorization: Bearer sk_..."
204 No Content
Programaciones
Automatiza la generación de contenido recurrente con horarios cron. Requiere el plan Growth.
curl https://useinmedia.com/api/v1/schedules \ -H "Authorization: Bearer sk_..."
[
{
"id": "s1s2s3s4-...",
"name": "Daily Instagram Post",
"cronExpression": "0 9 * * *",
"isActive": true,
"promptTemplate": "Generate a motivational post for today.",
"nextRunAt": "2026-04-15T09:00:00Z"
}
]| Nombre | Tipo | Obrigatório | Descriçã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 |
{
"name": "Daily Instagram Post",
"cronExpression": "0 9 * * *",
"promptTemplate": "Generate a motivational post for today.",
"projectId": "e5f6g7h8-...",
"brandKitId": "k1l2m3n4-..."
}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-..." }'
{
"id": "s1s2s3s4-...",
"name": "Daily Instagram Post",
"cronExpression": "0 9 * * *",
"isActive": true,
"nextRunAt": "2026-04-15T09:00:00Z"
}| Nombre | Tipo | Obrigatório | Descriçã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 |
{ "isActive": false }curl https://useinmedia.com/api/v1/schedules/<id> \
-X PUT \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{ "isActive": false }'
{ "id": "...", "isActive": false, ... }curl https://useinmedia.com/api/v1/schedules/<id> \ -H "Authorization: Bearer sk_..."
{
"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"
}curl https://useinmedia.com/api/v1/schedules/<id> \ -X DELETE \ -H "Authorization: Bearer sk_..."
204 No Content
Webhooks
Recibe notificaciones HTTP en tiempo real cuando ocurran eventos en tu espacio de trabajo. Requiere el plan Growth.
curl https://useinmedia.com/api/v1/webhooks \ -H "Authorization: Bearer sk_..."
[
{
"id": "w1w2w3w4-...",
"url": "https://yourapp.com/hooks/inmedia",
"events": "post.published,post.failed",
"isActive": true,
"lastTriggeredAt": "2026-04-14T10:00:00Z"
}
]| Nombre | Tipo | Obrigatório | Descriçã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 |
{
"url": "https://yourapp.com/hooks/inmedia",
"events": "post.published,post.failed",
"secret": "my-webhook-secret"
}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" }'
{
"id": "w1w2w3w4-...",
"url": "https://yourapp.com/hooks/inmedia",
"events": "post.published,post.failed",
"isActive": true,
"createdAt": "2026-04-14T12:00:00Z"
}| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| url | string | optional | Nueva URL del endpoint |
| events | string | optional | Nueva lista de eventos |
| isActive | boolean | optional | Activar o desactivar |
{ "isActive": false }curl https://useinmedia.com/api/v1/webhooks/<id> \
-X PUT \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{ "isActive": false }'
{ "id": "...", "isActive": false, ... }curl https://useinmedia.com/api/v1/webhooks/<id> \ -X DELETE \ -H "Authorization: Bearer sk_..."
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.
curl https://useinmedia.com/api/v1/video/jobs/<jobId> \ -H "Authorization: Bearer sk_..."
{
"status": "done",
"postId": "e5f6g7h8-...",
"videoUrl": "https://presigned-s3-url...",
"message": "Video generated successfully!",
"error": null
}curl https://useinmedia.com/api/v1/video/presign/<postId> \ -H "Authorization: Bearer sk_..."
{ "url": "https://presigned-s3-url..." }Uso
Verifica la cuota de tu plan y la actividad de generación.
| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| page | integer | optional | Número de página (predeterminado: 1) |
| pageSize | integer | optional | Elementos por página (predeterminado: 50) |
curl https://useinmedia.com/api/v1/usage/activity \ -H "Authorization: Bearer sk_..."
{
"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.
curl https://useinmedia.com/api/v1/api-keys \ -H "Authorization: Bearer sk_..."
[
{
"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"
}
]| Nombre | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | required | Nombre descriptivo para la clave |
| expiresAt | datetime | optional | Expiración opcional (ISO 8601) |
{ "name": "Production key" }curl https://useinmedia.com/api/v1/api-keys \
-X POST \
-H "Authorization: Bearer sk_..." \
-H "Content-Type: application/json" \
-d '{ "name": "Production key" }'
{
"id": "key-uuid-...",
"key": "sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd",
"prefix": "sk_aBcDe",
"name": "Production key"
}curl https://useinmedia.com/api/v1/api-keys/<id> \ -X DELETE \ -H "Authorization: Bearer sk_..."
204 No Content
curl https://useinmedia.com/api/v1/api-keys/<id>/regenerate \ -X POST \ -H "Authorization: Bearer sk_..."
{ "id": "...", "key": "sk_NEW...", "prefix": "sk_NEW" }