Soporte multi-formato de contenido
Todos los endpoints con contenido del editor de texto enriquecido soportan tres formatos para máxima flexibilidad:
- TipTap JSON (formato nativo)
- HTML (para visualización web)
- Markdown (para herramientas externas y servidores MCP)
Endpoints soportados:
- Planes de Operación (
/api/v1/trade-plans) - Análisis de Operaciones (
/api/v1/trade-writeups) - Estrategias (
/api/v1/strategies) - Tarjetas de Reporte (
/api/v1/report-cards) - Playbooks (
/api/v1/playbooks)
Leer contenido en diferentes formatos
Usando el parámetro format
Agrega ?format=json|html|markdown a cualquier solicitud GET:
# Obtener contenido como HTML
GET /api/v1/trade-plans/123?format=html
# Obtener contenido como Markdown
GET /api/v1/trade-writeups/456?format=markdown
# Obtener los tres formatos (predeterminado)
GET /api/v1/strategies/789
Formatos de respuesta
Predeterminado (formato JSON):
Cuando format=json o se omite, recibes las tres versiones:
{
"data": {
"id": "123",
"title": "Mi Plan de Operación",
"content": { ... },
"content_html": "<p>Este es un plan de operación.</p>",
"content_markdown": "Este es un plan de operación."
}
}
Escribir contenido en diferentes formatos
Al crear o actualizar entradas, puedes enviar contenido en cualquier formato:
// Opción 1: TipTap JSON (nativo)
await fetch('https://app.mypropjournal.com/api/v1/trade-plans', {
method: 'POST',
body: JSON.stringify({
title: 'Mi Plan',
content: { type: 'doc', content: [...] }
})
});
// Opción 2: HTML
await fetch('https://app.mypropjournal.com/api/v1/trade-plans', {
method: 'POST',
body: JSON.stringify({
title: 'Mi Plan',
content_html: '<p>Detalles del plan</p>'
})
});
// Opción 3: Markdown
await fetch('https://app.mypropjournal.com/api/v1/trade-plans', {
method: 'POST',
body: JSON.stringify({
title: 'Mi Plan',
content_markdown: '# Detalles del Plan\n\nEsto es **importante**.'
})
});
Extracción de medios
Extrae automáticamente todas las URLs de imágenes y videos de tu contenido sin necesidad de analizar.
Usando include_media
Agrega ?include_media=true a cualquier solicitud GET:
GET /api/v1/trade-plans/123?include_media=true
GET /api/v1/trade-writeups?format=markdown&include_media=true
Formato de respuesta
{
"data": {
"id": "123",
"title": "Mi Plan de Operación",
"content": { ... },
"media": {
"images": [
"https://example.com/grafico1.jpg",
"https://example.com/configuracion.png"
],
"videos": [
{
"src": "https://www.youtube.com/embed/abc123",
"originalUrl": "https://www.youtube.com/watch?v=abc123"
}
],
"all": [
"https://example.com/grafico1.jpg",
"https://example.com/configuracion.png",
"https://www.youtube.com/watch?v=abc123"
]
}
}
}
Casos de uso
Construir una galería
const response = await fetch(
'https://app.mypropjournal.com/api/v1/trade-writeups/123?include_media=true',
{ headers: { 'Authorization': 'Bearer mpj_tu_clave_api' } }
);
const data = await response.json();
const images = data.data.media.images;
// Mostrar en un componente de galería
images.forEach(url => {
const img = document.createElement('img');
img.src = url;
document.getElementById('gallery').appendChild(img);
});
Integración con servidor MCP
import requests
# Obtener plan de operación como Markdown para consumo de LLM
response = requests.get(
'https://app.mypropjournal.com/api/v1/trade-plans/123?format=markdown',
headers={'Authorization': f'Bearer {api_key}'}
)
trade_plan = response.json()['data']
markdown_content = trade_plan['content']
# Usar markdown en prompts de LLM
print(f"# {trade_plan['title']}\n\n{markdown_content}")
Siguientes pasos
- Planes de Operación — Planes de negocio y marcos operativos
- Análisis de Operaciones — Análisis post-operación
- Estrategias — Reglas y enfoques de trading
- Tarjetas de Reporte — Revisiones de rendimiento