Create location
/v1/practices/{practiceId}/locationsRequires locations:write and Idempotency-Key for API keys. Creates an active location with a unique name in this practice. Locations are shared between Test and Live. Use the returned ID for Team location access.
Request example
Replace example values with your Test data. Check the field rules below before you send a request.
{
"city": "<string>",
"country": "<string>",
"line1": "<string>",
"line2": "<string>",
"name": "<string>",
"phone": "<string>",
"postalCode": "<string>",
"state": "<string>",
"timezone": "<string>"
}curl -X POST 'https://api.affinityrx.com/v1/practices/{practiceId}/locations' \
-H "Authorization: Bearer $AFFINITY_API_KEY" \
-H 'Affinity-Version: 2026-09-28' \
-H 'Idempotency-Key: <Idempotency-Key>' \
-H 'Content-Type: application/json' \
--data @request.jsonResponse example
These examples show the body structure. Values can differ. Select a status code to see its response.
{
"id": "loc_01j2y8m6jcc9tt24af5pw9x1bc",
"object": "location",
"practiceId": "prac_01j2y8m6jcc9tt24af5pw9x1bc",
"name": "<string>",
"timezone": "<string>",
"city": "<string>",
"country": "<string>",
"line1": "<string>",
"line2": "<string>",
"phone": "<string>",
"postalCode": "<string>",
"state": "<string>",
"status": "active",
"createdAt": "<string>",
"updatedAt": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 400,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 401,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 403,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 404,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 409,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 429,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}Implementation specification
Use these field types and limits to build your integration. Download the OpenAPI document for the complete contract.
Path parameters
practiceIdstringrequiredPattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$
Headers
Affinity-VersionstringSelects the HTTP API contract for this request only. When omitted, API-key requests use their service account’s stored version. Does not change the stored default.
Pin requests to 2026-09-28.
Idempotency-KeystringrequiredRequest body specification application/json
citystring | null | nullShow city fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
countrystring | nullShow country fields
Any of · 1: string
string
Any of · 2: null
null
line1string | null | nullShow line1 fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
line2string | null | nullShow line2 fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
namestringrequiredphonestring | null | nullShow phone fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
postalCodestring | null | nullShow postalCode fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
statestring | null | nullShow state fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
timezonestring | null | nullOptional IANA timezone override. Omit to leave unchanged; null clears it. No timezone is inferred when creating a record.
Show timezone fields
Any of · 1: string | null
Any of · 1: string
string
Any of · 2: null
null
Any of · 2: null
null
Response specifications
200Successful response
application/json
idstringrequiredPattern: ^loc_[0-7][0-9a-hjkmnp-tv-z]{25}$
objectstringrequiredAllowed: "location"
practiceIdstringrequiredPattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$
namestringrequiredtimezonestring | nullrequiredShow timezone fields
Any of · 1: string
string
Any of · 2: null
null
citystring | nullrequiredShow city fields
Any of · 1: string
string
Any of · 2: null
null
countrystringrequiredline1string | nullrequiredShow line1 fields
Any of · 1: string
string
Any of · 2: null
null
line2string | nullrequiredShow line2 fields
Any of · 1: string
string
Any of · 2: null
null
phonestring | nullrequiredShow phone fields
Any of · 1: string
string
Any of · 2: null
null
postalCodestring | nullrequiredShow postalCode fields
Any of · 1: string
string
Any of · 2: null
null
statestring | nullrequiredShow state fields
Any of · 1: string
string
Any of · 2: null
null
statusstringrequiredAllowed: "active", "archived"
createdAtstringrequiredupdatedAtstringrequired400HTTP 400
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
401Unauthorized
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
403Forbidden
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
404Not found
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
409Conflict
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
429Too many requests
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri