Authenticate as described for the eTMF API to obtain a sessionId; CTMS and eTMF share the same Vault instance and authentication flow
Create an object record (e.g., a site) via POST /api/{version}/vobjects/{object_name} with a JSON or form-encoded body specifying required fields such as name__v, study__v, and country__v
Query study and site records via GET /api/{version}/vobjects/{object_name} with a WHERE clause filtering on study__v or status__v to retrieve active sites for a study
Update a record via PUT /api/{version}/vobjects/{object_name}/{id} providing only the fields to change; use PATCH-style partial updates to avoid overwriting fields not included in the payload
Create milestone records linked to site records by setting the site__v lookup field to the site record ID; milestones drive site activation tracking and are shared with eTMF
Batch-create up to 500 records in one call using POST /api/{version}/vobjects/{object_name}/batch with a JSON array, which reduces round-trips during study startup data loading
Known gotchas
Required field validation errors return HTTP 400 with a per-field errors array; missing lookup field values (e.g., invalid study__v ID) return a separate REFERENCE_NOT_FOUND error code
Object API names (e.g., study__v, site__v) differ between Vault configurations; use GET /api/{version}/metadata/vobjects to enumerate object names in the target Vault before scripting
Record state transitions (e.g., activating a site) require lifecycle action calls via POST /api/{version}/vobjects/{object_name}/{id}/lifecycle_actions/{action_name}, not a direct field update
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp