Entrar
Recursos Vídeo IA Preços Comparar Blog Começar a criar grátis
DOCUMENTAÇÃO PARA DESENVOLVEDORES

Referência da API

Referência completa para a API REST do InMedia. Todos os endpoints exigem autenticação via chave de API.

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).

Cabeçalhos obrigatórios

Authorization: Bearer sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd
Content-Type: application/json

O espaço de trabalho é determinado automaticamente a partir da chave da API. Nenhum cabeçalho X-Workspace-Id é necessário. A chave é exibida apenas uma vez no momento da criação; armazene-a com segurança.

Exemplo rápido. Criar uma postagem

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 erro

CodeSignificado
400Requisição inválida. Parâmetros incorretos
401Não autorizado. Chave de API ausente ou inválida
403Proibido. Recurso não disponível no seu plano
404Não encontrado. Recurso não existe
429Limite de taxa excedido. Reduza a frequência

Eventos de Webhook

Passe uma lista separada por vírgulas de nomes de eventos para o campo de eventos ao criar um webhook.

post.generated
Acionado quando o AI termina de gerar uma postagem
post.published
Acionado quando uma postagem é publicada com sucesso
post.scheduled
Acionado quando uma postagem é agendada para publicação futura
post.failed
Acionado quando a geração ou publicação de uma postagem falha
video.completed
Acionado quando um trabalho de renderização de vídeo é concluído
video.failed
Acionado quando um trabalho de renderização de vídeo falha

Formato da carga

Cada entrega de webhook é uma solicitação POST com o seguinte corpo 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

Se você fornecer um segredo ao criar um webhook, o InMedia assinará cada entrega com HMAC-SHA256. Verifique a assinatura para garantir que a solicitação veio do InMedia.

Cabeçalho de assinatura

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

O valor é o resumo hexadecimal HMAC-SHA256 do corpo da solicitação bruta usando o segredo do webhook como chave.

Verificação de assinatura

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

Crie e gerencie posts. Chame POST /{id}/generate após criar um post para produzir conteúdo de IA.

GET /api/v1/posts Listar todos os posts
Parâmetros de Query
NomeTipoObrigatórioDescrição
status string optional Filtrar por status: rascunho | agendado | publicado | falhou
page integer optional Número da página (padrão: 1)
pageSize integer optional Itens por página, máximo 100 (padrão: 20)
cURL
curl https://useinmedia.com/api/v1/posts \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "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 Criar um post
Parâmetros do Body
NomeTipoObrigatórioDescrição
title string required Título do post (máx 200 caracteres)
prompt string required Prompt de geração (máx 5000 caracteres)
projectId guid required Projeto para associar o post
brandKitId guid optional Brand Kit a aplicar na geração
Corpo da requisição
{
  "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-..." }'
