RobinReturn
Partner API

Cases

Create up to 100 RobinReturn cases in one request and read a case's status back over the Partner API.

Create cases with POST /api/v1/cases (up to 100 per request) and read a case's status with GET /api/v1/cases/{id}.

Create cases

POST /api/v1/cases            scope: cases:write
Idempotency-Key: <your-unique-key>      (optional, recommended)
Content-Type: application/json

{
  "cases": [
    {
      "debtorName": "Acme Trading Ltd",
      "debtorEmail": "billing@acme.test",
      "debtorCompanyNo": "01234567",
      "debtorAddress": "1 High St, Anytown, AN1 2BC",
      "invoiceRef": "INV-2026-001",
      "invoiceDate": "2026-01-15",
      "dueDate": "2026-02-14",
      "principalAmount": 1450.00,
      "description": "Consultancy, January 2026",
      "invoiceFileKey": "<fileKey from the upload step>",
      "attestation": {
        "b2b": true,
        "under10k": true,
        "within6years": true,
        "undisputed": true,
        "attestedBy": "Jane Smith"
      }
    }
  ]
}

Fields

FieldRequiredNotes
debtorNameyes1–300 characters
debtorEmailyesvalid email
invoiceRefyes1–100 characters; unique per company (duplicate guard)
invoiceDateyesYYYY-MM-DD or ISO datetime; must not be after dueDate
dueDateyesYYYY-MM-DD or ISO datetime; must be in the past
principalAmountyesGBP, greater than 0 and at most 10,000
invoiceFileKeyyesthe fileKey from Uploads, under your company prefix
attestationyesall four flags must be true; attestedBy names the authorised person
debtorCompanyNonolimited-company number — confirms registered details, gates jurisdiction
debtorAddress, descriptionnooptional context

The attestation is a legal eligibility assertion (the debt is B2B, at most £10,000, within the six-year limitation window, and undisputed). It is recorded for the audit trail; all four answers must be true.

Response

The response never silently drops a case — every input is either created or rejected with a code.

{
  "created":  [ { "index": 0, "invoiceRef": "INV-2026-001",
                  "id": "…", "reference": "RR-2026-000123" } ],
  "rejected": [ { "index": 1, "invoiceRef": "INV-2026-002",
                  "code": "DUPLICATE", "message": "…" } ]
}

Status: 201 when at least one case was created, 200 when none were. See Errors for the full list of rejection codes.

Creating a case does not start chasing

A created case begins at DRAFT. Recovery only starts once the eligibility attestation gate is satisfied; for API cases, automatic progression additionally requires RobinReturn to have enabled auto-attestation for your account (agreed at access approval). Otherwise the case waits for an in-dashboard confirmation.

Read a case

GET /api/v1/cases/{id}        scope: cases:read
{
  "id": "…", "reference": "RR-2026-000123", "status": "DRAFT",
  "debtorName": "Acme Trading Ltd", "principalAmount": "1450.00",
  "currency": "GBP", "createdAt": "…", "updatedAt": "…"
}

A case belonging to another company returns 404 — it is never revealed. The status values mirror the case lifecycle described in Case statuses.

On this page