Developer hub
Testkit | FHIR® RESTful API
Complete implementation of all standard CRUD operations incl. search, transactions, history and more — plus the FHIR Asynchronous Pattern API. Code base available end-to-end or on demand via standardized tool interfaces — zero-trust with role & permission enforcement.
271 / 271 = 100.0 %Community compliance
✓ 8 Passed✕ 0 Failed
- ✓ Fetch and Validate valid Patient
- ✓ Service Base URL - Resource Type Access
- ✓ Service Base URL - Case Sensitivity
- ✓ Service Base URL - Trailing Slash Handling
- ✓ Service Base URL - UTF-8 Encoding
- ✓ Identity - Query Parameter Ignored
- ✓ Identity - Case Sensitivity
- ✓ Identity - HTTP and HTTPS Protocols
✓ 4 Passed✕ 0 Failed
- ✓ Resource Metadata and Versioning - Logical Id
- ✓ Resource Metadata and Versioning - Version Id and ETag
- ✓ Resource Metadata and Versioning - Last Modified
- ✓ Resource Metadata and Versioning - Update and Version Change
✓ 4 Passed✕ 0 Failed
- ✓ Security - HTTPS Usage
- ✓ Security - SSL Certificate Validity
- ✓ Security - CORS Support
- ✓ Security - Authentication Required
✓ 7 Passed✕ 0 Failed
- ✓ HTTP Status Codes - 200 OK for successful read
- ✓ HTTP Status Codes - 201 Created for successful create
- ✓ HTTP Status Codes - 404 Not Found for non-existent resource
- ✓ HTTP Status Codes - 400 Bad Request for invalid input
- ✓ HTTP Status Codes - 422 Unprocessable Entity for valid format but invalid content
- ✓ HTTP Status Codes - OperationOutcome for 4xx errors
- ✓ HTTP Status Codes - 401 Forbidden for unauthorized access
✓ 10 Passed✕ 0 Failed
- ✓ HTTP Headers - Accept header for content negotiation
- ✓ HTTP Headers - ETag in response
- ✓ HTTP Headers - If-Match for conditional update
- ✓ HTTP Headers - If-Modified-Since for conditional read
- ✓ HTTP Headers - If-None-Exist for conditional create
- ✓ HTTP Headers - If-None-Match for conditional read
- ✓ HTTP Headers - Last-Modified in response
- ✓ HTTP Headers - Prefer for return preference
- ✓ HTTP Headers - Location in create response
- ✓ HTTP Headers - Content-Location in async response
✓ 5 Passed✕ 0 Failed
- ✓ Managing Return Content - Server Default Timezone
- ✓ Managing Return Content - Return minimal content
- ✓ Managing Return Content - Return representation on update
- ✓ Managing Return Content - Return OperationOutcome on update
- ✓ Managing Return Content - Prefer header respected on create
✓ 5 Passed✕ 0 Failed
- ✓ Conditional Read - If-Modified-Since with unchanged resource
- ✓ Conditional Read - If-Modified-Since with changed resource
- ✓ Conditional Read - If-None-Match with matching ETag
- ✓ Conditional Read - If-None-Match with non-matching ETag
- ✓ Conditional Read - Server handles both If-Modified-Since and If-None-Match
✓ 6 Passed✕ 0 Failed
- ✓ Create - Prefer return=minimal
- ✓ Create - Prefer return=representation
- ✓ Create - Prefer return=OperationOutcome
- ✓ Update - Prefer return=minimal
- ✓ Patch - Prefer return=representation
- ✓ Transaction - Prefer return=minimal
✓ 10 Passed✕ 0 Failed
- ✓ Content Types - JSON
- ✓ Content Types - Turtle (RDF)
- ✓ Content Types - Generic XML
- ✓ Content Types - FHIR XML
- ✓ Content Types - JSON - Supported
- ✓ Content Types - Generic JSON
- ✓ Content Types - Unsupported format
- ✓ Content Types - POST with unsupported format
- ✓ Encodings - UTF-8
- ✓ Content Types - Search with x-www-form-urlencoded
✓ 6 Passed✕ 0 Failed
- ✓ FHIR Version Parameter - JSON with current version
- ✓ FHIR Version Parameter - XML with current version
- ✓ FHIR Version Parameter - Unsupported version
- ✓ FHIR Version Parameter - Create with version specified
- ✓ FHIR Version Parameter - Mismatched versions
- ✓ FHIR Version Parameter - Search with version specified
✓ 7 Passed✕ 0 Failed
- ✓ General Parameters - _format XML
- ✓ General Parameters - _format JSON
- ✓ General Parameters - _format overriding Accept header
- ✓ General Parameters - _pretty true
- ✓ General Parameters - _pretty false
- ✓ General Parameters - _summary true
- ✓ General Parameters - _elements
✓ 6 Passed✕ 0 Failed
- ✓ Version Support - Check Capability Statement
- ✓ Version Support - Resource has versionId
- ✓ Version Support - Resource has lastUpdated
- ✓ Version Support - vread operation
- ✓ Version Support - Version-aware update
- ✓ Version Support - Conflict on outdated version update
✓ 4 Passed✕ 0 Failed
- ✓ Client Timezone - Header is sent and acknowledged
- ✓ Client Timezone - Server respects timezone differences in date searches
- ✓ Client Timezone - Different timezones produce different results
- ✓ Client Timezone - Server preserves original timezone in stored data
✓ 6 Passed✕ 0 Failed
- ✓ Read - Successful read of existing resource
- ✓ Read - Attempt to read non-existent resource
- ✓ Read - Attempt to read deleted resource
- ✓ Read - Summary parameter (text)
- ✓ Read - Elements parameter
- ✓ Read - HEAD request
✓ 5 Passed✕ 0 Failed
- ✓ vread - Retrieve specific version of a resource
- ✓ vread - Retrieve non-existent version with alphanumeric version id
- ✓ vread - Retrieve non-existent version
- ✓ vread - Retrieve deleted version
- ✓ vread - HEAD request
✓ 11 Passed✕ 0 Failed
- ✓ update - Update existing resource
- ✓ update - Create new resource with specified ID
- ✓ update - Attempt update with mismatched ID
- ✓ update - Attempt update with no ID in resource
- ✓ update - Verify server ignores provided meta.versionId and meta.lastUpdated
- ✓ update - Conditional update (If-Match)
- ✓ update - Conditional update with outdated ETag
- ✓ update - Preserve XML comments and formatting
- ✓ update - Handle SUBSETTED resource
- ✓ update - Attempt to update non-existent resource
- ✓ update - Verify update response matches subsequent read
✓ 5 Passed✕ 0 Failed
- ✓ Update as Create - Check server capability
- ✓ Update as Create - Client-defined ID
- ✓ Update as Create - Existing data model reproduction
- ✓ Update as Create - UUID-based ID
- ✓ Update as Create - Attempt to update existing resource
✓ 5 Passed✕ 0 Failed
- ✓ Rejecting Updates - 400 Bad Request (Invalid Resource)
- ✓ Rejecting Updates - 401 Unauthorized
- ✓ Rejecting Updates - 404 Not Found (Unsupported Resource Type)
- ✓ Rejecting Updates - 405 Method Not Allowed (Client-defined ID allowed)
- ✓ Rejecting Updates - 409 Conflict (Version conflict)
✓ 5 Passed✕ 0 Failed
- ✓ Conditional Update - No matches, create new resource
- ✓ Conditional Update - One match, update existing resource
- ✓ Conditional Update - Multiple matches
- ✓ Conditional Update - If-None-Match (specific version)
- ✓ Conditional Update - If-None-Match (wildcard)
✓ 5 Passed✕ 0 Failed
- ✓ Resource Contention - ETag header in response
- ✓ Resource Contention - Successful update with If-Match
- ✓ Resource Contention - Failed update with incorrect If-Match
- ✓ Resource Contention - Concurrent update simulation
- ✓ Resource Contention - Update without If-Match header
✓ 5 Passed✕ 0 Failed
- ✓ Patch - JSON Patch
- ✓ Patch - XML Patch
- ✓ Patch - FHIRPath Patch
- ✓ Patch - Version conflict
- ✓ Patch - Invalid patch document
✓ 6 Passed✕ 0 Failed
- ✓ Conditional Patch - One match
- ✓ Conditional Patch - No matches
- ✓ Conditional Patch - Multiple matches
- ✓ Conditional Patch - Narrative safety
- ✓ Conditional Patch - XML Patch with namespaces
- ✓ Conditional Patch - Failing JSON Patch test operation
✓ 2 Passed✕ 0 Failed
- ✓ Patch Using JSON Patch in Transaction - Single Resource
- ✓ Patch Using JSON Patch in Batch - Multiple Resources
✓ 6 Passed✕ 0 Failed
- ✓ Delete - Successful deletion
- ✓ Delete - Attempt to read deleted resource
- ✓ Delete - Non-existent resource
- ✓ Delete - Unsupported resource type
- ✓ Delete - Referential integrity violation
- ✓ Delete - Bring back to life
✓ 5 Passed✕ 0 Failed
- ✓ Conditional Delete - Check server capability
- ✓ Conditional Delete - No matches
- ✓ Conditional Delete - One match
- ✓ Conditional Delete - Multiple matches
- ✓ Conditional Delete - Unsupported operation
✓ 5 Passed✕ 0 Failed
- ✓ Create - Successful creation
- ✓ Create - Ignore provided id
- ✓ Create - Ignore provided meta.versionId and meta.lastUpdated
- ✓ Create - Invalid resource
- ✓ Create - Unsupported resource type
✓ 5 Passed✕ 0 Failed
- ✓ Conditional Create - No matches (successful creation)
- ✓ Conditional Create - One match (resource already exists)
- ✓ Conditional Create - Multiple matches
- ✓ Conditional Create - Invalid If-None-Exist header
- ✓ Conditional Create - Unsupported operation
✓ 7 Passed✕ 0 Failed
- ✓ Search - Server Root POST
- ✓ Search - Resource Type POST
- ✓ Search - Compartment POST Searches
- ✓ Search - Compartment and Resource Type POST
- ✓ Search - POST with query parameters
- ✓ Search - POST with invalid parameters
- ✓ Search - POST with unsupported _format
✓ 8 Passed✕ 0 Failed
- ✓ Search GET - Resource Type
- ✓ Search GET - Compartment (All Contained Resource Types)
- ✓ Search GET - Compartment (Specific Resource Type)
- ✓ Search GET - With _format parameter
- ✓ Search GET - With multiple parameters
- ✓ Search GET - With invalid parameters
- ✓ Search GET - With unsupported _format
- ✓ Search GET - Pagination
✓ 20 Passed✕ 0 Failed
- ✓ Search - GET and POST methods both supported
- ✓ Search - Handling paged result sets
- ✓ Search - OperationOutcome in searchset
- ✓ Search - Failure with 4xx status code
- ✓ Search - Unauthorized access
- ✓ Search - Unsupported resource type
- ✓ Search - Method not allowed
- ✓ Search - Chained parameters
- ✓ Search - Reverse chained parameters using _revinclude
- ✓ Search - Composite parameters
- ✓ Search - Token search on system
- ✓ Search - Date range
- ✓ Search - _include parameter
- ✓ Search - _revinclude parameter
- ✓ Search - _summary parameter
- ✓ Search - _elements parameter
- ✓ Search - _count parameter
- ✓ Search - _sort parameter with birthdates
- ✓ Search - _total parameter
- ✓ Should handle _containedType parameter variations
✓ 8 Passed✕ 0 Failed
- ✓ Capabilities - Full mode
- ✓ Capabilities - Normative mode
- ✓ Capabilities - Terminology mode
- ✓ Capabilities - ETag header
- ✓ Capabilities - Specific FHIR version
- ✓ Capabilities - Summary parameter
- ✓ Capabilities - Elements parameter
- ✓ Capabilities - Unsupported FHIR version
✓ 5 Passed✕ 0 Failed
- ✓ Batch - Multiple actions
- ✓ Transaction - Atomic operations
- ✓ Batch - Mixed success and failure
- ✓ Transaction - Failure rolls back all operations
- ✓ Batch - Unsupported operation
✓ 2 Passed✕ 0 Failed
- ✓ Example Transaction - Complex scenario
- ✓ Batch - Medications and Allergies
✓ 4 Passed✕ 0 Failed
- ✓ Batch - Independent operations
- ✓ Batch - No interdependencies
- ✓ Batch - Processing independence
- ✓ Batch - Non-conformant references
✓ 4 Passed✕ 0 Failed
- ✓ Transaction - All or nothing processing
- ✓ Transaction - Processing order
- ✓ Transaction - Resolving references
- ✓ Transaction - Conditional create
✓ 3 Passed✕ 0 Failed
- ✓ Replace resource references
- ✓ Replace URLs in narrative
- ✓ Replace URLs with fragment identifiers
✓ 3 Passed✕ 0 Failed
- ✓ Version-specific reference with resolve-as-version-specific extension
- ✓ Conditional reference
- ✓ Conditional reference - no match
✓ 4 Passed✕ 0 Failed
- ✓ Batch Response - Successful batch
- ✓ Transaction Response - Successful transaction
- ✓ Transaction Response - Failed transaction
- ✓ Batch Response - With Prefer header
✓ 3 Passed✕ 0 Failed
- ✓ Accept History Bundle
- ✓ Accept Collection Bundle
- ✓ Accept Document Bundle
✓ 8 Passed✕ 0 Failed
- ✓ History - Single resource
- ✓ History - All resources of a type
- ✓ History - All resources
- ✓ History - With _since parameter
- ✓ History - With _count parameter
- ✓ History - With _at parameter
- ✓ History - Unsupported resource type
- ✓ History - With _sort parameter
✓ 3 Passed✕ 0 Failed
- ✓ Transactional Integrity - Update Patient and Verify Server Response
- ✓ Transactional Integrity - Version-aware update pattern
- ✓ Transactional Integrity - PATCH operation
✓ 4 Passed✕ 0 Failed
- ✓ Paging - Search results
- ✓ Paging - History results
- ✓ Paging - Total count
- ✓ Paging - POST search with continuation
✓ 2 Passed✕ 0 Failed
- ✓ Paging Continuity - Consistent results across pages
- ✓ Paging Integrity - Handling updates during paging
✓ 5 Passed✕ 0 Failed
- ✓ HEAD - Read interaction
- ✓ HEAD - Search interaction
- ✓ HEAD - History interaction
- ✓ HEAD - Capabilities interaction
- ✓ HEAD - Unsupported interaction
✓ 7 Passed✕ 0 Failed
- ✓ Custom Headers - X-Request-Id
- ✓ Custom Headers - X-Forwarded-For
- ✓ Custom Headers - X-Forwarded-Host
- ✓ Custom Headers - X-Intermediary
- ✓ Custom Headers - X-Forwarded-Proto
- ✓ Custom Headers - X-Forwarded-Port
- ✓ Custom Headers - X-Forwarded-Prefix
✓ 5 Passed✕ 0 Failed
- ✓ Async Operations - _outputFormat parameter triggers Bulk Data Pattern
- ✓ Async Operations - Bulk Data operation cancellation
- ✓ Async Operations - Bulk Data Request Accept header
- ✓ Async Operations - Bulk Data Request returns 202 Accepted
- ✓ Async Operations - Unsupported _outputFormat returns error
✓ 8 Passed✕ 0 Failed
- ✓ Async Operations - Accept header specifies format
- ✓ Async Operations - Completed operation returns 200 OK with Bundle batch-response
- ✓ Async Operations - DELETE cancellation returns 202 Accepted
- ✓ Async Operations - DELETE on non-existent operation returns error
- ✓ Async Operations - Kick-off error returns 4XX/5XX with OperationOutcome
- ✓ Async Operations - Kick-off returns 202 with Content-Location
- ✓ Async Operations - Status request errors use transient codes
- ✓ Async Operations - Status request returns 202 with Retry-After while in progress