Skip to content
Back to testkits

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