Get StartedGuide
Quickstart
Laboratory setup, then a complete Sandbox developer workflow from authentication to a released result and reconciled events.
On this page
- In the Control Plane
- 1. Sandbox versus Production
- 2. Get Sandbox access and a key
- 3. Authenticate
- 4. Inspect laboratory configuration
- 5. Discover Programs
- 6. Read the Program Catalog
- 7. Check requirements and serviceability
- 8. Create a synthetic Sandbox order
- 9. Observe the order lifecycle
- 10. Retrieve the released result
- 11. Configure a webhook
- 12. Reconcile events
- 13. Move to Production
- Qualification before real laboratory traffic
In the Control Plane
Laboratory setup is lab-first and has six steps: Laboratory information → Testing capabilities → Fulfillment → Test your setup → Connect your laboratory → Production readiness.
- Laboratory information — create the account and workspace, then complete the laboratory profile.
- Testing capabilities — add orderable tests, specimen, turnaround and laboratory code mappings in the Catalog.
- Fulfillment — configure collection models, service geography and serviceable locations.
- Test your setup — use synthetic Sandbox data to rehearse serviceability, ordering, specimen and result behavior.
- Connect your laboratory — configure the HTTPS/JSON contract (the executable self-service path) or request a managed HL7 v2, FHIR or SFTP/file integration. A managed request is tracked but does not create a live interface; native transports are implemented but not enabled (see Connectivity status). A passing connection test proves reachability and authentication, not LIS acceptance of real orders.
- Production readiness — complete technical readiness and Sandbox/integration testing at no charge. Production authorization is a separate, governed commercial step and is currently paused; native installations additionally require the evidence in Installation validation & go-live.
- Programs are not required to complete the core laboratory setup; they are configured when the laboratory offers testing through a partner or channel.
- Standard DTC and Solia On Demand are optional channels and are never required laboratory setup steps.
- Partner API client, credential and webhook configuration is a later operational workflow where a partner integration applies.
Activation preserves the completed six-step journey in the companion Sandbox and creates the live Production workspace. Production Partner API setup then becomes a separate post-live workflow.
1. Sandbox versus Production
Every key, record and event belongs to exactly one environment. Sandbox keys start with sk_sandbox and only reach synthetic Sandbox data; Production keys start with sk_live and are issued only after the laboratory is live. Build and test the whole workflow below in Sandbox first.
2. Get Sandbox access and a key
- Create a workspace from Explore Sandbox, or ask the laboratory you integrate with to register your API client.
- In Integrations → API clients the laboratory grants your client one or more Programs and issues a Sandbox key with the scopes you need.
- Store the key in your server-side secret store. It is shown once.
export SOLIA_API_BASE="https://app.soliadirect.com/api/public/partner/v1"
export SOLIA_API_KEY="<sandbox key from the Control Plane>"SOLIA_API_BASE already ends in the API version, so every path below starts after it ($SOLIA_API_BASE/health, never $SOLIA_API_BASE/v1/health). Later steps set PROGRAM_ID, ITEM_ID, REGION, COLLECTION, ORDER_ID and LAST_CURSOR from earlier responses.
3. Authenticate
/v1/healthVerify credentials and environmentcurl -s "$SOLIA_API_BASE/health" \
-H "Authorization: Bearer $SOLIA_API_KEY"A valid key returns its environment inside data and a request_id. An invalid, expired or revoked key returns 401 unauthorized; an inactive client or environment mismatch returns 403 forbidden.
See API Reference → api-reference/health for the full generated schema, statuses and errors.
4. Inspect laboratory configuration
/v1/labRetrieve the laboratory capability profile (scope catalog:read)/v1/locationsList externally serviceable collection locations (scope serviceability:read)curl -s "$SOLIA_API_BASE/lab" \
-H "Authorization: Bearer $SOLIA_API_KEY"5. Discover Programs
/v1/programsList Programs this key may order from (scope programs:read)curl -s "$SOLIA_API_BASE/programs" \
-H "Authorization: Bearer $SOLIA_API_KEY"Only granted Programs appear. An empty list means no grant exists in this environment yet — ask the laboratory to grant one; it is not an error.
6. Read the Program Catalog
/v1/programs/{programId}/catalogList orderable tests in a Program (scope catalog:read)curl -s "$SOLIA_API_BASE/programs/$PROGRAM_ID/catalog" \
-H "Authorization: Bearer $SOLIA_API_KEY"Keep the returned item identifier; orders reference it as item_id.
7. Check requirements and serviceability
/v1/programs/{programId}/requirementsDiscover what an order must carry (scope catalog:read)/v1/serviceabilityCheck whether a location and test can be fulfilled (scope serviceability:read)curl -s -X POST "$SOLIA_API_BASE/serviceability" \
-H "Authorization: Bearer $SOLIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"program_id":"'"$PROGRAM_ID"'","item_id":"'"$ITEM_ID"'","region":"'"$REGION"'","collection":"'"$COLLECTION"'"}'program_id and item_id are schema-required. Although region and collection are schema-optional, eligibility requires both; missing values return region_required or collection_required. Treat a not-serviceable or manual-review answer as final — do not reimplement clinical or jurisdiction rules client-side.
8. Create a synthetic Sandbox order
/v1/sandbox/order-fixturesList synthetic order-request fixtures (Sandbox only)/v1/ordersCreate an order (scope orders:write)curl -s -X POST "$SOLIA_API_BASE/orders" \
-H "Authorization: Bearer $SOLIA_API_KEY" \
-H "Idempotency-Key: order-1001" \
-H "Content-Type: application/json" \
-d '{"external_order_id":"order-1001","program_id":"'"$PROGRAM_ID"'","item_id":"'"$ITEM_ID"'","external_subject_id":"subject-1001","collection":"'"$COLLECTION"'"}'- Required fields:
external_order_id,program_id,item_id,external_subject_id,collection. Add patient, provider or question answers only when the requirements response asks for them. - Reusing an Idempotency-Key with the same body returns the original order; with a different body it returns
409 conflict. 422 unprocessablemeans the order failed governed requirements;404 not_foundcan mean the Program is not granted to this key.
See API Reference → api-reference/orders for the full generated schema, statuses and errors.
9. Observe the order lifecycle
/v1/sandbox/orders/{orderId}/simulateAdvance a synthetic order through a scenario (Sandbox only)/v1/orders/{orderId}Retrieve order status (scope orders:read)curl -s -X POST "$SOLIA_API_BASE/sandbox/orders/$ORDER_ID/simulate" \
-H "Authorization: Bearer $SOLIA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"scenario":"happy_path"}'Available scenarios: happy_path, partial_then_final, specimen_rejection_recollection, critical_result, transmission_failure_then_retry, corrected_result, webhook_failure_then_replay, specimen_rejected.
10. Retrieve the released result
/v1/orders/{orderId}/resultsRetrieve released structured results (scope results:read)curl -s "$SOLIA_API_BASE/orders/$ORDER_ID/results" \
-H "Authorization: Bearer $SOLIA_API_KEY"Only released versions are returned. Treat the highest released version as current and retrieve the governed report per request.
11. Configure a webhook
Register your public HTTPS endpoint for your client and environment (the laboratory can do this in Integrations → Webhooks, or an authorized Health Company member in the workspace), select event types and store the one-time signing secret securely. Verify every delivery as shown in Webhooks & event reconciliation.
12. Reconcile events
/v1/eventsRead the event stream for reconciliation (scope events:read)curl -s "$SOLIA_API_BASE/events?limit=50&cursor=$LAST_CURSOR" \
-H "Authorization: Bearer $SOLIA_API_KEY"Persist next_cursor after each page. After any outage, replay from your last cursor, then re-read the affected orders and results.
13. Move to Production
After the laboratory activates, it grants your client a Production Program and issues a Production key with multi-factor step-up. Swap the key and webhook secret; your code and paths stay the same. Sandbox fixtures and simulation are not available in Production. See Sandbox to Production.
Limitation
Production promotion is currently paused while an operator-led end-to-end verification is completed. Production orders also require the laboratory to have a validated Production connection; today that means the HTTPS/JSON contract. Native REST, FHIR, HL7 v2/MLLP, SFTP and Edge connections are implemented but not enabled — see Connectivity status and Installation validation & go-live.
Qualification before real laboratory traffic
Start with the current authorized Sandbox Program/catalog and generated request examples. Do not send real laboratory traffic from a candidate profile: installed authority, vendor ACK/callback/finality, clinical review and separate launch approval remain prerequisites.