application/problem+json:
New codes may be added. Treat an unknown code by its HTTP status.
Error codes
malformed_request
The body isn’t valid JSON, or couldn’t be read. Check that you sendContent-Type: application/json and a complete JSON document.
invalid_key
Check theAuthorization: Bearer … header and that the key hasn’t been revoked. If it was rotated, use the new key.
insufficient_scope
The key works but wasn’t issued for this operation.GET /v1/me lists its permissions. Use a key issued for this purpose, or ask OSA to change it.
not_in_plan
Your firm’s plan doesn’t include this capability. Contact OSA about your plan.not_found
The id doesn’t exist in your firm. Another firm’s claim, and a real claim requested with a test key, also return this. ForDELETE /v1/adjusters/invitations/{osa_id}, it means there is no pending invitation for that OSAID.
duplicate_claim
In the key’s environment, your firm already has a claim with thisexternal_id, or an open claim sent through the API with this claim_number. Test and live claims are checked separately and never collide. existing_claim_id and existing_claim_url always point to a claim your key can read: use it instead of creating a new claim.
claim_already_accepted
The adjuster accepted the claim, so it can’t be offered to someone else. Reassigning accepted claims isn’t supported yet.already_member
The adjuster has already accepted an invitation to your firm. There is nothing to invite or withdraw.invitation_pending
You already invited this adjuster and they haven’t answered. Ask them to open the OSA app, or withdraw the invitation and send a new one.payload_too_large
Request bodies are limited to 1 MB. Files never go through the API.validation_failed
The request doesn’t match the API reference: a missing or unknown body field, an unknown query parameter, a wrong type or format, leading or trailing spaces inexternal_id or claim_number, or a missing Idempotency-Key header. errors lists each problem.
It also covers the two rules that compare one field with another when you send a claim:
- a
building.building_typethat doesn’t go withbuilding.occupancy_type, or that isn’t a residential type when no occupancy type is sent. Thepointeris/building/building_type. See Occupancy and building type. - a
policy.expiration_dateearlier thanpolicy.effective_date. Thepointeris/policy/expiration_date. See Claim details.
idempotency_key_reused
ThisIdempotency-Key was already used, within the last 24 hours, for a different request (a different method, path or body). Generate a new key for each new operation, and reuse a key only to retry exactly the same request.
unknown_osaid
No OSA user has this OSAID. Check it with the adjuster: an OSAID exists once they have signed in to the OSA app, and they can read it there. With a test key, every OSAID that isn’t one of your firm’s test accounts gets this code.adjuster_not_in_firm
The adjuster hasn’t joined your firm, or is no longer active in it. Invite them and wait for them to accept. Real adjusters are invisible to test keys, so a test key naming one also gets this code.adjuster_not_accepting
The adjuster is in your firm but can’t take claims right now: they don’t have the permission to accept claims, or they have paused assignments. Choose another adjuster. The API has no way to check this in advance; handle it when it happens.environment_mismatch
Live keys can’t send or offer claims to test accounts, can’t invite test accounts, and can’t offer test claims. Use your test key for test claims and test accounts. See Testing.rate_limited
Wait for the number of seconds in theRetry-After header, then retry. See Limits.
internal_error
Something failed on OSA’s side. Retry with exponential backoff, reusing the sameIdempotency-Key for POST requests; if it persists, contact OSA with the request_id. Other 5xx responses (for example from the network in front of the API) may not have a problem body; treat them the same way.