Skip to content
API Reference

Documentación de la API de StoryLenses

StoryLenses ofrece generación de cartas de presentación impulsada por IA a través de 5 herramientas MCP componibles y endpoints REST. Crea agentes de carrera, bots de solicitud de empleo o integra cartas de presentación narrativas en tu plataforma.

2 herramientas activas3 herramientas en vista previa

URL base para todos los endpoints REST:

https://www.storylenses.app/api

Autenticación

Todas las solicitudes autenticadas utilizan autenticación Bearer token con una API key de StoryLenses. Algunos endpoints (como el análisis de ofertas) funcionan sin clave, pero con límites de tasa más estrictos.

Formato de la clave

Las API keys usan el prefijo sl_live_ seguido de 32 caracteres alfanuméricos:

sl_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Uso

Incluye tu clave en el encabezado Authorization:

Authorization: Bearer sl_live_YOUR_API_KEY

Las API keys se hashean antes de almacenarse y solo se pueden ver una vez al crearlas. Si pierdes tu clave, crea una nueva desde el Portal de Desarrolladores.

Obtén tu API key desde el Portal de Desarrolladores

Inicio rápido

Comienza en menos de 2 minutos. Elige tu cliente y pega la configuración.

Claude Desktop

Añade a tu configuración MCP de Claude Desktop:

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

Cursor / VS Code

Añade a la configuración MCP de Cursor o VS Code:

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

cURL

Prueba la API directamente con 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"
  }'

Integración MCP

StoryLenses soporta los transportes Stdio y HTTP para clientes MCP. Usa el que mejor se adapte a tu arquitectura.

Transporte Stdio (npm)

Instala y ejecuta vía npx — ideal para agentes locales y herramientas CLI:

npx -y @storylenses/mcp-server

Configura estas variables de entorno:

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

Transporte HTTP (Streamable HTTP)

Envía solicitudes JSON-RPC 2.0 directamente — ideal para agentes en la nube e integraciones del lado del servidor:

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

Métodos soportados

El endpoint MCP soporta los siguientes métodos JSON-RPC:

MétodoDescripción
initializeInicializa la sesión MCP e intercambia capacidades
tools/listLista todas las herramientas disponibles y sus esquemas
tools/callEjecuta una herramienta con los argumentos proporcionados

Referencia de herramientas

Las 5 herramientas disponibles a través del protocolo MCP. Los esquemas de parámetros se obtienen directamente de las definiciones de las herramientas.

La API de StoryLenses está en desarrollo activo. 2 de 5 herramientas están completamente activas. Las 3 restantes devuelven datos de ejemplo realistas para que puedas construir tu integración ahora — funcionarán de extremo a extremo cuando se lance la API completa.

storylenses_analyze_jobActiva

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

Autenticación: Opcional (limitado por IP sin clave)Facturación: Gratis
ParámetroTipoRequeridoDescripción
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_profileVista previa

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

Autenticación: API key requeridaFacturación: Gratis
ParámetroTipoRequeridoDescripción
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_letterVista previa

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

Autenticación: API key requeridaFacturación: Facturable ($0.25 excedente)
ParámetroTipoRequeridoDescripción
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_checkVista previa

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

Autenticación: API key requeridaFacturación: Gratis
ParámetroTipoRequeridoDescripción
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_archetypesActiva

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

Autenticación: NingunaFacturación: Gratis
ParámetroTipoRequeridoDescripción
localestringDescription language (en, de, es, or pt) (en, de, es, pt) [default: en]

REST API

Endpoints HTTP directos para cuando no necesitas el protocolo MCP completo. Misma lógica subyacente que las herramientas MCP.

POST/api/analyze-job-description

Extrae campos estructurados de una oferta de empleo. Acepta texto sin formato o una URL.

ParámetroTipoDescripción
jobDescriptionstringTexto sin formato de la oferta de empleo
jobUrlstringURL de la oferta de empleo (alternativa a jobDescription)
localestringIdioma de la respuesta: en, de, es o pt (por defecto: en)
POST/api/evaluate-letter

Puntúa y evalúa una carta de presentación en relevancia, fuerza narrativa y completitud.

ParámetroTipoDescripción
letterTextstringEl texto de la carta de presentación a evaluar (mín. 200 caracteres)
jobAnalysisobjectAnálisis de la oferta de /api/analyze-job-description
localestringIdioma del feedback: en, de, es o pt (por defecto: en)
GET/api/health

Endpoint de comprobación de estado. Devuelve un objeto de estado — no requiere autenticación.

{ "status": "ok" }

Errores y límites de tasa

Todos los errores siguen un formato consistente. Los límites de tasa se aplican por IP para solicitudes no autenticadas y por API key para solicitudes autenticadas.

Códigos de estado HTTP

CódigoSignificadoDescripción
200OKSolicitud exitosa
400Solicitud incorrectaParámetros inválidos o faltantes
401No autorizadoAPI key faltante o inválida
403ProhibidoClave válida pero permisos insuficientes o límite del plan excedido
429Demasiadas solicitudesLímite de tasa excedido — reintenta después del tiempo indicado
500Error del servidorError interno — contacta soporte si persiste

Formato de respuesta de error

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

Límites de tasa

Los límites de tasa varían según el endpoint y el método de autenticación. Los usuarios con API key obtienen límites más altos según su plan.

EndpointLímite
/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)

Ejemplos de código

Ejemplos completos, listos para copiar y pegar, para patrones de integración comunes.

TypeScript — Flujo MCP completo

Generación de carta de presentación de extremo a extremo usando el SDK MCP:

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 — Solicitudes JSON-RPC

Inicializa, lista herramientas y ejecuta una herramienta vía el 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 llamar a los endpoints REST directamente:

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

Planes y facturación

Todos los planes incluyen acceso a las 5 herramientas en los 4 idiomas. Solo la generación de cartas de presentación cuenta para tu límite de uso.

PlanPrecioGeneracionesExcedente
Free$010 / mes
Developer$29/mes200 / mes$0.25
Scale$99/mes1,000 / mes$0.25
EnterprisePersonalizadoIlimitadoPersonalizado

¿Qué cuenta como una generación?

Solo una herramienta es facturable:

  • storylenses_generate_lettercada llamada cuenta como 1 generación
  • Todas las demás herramientas (analizar, emparejar, verificación de calidad, listar arquetipos) son gratuitas e ilimitadas

Soporte

¿Necesitas ayuda con la integración? Aquí tienes los mejores recursos para empezar.

Para soporte técnico, escribe a support@storylenses.app