Offices
Register an office for attachments
POST/api/v1/offices/{id}/register_attachments
Registers the office with the attachment network, once: it needs its contact name and email, its primary doctor's name, and its address, phone and tax ID. Closing an office's first attachment does this too. A registered office is returned as it is. Needs an Idempotency-Key header and a key with the submit permission. Send an empty JSON object as the body.
Needs a key with submit permission.
Request
Headers
| Name | Type | Required | Description |
|---|---|---|---|
| Idempotency-Key | string | required | Makes the request safe to repeat: a request with the same key and body returns the first answer (the reply has an idempotent-replayed header), and the same key with a different request is refused. 1 to 255 printable characters; a UUID is a good choice.At least 1 character.At most 255 characters.Matches `^[\x21-\x7e]{1,255}$`. |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | required | An office ID (off_...). |
Response
The office, registered. Status 200.
| Name | Type | Description |
|---|---|---|
| id | string | An ID that starts with off_. |
| object | string | Always `office`. |
| name | string | |
| address_line1 | string | |
| address_line2 | value | |
| city | string | |
| state | string | |
| postal_code | string | |
| phone | string | |
| npi | string | |
| tax_id_last4 | string | The last 4 digits of the tax ID. The full tax ID is never returned. |
| specialty | string | |
| contact_name | value | Who the attachment network contacts about this office; null when not given. |
| contact_email | value | |
| contact_fax | value | |
| doctor_first_name | value | The office's primary doctor, for registering with the attachment network. |
| doctor_last_name | value | |
| attachment_network | object | The office's registration with the attachment network, which it needs before its first attachment is sent. |
| attachment_network.state | string | not_registered until POST /offices/{id}/register_attachments succeeds (or the first attachment of the office is closed); failed when the network refused it.One of: `not_registered`, `registered`, `failed`. |
| attachment_network.facility_id | value | The facility ID the attachment network gave the office. |
| attachment_network.registered_at | string (date-time) or null | |
| mode | string | One of: `test`, `live`. |
| created_at | string (date-time) |
Errors
| HTTP status | Code | What it means |
|---|---|---|
| 401 | UNAUTHORIZED | A valid API key is required. Send it as "Authorization: Bearer <key>". |
| 403 | PERMISSION_DENIED | This API key is not allowed to do that. |
| 404 | NOT_FOUND | Not found. |
| 422 | INVALID_REQUEST | The request is not valid. |
| 400 | IDEMPOTENCY_KEY_REQUIRED | POST and PATCH requests need an Idempotency-Key header. |
| 422 | IDEMPOTENCY_KEY_REUSED | That Idempotency-Key was already used with a different request. |
| 409 | IDEMPOTENCY_KEY_IN_USE | A request with that Idempotency-Key is still running. Retry shortly. |
| 413 | PAYLOAD_TOO_LARGE | The request body is larger than 1 MB. |
| 504 | TIMEOUT | The request took too long to finish. It may still have taken effect: look it up before sending it again with a new Idempotency-Key. What it made is found with GET /api/v1/eligibility?request_id=<this request_id>, and the same filter on /api/v1/claims and /api/v1/attachments (a key with read permission). |
| 503 | ATTACHMENTS_UNAVAILABLE | Attachments are not available in live mode yet. Use a test key. |
| 502 | ATTACHMENTS_NETWORK_ERROR | The attachment network did not finish. The attachment is still open and nothing was lost: close it again. |
| 500 | INTERNAL | Something went wrong on our side. Quote the request ID if you contact us. |
Example
Example request
curl -X POST "https://sandbox.myclaimhouse.com/api/v1/offices/off_01JM000000E008000000000003/register_attachments" \
-H "Authorization: Bearer $CLAIMHOUSE_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'Example response: 200
{
"id": "off_01JM000000E008000000000003",
"object": "office",
"name": "Example Family Dental",
"address_line1": "100 Example Street",
"address_line2": null,
"city": "Exampleville",
"state": "GA",
"postal_code": "30000",
"phone": "4045550100",
"npi": "1999999000",
"tax_id_last4": "0000",
"specialty": "general",
"contact_name": "Pat Example",
"contact_email": null,
"contact_fax": null,
"doctor_first_name": "Riley",
"doctor_last_name": "Example",
"attachment_network": {
"state": "registered",
"facility_id": "FAC-0001",
"registered_at": "2026-09-24T20:58:00.000000+00:00"
},
"mode": "test",
"created_at": "2026-01-15T14:00:00+00:00"
}