RAGaaS
Usage analytics and the public API are live

Ship retrieval-augmented answers over your own documents.

Multi-tenant ingestion, vector search, and grounded generation behind a simple API. Bring your documents; we handle the retrieval.

View docs
  • PDF, Markdown & plain text
  • Streamed answers with citations
  • Tenant-isolated vector search

Built on serverless infrastructure that scales on demand

  • Next.js on Vercel
  • Gemini Embeddings
  • Gemini 2.5 Flash
  • Pinecone
  • Neon Postgres
  • Clerk
Platform

Everything between a raw document and a cited answer

The unglamorous parts of a RAG stack — parsing, chunking, embedding, isolation, retries, metering — already built and running in production.

Durable ingestion pipeline

Upload a PDF, Markdown or text file and get an immediate response. A background pipeline then parses, chunks, embeds and upserts it — every phase retried with exponential backoff, every vector id deterministic so re-runs overwrite instead of duplicating.

extract → chunk → embed → upsert → ready

Answers you can audit

Generation is grounded strictly in retrieved chunks. Emitted [n] markers are resolved back to real sources — with filename, page and score — and anything the model invents is dropped before you ever see it.

Tenant isolation by default

Vectors live in a per-tenant, per-collection namespace and every query is filtered by tenant. Another tenant's resources return 404, never a 403 that would leak their existence.

API keys and rate limits

Mint scoped keys from the dashboard, shown once and stored hashed. Traffic is metered per key by an atomic sliding window with RateLimit-* headers on every response.

Usage analytics built in

Queries over time, p95 latency, tokens and cost, plus a failure breakdown across rate limits, empty retrievals and provider errors — no extra instrumentation.

Streaming or single-shot

Server-Sent Events by default, so tokens render as they are generated and citations arrive when generation completes. Pass stream: false for one JSON payload that is trivial to evaluate offline.

An OpenAPI 3.1 contract

Every endpoint is generated from the spec, served at /v1/openapi.json, and explorable from a Try it console in the docs. Generate a client in whatever language you ship.

How it works

Three calls from a stack of PDFs to a grounded answer

No pipelines to orchestrate, no vector database to operate, no prompt scaffolding to maintain.

  1. Step 1

    Create a collection and upload

    Group documents into collections — one per product, customer or knowledge base. Upload PDF, Markdown or plain text up to 25 MB; the call returns immediately.

    POST /v1/collections/:id/documents
  2. Step 2

    Ingestion runs itself

    Text is extracted (page numbers intact), split into overlapping chunks, embedded with Gemini and upserted into your namespace. Watch status go processing → ready in the dashboard.

    GET /v1/documents/:id/status
  3. Step 3

    Ask, and get cited answers

    Your question is embedded with the same model, retrieved against your namespace, assembled into a bounded context and answered — streamed token by token with validated citations.

    POST /v1/collections/:id/query
Developer experience

One endpoint. Every answer carries its receipts.

Authenticate with an API key, point at a collection, and read back an answer whose every claim maps to a chunk you uploaded.

Request

curl -X POST 'https://rag.lucasfurtado.xyz/api/v1/collections/col_9f8b2a1c/query' \
  -H 'Authorization: Bearer rag_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"query":"What is the refund policy for annual plans?","stream":false}'

Response

{
  "answer": "Annual plans can be refunded in full within 30 days of purchase [1].",
  "sources": [
    {
      "marker": 1,
      "documentId": "doc_4c1e77a0",
      "filename": "handbook.pdf",
      "page": 12,
      "snippet": "Annual plans are eligible for a full refund within 30 days…",
      "score": 0.82,
      "cited": true
    }
  ],
  "usage": {
    "chunksRetrieved": 8,
    "chunksUsed": 5,
    "contextTokens": 1240,
    "invalidMarkers": []
  }
}
Pricing

Start free, pay when it is carrying traffic

Billing is not switched on yet — every tier below is free while the platform is in beta, and existing projects keep their allowances when it lands.

Developer

$0forever

Enough to build and ship a first integration.

Start building
  • 3 collections, 100 documents
  • 60 requests / minute per API key
  • Streamed answers with citations
  • Full dashboard and playground
  • Community support

Enterprise

Customannual

For regulated workloads and dedicated capacity.

Talk to us
  • Dedicated namespaces and region pinning
  • SSO, audit logs and custom retention
  • Negotiated rate limits and uptime SLA
  • Security review and DPA
  • Named support engineer

Need something in between? Tell us about your workload.

FAQ

Questions people ask before they integrate

Everything else lives in the documentation.

Your documents already have the answers.

Create a collection, upload a file, and ask it something. The whole loop takes about a minute — no card, no sales call.

View docs