PracticeSuite Upload Document
This document coverspracticesuite_upload_document, the native PracticeSuite document-attachment tool exposed through the Agents Platform.
Authentication
Uses the PracticeSuite connector (client_id, client_secret, environment). See practicesuite-save-patient.md for connection details and for the canonical patient_pcref derivation algorithm.
practicesuite_upload_document
Attaches a document to a patient’s Documents tab via POST /v2/api/patient/patientDocUpload. This is a mutating tool.
The identifier this tool requires
patient_id here is PracticeSuite’s internal patient UUID (e.g. 196CCD0A90FB2053E0630100007FD249), obtained from practicesuite_get_patient. The natural key (patient_pcref) used by the patient and appointment tools is not accepted and would target the wrong record. The parameters are deliberately named differently to keep them apart.
Inputs
Required:account_id— practice tenant holding the patient.patient_id— PracticeSuite’s internal UUID frompracticesuite_get_patient.file_url— URL of the file to attach. The platform downloads it and sends it Base64-encoded.
file_name— name to store the document under. Defaults to the file’s own name from the URL.document_type— PracticeSuite document type. Defaults toOther.document_date—MM/DD/YYYY. Defaults to today.descriptionprovider_code— file the document under a specific provider.
access_token, client_id, client_secret and environment are injected from the integration and hidden from the model.
Output
response_code; codes are populated on failure and are bare numbers (1013, 1020). Some failures carry no code at all and put everything in the message — save_appointment reports an unknown provider as Code: 100. Message: Provider Not Found.
The rendered result also reports the uploaded file name and size. A success: false body becomes a tool error carrying response_code and response_msg.
Limits and caveats
- The file is base64-encoded and sent in a single JSON request, so the whole document is held in memory. Uploads are capped at 50 MB by the tool. The check runs after the file is fetched — the platform’s file service buffers the whole thing and takes no limit — so the cap bounds the base64 and JSON encoding that follows (~2.3× the raw bytes) rather than the download itself. PracticeSuite’s own maximum is undocumented and may be lower.
- The tool has no dedupe key: a retried step re-attaches the document. Prefer resolving
patient_idonce and uploading once per task. - The request timeout is 120 seconds.
- The document data type is inferred from the file extension (
PDFwhen there is none). OnlyPDFis verified against PracticeSuite — other extensions are passed through uppercased and may not match its accepted vocabulary. - An empty or unreachable
file_urlis a tool error; nothing is written.
Agent Instruction Guidance
Always resolve the UUID first:practicesuite_save_patient → practicesuite_get_patient → practicesuite_upload_document, passing the patient_id the lookup returned. If practicesuite_get_patient reported found: false, stop — do not attempt the upload with a natural key.