# Phenoml developer hub Documentation > Documentation for Phenoml developer hub Append .md to any documentation page URL to get its markdown version. ## Guides - [๐ŸŒ Overview](https://developer.pheno.ml/docs/overview.md): This page will help you get started with PhenoML! - [๐Ÿฉบ Medical Codes](https://developer.pheno.ml/docs/medical-codes.md): Extract codes from natural language using our Med RAG as an API - [๐Ÿ‘ฅ Patient Cohorts](https://developer.pheno.ml/docs/patient-cohorts.md): Search for patient cohorts using natural language - [๐Ÿ”Ž FHIR Search](https://developer.pheno.ml/docs/fhir-search.md): Generate FHIR searches from natural language - [๐Ÿ”ƒ FHIR Resources](https://developer.pheno.ml/docs/fhir-resources.md): Create FHIR resources from natural language - [๐Ÿ’ฌ AI agent](https://developer.pheno.ml/docs/agent.md): Create agents using PhenoAgent API - [Workflow](https://developer.pheno.ml/docs/workflow.md): Map and transform data or orchestrate complex actions using workflows API - [๐Ÿ”ฆ Construe](https://developer.pheno.ml/docs/construe.md): Extract codes using Construe- our Med RAG as an API - [๐Ÿค– PhenoAgent](https://developer.pheno.ml/docs/phenoagent.md): Create customizable FHIR integrated agents with reusable prompts and integrations - [Workflows](https://developer.pheno.ml/docs/workflows.md): Map and transform data or orchestrate complex actions using workflows API - [๐ŸŽฅ Demos](https://developer.pheno.ml/docs/demos.md) - [๐Ÿฉบ Symptom-to-SNOMED on Construe](https://developer.pheno.ml/docs/symptom-to-snomed.md): How we built a symptom-to-SNOMED demo on Construe, and the chunking, validation, and codes-per-chunk decisions that actually mattered - [๐Ÿ”Œ Keragon Connector](https://developer.pheno.ml/docs/keragon-connector.md): Extract medical codes using PhenoML through the Keragon platform - [โ” Support](https://developer.pheno.ml/docs/support.md) - [๐Ÿ“Š Benchmarking](https://developer.pheno.ml/docs/benchmarking.md) - [๐Ÿ”Œ MCP](https://developer.pheno.ml/docs/mcp.md) - [๐Ÿ˜Ž What's coming next?](https://developer.pheno.ml/docs/whats-coming-next.md): The future of healthcare is conversational! ## API Reference - [List all workflows](https://developer.pheno.ml/reference/list-2.md): Retrieves all workflow definitions for the authenticated user - [Create new workflow](https://developer.pheno.ml/reference/create-5.md): Creates a new workflow definition with graph generation from workflow instructions - [Get workflow by ID](https://developer.pheno.ml/reference/get-2.md): Retrieves a workflow definition by its ID - [Update workflow](https://developer.pheno.ml/reference/update-1.md): Updates an existing workflow definition - [Delete workflow](https://developer.pheno.ml/reference/delete-3.md): Deletes a workflow definition by its ID - [Execute workflow](https://developer.pheno.ml/reference/execute.md): Executes a workflow with provided input data and returns results - [Read or search FHIR resources](https://developer.pheno.ml/reference/search.md): Retrieves FHIR resources from the specified provider. Supports both individual resource retrieval (e.g. `Patient/123` via the path) and search operations. FHIR search parameters are passed through to the upstream server verbatim as native query-string parameters; this proxy does not model, validate, or transform them. Append standard FHIR search parameters directly to the request URL. Supported parameters include: - Resource-specific search parameters (e.g. `name` for Patient, `status` for Observation) - Common search parameters (`_id`, `_lastUpdated`, `_tag`, `_profile`, `_security`, `_text`, `_content`, `_filter`) - Result parameters (`_count`, `_offset`, `_sort`, `_include`, `_revinclude`, `_summary`, `_elements`) - Search prefixes for dates, numbers, and quantities (`eq`, `ne`, `gt`, `ge`, `lt`, `le`, `sa`, `eb`, `ap`) Examples: - `Patient?name=John%20Doe&_count=10&_sort=family` - `Observation?patient=Patient/123&date=ge2023-01-01&category=vital-signs&_sort=-date` When using a generated SDK, supply these via the client's request-level query-parameter option (the SDK escape hatch) rather than a typed argument. The request is proxied to the configured FHIR server with appropriate authentication headers. - [Create FHIR resource](https://developer.pheno.ml/reference/create-1.md): Creates a new FHIR resource on the specified provider. The request body should contain a valid FHIR resource in JSON format. The request is proxied to the configured FHIR server with appropriate authentication headers. - [Upsert FHIR resource](https://developer.pheno.ml/reference/upsert.md): Creates or updates a FHIR resource on the specified provider. If the resource exists, it will be updated; otherwise, it will be created. The request is proxied to the configured FHIR server with appropriate authentication headers. - [Patch FHIR resource](https://developer.pheno.ml/reference/patch-1.md): Partially updates a FHIR resource on the specified provider. Two body formats are supported, selected by request content type: - `application/json-patch+json` โ€” an array of JSON Patch operations as defined in RFC 6902. Each operation specifies: - `op`: The operation type (add, remove, replace, move, copy, test) - `path`: JSON Pointer to the target location in the resource - `value`: The value to use (required for add, replace, and test operations) - `application/fhir+json` โ€” a partial FHIR resource for merge-patch semantics. **Note:** This proxy currently forwards the request body to the upstream FHIR server with `Content-Type: application/fhir+json` regardless of the declared request content type. JSON Patch (RFC 6902) therefore only succeeds against upstream servers that accept patch arrays under `application/fhir+json`; servers that strictly enforce patch media types may reject or misinterpret it. Support for either format ultimately depends on the upstream FHIR server. The request is proxied to the configured FHIR server with appropriate authentication headers. - [Delete FHIR resource](https://developer.pheno.ml/reference/delete-1.md): Deletes a FHIR resource from the specified provider. The request is proxied to the configured FHIR server with appropriate authentication headers. - [Execute FHIR bundle operation](https://developer.pheno.ml/reference/executebundle.md): Executes a FHIR Bundle transaction or batch operation on the specified provider. This allows multiple FHIR resources to be processed in a single request. The request body should contain a valid FHIR Bundle resource with transaction or batch type. The request is proxied to the configured FHIR server with appropriate authentication headers. - [Create FHIR provider](https://developer.pheno.ml/reference/create-2.md): Creates a new FHIR provider configuration with authentication credentials. Note: The "sandbox" provider type cannot be created via this API - it is managed internally. - [Get FHIR provider by ID](https://developer.pheno.ml/reference/get-1.md): Retrieves a specific FHIR provider configuration by its ID. Sandbox providers return FhirProviderSandboxInfo. On shared instances, only sandbox providers can be accessed. - [Delete FHIR provider](https://developer.pheno.ml/reference/delete-2.md): Deletes a FHIR provider. Note: Sandbox providers cannot be deleted. - [List FHIR providers](https://developer.pheno.ml/reference/list-1.md): Retrieves a list of all active FHIR providers for the authenticated user. On shared instances, only sandbox providers are returned. Sandbox providers return FhirProviderSandboxInfo. - [Add authentication configuration](https://developer.pheno.ml/reference/add.md): Adds a new authentication configuration to an existing FHIR provider. This enables key rotation and multiple auth configurations per provider. Note: Sandbox providers cannot be modified. - [Set active authentication configuration](https://developer.pheno.ml/reference/setactive.md): Sets which authentication configuration should be active for a FHIR provider. Only one auth config can be active at a time. If the specified auth config is already active, the request succeeds without making any changes and returns a message indicating the config is already active. Note: Sandbox providers cannot be modified. - [Remove authentication configuration](https://developer.pheno.ml/reference/remove.md): Removes an authentication configuration from a FHIR provider. Cannot remove the currently active auth configuration. Note: Sandbox providers cannot be modified. - [Analyze text for patient cohort criteria](https://developer.pheno.ml/reference/analyze.md): Converts natural language text into structured FHIR search queries for patient cohort analysis - [Create a new summary template](https://developer.pheno.ml/reference/createtemplate.md): Creates a summary template from an example using LLM function calling - [Generate a summary from FHIR resources](https://developer.pheno.ml/reference/create-4.md): Creates a summary from FHIR resources using one of three modes: - **narrative**: Uses a template to substitute FHIR data into placeholders (requires template_id) - **flatten**: Flattens FHIR resources into a searchable format for RAG/search (no template needed) - **ips**: Generates an International Patient Summary (IPS) narrative per ISO 27269/HL7 FHIR IPS IG. Requires a Bundle with exactly one Patient resource (returns 400 error if no Patient or multiple Patients are present). Automatically filters resources to those referencing the patient and generates sections for allergies, medications, problems, immunizations, procedures, and vital signs. - [List all summary templates](https://developer.pheno.ml/reference/list-4.md): Retrieves all summary templates for the authenticated user - [Get a summary template by ID](https://developer.pheno.ml/reference/get-3.md): Retrieves a specific summary template - [Update a summary template](https://developer.pheno.ml/reference/update-2.md): Updates an existing summary template - [Delete a summary template](https://developer.pheno.ml/reference/delete-5.md): Deletes a summary template - [Chat with agent](https://developer.pheno.ml/reference/send.md): Send a message to an agent and receive a JSON response. - [Chat with agent (streaming)](https://developer.pheno.ml/reference/stream.md): Send a message to an agent and receive the response as a Server-Sent Events (SSE) stream. Events include message_start, content_delta, tool_use, tool_result, message_end, and error. - [Get chat messages](https://developer.pheno.ml/reference/listmessages.md): Retrieves a list of chat messages for a given chat session - [Create a new agent](https://developer.pheno.ml/reference/create.md): Creates a new PhenoAgent with specified configuration - [Get agent by ID](https://developer.pheno.ml/reference/get.md): Retrieves a specific agent by its ID - [Update agent](https://developer.pheno.ml/reference/update.md): Updates an existing agent's configuration - [Delete agent](https://developer.pheno.ml/reference/delete.md): Deletes an existing agent - [Patch agent](https://developer.pheno.ml/reference/patch.md): Patches an existing agent's configuration - [List agents](https://developer.pheno.ml/reference/list.md): Retrieves a list of PhenoAgents belonging to the authenticated user - [Create agent prompt](https://developer.pheno.ml/reference/createprompt.md): Creates a new agent prompt - [List agent prompts](https://developer.pheno.ml/reference/listprompts.md): Retrieves a list of agent prompts belonging to the authenticated user - [Get prompt by ID](https://developer.pheno.ml/reference/getprompt.md): Retrieves a specific prompt by its ID - [Update prompt](https://developer.pheno.ml/reference/updateprompt.md): Updates an existing prompt - [Patch prompt](https://developer.pheno.ml/reference/patchprompt.md): Patches an existing prompt - [Delete prompt](https://developer.pheno.ml/reference/deleteprompt.md): Deletes a prompt - [Generate authentication token](https://developer.pheno.ml/reference/getlegacytoken.md): Generates a JWT token using Basic Authentication with API credential client ID and secret. - [Request an access token](https://developer.pheno.ml/reference/gettoken.md): OAuth 2.0 client credentials token endpoint (RFC 6749 ยง4.4). Accepts client_id and client_secret in the request body (JSON or form-encoded) or via Basic Auth header (RFC 6749 ยง2.3.1), and returns an access token with token expiration information. - [List codes in a code system](https://developer.pheno.ml/reference/listcodes.md): Returns a paginated list of all codes in the specified code system from the terminology server. Usage of CPT is subject to AMA requirements: see PhenoML Terms of Service. - [Semantic search (embedding-based)](https://developer.pheno.ml/reference/searchsemantic.md): Performs semantic similarity search using vector embeddings. **Availability**: This endpoint works for both **built-in and custom** code systems. **When to use**: Best for natural language queries where you want to find conceptually related codes, even when different terminology is used. The search understands meaning, not just keywords. **Examples**: - Query "trouble breathing at night" finds codes like "Sleep apnea", "Orthopnea", "Nocturnal dyspnea" โ€” semantically related but no exact keyword matches - Query "heart problems" finds "Myocardial infarction", "Cardiac arrest", "Arrhythmia" **Trade-offs**: Slower than text search (requires embedding generation), but finds conceptually similar results that keyword search would miss. See also: `/search/text` for faster keyword-based lookup with typo tolerance. Usage of CPT is subject to AMA requirements: see PhenoML Terms of Service. - [Text search (keyword-based)](https://developer.pheno.ml/reference/searchtext.md): Performs fast full-text search over code IDs and descriptions. **Availability**: This endpoint is only available for **built-in code systems**. Custom code systems uploaded via `/construe/upload` are not indexed for full-text search and will return empty results. Use `/search/semantic` to search custom code systems. **When to use**: Best for autocomplete UIs, code lookup, or when users know part of the code ID or specific keywords. Fast response times suitable for typeahead interfaces. **Features**: - Substring matching on code IDs (e.g., "11.65" finds "E11.65") - Typo tolerance on descriptions (not on code IDs) - Fast response times (~10-50ms) **Examples**: - Query "E11" finds all codes starting with E11 (diabetes codes) - Query "diabtes" (typo) still finds "diabetes" codes **Trade-offs**: Faster than semantic search, but only matches keywords/substrings. Won't find conceptually related codes with different terminology. See also: `/search/semantic` for finding conceptually similar codes. Usage of CPT is subject to AMA requirements: see PhenoML Terms of Service. - [Submit feedback on extraction results](https://developer.pheno.ml/reference/submitfeedback.md): Submits user feedback on results from the Construe extraction endpoint. Feedback includes the full extraction result received and the result the user expected. - [Upload custom code system](https://developer.pheno.ml/reference/upload.md): Upload a custom medical code system with codes and descriptions for use in code extraction. Requires a paid plan. Returns 202 immediately; embedding generation runs asynchronously. Poll GET /construe/codes/systems/{codesystem}?version={version} to check when status transitions from "processing" to "ready" or "failed". - [List available code systems](https://developer.pheno.ml/reference/list-3.md): Returns the terminology server's catalog of available code systems, including both built-in standard terminologies and custom uploaded systems. - [Get code system detail](https://developer.pheno.ml/reference/find.md): Returns full metadata for a single code system, including timestamps and builtin status. - [Delete custom code system](https://developer.pheno.ml/reference/delete-4.md): Deletes a custom (non-builtin) code system and all its codes. Builtin systems cannot be deleted. Only available on dedicated instances. Large systems may take up to a minute to delete. - [Export custom code system](https://developer.pheno.ml/reference/export.md): Exports a custom (non-builtin) code system as a JSON file compatible with the upload format. The exported file can be re-uploaded directly via POST /construe/upload with format "json". Only available on dedicated instances. Builtin systems cannot be exported. - [Extract medical codes from text](https://developer.pheno.ml/reference/extract.md): Converts natural language text into structured medical codes. Pass `system.version` to select a specific code system version, for example `umls-2026aa` for UMLS 2026AA-backed systems. Usage of CPT is subject to AMA requirements: see PhenoML Terms of Service. - [Get a specific code](https://developer.pheno.ml/reference/lookup.md): Looks up a specific code in the terminology server and returns its details. Usage of CPT is subject to AMA requirements: see PhenoML Terms of Service. - [[Alpha] Extract medical codes with phenocr](https://developer.pheno.ml/reference/phenocr.md): **Alpha:** phenocr is an alpha feature. The API contract โ€” request parameters and response shape โ€” may change as its internals evolve, and results may vary between releases. Do not depend on it for production workloads yet. Extracts medical codes from natural language clinical text using phenocr. Supported code systems: HPO, ICD-10-CM, RXNORM, and SNOMED_CT_US. The code system name and version are both required. - [Crosswalk a code to target code systems](https://developer.pheno.ml/reference/crosswalk.md): Maps one source medical code to one or more target code-system URIs using shared UMLS CUIs. A successful response is HTTP 200 even when the source code or a target has no matches; inspect `reason_code` on the item and target entries for miss details. Usage of CPT is subject to AMA requirements: see PhenoML Terms of Service. - [Create FHIR resource from text](https://developer.pheno.ml/reference/create-3.md): Converts natural language text into a structured FHIR resource. **Patient identifier handling.** When generating a `patient` (or `patient-canvas`) resource, US Core requires `Patient.identifier` (a business identifier such as an MRN). When the source text contains an identifier, it is extracted with an appropriate URI system. When the source text does not contain a detectable identifier, a synthetic one is generated with `system: "urn:phenoml:lang2fhir-generated-id"` and a UUID `value` so the resource remains FHIR-valid and US Core conformant. Callers who need a tenant-specific namespace should rewrite the synthetic system after extraction. - [Extract multiple FHIR resources from text](https://developer.pheno.ml/reference/createmulti.md): Analyzes natural language text and extracts multiple FHIR resources, returning them as a transaction Bundle. Automatically detects Patient, Condition, MedicationRequest, Observation, and other resource types from the text. Resources are linked with proper references (e.g., Conditions reference the Patient). **Patient identifier handling.** US Core requires `Patient.identifier` (a business identifier such as an MRN). When the source text contains an identifier, it is extracted with an appropriate URI system. When the source text does not contain a detectable identifier, a synthetic one is generated with `system: "urn:phenoml:lang2fhir-generated-id"` and a UUID `value` so the bundle remains FHIR-valid and US Core conformant. Callers who need a tenant-specific namespace should rewrite the synthetic system after extraction. - [Convert document to FHIR resource](https://developer.pheno.ml/reference/document.md): Extracts text from a document (PDF or image) and converts it into a structured FHIR resource. **Patient identifier handling.** When generating a `patient` (or `patient-canvas`) resource, US Core requires `Patient.identifier` (a business identifier such as an MRN). When the source text contains an identifier, it is extracted with an appropriate URI system. When the source text does not contain a detectable identifier, a synthetic one is generated with `system: "urn:phenoml:lang2fhir-generated-id"` and a UUID `value` so the resource remains FHIR-valid and US Core conformant. Callers who need a tenant-specific namespace should rewrite the synthetic system after extraction. - [Extract multiple FHIR resources from a document](https://developer.pheno.ml/reference/documentmulti.md): Extracts text from a document (PDF or image) and converts it into multiple FHIR resources, returned as a transaction Bundle. Combines document text extraction with multi-resource detection. Automatically detects Patient, Condition, MedicationRequest, Observation, and other resource types. Resources are linked with proper references (e.g., Conditions reference the Patient). **Patient identifier handling.** US Core requires `Patient.identifier` (a business identifier such as an MRN). When the source text contains an identifier, it is extracted with an appropriate URI system. When the source text does not contain a detectable identifier, a synthetic one is generated with `system: "urn:phenoml:lang2fhir-generated-id"` and a UUID `value` so the bundle remains FHIR-valid and US Core conformant. Callers who need a tenant-specific namespace should rewrite the synthetic system after extraction. **Split classifications (optional).** `config.split_classifications` is a caller-defined list, not a fixed taxonomy. Choose each classification `id` and write a natural-language `description` for the per-page classifier. For each page, the classifier assigns the best-matching classification or leaves the page ungrouped. Classifications with `operation: "group"` keep matching pages and label resources extracted from those pages; classifications with `operation: "drop"` remove matching pages before extraction. The `clinical` and `admin` ids in the example are illustrative, not a fixed set. - [Upload custom FHIR profile (deprecated)](https://developer.pheno.ml/reference/uploadprofile.md): **Deprecated โ€” use `POST /fhir/profiles` instead.** This route continues to work and operates on the same custom profiles, so no migration is required; it will be removed in a future release. Note that `POST /fhir/profiles` does not accept `profile_context`; set implementation-guide context with `PUT /fhir/implementation-guides/{name}`. Upload a custom FHIR StructureDefinition profile for use with the lang2fhir service. All metadata is derived from the StructureDefinition JSON itself. The lowercase `id` field from the StructureDefinition is used as the profile's unique identifier and lookup key. To use the uploaded profile with `/lang2fhir/create`, pass this id as the `resource` parameter. Uploads will be rejected if: - A built-in US Core or R4 base profile already exists with the same id - A custom profile with the same id has already been uploaded - A custom profile with the same url has already been uploaded - [Generate FHIR search parameters from text](https://developer.pheno.ml/reference/search-1.md): Converts natural language text into FHIR search parameters. Automatically identifies the appropriate FHIR resource type and generates valid search query parameters. Supported resource types include: AllergyIntolerance, Appointment, CarePlan, CareTeam, Condition, Coverage, Device, DiagnosticReport, DocumentReference, Encounter, Goal, Immunization, Location, Medication, MedicationRequest, Observation, Organization, Patient, PlanDefinition, Practitioner, PractitionerRole, Procedure, Provenance, Questionnaire, QuestionnaireResponse, RelatedPerson, Schedule, ServiceRequest, Slot, and Specimen. - [Analyze patient cohorts](https://developer.pheno.ml/reference/analyzecohort.md): Uses LLM to extract search concepts from natural language and builds patient cohorts with inclusion/exclusion criteria - [Create FHIR resource from text and store it](https://developer.pheno.ml/reference/createfhirresource.md): Converts natural language to FHIR resource and optionally stores it in a FHIR server - [Extract and store multiple FHIR resources](https://developer.pheno.ml/reference/createfhirresourcesmulti.md): Extracts multiple FHIR resources from natural language text and stores them in a FHIR server. Automatically detects Patient, Condition, MedicationRequest, Observation, and other resource types. Resources are linked with proper references and submitted as a transaction bundle. For FHIR servers that don't auto-resolve urn:uuid references, this endpoint will automatically resolve them via PUT requests after the initial bundle creation. - [Search FHIR resources from natural language](https://developer.pheno.ml/reference/searchfhirresources.md): Converts natural language to FHIR search parameters and executes search in FHIR server - [Create MCP server](https://developer.pheno.ml/reference/create-6.md): Creates a new MCP server - [List MCP servers](https://developer.pheno.ml/reference/list-5.md): Lists all MCP servers for a specific user - [Get MCP server by ID](https://developer.pheno.ml/reference/get-4.md): Gets a MCP server by ID - [Delete MCP server by ID](https://developer.pheno.ml/reference/delete-6.md): Deletes a MCP server by ID - [List MCP server tools](https://developer.pheno.ml/reference/listtools.md): Lists all MCP server tools for a specific MCP server - [Get MCP server tool by ID](https://developer.pheno.ml/reference/gettool.md): Gets a MCP server tool by ID - [Delete MCP server tool by ID](https://developer.pheno.ml/reference/deletetool.md): Deletes a MCP server tool by ID - [Map FHIR resources to OMOP CDM v5.4](https://developer.pheno.ml/reference/create-7.md): Maps a FHIR R4 resource or Bundle into OMOP Common Data Model v5.4 rows (person, visit_occurrence, condition_occurrence, drug_exposure, procedure_occurrence, measurement, observation). Resource support is intentionally limited to the OMOP tables returned by this endpoint: - `Patient` -> `person` - `Encounter` -> `visit_occurrence` - `Condition` -> `condition_occurrence` - `Procedure` -> `procedure_occurrence` - `MedicationRequest`, `MedicationStatement`, and `MedicationAdministration` -> `drug_exposure` - `Immunization` -> `drug_exposure` - `Observation` with a numeric `valueQuantity`, `valueInteger`, or numeric-looking `valueString` (for example `"<2"`) -> `measurement` - non-numeric `Observation` -> `observation` - `AllergyIntolerance` -> `observation` `Medication` is supported only as reference data for medication resources; it is not emitted as its own row because OMOP CDM has no Medication table. Other reference/admin resources such as `Practitioner`, `Organization`, `Location`, `Coverage`, and `Claim`, and clinical workflow/document resources such as `DiagnosticReport`, `ServiceRequest`, `CarePlan`, `DocumentReference`, `Composition`, `Specimen`, and `DeviceUseStatement`, are currently accepted in a Bundle but are not shaped into OMOP rows. Unsupported resource types are ignored rather than listed under `dropped`; `dropped` is reserved for supported resource types that were missing the subject/patient, code, or medication reference data needed to produce a valid row. Each resource's primary clinical coding is resolved to a standard OMOP `concept_id`. Alongside the OMOP rows grouped by table (`tables`), the response carries `mappings` (how each source coding resolved, linked back to the row it produced), `dropped` (resources that could not be shaped into a row), `vocab_version` (the OMOP vocabulary release codes were resolved against), and a small `summary` of the resolution outcomes. A `concept_id` of `0` is reported, not omitted (OMOP "no matching concept" semantics): it covers both a coding with no standard match (`UNMAPPED`) and an unverified suggestion for a text-only resource (`UNCHECKED`). Only the primary clinical coding is resolved, so `gender`/`race`/`ethnicity`/`visit`/`value`/`unit` `concept_id`s are always `0`; the one populated non-resolved concept is measurement `operator_concept_id`, set from a value comparator (`<`, `<=`, `>`, `>=`) rather than the resolver. Each `*_source_value` carries the verbatim FHIR coding (`system#code`), and `*_type_concept_id` is set to `32817` (EHR). Medication codes are resolved whether they appear inline (`medicationCodeableConcept`) or via a `medicationReference` to a contained, relative (`Type/id`), or bundle-entry (`urn:uuid`) `Medication` resource. Resources that cannot be shaped into a row โ€” a medication with no usable code, resolvable reference, or display, or any clinical resource whose subject/patient reference cannot be tied to a person โ€” are reported under `dropped` rather than emitted as blank rows. The bundle must contain at least one Patient resource. - [Transcribe audio](https://developer.pheno.ml/reference/transcribe.md): Transcribes an uploaded audio recording and returns the transcript. Send the raw audio bytes as the request body; the audio format is detected automatically (WAV, FLAC, MP3, OGG/WebM Opus). Supports up to ~5 minutes of audio per request. This limit is on audio duration regardless of file size or format, so a compressed recording within the size limit can still be rejected for being too long. Pair the transcript with a downstream text step (e.g. `POST /lang2fhir/create`) to turn it into a FHIR resource. - [List implementation guides](https://developer.pheno.ml/reference/list-6.md): Returns every implementation guide on this instance โ€” both guides that have stored metadata (a profile_context) and guides referenced by at least one custom profile โ€” with the number of profiles in each. - [Get an implementation guide](https://developer.pheno.ml/reference/get-5.md): Returns a single implementation guide, including its profile_context and the ids of the profiles that belong to it. - [Set an implementation guide's profile context](https://developer.pheno.ml/reference/update-3.md): Sets (or clears, with an empty value) the natural-language profile_context for an implementation guide. The context is injected into the LLM during resource detection to help select the right profiles from this guide. It applies to every profile in the guide. - [Delete an implementation guide's metadata](https://developer.pheno.ml/reference/delete-7.md): Deletes the stored metadata for an implementation guide โ€” its profile_context and timestamps. Member profiles keep their implementation_guide assignment, so a guide still referenced by at least one profile continues to appear in listings, just without context or timestamps. - [List custom FHIR profiles](https://developer.pheno.ml/reference/list-7.md): Returns metadata for every custom (uploaded) FHIR profile on this instance, across all implementation guides. The full StructureDefinition JSON is omitted from each entry; fetch a single profile by id to retrieve it. The `url` query parameter filters by canonical URL. The canonical URL is the stable key other platform features use to reference a profile (FHIR's `meta.profile`, `baseDefinition`), since StructureDefinition ids are only unique within a package. A non-matching filter returns an empty list, not a 404. - [Upload a custom FHIR profile](https://developer.pheno.ml/reference/create-8.md): Creates a custom profile from a FHIR StructureDefinition supplied as a JSON object. Metadata such as version, resource type, and url is read from the StructureDefinition; the lowercase StructureDefinition id becomes the profile's lookup key. When id is omitted, a random UUID is assigned. Code system configuration is auto-extracted from the snapshot. Optionally group the profile under a named implementation guide. - [Get a custom FHIR profile](https://developer.pheno.ml/reference/get-6.md): Returns a single custom profile by id, including its full StructureDefinition JSON. - [Update a custom FHIR profile](https://developer.pheno.ml/reference/update-4.md): Replaces an existing custom profile with a new StructureDefinition. The `id` path parameter is authoritative: if the StructureDefinition includes an `id` it must match the path parameter, and if it omits one the path parameter is used. The FHIR resource type of the profile cannot change. Code system configuration is re-derived from the new StructureDefinition. When `implementation_guide` is omitted, the profile keeps its existing implementation guide. The instance stores a single version per canonical URL, so this replaces it in place. - [Delete a custom FHIR profile](https://developer.pheno.ml/reference/delete-8.md): Permanently deletes a custom profile by id. ## Changelog - [Feedback API for Construe](https://developer.pheno.ml/changelog/feedback-api-for-construe.md) - [lang2fhir document now supports multiple resource reactions](https://developer.pheno.ml/changelog/lang2fhir-document-now-supports-multiple-resource-reactions.md) - [Enhanced Reasoning for Agent Chat](https://developer.pheno.ml/changelog/enhanced-reasoning-for-agent-chat.md) - [Streaming Agent Chat](https://developer.pheno.ml/changelog/streaming-agent-chat.md) - [Construe has a built-in terminology server!](https://developer.pheno.ml/changelog/construe-has-a-built-in-terminology-server.md) - [Automatic File Type Detection for lang2FHIR Document Upload](https://developer.pheno.ml/changelog/automatic-file-type-detection-for-lang2fhir-document-upload.md) - [Code Citations for Construe Extraction](https://developer.pheno.ml/changelog/code-citations-for-construe-extraction.md) - [lang2FHIR now supports extracting multiple FHIR resources](https://developer.pheno.ml/changelog/lang2fhir-now-supports-extracting-multiple-fhir-resources.md) - [International Patient Summary Mode for fhir2summary](https://developer.pheno.ml/changelog/international-patient-summary-mode-for-fhir2summary.md) - [Claude Code Plugin!](https://developer.pheno.ml/changelog/claude-code-plugin.md)