Tutorializer

Auditar tutoriais localizados e manter com segurança metadados de projeto e regras de pronúncia.

Documentação

Dirija a produção de vídeos tutoriais a partir do seu próprio código: uma API REST com chaves de escopo e limites de taxa por chave para seus projetos, tutoriais, vídeos renderizados e narrações sintetizadas, além de webhooks assinados quando algo muda.

Conector de IA

Conecte o Tutorializer ao Claude, ChatGPT e clientes MCP

O Tutorializer fornece um endpoint de Model Context Protocol hospedado para assistentes de IA. Ele usa OAuth, então cada pessoa entra com sua própria conta do Tutorializer e só pode acessar projetos em organizações onde tenha uma função ativa.

Peça a um assistente para inspecionar projetos, definições de tutoriais, vídeos renderizados e segmentos de narração; audite a cobertura de idioma e dispositivo; ou mostre os cartões interativos de projetos e tutoriais. As ferramentas de escrita podem criar um projeto, manter regras de pronúncia ou excluir uma fala ou vídeo.

{
  "mcpServers": {
    "tutorializer": {
      "type": "http",
      "url": "https://mcp.tutorializer.com/mcp"
    }
  }
}

Use o URL de produção acima em qualquer cliente que aceite um servidor MCP Streamable HTTP remoto. A descoberta OAuth, o registro dinâmico de clientes e o PKCE são tratados durante a conexão; não cole uma chave de API na configuração do MCP.

O diretório de conectores do Claude lista um segundo endpoint: https://mcp.tutorializer.com/authoring. Ele serve os mesmos projetos, tutoriais, vídeos e registros de narração com o mesmo login e escopos, mas não pode sintetizar narração nem alterar regras de pronúncia. Use o endpoint acima quando um assistente também precisar gerar narrações.

As ferramentas de leitura usam o escopo tutorializer:read. As ferramentas de alteração de estado usam tutorializer:write e declaram se são destrutivas e idempotentes, para que hosts compatíveis possam solicitar aprovação. A exclusão remove a mídia armazenada, então revise o alvo exato antes de aprová-la. A síntese de narração usa os créditos da sua própria organização, e a renderização de vídeo permanece no painel do Tutorializer e na CLI de publicação.

O conector retorna projeções limitadas em vez de documentos brutos do banco de dados. Ele nunca expõe campos de propriedade da organização, identificadores de dicionário do fornecedor, matrizes de alinhamento de fala, credenciais ou tokens.

Chaves de API

Obtenha uma chave e autentique-se

A API REST do Tutorializer permite que seu próprio backend trabalhe com o mesmo conteúdo que o painel: os projetos para os quais você grava tutoriais, os próprios tutoriais, os vídeos renderizados a partir deles e os clipes de fala a partir dos quais suas narrações são sintetizadas.

Abra o painel do Tutorializer e crie uma chave de API em API keys. O segredo é mostrado quando a chave é criada e nunca é retornado pelos endpoints que listam ou leem chaves — um administrador da organização pode revelá-lo novamente pelo painel, mas somente após digitar novamente a senha. Uma chave pertence a uma única organização, então a organização está implícita na chave e nunca precisa ser enviada.

Autentique cada requisição com autenticação HTTP Basic contendo apenas o segredo da chave, codificado em base64, no cabeçalho Authorization.

# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)

Todo endpoint fica sob https://api.tutorializer.com. Requisições feitas com uma chave são limitadas por chave; exceder o limite retorna 429.

Início rápido

Suas três primeiras chamadas

Liste seus projetos, leia os tutoriais de um deles e depois leia os vídeos renderizados para um único tutorial.

# List the projects of your organization
curl https://api.tutorializer.com/api/projects \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# List the tutorials of one of those projects
curl "https://api.tutorializer.com/api/tutorials?projectId=PROJECT_ID" \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# List the rendered videos of a single tutorial
curl "https://api.tutorializer.com/api/videos?projectId=PROJECT_ID&tutorialId=TUTORIAL_ID" \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

Veja a referência completa da API — cada endpoint com seus parâmetros, corpo da requisição, respostas e escopo necessário.

CLI

Interface de linha de comando

Os mesmos projetos, tutoriais, vídeos renderizados e narrações estão disponíveis no seu terminal por meio da CLI do tutorializer. Instale-a globalmente com npm ou execute-a ad hoc com npx.

A autenticação é um único comando: tutorializer login abre seu navegador para entrar na sua conta do Tutorializer e armazena uma sessão para comandos futuros — sem chave de API para colar.

# Install once, globally
npm install -g tutorializer
# or run it ad hoc without installing
npx tutorializer --help

# Log in — opens your browser to sign in and stores a session
tutorializer login

# List the projects of your organization
tutorializer projects list

