Skip to content
API Reference

Documentação da API StoryLenses

O StoryLenses oferece geração de cartas de apresentação com IA por meio de 5 ferramentas MCP compostas e endpoints REST. Crie agentes de carreira, bots de candidatura a emprego ou integre cartas de apresentação baseadas em narrativas à sua plataforma.

2 ferramentas ativas3 ferramentas em preview

URL base para todos os endpoints REST:

https://www.storylenses.app/api

Autenticação

Todas as requisições autenticadas usam autenticação Bearer token com uma API key do StoryLenses. Alguns endpoints (como análise de vaga) funcionam sem chave, porém com limites de taxa mais restritos.

Formato da Chave

As API keys usam o prefixo sl_live_ seguido de 32 caracteres alfanuméricos:

sl_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Uso

Inclua sua chave no header Authorization:

Authorization: Bearer sl_live_YOUR_API_KEY

As API keys são hasheadas antes do armazenamento e só podem ser visualizadas uma vez na criação. Se você perder sua chave, crie uma nova pelo Portal do Desenvolvedor.

Obtenha sua API key no Portal do Desenvolvedor

Início Rápido

Comece em menos de 2 minutos. Escolha seu cliente e cole a configuração.

Claude Desktop

Adicione à configuração MCP do seu Claude Desktop:

{
  "mcpServers": {
    "storylenses": {
      "url": "https://mcp.storylenses.app/sse",
      "headers": {
        "Authorization": "Bearer sl_live_YOUR_API_KEY"
      }
    }
  }
}

Cursor / VS Code

Adicione às configurações MCP do seu Cursor ou VS Code:

{
  "mcp": {
    "servers": {
      "storylenses": {
        "url": "https://mcp.storylenses.app/sse",
        "headers": {
          "Authorization": "Bearer sl_live_YOUR_API_KEY"
        }
      }
    }
  }
}

cURL

Teste a API diretamente com cURL:

curl -X POST https://www.storylenses.app/api/analyze-job-description \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sl_live_YOUR_API_KEY" \
  -d '{
    "jobDescription": "Senior Frontend Engineer at Stripe...",
    "locale": "en"
  }'

Integração MCP

O StoryLenses suporta transportes Stdio e HTTP para clientes MCP. Use o que melhor se adaptar à sua arquitetura.

Transporte Stdio (npm)

Instale e execute via npx — ideal para agentes locais e ferramentas CLI:

npx -y @storylenses/mcp-server

Defina estas variáveis de ambiente:

STORYLENSES_API_KEY=sl_live_YOUR_API_KEY
STORYLENSES_API_URL=https://www.storylenses.app

Transporte HTTP (Streamable HTTP)

Envie requisições JSON-RPC 2.0 diretamente — ideal para agentes hospedados na nuvem e integrações server-side:

POST https://www.storylenses.app/api/mcp/endpoint
Content-Type: application/json
Authorization: Bearer sl_live_YOUR_API_KEY

Métodos Suportados

O endpoint MCP suporta os seguintes métodos JSON-RPC:

MétodoDescrição
initializeInicializar a sessão MCP e trocar capacidades
tools/listListar todas as ferramentas disponíveis e seus schemas
tools/callExecutar uma ferramenta com os argumentos fornecidos

Referência de Ferramentas

Todas as 5 ferramentas disponíveis através do protocolo MCP. Os schemas de parâmetros são extraídos diretamente das definições das ferramentas.

A API do StoryLenses está em desenvolvimento ativo. 2 das 5 ferramentas estão totalmente ativas. As 3 restantes retornam dados de exemplo realistas para que você possa construir sua integração agora — elas funcionarão de ponta a ponta quando a API completa for lançada.

storylenses_analyze_jobAtiva

Extract 15+ structured fields from a job posting — role requirements, company challenges, culture signals, recruiter priorities

Auth: Opcional (limitado por IP sem chave)Cobrança: Grátis
ParâmetroTipoObrigatórioDescrição
job_urlstringURL of the job posting to analyze
job_textstringRaw text of the job posting (use if no URL)
localestringResponse language (en, de, es, or pt) (en, de, es, pt) [default: en]
storylenses_match_profilePreview

Match a candidate profile/CV against job data — identifies fit score, matching skills, career gaps, and strongest narrative angle

Auth: API key obrigatóriaCobrança: Grátis
ParâmetroTipoObrigatórioDescrição
job_analysisobjectJob analysis output from storylenses_analyze_job
candidate_cvstringCandidate's CV or resume as plain text
localestringResponse language (en, de, es, or pt) (en, de, es, pt) [default: en]
storylenses_generate_letterPreview

Generate a story-driven cover letter using matched data and a narrative archetype. Supports en/de/es/pt.

Auth: API key obrigatóriaCobrança: Cobrável ($0.25 por excedente)
ParâmetroTipoObrigatórioDescrição
job_analysisobjectJob analysis from storylenses_analyze_job
match_dataobjectMatch data from storylenses_match_profile
candidate_namestringCandidate's full name for the letter greeting
archetypestringNarrative archetype ID (use storylenses_list_archetypes to see options) [default: golden-fleece]
tonestringWriting tone — professional, conversational, confident, etc. (professional, conversational, formal, confident, analytical, storytelling, humble, technical, creative) [default: professional]
lengthstringLetter length — short (150-200 words), medium (250-350), or full (400-500) (short, medium, full) [default: medium]
localestringOutput language (en, de, es, or pt) (en, de, es, pt) [default: en]
storylenses_quality_checkPreview

Score and evaluate a cover letter for relevance, narrative strength, and completeness. Returns score 0-100 with actionable feedback.

Auth: API key obrigatóriaCobrança: Grátis
ParâmetroTipoObrigatórioDescrição
letter_textstringThe cover letter text to evaluate (minimum 200 characters)
job_analysisobjectJob analysis from storylenses_analyze_job for context
localestringFeedback language (en, de, es, or pt) (en, de, es, pt) [default: en]
storylenses_list_archetypesAtiva

Return available narrative archetypes with descriptions so the agent or user can select a style

Auth: NenhumaCobrança: Grátis
ParâmetroTipoObrigatórioDescrição
localestringDescription language (en, de, es, or pt) (en, de, es, pt) [default: en]

REST API

Endpoints HTTP diretos para quando você não precisa do protocolo MCP completo. Mesma lógica subjacente das ferramentas MCP.

POST/api/analyze-job-description

Extrair campos estruturados de uma vaga de emprego. Aceita texto bruto ou URL.

ParâmetroTipoDescrição
jobDescriptionstringTexto bruto da vaga de emprego
jobUrlstringURL da vaga de emprego (alternativa a jobDescription)
localestringIdioma da resposta: en, de, es ou pt (padrão: en)
POST/api/evaluate-letter

Pontuar e avaliar uma carta de apresentação quanto à relevância, força narrativa e completude.

ParâmetroTipoDescrição
letterTextstringO texto da carta de apresentação a ser avaliada (mín. 200 caracteres)
jobAnalysisobjectAnálise da vaga de /api/analyze-job-description
localestringIdioma do feedback: en, de, es ou pt (padrão: en)
GET/api/health

Endpoint de verificação de saúde. Retorna objeto de status — sem autenticação necessária.

{ "status": "ok" }

Erros e Limites de Taxa

Todos os erros seguem um formato consistente. Limites de taxa são aplicados por IP para requisições não autenticadas e por API key para requisições autenticadas.

Códigos de Status HTTP

CódigoSignificadoDescrição
200OKRequisição bem-sucedida
400Requisição InválidaParâmetros inválidos ou ausentes
401Não AutorizadoAPI key ausente ou inválida
403ProibidoChave válida, mas permissões insuficientes ou limite do plano excedido
429Muitas RequisiçõesLimite de taxa excedido — tente novamente após o tempo indicado
500Erro do ServidorErro interno — entre em contato com o suporte se persistir

Formato de Resposta de Erro

{
  "error": "Human-readable error message"
}

Limites de Taxa

Os limites de taxa variam por endpoint e método de autenticação. Usuários com API key recebem limites maiores de acordo com seu plano.

EndpointLimite
/api/analyze-job-description10 req/min (IP) / plan-based (API key)
/api/evaluate-letter10 req/min (IP) / plan-based (API key)
/api/mcp/endpoint30 req/min (IP)

Exemplos de Código

Exemplos completos, prontos para copiar e colar, para padrões comuns de integração.

TypeScript — Fluxo MCP Completo

Geração de carta de apresentação de ponta a ponta usando o MCP SDK:

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

// Connect to StoryLenses MCP
const transport = new SSEClientTransport(
  new URL("https://mcp.storylenses.app/sse"),
  { requestInit: { headers: { Authorization: "Bearer sl_live_YOUR_API_KEY" } } }
);
const client = new Client({ name: "my-agent", version: "1.0" });
await client.connect(transport);

// 1. Analyze the job posting
const jobResult = await client.callTool({
  name: "storylenses_analyze_job",
  arguments: { job_url: "https://linkedin.com/jobs/view/12345" }
});
const jobAnalysis = JSON.parse(jobResult.content[0].text);

// 2. Match candidate profile
const matchResult = await client.callTool({
  name: "storylenses_match_profile",
  arguments: {
    job_analysis: jobAnalysis,
    candidate_cv: "Jane Doe — 8 years frontend, React, TypeScript..."
  }
});
const matchData = JSON.parse(matchResult.content[0].text);

// 3. Generate cover letter
const letterResult = await client.callTool({
  name: "storylenses_generate_letter",
  arguments: {
    job_analysis: jobAnalysis,
    match_data: matchData,
    candidate_name: "Jane Doe",
    archetype: matchData.suggested_archetype || "golden-fleece",
    tone: "professional",
    length: "medium"
  }
});
const letter = JSON.parse(letterResult.content[0].text);

// 4. Quality check
const scoreResult = await client.callTool({
  name: "storylenses_quality_check",
  arguments: {
    letter_text: letter.letter_text,
    job_analysis: jobAnalysis
  }
});
const score = JSON.parse(scoreResult.content[0].text);

console.log(letter.letter_text);   // Story-driven cover letter
console.log(score.overall_score);  // 87/100

cURL — Requisições JSON-RPC

Inicializar, listar ferramentas e chamar uma ferramenta via endpoint HTTP:

# Initialize MCP session
curl -X POST https://www.storylenses.app/api/mcp/endpoint \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sl_live_YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": { "name": "my-agent", "version": "1.0" }
    }
  }'

# List available tools
curl -X POST https://www.storylenses.app/api/mcp/endpoint \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sl_live_YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
  }'

# Call a tool
curl -X POST https://www.storylenses.app/api/mcp/endpoint \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sl_live_YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "storylenses_analyze_job",
      "arguments": {
        "job_url": "https://linkedin.com/jobs/view/12345",
        "locale": "en"
      }
    }
  }'

Python — REST API

Usando httpx para chamar os endpoints REST diretamente:

import httpx

API_KEY = "sl_live_YOUR_API_KEY"
BASE = "https://www.storylenses.app/api"

# Analyze a job posting
resp = httpx.post(
    f"{BASE}/analyze-job-description",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={"jobDescription": "Senior Engineer at Acme...", "locale": "en"}
)
job = resp.json()

# Evaluate a cover letter
resp = httpx.post(
    f"{BASE}/evaluate-letter",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "letterText": "Dear Hiring Manager, ...",
        "jobAnalysis": job,
        "locale": "en"
    }
)
score = resp.json()
print(f"Score: {score['overall_score']}/100")

Planos e Cobrança

Todos os planos incluem acesso a todas as 5 ferramentas em todos os 4 idiomas. Apenas a geração de carta de apresentação conta para o seu limite de uso.

PlanoPreçoGeraçõesExcedente
Free$010 / mês
Developer$29/mês200 / mês$0.25
Scale$99/mês1,000 / mês$0.25
EnterprisePersonalizadoIlimitadoPersonalizado

O que conta como uma geração?

Apenas uma ferramenta é cobrável:

  • storylenses_generate_lettercada chamada conta como 1 geração
  • Todas as outras ferramentas (analisar, combinar, verificação de qualidade, listar arquétipos) são gratuitas e ilimitadas

Suporte

Precisa de ajuda com a integração? Aqui estão os melhores lugares para começar.

Para suporte técnico, envie e-mail para support@storylenses.app