> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rubicourt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Publish a policy, open a dispute and act on the decision.

**1. Get an API key**

API access opens to waitlist platforms first. [Join the waitlist](https://rubicourt.com/#waitlist) and we will send your key. Send it on every request:

```bash theme={null}
Authorization: Bearer $RUBICOURT_KEY
```

**2. Publish your dispute policy**

Write your buyer-protection rules in plain language. Number the sections so decisions can cite them.

```bash theme={null}
curl -X PUT https://api.rubicourt.com/v1/policy \
  -H "Authorization: Bearer $RUBICOURT_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "1. Item not received. If tracking shows no delivery within 10 days of the estimate, the buyer gets a full refund.\n2. Item not as described. If the item is materially different from the listing, the buyer gets a full refund after returning it at the seller'\''s cost.",
    "auto_decide_max_cents": 25000,
    "evidence_window_hours": 72,
    "review_window_days": 14,
    "arbitration_enabled": true
  }'
```

**3. Open a dispute**

Send both parties, the amount, the opener's reason and your transaction record. Rubicourt emails each side a link to tell their story and add evidence.

```bash theme={null}
curl -X POST https://api.rubicourt.com/v1/disputes \
  -H "Authorization: Bearer $RUBICOURT_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-9001-dispute" \
  -d '{
    "external_reference": "order-9001",
    "category": "item_not_as_described",
    "amount_cents": 12000,
    "opened_by": "buyer",
    "reason": "The headphones arrived with a cracked ear cup. The listing said like new.",
    "buyer":  { "name": "Rita Lopez", "email": "rita@example.com", "type": "person", "ref": "usr_81" },
    "seller": { "name": "Sam Ortiz",  "email": "sam@example.com",  "type": "person", "ref": "usr_42" },
    "transaction": { "order_id": "9001", "item": "Wireless headphones, like new", "delivered": "2026-10-28" }
  }'
```

**4. Receive the decision**

When both sides are done, or the evidence window ends, Rubicourt decides and sends `dispute.decided`:

```json theme={null}
{
  "type": "dispute.decided",
  "data": {
    "reference": "RD-2026-000001",
    "external_reference": "order-9001",
    "outcome": "refund_full",
    "refund_cents": 12000,
    "return_required": true,
    "reasons": "The listing said like new (S1). The buyer's photo shows a crack (S3) ...",
    "decided_by": "ai"
  }
}
```

Carry it out on your side: refund the buyer, release or hold the payout.

**5. Review what your policy routes to you**

Disputes above `auto_decide_max_cents`, or ones the AI flags, arrive as `dispute.needs_review` with a proposed decision. Approve or override it:

```bash theme={null}
curl -X POST https://api.rubicourt.com/v1/disputes/RD-2026-000002/review \
  -H "Authorization: Bearer $RUBICOURT_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "action": "approve", "reviewer": "Jo Park, Trust & Safety" }'
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.