# List the videos rendered for one of them
tutorializer videos list --projectId PROJECT_ID

# Inspect a voiceover speech, then fix how a word is pronounced
tutorializer speeches read SPEECH_ID
tutorializer projects pronunciation add "Acme" "ˈækmi" --projectId PROJECT_ID

A CLI é open source em github.com/tutorializer/cli e publicada como tutorializer no npm. Execute qualquer comando com --help para ver suas opções.

Habilidades de Agente

Ensine seu agente de codificação sobre o Tutorializer

O Tutorializer inclui Agent Skills — guias que seguem o padrão agentskills.io e ensinam agentes de codificação a auditar e manter sua biblioteca de tutoriais com a CLI do tutorializer e o conector MCP, em vez de adivinhar comandos e ferramentas.

# Install the Tutorializer skills into your coding agent
npx skills add tutorializer/skills

Um único comando instala as habilidades no Claude Code, Cursor, Codex, Gemini CLI e em qualquer outro agente que siga o padrão Skills. A CLI também inclui os mesmos guias, com versão correspondente aos comandos que ela fornece: tutorializer skills get <name> imprime um sob demanda.

As habilidades são open source em github.com/tutorializer/skills. Usuários do Claude também podem instalar o plugin Tutorializer para Claude, que agrupa o conector junto com as habilidades: github.com/tutorializer/claude-plugin.

Escopos

Menor privilégio por padrão

Cada chave carrega uma lista de escopos, então uma integração que só precisa baixar seus vídeos finalizados nunca ganha a capacidade de alterá-los — nem de gastar créditos de síntese de fala. Novas chaves começam somente leitura; amplie-as explicitamente no painel. Uma requisição cuja chave não tenha o escopo exigido por um endpoint é recusada com 403.

  • projects:readListe os projetos da sua organização e leia um único projeto.
  • projects:writeCrie, atualize e exclua projetos.
  • tutorials:readLeia os tutoriais de um projeto e um único tutorial.
  • tutorials:writeCrie, atualize e exclua tutoriais.
  • videos:readLeia os vídeos renderizados de um projeto ou tutorial.
  • videos:writeCrie, atualize e exclua vídeos.
  • speeches:readLeia os clipes de fala sintetizados de um projeto.
  • speeches:writeSintetize novos clipes de fala e atualize ou exclua os existentes.

Ler um único projeto, tutorial, vídeo ou fala que pertença a outra organização responde 404 em vez de 403, para que um ID não possa ser sondado quanto à existência. Usuários, funções, convites, preferências e cobrança são exclusivos do painel e nenhuma chave os acessa.

Webhooks

Webhooks assinados

Adicione uma assinatura de webhook a um projeto no painel e o Tutorializer envia por POST os eventos que você escolheu para o seu servidor conforme eles acontecem. As assinaturas são gerenciadas com uma sessão de operador, não com uma chave de API.

  • project.createdUm projeto foi criado.
  • project.updatedUm projeto foi editado.
  • project.deletedUm projeto foi excluído.
  • tutorial.createdUm tutorial foi criado.
  • tutorial.updatedUm tutorial foi editado.
  • tutorial.deletedUm tutorial foi excluído.
  • video.createdUm vídeo foi adicionado a um tutorial.
  • video.updatedUm vídeo foi editado.
  • video.deletedUm vídeo foi excluído.
  • speech.createdUm clipe de fala foi sintetizado.
  • speech.updatedUm clipe de fala foi editado.
  • speech.deletedUm clipe de fala foi excluído.
POST https://your-server.com/tutorializer-webhook

{
  "event": "video.created",
  "timestamp": 1719000000,
  "data": { "...": "..." }
}

Verifique a assinatura

Cada entrega carrega um cabeçalho X-Tutorializer-Signature no formato t=timestamp,v1=signature, onde a assinatura é um HMAC-SHA256 de timestamp.body com chave no segredo da assinatura mostrado a você uma vez quando a assinatura foi criada. Recalcule-a sobre o corpo bruto e compare antes de confiar no payload.

import crypto from 'node:crypto'

// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
  const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
  if (!t || !v1) return false

  const expected = crypto
    .createHmac('sha256', secret)
    .update(\`${t}.${body}\`)
    .digest('hex')

  // timingSafeEqual throws on a length mismatch, so a malformed signature
  // has to be rejected before the comparison rather than by it.
  if (v1.length !== expected.length) return false

  return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}

A entrega é uma única tentativa de melhor esforço com timeout de cinco segundos e sem novas tentativas, então responda 2xx rapidamente e faça o trabalho de forma assíncrona. Um endpoint que falha vinte vezes seguidas é desabilitado automaticamente e precisa ser reabilitado no painel.

Comece a construir