Resposta
{
  "id": "3f7a1b2c-...",
  "title": "Air Jordan launch",
  "status": "draft",
  "imageUrl": "https://...",
  "hasVideo": false,
  "createdAt": "2026-04-14T12:00:00Z"
}
GET /api/v1/posts/ {id} Recuperar post por ID
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -H "Authorization: Bearer sk_..."
Resposta
{
  "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 posts de um projeto
cURL
curl https://useinmedia.com/api/v1/posts/project/<projectId> \
  -H "Authorization: Bearer sk_..."
Resposta
[ { "id": "...", "title": "..." } ]
PUT /api/v1/posts/ {id} Atualizar um post
Parâmetros do Body
NomeTipoObrigatórioDescrição
title string optional Novo título (máx 200 caracteres)
prompt string optional Novo prompt (máx 5000 caracteres)
status string optional draft | scheduled | published | failed
scheduledAt datetime optional Data/hora agendada ISO 8601
brandKitId guid optional Brand Kit a aplicar
Corpo da requisição
{ "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" }'
Resposta
{
  "id": "3f7a1b2c-...",
  "title": "Updated title",
  "status": "draft",
  "updatedAt": "2026-04-14T13:00:00Z"
}
DELETE /api/v1/posts/ {id} Excluir um post
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content
POST /api/v1/posts/ {id} /generate Gerar (ou regerar) conteúdo de IA para um post
Parâmetros do Body
NomeTipoObrigatórioDescrição
prompt string optional Nova prompt; omitir para regerar com a prompt existente
format string optional Proporção: 1:1 | 9:16 | 16:9 (padrão: 1:1)
Corpo da requisição
{ "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" }'
Resposta
{
  "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 a versão atual do post em imagem (PNG/JPEG)
cURL
curl https://useinmedia.com/api/v1/posts/<id>/render \
  -X POST \
  -H "Authorization: Bearer sk_..."
Resposta
{ "id": "...", "imageUrl": "https://...", "status": "draft" }
POST /api/v1/posts/ {id} /publish Marcar um post como publicado
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish \
  -X POST \
  -H "Authorization: Bearer sk_..."
Resposta
{ "id": "...", "status": "published", "publishedAt": "2026-04-14T15:30:00Z" }
POST /api/v1/posts/ {id} /schedule Agendar um post para publicação futura
Parâmetros do Body
NomeTipoObrigatórioDescrição
scheduledAt datetime required Data/hora de publicação ISO 8601 (UTC)
Corpo da requisição
{ "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" }'
Resposta
{ "id": "...", "status": "scheduled", "scheduledAt": "2026-04-15T09:00:00Z" }
POST /api/v1/posts/ {id} /publish-social Publicar (ou agendar) um post em redes sociais conectadas
Parâmetros do Body
NomeTipoObrigatórioDescrição
connectionIds guid[] required Lista de IDs de conexão social para publicar
scheduledAt datetime optional Se informado, agenda ao invés de publicar imediatamente
Corpo da requisição
{
  "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 }'
Resposta
[
  {
    "connectionId": "conn-uuid-1",
    "platform": "Instagram",
    "status": "Published",
    "externalPostId": "ext-123",
    "errorMessage": null
  }
]
GET /api/v1/posts/ {id} /publish-targets Consultar destinos de publicação social e status de um post
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish-targets \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "connectionId": "conn-uuid-1",
    "platform": "Instagram",
    "status": "Published",
    "externalPostId": "ext-123",
    "errorMessage": null
  }
]
GET /api/v1/posts/ {id} /download Baixar imagem do post como arquivo
Parâmetros de Query
NomeTipoObrigatórioDescrição
format string optional png (padrão) ou jpg
cURL
curl https://useinmedia.com/api/v1/posts/<id>/download \
  -H "Authorization: Bearer sk_..."
Resposta
Arquivo binário (image/png ou image/jpeg)
GET /api/v1/posts/ {id} /versions Listar versões salvas de uma postagem
cURL
curl https://useinmedia.com/api/v1/posts/<id>/versions \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "id": "ver-uuid-...",
    "versionNumber": 3,
    "label": "Dark theme variant",
    "createdAt": "2026-04-14T12:00:00Z"
  }
]
POST /api/v1/posts/ {id} /versions/ {versionId} /restore Restaurar um post para uma versão anterior
cURL
curl https://useinmedia.com/api/v1/posts/<id>/versions/<versionId>/restore \
  -X POST \
  -H "Authorization: Bearer sk_..."
Resposta
{ "id": "...", "status": "draft", "imageUrl": "https://...", "updatedAt": "2026-04-14T13:00:00Z" }

Projects

Organize posts em projetos. O plano Starter é limitado a 3 projetos ativos.

GET /api/v1/projects Listar projetos
Parâmetros de Query
NomeTipoObrigatórioDescrição
status string optional Filtro: ativo | arquivado
cURL
curl https://useinmedia.com/api/v1/projects \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "id": "e5f6g7h8-...",
    "name": "Nike Campaign",
    "description": "Q2 2026 drop",
    "icon": "👟",
    "color": "#00f2ff",
    "status": "active",
    "createdAt": "2026-01-10T09:00:00Z"
  }
]
POST /api/v1/projects Criar um projeto
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string required Nome do projeto
description string optional Descrição opcional
icon string optional Ícone de emoji
color string optional Cor hex, ex.: #00f2ff
Corpo da requisição
{
  "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" }'
