API Reference

Base URL

http://api.rabbit.reattend.ai:8000

Authentication

All requests require a Bearer token in the Authorization header:

Authorization: Bearer rab_test_YOUR_KEY

POST /v1/remember

Ingest content into memory. Runs the full AI pipeline.

curl -X POST http://api.rabbit.reattend.ai:8000/v1/remember \
  -H "Authorization: Bearer rab_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Sarah delayed the launch to March 15. Budget is $50K.",
    "source": "meeting"
  }'

Returns: id, summary, triage_type, tags, extraction (people, decisions, action_items, dates), sentiment, importance, links

POST /v1/ask

Ask a question across all stored memories.

curl -X POST http://api.rabbit.reattend.ai:8000/v1/ask \
  -H "Authorization: Bearer rab_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "When is the launch?",
    "limit": 5,
    "reasoning": false
  }'

Set reasoning: true for deep analysis on complex questions.

Set stream: true for Server-Sent Events streaming.

POST /v1/check

Detect contradictions with stored memories.

curl -X POST http://api.rabbit.reattend.ai:8000/v1/check \
  -H "Authorization: Bearer rab_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"context": "We are launching on March 1st"}'

POST /v1/remember/file

Upload a file (audio, PDF, image, DOCX, etc.).

curl -X POST http://api.rabbit.reattend.ai:8000/v1/remember/file \
  -H "Authorization: Bearer rab_test_YOUR_KEY" \
  -F "file=@recording.mp3" \
  -F "source=meeting"

Other Endpoints

GET/v1/memoriesList stored memories
GET/v1/memories/:idGet a specific memory
DELETE/v1/memories/:idDelete a memory
GET/v1/graph/:idGet memory connections
POST/v1/compile/:entityCompile wiki page for entity
POST/v1/lintRun health audit
GET/v1/statsUsage statistics
POST/v1/feedbackSubmit thumbs up/down

Python SDK

pip install rabbit-memory

from rabbit import Rabbit

rab = Rabbit("rab_test_YOUR_KEY")

# Remember
m = rab.remember("Meeting notes here...", source="meeting")
print(m.summary)

# Ask
a = rab.ask("What was decided?")
print(a.text)

# Check contradictions
alert = rab.check("We're launching March 1")
if alert.show:
    print(f"Warning: {alert.context}")

# Feedback
rab.thumbs_up(question="...", answer_text="...")
rab.thumbs_down(question="...", answer_text="...", correction="Better answer here")

JavaScript SDK

npm install @reattend/rabbit

import { Rabbit } from '@reattend/rabbit';

const rab = new Rabbit('rab_test_YOUR_KEY');

const memory = await rab.remember('Meeting notes...', { source: 'meeting' });
const answer = await rab.ask('What was decided?');
console.log(answer.text);

Rate Limits

Test key (rab_test_*)100 calls/day, 1,000/month
Live key (rab_live_*)10,000 calls/day, 100,000/month