From sign-in to a cited answer in fifteen minutes.
No SDK lock-in. Bearer auth, JSON in, JSON out. Below is the full path from an empty workspace to a source-backed response for your first agent.
Create your workspace.
Repo console is gated by Supabase Auth. Sign in with email; on first run you'll be prompted to name your workspace. Your Supabase user becomes the workspace owner.
Slack or Google Drive, OAuth in.
From Sources, click Connect on Slack or Google Drive. You'll go through OAuth, pick your scope (channel allowlist for Slack), and the first sync queues automatically when the connection finishes.
Give your agent the least scope it needs.
In Developers, create a key. Pick an actorType (agent, application, admin), choose the allowed actions, and optionally restrict to a subset of providers. The secret is shown once.
One file. One call. One cited answer.
Use /v1/ask for a synthesized answer, /v1/context for the full Context Contract envelope, or /v1/search for raw ranked memory.
curl -X POST https://api.userepo.com/v1/ask \
-H "Authorization: Bearer $REPO_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "What did we decide about brand assets?",
"limit": 8
}'{
"question": "What did we decide about brand assets?",
"answer": "Use repo-mark.svg from Brand/assets/svg as the primary mark on dark surfaces … [1]",
"citations": [
{ "index": 1, "sourceItemId": "…", "title": "repo-mark.svg",
"url": "https://drive.google.com/...", "provider": "google_drive" }
],
"context": [ /* ranked chunks */ ]
}Recipes for the agents you ship next.
Three small calls, three different shapes. Pick the surface that matches the contract you want with your model.
curl -X POST https://api.userepo.com/v1/context \
-H "Authorization: Bearer $REPO_KEY" \
-H "Content-Type: application/json" \
-d '{ "query": "where is the wordmark SVG?", "limit": 8 }'curl -X POST https://api.userepo.com/v1/search \
-H "Authorization: Bearer $REPO_KEY" \
-H "Content-Type: application/json" \
-d '{ "query": "pricing v2", "limit": 5 }'// no SDK required — fetch() works.
const ctx = await fetch("https://api.userepo.com/v1/context", {
method: "POST",
headers: {
authorization: `Bearer ${process.env.REPO_KEY}`,
"content-type": "application/json"
},
body: JSON.stringify({
query: "What did we decide about brand assets?",
limit: 8
})
}).then((r) => r.json());
// Drop ctx.context into your model prompt; cite using ctx.citations.The endpoints, in one page.
The full API reference lives on the Developers page. Limits, headers, error shapes, and the Context Contract v1 envelope.