Resposta
{
  "id": "e5f6g7h8-...",
  "name": "Nike Campaign",
  "status": "active",
  "createdAt": "2026-04-14T12:00:00Z"
}
PUT /api/v1/projects/ {id} Atualizar um projeto
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string optional Novo nome
description string optional Nova descrição
status string optional ativo | arquivado
Corpo da requisição
{ "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" }'
Resposta
{ "id": "...", "name": "Nike Campaign v2", "status": "archived" }
GET /api/v1/projects/ {id} Encontrar um projeto por ID
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -H "Authorization: Bearer sk_..."
Resposta
{
  "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 Upload da imagem de capa para um projeto (multipart/form-data)
Parâmetros do Body
NomeTipoObrigatórioDescrição
file file required JPEG, PNG ou WebP. Máx 10 MB
cURL
curl https://useinmedia.com/api/v1/projects/<id>/cover \
  -X POST \
  -H "Authorization: Bearer sk_..."
Resposta
{ "id": "...", "coverUrl": "https://...", "name": "Nike Campaign" }
DELETE /api/v1/projects/ {id} /cover Remover a imagem de capa de um projeto
cURL
curl https://useinmedia.com/api/v1/projects/<id>/cover \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content
DELETE /api/v1/projects/ {id} Excluir um projeto
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content

Brand Kits

Armazene cores da marca, fontes e logotipos. O plano Starter é limitado a 1 Brand Kit.

GET /api/v1/brandkits Listar Brand Kits
cURL
curl https://useinmedia.com/api/v1/brandkits \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "id": "k1l2m3n4-...",
    "name": "Main Brand",
    "colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
    "fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
    "logoUrl": "https://..."
  }
]
POST /api/v1/brandkits Criar um Brand Kit
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string required Nome do Brand Kit
colors.primary string optional Cor principal hex
colors.secondary string optional Cor secundária hex
colors.accent string optional Cor de destaque hex
colors.neutral string optional Cor neutra hex
fonts.heading string optional Fonte do título
fonts.body string optional Fonte do corpo
logoUrl string optional URL pública da imagem do logotipo
Corpo da requisição
{
  "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" }'
Resposta
{ "id": "k1l2m3n4-...", "name": "Main Brand", ... }
PUT /api/v1/brandkits/ {id} Atualizar um Brand Kit
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string optional Novo nome
colors object optional Cores a atualizar (mesmo formato do create)
fonts object optional Fontes a atualizar
Corpo da requisição
{ "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" } }'
Resposta
{ "id": "...", "name": "Main Brand", ... }
GET /api/v1/brandkits/ {id} Encontrar um Brand Kit por ID
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -H "Authorization: Bearer sk_..."
Resposta
{
  "id": "k1l2m3n4-...",
  "name": "Main Brand",
  "colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
  "fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
  "logoUrl": "https://..."
}
DELETE /api/v1/brandkits/ {id} Deletar um Brand Kit
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content

Agendamentos

Automatize a geração de conteúdo recorrente com agendamentos de cron. Exige o plano Growth.

Requer plano Growth+
GET /api/v1/schedules Listar agendamentos
cURL
curl https://useinmedia.com/api/v1/schedules \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "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 Criar um agendamento Growth+
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string required Nome do agendamento
cronExpression string required Expressão cron de 5 campos ex: "0 9 * * 1"
promptTemplate string optional Prompt usado em cada execução (máx. 5000 caracteres)
projectId guid optional Projeto dos posts gerados
brandKitId guid optional Brand Kit a aplicar
Corpo da requisição
{
  "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-..." }'
