{"id":500,"date":"2026-03-09T15:31:45","date_gmt":"2026-03-09T15:31:45","guid":{"rendered":"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/building-rag-with-pgvector-why-i-stopped-paying-fo\/"},"modified":"2026-03-18T22:31:20","modified_gmt":"2026-03-18T22:31:20","slug":"building-rag-with-pgvector-why-i-stopped-paying-fo","status":"publish","type":"post","link":"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/building-rag-with-pgvector-why-i-stopped-paying-fo\/","title":{"rendered":"Construyendo RAG con pgvector: Por Qu\u00e9 Dej\u00e9 de Pagar Pinecone"},"content":{"rendered":"<p>En enero abr\u00ed las facturas de Supabase y Pinecone al mismo tiempo por primera vez. Hasta ese momento las ten\u00eda separadas mentalmente \u2014 &#8220;la <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/postgresql-performance-tuning-what-i-learned-optim\/\" title=\"Base de Datos\">base de datos<\/a>&#8221; y &#8220;la parte de los vectores&#8221;. Pero al verlas juntas: $45 de Supabase Pro, $70 de Pinecone Starter. Para un knowledge base interno de una empresa de tres personas.<\/p>\n<p>No es que $70 sea un n\u00famero que me quite el sue\u00f1o. Pero es $70 por algo que mi PostgreSQL podr\u00eda hacer con una extensi\u00f3n que existe desde hace a\u00f1os. Eso fue suficiente para que me pusiera a investigar.<\/p>\n<h2>El proyecto <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/redis-vs-valkey-in-2026-why-the-license-change-for\/\" title=\"y Por Qu\u00e9\">y por qu\u00e9<\/a> termin\u00e9 en Pinecone en primer lugar<\/h2>\n<p>Llevaba ocho meses construyendo una <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/turborepo-vs-nx-which-monorepo-tool-wont-drive-you\/\" title=\"Herramienta de\">herramienta de<\/a> RAG para el equipo de soporte de mi trabajo secundario. La idea era indexar toda la documentaci\u00f3n t\u00e9cnica, tickets hist\u00f3ricos y p\u00e1ginas de Notion exportadas, y dejar que el equipo hiciera preguntas en lenguaje natural. Nada espectacular en t\u00e9rminos de escala \u2014 cerca de 45,000 embeddings en total, chunkeados a 512 tokens \u2014 pero genuinamente \u00fatil <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> d\u00eda a d\u00eda.<\/p>\n<p>Cuando empec\u00e9, en abril del a\u00f1o pasado, el camino m\u00e1s obvio era Pinecone. Todos los tutoriales de LangChain lo usaban, la documentaci\u00f3n era clara, y el free tier me alcanz\u00f3 mientras desarrollaba el prototipo. Cuando lo mov\u00ed a producci\u00f3n, upgradear al plan Starter parec\u00eda lo natural.<\/p>\n<p>Pinecone funciona bien. Eso lo tengo que decir, porque el resto de este art\u00edculo podr\u00eda sonar como una queja y no lo es. En ocho meses no tuve un solo problema de disponibilidad, la API es limpia, y la latencia era predecible. Mi problema era de arquitectura, no de calidad. Estaba manteniendo coherencia entre dos sistemas separados: si borraba un documento de PostgreSQL, ten\u00eda que acordarme de borrarlo de Pinecone tambi\u00e9n. Si el job de indexado fallaba a mitad, pod\u00eda quedarme con estados inconsistentes entre los dos stores. Ese tipo de complejidad accidental se acumula y genera bugs dif\u00edciles de rastrear un martes <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/setting-up-github-actions-for-python-applications\/\" title=\"a las\">a las<\/a> 10pm.<\/p>\n<p>Y para colmo, ya ten\u00eda PostgreSQL corriendo de todas formas. Usuarios, logs, preferencias, historial de conversaciones \u2014 todo ah\u00ed. Agregar una columna de tipo <code>vector<\/code> conceptualmente no es tan diferente a agregar cualquier otra columna.<\/p>\n<h2>pgvector: la configuraci\u00f3n <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/redis-vs-valkey-in-2026-why-the-license-change-for\/\" title=\"que Nadie\">que nadie<\/a> explica del todo bien<\/h2>\n<p>La parte f\u00e1cil es activar la extensi\u00f3n e insertar vectores. La parte que me tom\u00f3 m\u00e1s tiempo entender fue <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/docker-compose-vs-kubernetes-when-to-use-which-in\/\" title=\"Cu\u00e1ndo Usar\">cu\u00e1ndo usar<\/a> IVFFlat versus HNSW, <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/deno-20-in-production-2026-migration-from-nodejs-a\/\" title=\"y Qu\u00e9\">y qu\u00e9<\/a> par\u00e1metros <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/typescript-5x-in-2026-features-that-actually-matte\/\" title=\"Importan en\">importan en<\/a> la pr\u00e1ctica versus cu\u00e1les son ruido.<\/p>\n<p>La estructura b\u00e1sica de la tabla:<\/p>\n<pre><code class=\"language-sql\">-- Activar la extensi\u00f3n (una vez por <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/postgresql-performance-tuning-what-i-learned-optim\/\" title=\"Base de Datos\">base de datos<\/a>)\nCREATE EXTENSION IF NOT EXISTS vector;\n\n-- Tabla de documentos con embeddings\nCREATE TABLE documents (\n  id          SERIAL PRIMARY KEY,\n  source      TEXT NOT NULL,      -- ruta o identificador del documento origen\n  content     TEXT NOT NULL,      -- el chunk de texto\n  metadata    JSONB,              -- filtros: categor\u00eda, fecha, permisos, etc.\n  embedding   vector(1536)        -- dimensiones de text-embedding-3-small\n);\n\n-- \u00cdndice HNSW \u2014 mejor opci\u00f3n para la mayor\u00eda de casos hoy en d\u00eda\n-- m=16 y ef_construction=64 son buenos valores de partida\nCREATE INDEX ON documents\n  USING hnsw (embedding vector_cosine_ops)\n  WITH (m = 16, ef_construction = 64);\n<\/code><\/pre>\n<p>HNSW (Hierarchical Navigable Small World) es el que deber\u00edas usar. IVFFlat era la opci\u00f3n original de pgvector y tiene su nicho \u2014 puede ser m\u00e1s eficiente en memoria para colecciones muy grandes \u2014 pero HNSW da mejor recall, no requiere una fase de entrenamiento previa, y maneja bien la ingesta incremental. IVFFlat exige que ya tengas datos antes de construir el \u00edndice, lo cual es inc\u00f3modo si est\u00e1s indexando en tiempo real.<\/p>\n<p>La b\u00fasqueda desde Python \u2014 okay, voy a mostrar la versi\u00f3n <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/typescript-5x-in-2026-features-that-actually-matte\/\" title=\"que Realmente\">que realmente<\/a> uso, no la versi\u00f3n simplificada de los tutoriales:<\/p>\n<pre><code class=\"language-python\">import psycopg2\nfrom openai import OpenAI\n\nopenai_client = OpenAI()\n\ndef buscar_similares(\n    query: str,\n    conn: psycopg2.extensions.connection,\n    top_k: int = 5,\n    min_similarity: float = 0.72\n) -&gt; list[dict]:\n    # Usa el mismo modelo que empleaste al generar los embeddings del \u00edndice\n    resp = openai_client.embeddings.create(\n        input=query,\n        model=&quot;text-embedding-3-small&quot;\n    )\n    query_vec = resp.data[0].embedding\n\n    with conn.cursor() as cur:\n        cur.execute(&quot;&quot;&quot;\n            SELECT\n                content,\n                source,\n                metadata,\n                -- &lt;=&gt; es DISTANCIA coseno (0 = id\u00e9ntico), no similitud\n                -- 1 - distancia da el rango [0,1] m\u00e1s intuitivo\n                1 - (embedding &lt;=&gt; %s::vector) AS similarity\n            FROM documents\n            WHERE 1 - (embedding &lt;=&gt; %s::vector) &gt; %s\n            ORDER BY embedding &lt;=&gt; %s::vector\n            LIMIT %s\n        &quot;&quot;&quot;, (query_vec, query_vec, min_similarity, query_vec, top_k))\n\n        rows = cur.fetchall()\n\n    return [\n        {&quot;content&quot;: r[0], &quot;source&quot;: r[1], &quot;metadata&quot;: r[2], &quot;similarity&quot;: float(r[3])}\n        for r in rows\n    ]\n<\/code><\/pre>\n<p>Un detalle que me confundi\u00f3 al principio: <code>&lt;=&gt;<\/code> mide <em>distancia<\/em> coseno, donde 0 significa vectores id\u00e9nticos. No similitud \u2014 distancia. Cuando mis primeros resultados devolv\u00edan scores de 0.08 y no entend\u00eda <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/redis-vs-valkey-in-2026-why-the-license-change-for\/\" title=\"Por Qu\u00e9\">por qu\u00e9<\/a> el &#8220;mejor match&#8221; ten\u00eda el n\u00famero m\u00e1s bajo, ah\u00ed estuve un rato d\u00e1ndole vueltas antes de darme cuenta. La expresi\u00f3n <code>1 - (embedding &lt;=&gt; query)<\/code> convierte eso en similitud con el rango [0, 1] que <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/webassembly-in-2026-where-it-actually-makes-sense\/\" title=\"Tiene Sentido\">tiene sentido<\/a> intuitivo.<\/p>\n<h2>La migraci\u00f3n un martes por la noche, con una sorpresa desagradable<\/h2>\n<p>Exportar los vectores de Pinecone fue m\u00e1s tedioso de <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/langchain-vs-llamaindex-vs-haystack-building-produ\/\" title=\"Lo que\">lo que<\/a> esperaba. No hay un endpoint de &#8220;dame todo&#8221; \u2014 tienes que usar su API de <code>fetch()<\/code> paginando por IDs, o hacer queries con vectores dummy, lo cual es una mec\u00e1nica un poco rara. Por suerte yo hab\u00eda guardado los IDs de Pinecone en mi propia tabla de PostgreSQL desde el principio (algo que hice instintivamente y que result\u00f3 ser clave).<\/p>\n<p>El proceso fue:<br \/>\n1. Obtener todos los IDs desde mi tabla <code>documents<\/code> en Postgres<br \/>\n2. Hacer requests en batches de 100 a <code>index.fetch()<\/code> de Pinecone<br \/>\n3. Insertar los vectores recuperados directamente en la tabla con pgvector<\/p>\n<p>Para 45,000 vectores la importaci\u00f3n tard\u00f3 unos 14 minutos. Sin drama aparente.<\/p>\n<p>Entonces lleg\u00f3 la sorpresa. Constru\u00ed el \u00edndice HNSW y empec\u00e9 a correr queries de prueba. Los resultados se ve\u00edan bien en general&#8230; pero cuando prob\u00e9 queries espec\u00edficas donde yo sab\u00eda exactamente qu\u00e9 documento deber\u00eda aparecer primero, el recall se sent\u00eda ligeramente peor que Pinecone. No dram\u00e1ticamente, pero s\u00ed perceptible. El tipo de cosa que no levantar\u00eda una alarma si no tuvieras baseline, pero yo lo ten\u00eda.<\/p>\n<p>Tard\u00e9 casi dos horas en identificar el problema. La cosa es que \u2014 <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/event-driven-architecture-in-2026-why-microservice\/\" title=\"y esto\">y esto<\/a> no est\u00e1 documentado en ning\u00fan lugar obvio \u2014 PostgreSQL tiene un par\u00e1metro <code>work_mem<\/code> que limita la memoria disponible por operaci\u00f3n de sort o hash. Para b\u00fasquedas vectoriales con HNSW, si ese valor es demasiado bajo, el planner interno puede hacer elecciones sub\u00f3ptimas.<\/p>\n<pre><code class=\"language-sql\">-- Para una sesi\u00f3n espec\u00edfica durante pruebas\nSET work_mem = '256MB';\n\n-- Para hacerlo permanente, en postgresql.conf:\n-- work_mem = 256MB\n<\/code><\/pre>\n<p>Subir <code>work_mem<\/code> a 256MB resolvi\u00f3 el problema de recall casi por completo. No estoy 100% seguro de que este sea el culpable en todos los setups \u2014 el par\u00e1metro <code>ef_search<\/code> tambi\u00e9n influye mucho en cu\u00e1ntos candidatos considera el algoritmo durante la b\u00fasqueda \u2014 pero en mi caso fue esto. Curiosamente, empuj\u00e9 la migraci\u00f3n completa a producci\u00f3n esa misma noche, lo cual no recomiendo como pr\u00e1ctica general, pero a veces uno aprende esas cosas a su propio ritmo.<\/p>\n<h2>Cuatro <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/cloudflare-workers-vs-aws-lambda-which-edge-runtim\/\" title=\"meses en producci\u00f3n\">meses en producci\u00f3n<\/a>: los n\u00fameros reales<\/h2>\n<p>Mira, no voy a decir que pgvector es id\u00e9ntico a Pinecone en rendimiento. No lo es, al menos no con mi setup en Supabase Pro (plan de 4GB RAM). Pero la diferencia pr\u00e1ctica para mi caso de uso es irrelevante.<\/p>\n<p>M\u00e9tricas con ~45k vectores, promediadas sobre las \u00faltimas semanas:<\/p>\n<table>\n<thead>\n<tr>\n<th>M\u00e9trica<\/th>\n<th>Pinecone<\/th>\n<th>pgvector<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Latencia p50<\/td>\n<td>~32ms<\/td>\n<td>~51ms<\/td>\n<\/tr>\n<tr>\n<td>Latencia p99<\/td>\n<td>~115ms<\/td>\n<td>~190ms<\/td>\n<\/tr>\n<tr>\n<td>Disponibilidad<\/td>\n<td>100%<\/td>\n<td>100%<\/td>\n<\/tr>\n<tr>\n<td>Costo mensual incremental<\/td>\n<td>$70<\/td>\n<td>$0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La diferencia de ~19ms en p50 no cambia nada <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/postgresql-performance-tuning-what-i-learned-optim\/\" title=\"en una\">en una<\/a> aplicaci\u00f3n donde el request posterior a la API de generaci\u00f3n de texto tarda entre 800ms y 3 segundos. La b\u00fasqueda vectorial no es el cuello de botella.<\/p>\n<p>Algo que not\u00e9 en las primeras semanas fue que ajustar <code>ef_search<\/code> a 100 (el default es 40) mejor\u00f3 el recall perceptiblemente a cambio de unos 15ms adicionales de latencia \u2014 un tradeoff que en mi caso vali\u00f3 <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/copilot-vs-cursor-vs-codeium\/\" title=\"la Pena\">la pena<\/a>. Hice un benchmark manual con 80 queries de prueba comparando los top-5 resultados de cada sistema, y despu\u00e9s del tuning las diferencias no fueron sistem\u00e1ticas en ninguna direcci\u00f3n. El equipo de soporte no report\u00f3 ning\u00fan cambio en la utilidad de las respuestas.<\/p>\n<p>Lo que s\u00ed mejor\u00f3 claramente fue la operaci\u00f3n. Todo vive <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/postgresql-performance-tuning-what-i-learned-optim\/\" title=\"en una\">en una<\/a> sola <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/postgresql-performance-tuning-what-i-learned-optim\/\" title=\"Base de Datos\">base de datos<\/a>. Los filtros por metadata son queries SQL normales. Si necesito hacer un JOIN entre los resultados de b\u00fasqueda vectorial y la tabla de usuarios para aplicar permisos, es una sola query, no dos roundtrips a servicios distintos.<\/p>\n<h2>Cu\u00e1ndo <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/webassembly-in-2026-where-it-actually-makes-sense\/\" title=\"Tiene Sentido\">tiene sentido<\/a> cada opci\u00f3n \u2014 sin rodeos<\/h2>\n<p>Hay situaciones donde no har\u00eda esta migraci\u00f3n. Si estuvieras manejando decenas de millones de vectores \u2014 un cat\u00e1logo de e-commerce grande, un motor de recomendaciones a escala \u2014, pgvector tiene limitaciones reales. El \u00edndice HNSW consume memoria proporcional al n\u00famero de vectores, y en alg\u00fan punto eso se convierte en un problema de hardware antes de convertirse en un problema de software. No s\u00e9 exactamente d\u00f3nde est\u00e1 ese l\u00edmite <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/09\/typescript-5x-in-2026-features-that-actually-matte\/\" title=\"en Producci\u00f3n\">en producci\u00f3n<\/a>; en teor\u00eda pgvector aguanta bien hasta algunos cientos de millones con el hardware adecuado, pero yo no he llegado a probarlo.<\/p>\n<p>Tampoco har\u00eda la migraci\u00f3n si el recall fuera absolutamente cr\u00edtico y no quisiera dedicarle tiempo al tuning de par\u00e1metros. Pinecone abstrae mucha de esa complejidad.<\/p>\n<p>Pero si est\u00e1s <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> escenario m\u00e1s com\u00fan \u2014 RAG sobre documentaci\u00f3n interna, b\u00fasqueda sem\u00e1ntica sobre un corpus de tama\u00f1o razonable, chatbot de soporte \u2014 pgvector con HNSW hace <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"el Trabajo\">el trabajo<\/a>, y probablemente ya tienes PostgreSQL corriendo. Todo queda <a href=\"https:\/\/blog.rebalai.com\/es\/2026\/03\/05\/claude-vs-gpt-4o-vs-gemini-20-qu-modelo-de-ia-usar\/\" title=\"en el\">en el<\/a> mismo sitio: sin el overhead de mantener dos sistemas en sync, sin otra factura mensual que justificar.<\/p>\n<p>Si ya usas PostgreSQL y tienes menos de 2-3 millones de vectores, empieza con pgvector. Mide el recall con tus queries reales, ajusta <code>work_mem<\/code> y <code>ef_search<\/code> si notas problemas, y decide desde ah\u00ed. Y si en alg\u00fan momento la escala no llega, migrar a Pinecone no es ning\u00fan drama \u2014 los embeddings son los mismos, solo cambias el store y la capa de acceso.<\/p>\n<p>Yo tard\u00e9 una tarde en hacer el camino contrario. Si est\u00e1s pagando $70 al mes por esto, probablemente es una tarde bien invertida.<\/p>\n<p><!-- Reviewed: 2026-03-09 | Status: ready_to_publish | Changes: meta_description expanded to 156 chars with savings amount; section header \"mi veredicto\" removed; broke triple-parallel \"no es\/no hay\/no hay\" sentence; removed formulaic \"Mi recomendaci\u00f3n directa:\" label; \"perfectamente factible\" \u2192 \"no es ning\u00fan drama\"; final two sentences punched up --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En enero abr\u00ed las facturas de Supabase y Pinecone al mismo tiempo por primera vez.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-500","post","type-post","status-publish","format-standard","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts\/500","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/comments?post=500"}],"version-history":[{"count":11,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts\/500\/revisions"}],"predecessor-version":[{"id":769,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/posts\/500\/revisions\/769"}],"wp:attachment":[{"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/media?parent=500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/categories?post=500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rebalai.com\/es\/wp-json\/wp\/v2\/tags?post=500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}