AgentCite
Fabrication-free, DOI-backed citations for AI content & agents. Every result is a real openAlex record (CC0 public-domain data) with a resolvable DOI — the API never fabricates a source. Built to stop the hallucinated-citation problem that gets content E-E-A-T-demoted.
Separate deployable from giftedpicks.com (own Vercel project). Productizes the logic of
GiftedPicks/scripts/citation_magnet.py.
API (MVP)
GET /api/cite?topic=<q>&n=5&since=YYYY→{ topic, count, works[], markdown, source }- each work:
{ title, authors[], first_author, year, doi, doi_url, cited_by_count, venue, openalex_id }
- each work:
GET /api/health→{ status, openalex, ts }
Data: openAlex REST (relevance-ranked, peer-reviewed type:article). Set
OPENALEX_MAILTO env to join openAlex's polite pool. Edge-cached 1h per topic.
Roadmap (build order)
- ✅ Core
/cite+/health(openAlex REST, no key, no binary — serverless-portable) - ⏳ API-key + quota gate (Supabase: anon free tier rate-limited vs keyed Pro)
- ⏳ MCP server:
get_citations(topic, n, since)(stdio + http) — the agent-native surface - ⏳ Stripe billing (TEST mode first; hosted Checkout/Payment Link → webhook provisions quota).
GATED: needs
.claude/secrets/stripe-test-{publishable,secret}-keysaved by Kevin. LIVE go-live = Kevin places the live secret key in the deploy env; agents never hold it. - Landing page + MCP-registry listings — owned by Cowork.
Guardrails
Public-domain data only (zero scraping / no unofficial-site APIs). Honesty is the product: output always says "verify each DOI resolves." Test-mode payments only until Kevin flips live; agents never move money or hold the live key.
Billing (Stripe)
Pro tier via hosted Stripe Checkout (subscription). On checkout.session.completed,
the signature-verified webhook (/api/stripe-webhook) provisions a Pro API key in
Redis (free→Pro quota elevation). Configure via env:
STRIPE_SECRET_KEY,STRIPE_PRICE_ID,STRIPE_WEBHOOK_SECRET,REDIS_URL- Create the Pro product/price once:
STRIPE_SECRET_KEY=sk_test_… node scripts/setup-stripe-product.js - Without Stripe env set,
/api/checkoutreturns503and the citation API still runs free-tier.