Resposta
{
  "id": "s1s2s3s4-...",
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "isActive": true,
  "nextRunAt": "2026-04-15T09:00:00Z"
}
PUT /api/v1/schedules/ {id} Atualizar um agendamento
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string optional Novo nome
cronExpression string optional Nova expressão cron
isActive boolean optional Ativar ou desativar o agendamento
promptTemplate string optional Novo template de prompt
Corpo da requisição
{ "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 }'
Resposta
{ "id": "...", "isActive": false, ... }
GET /api/v1/schedules/ {id} Encontrar um agendamento por ID
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -H "Authorization: Bearer sk_..."
Resposta
{
  "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} Excluir um agendamento
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content

Webhooks

Receba notificações HTTP em tempo real quando eventos ocorrem no seu espaço de trabalho. Exige o plano Growth.

Requer plano Growth+
GET /api/v1/webhooks Listar webhooks
cURL
curl https://useinmedia.com/api/v1/webhooks \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "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 um webhook Growth+
Parâmetros do Body
NomeTipoObrigatórioDescrição
url string required Ponto de extremidade HTTPS para receber eventos
events string required Nomes de eventos separados por vírgulas (veja a seção Eventos)
secret string optional Segredo opcional para verificação de assinatura HMAC-SHA256
Corpo da requisição
{
  "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" }'
Resposta
{
  "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} Atualizar um webhook
Parâmetros do Body
NomeTipoObrigatórioDescrição
url string optional Nova URL do endpoint
events string optional Nova lista de eventos
isActive boolean optional Ativar ou desativar
Corpo da requisição
{ "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 }'
Resposta
{ "id": "...", "isActive": false, ... }
DELETE /api/v1/webhooks/ {id} Excluir um webhook
cURL
curl https://useinmedia.com/api/v1/webhooks/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content

Video

Poll de trabalhos de geração de vídeo e recupere URLs assinadas. A geração de vídeo é iniciada a partir do editor do painel.

Requer plano Growth+
GET /api/v1/video/jobs/ {jobId} Consultar o status de um job de geração de vídeo Growth+
cURL
curl https://useinmedia.com/api/v1/video/jobs/<jobId> \
  -H "Authorization: Bearer sk_..."
Resposta
{
  "status": "done",
  "postId": "e5f6g7h8-...",
  "videoUrl": "https://presigned-s3-url...",
  "message": "Video generated successfully!",
  "error": null
}
GET /api/v1/video/presign/ {postId} Obter URL assinada atualizada para o vídeo de uma postagem Growth+
cURL
curl https://useinmedia.com/api/v1/video/presign/<postId> \
  -H "Authorization: Bearer sk_..."
Resposta
{ "url": "https://presigned-s3-url..." }

Uso

Verifique sua cota do plano e atividade de geração.

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

API Keys

Crie e gerencie chaves de API programáticas. Exige o plano Growth.

Requer plano Growth+
GET /api/v1/api-keys Listar chaves de API
cURL
curl https://useinmedia.com/api/v1/api-keys \
  -H "Authorization: Bearer sk_..."
Resposta
[
  {
    "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 Criar uma chave de API Growth+
Parâmetros do Body
NomeTipoObrigatórioDescrição
name string required Nome descritivo para a chave
expiresAt datetime optional Expiração opcional (ISO 8601)
Corpo da requisição
{ "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" }'
Resposta
{
  "id": "key-uuid-...",
  "key": "sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd",
  "prefix": "sk_aBcDe",
  "name": "Production key"
}
DELETE /api/v1/api-keys/ {id} Revogar uma chave de API
cURL
curl https://useinmedia.com/api/v1/api-keys/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Resposta
204 No Content
POST /api/v1/api-keys/ {id} /regenerate Regenerar uma chave de API
cURL
curl https://useinmedia.com/api/v1/api-keys/<id>/regenerate \
  -X POST \
  -H "Authorization: Bearer sk_..."
Resposta
{ "id": "...", "key": "sk_NEW...", "prefix": "sk_NEW" }