v1 sunset
Support for the v1 Vendor API (
https://app.teamcaredental.com/api/v1/vendors) ends on November 7, 2026, the end of the first week of November. After that date v1 requests are no longer served. Move to v2 before then.Vendor API v2
Vendor API v2
v2 keeps every data endpoint, response shape, filter and pagination rule from v1. Only two things change: the base URL and how you address a location.New base URL
location_id is gone from data URLs
In v1 every data route carried the location in the path (/locations/{location_id}/patients). In v2 you request a slot for a location once, then send the returned request_key in the X-Vendor-Request-Key header. The data routes have no location_id.The same pattern applies to every location-scoped endpoint.
New endpoint: request a slot
POST /locations/{location_id}/slots returns a request_key for that location.Slot rules
- A
request_keyis valid for 6 hours, the same lifetime as the access token. - A firm can hold at most 10 active slots at a time, so data for at most 10 locations can be pulled concurrently. Requesting an 11th slot invalidates the oldest
request_keyimmediately. To raise this limit, contact TeamCare support. - The same location’s slot can be re-requested only once every 2 minutes. Inside the cooldown the slot endpoint returns
429withretry_afterin seconds. - The slot endpoint accepts at most 10 requests per 10 seconds per token.
- A data request with a missing, expired or trimmed
request_keyreturns401 {"errors": "Invalid, expired or missing request key"}.
GET /locations is now paginated
v1 returned the full list. v2 returns a pagy object alongside data; use the page parameter.Unchanged
POST /auth/token,client_id/client_secret, and the 6-hour JWT.GET /organizations.- Ransack
qfilters,q[fetch_modified_since],after/items/pagepagination. - Every response shape.
Migration checklist
1
Change the base URL
Point your client at
https://api.teamcaredental.com/api/v2/vendors.2
Request a slot per location
After listing locations, call
POST /locations/{location_id}/slots once for the location you are about to sync and keep its request_key.3
Drop the location from data paths
Remove
/locations/{location_id} from every data URL and add the header X-Vendor-Request-Key: <request_key>.4
Pull the whole location, then move on
Fetch everything you need for that location before requesting the next slot. Keep parallel locations at or below 10.

