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

# Inviting adjusters

> Invite adjusters to your firm by OSAID, record who each invitation is for, and follow the answers.

An adjuster can receive claims from your firm only after accepting your invitation. You invite an adjuster by their **OSAID**, the account id on their profile in the OSA app (the field labelled OSA ID, which has a copy button). Copy it exactly: capital and small letters matter. An OSAID exists once the adjuster has signed in to the app, so an adjuster who isn't on OSA yet installs the app and creates an account first. An invitation can't be sent to an email address.

## Send an invitation

```bash theme={"system"}
curl https://api.osaconnection.com/v1/adjusters/invitations \
  -H "Authorization: Bearer $OSA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "osa_id": "Hp2sK8dL4fJ6gA1zX9cV3bN7mQ5w",
    "invited_as": "Todd Rivera",
    "invited_by": "Dana Whitfield, Claims Operations",
    "purpose": "Flood claims in the Tampa Bay area this season.",
    "note": "Referred by Jordan Ellis."
  }'
```

Only `osa_id` is required. The adjuster sees the invitation in the OSA app and accepts or declines it. An invitation that isn't answered expires after 7 days. The invitation shows the adjuster your firm's name and `invited_as`. Nothing about your claims reaches them until they accept.

## Your firm's notes

Four optional fields record who an invitation is for and why. To send no note, leave the field out: `null` and an empty string are refused with `422 validation_failed`.

| Field | Length | Meaning |
| - | - | - |
| `invited_as` | Up to 200 characters | Who your firm believes it is inviting, for example the adjuster's name |
| `invited_by` | Up to 200 characters | Who at your firm sent the invitation |
| `purpose` | Up to 500 characters | What the invitation is for |
| `note` | Up to 1,000 characters | Anything else your firm wants to record with the invitation |

* **They are your firm's own notes.** Nothing is checked against the adjuster's account, and no invitation is refused because of them. Whoever owns the OSAID can accept.
* **The adjuster sees `invited_as`** on the invitation in the app. The other three are for your firm only.
* **They are returned whenever adjusters are listed.** Each adjuster in `GET /v1/adjusters` carries all four, and so do the responses to sending and withdrawing an invitation. A note you didn't send is `null`.
* **Inviting again replaces them.** A new invitation to the same adjuster replaces all four with whatever it sends. A note the new invitation leaves out becomes `null`.

## What the adjuster needs before accepting

The adjuster must have a **first name, a last name and an email** on their OSA profile before they can accept an invitation. If one is missing, the invitation can't be accepted until they complete their profile in the app.

If an adjuster tells you they can't accept, ask them to check their profile in the OSA app.

## Follow the invitation

```bash theme={"system"}
curl https://api.osaconnection.com/v1/adjusters \
  -H "Authorization: Bearer $OSA_API_KEY"
```

```json theme={"system"}
{
  "data": [
    {
      "osa_id": "Xk3pQ9vT2mN8rL5wB7yC1dF4gH6j",
      "status": "active",
      "test": false,
      "name": "Jordan Ellis",
      "email": "jordan.ellis@example.com",
      "invited_at": "2026-09-01T16:20:00Z",
      "expires_at": null,
      "responded_at": "2026-09-01T18:44:12Z",
      "invited_as": "Jordan Ellis",
      "invited_by": "Dana Whitfield, Claims Operations",
      "purpose": "Flood claims in the Tampa Bay area this season.",
      "note": null
    },
    {
      "osa_id": "Hp2sK8dL4fJ6gA1zX9cV3bN7mQ5w",
      "status": "pending",
      "test": false,
      "name": null,
      "email": null,
      "invited_at": "2026-09-28T13:02:45Z",
      "expires_at": "2026-10-05T13:02:45Z",
      "responded_at": null,
      "invited_as": "Todd Rivera",
      "invited_by": "Dana Whitfield, Claims Operations",
      "purpose": "Flood claims in the Tampa Bay area this season.",
      "note": "Referred by Jordan Ellis."
    }
  ],
  "next_cursor": null
}
```

| `status` | Meaning |
| - | - |
| `pending` | Invited, not yet answered |
| `active` | Accepted, and a member of your firm |
| `declined` | The adjuster declined |
| `expired` | Not answered within 7 days |
| `withdrawn` | You withdrew the invitation |

`name` and `email` are `null` until the adjuster accepts. After that they are the account's own name and email. `invited_as` stays what your firm wrote, so it can differ from `name`: compare the two if you need to confirm that the person you meant to invite is the one who accepted.

An adjuster can leave your firm in the app. One who has left no longer appears in the list, under any status. Claims they had already accepted stay with them; new claims sent to them are refused with `422 adjuster_not_in_firm`. Invite them again to bring them back.

Statuses are an open enum: handle values you don't recognise without failing.

## Inviting again and withdrawing

* You can invite someone again after they declined, after the invitation expired, or after you withdrew it.
* Inviting a current member returns `409 already_member`. Inviting someone whose invitation is still pending returns `409 invitation_pending`.
* `DELETE /v1/adjusters/invitations/{osa_id}` withdraws a pending invitation.

## Test accounts

A test key can only invite your firm's test accounts, and a live key can't invite them. See [Testing with test accounts](/testing).


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