add_case_participant
ChatGPTAdd a participant (Beteiligter) to a case (WRITES data in JUNE). contact_id must be an existing contact — find it via search_contacts or get_contact. role_id must come from get_value_list("Roles") — never guess it. JUNE does not prevent duplicates server-side; this tool rejects adding the same contact with the same role twice.
azure_search
ChatGPTFull-text search across all documents and cases of the tenant. Start here when looking for documents or cases by content, sender or subject. For finding passages WITHIN one known document use document_vector_search instead; for finding cases by CaseFact values use search_cases_by_casefact. Common usage: query plus optionally case_id and top. All other filters are advanced and rarely needed. The _type_ids and _role_ids filters take IDs from get_value_list (e.g. "DocumentCaptureTypes", "OutgoingDocumentTypes", "Roles") — never guess IDs.
create_appointment
ChatGPTCreate an appointment for a case (WRITES data in JUNE). All IDs must come from other tools — never guess them: - participant_id and contact_id from the participants list in get_case_context(case_id) - appointment_type_id from get_value_list("AppointmentTypes") - appointment_subtype_id from get_value_list("AppointmentSubtypes") - meeting_location_type_id from get_value_list("MeetingLocationTypes") The attendee is always the authenticated user.
create_case
ChatGPTCreate a new case (Akte) under a mandate (WRITES data in JUNE). mandate_id must come from list_mandates — never guess it. list_mandates returns each mandate's id AND name; pick the mandate whose NAME matches what the user asked for, and if it is ambiguous ask the user instead of guessing. The case reference number (Aktenzeichen) is generated automatically by JUNE and returned in the result; do not try to set it. The authenticated user is set as the responsible clerk (Sachbearbeiter). Legal area, case type and participants are NOT set here — add participants afterwards with the participant tool once the case exists.
create_case_document
ChatGPTCreate an outgoing document from a document template (WRITES data). Renders the template with the case's data, addressed to one participant. Call list_document_templates(case_id) first — template_id and recipient_participant_id both come from there. OUTPUT FORMATS differ in what happens to the file: - "docx" (default): NOT filed into the case. You get a download link; edit the file and then file it into the case yourself with request_document_upload + finalize_document_upload(direction= "outgoing", document_type=<the template name>). - "pdf": filed into the case right away; the response carries its document_id. PDF-form templates can only produce PDF. The download link is short-lived (about ten minutes) — fetch the file right away rather than storing the URL. Every call creates a new document; there is no idempotency, so a retry produces a second one. FILENAME RULES for the later upload: use only letters, digits, spaces, dot, hyphen and underscore. Do NOT use parentheses or other special characters — ( ) [ ] { } & % + ' " — the platform firewall rejects such requests with HTTP 403 before they reach JUNE. The returned "filename" already obeys these rules and can be re-used as it is.
create_contact
ChatGPTCreate a new contact — a person or an organisation (WRITES data in JUNE). Give at least a surname (for a person) or a company name (for an organisation). contact_type_id is required — a contact without a type is broken in the UI (no form schema). Resolve contact_type_id and salutation_id via get_value_list("ContactTypes") — never guess the ids. Duplicate guard: when contact_type_id is set the backend first checks for a near-identical contact of that type (matching the firm's configured identity fields) and, if one exists, creates nothing and returns its ids in duplicate_contact_ids — show those to the user, and only pass force=true to create a second copy on purpose. Without contact_type_id no duplicate check runs, so pass it whenever you can.
create_deadline
ChatGPTCreate a deadline (Frist) for a case (WRITES data in JUNE). deadline_type_id must come from get_value_list("DeadlineTypes") — never guess it. The deadline is created as open and assigned to the authenticated user as clerk; its display name is derived from the deadline type. As in the JUNE web app, creating a deadline starts the organisation's deadline workflow, typically a "Check Deadline" task. That task goes to the case's clerk or the group configured for it, not necessarily to the authenticated user.
create_document_facts
ChatGPTAdd new DocFact values to a document (WRITES data in JUNE). For fields the document class defines but the document does not carry yet. IMPORTANT: call get_document_fact_schema(document_id) first to get the valid field labels/keys — a field not in that schema is rejected. To change a value that already exists use update_document_facts instead. Pass {field: value}. The write is all-or-nothing: if any field is unknown, already present, or a grouped (line-item) field, nothing is written.
create_document_from_text
ChatGPTCreate a document from text content and file it into a case (WRITES data). The text is rendered to a PDF and run through the full JUNE pipeline (OCR, extraction, indexing, inbox task, case linkage). Use this for agent-authored documents (letters, statements, summaries). FILENAME RULES: use only letters, digits, spaces, dot, hyphen and underscore. Do NOT use parentheses or other special characters — ( ) [ ] { } & % + ' " — the platform firewall rejects such requests with HTTP 403 before they reach JUNE. Write "Report - v3.docx", never "Report (v3).docx".
create_note
ChatGPTCreate a note (Notiz) for a case (WRITES data in JUNE).
document_vector_search
ChatGPTFind relevant text passages within a single document using semantic similarity (RAG). Perfect for locating specific topics, clauses, or concepts in large documents. Returns the best matching passages with precise page numbers and scores. It always returns the closest passages, even when nothing in the document matches. The score only ranks passages within one response; it does not say whether a passage matches. To check whether a term occurs in the document, use azure_search with document_id: count 0 means the term is not in the document. A non-zero count is not proof of the exact word, because simple queries are stemmed and OR-ed; use query_type="full" with a quoted phrase to narrow it.
finalize_document_upload
ChatGPTStep 2 of uploading a LOCAL file: file the uploaded file into the case. Call this AFTER PUTting the file to the upload_url from request_document_upload. Runs the uploaded file through the full JUNE pipeline (OCR, extraction, indexing, inbox task, case linkage).
format_casefact_value
ChatGPTValidate and format a CaseFact value according to its data type. This tool validates and formats a raw value based on the specified data type. It handles type conversion, format validation, and returns the properly formatted value.
get_all_casefact_schemas
ChatGPTLoad CaseFact schemas for all YOUR mandates in one call. Covers the mandates you are permitted for plus the global schema (mandate_id=-1), loaded in parallel and returned as one deduplicated list. Each entry carries source_mandate_id. Returns: Dictionary containing: - status: "success" or "error" - schemas: List of schema entry dicts (guid_key, name, data_type, ...) - schema_version: Highest version found across mandates - mandate_count: Number of mandates processed - error: Error message if failed
get_all_documents_for_case
ChatGPTGet the documents of a case, by default including their full text. A document-heavy case easily exceeds the response size a client can take. Page through it with limit/skip, or set include_content=false to get metadata only — that is what makes the response large. When looking for specific content, prefer azure_search (with case_id filter) and then get_documents_by_ids for the relevant hits. To offer a document as a download, use its downloadUrl. Never build a link from url or sasUri — those address blob storage directly and do not open outside the VNet.
get_apifacts_for_case
ChatGPTRead the API facts (ApiFactParts) attached to a case. API facts are structured data delivered for a case; each entry has a title carrying its timestamp and a free-form jsonDocument whose shape depends on what was delivered. A case can have several entries over time. Call without fact_part_id to list the entries (title + id); the newest is usually the one with the latest timestamp in its title. Then call again with a fact_part_id from that list to read that entry's full document. If the case has exactly one entry, its document is returned right away.
get_appointments_for_case
ChatGPTGet all appointments for a specific case.
get_case_by_reference
ChatGPTLook up a case by its reference number (Aktenzeichen). Returns the case ID and basic info for a given reference number. Use this when the user provides a case reference like "123/24" instead of a numeric case ID.
get_case_context
ChatGPTGet case context including mandate information and current CaseFact values. This tool retrieves detailed information about a case including: - Case ID and reference number - Mandate ID (needed to get the correct CaseFact schema) - Clerk information - Archive and read-only status - Current CaseFact values
get_case_contexts
ChatGPTGet case contexts for multiple cases in a single batch request. This tool retrieves detailed information for multiple cases at once, which is much more efficient than calling get_case_context multiple times. Used for permission validation to check mandate IDs for all cases.
get_casefact_schema
ChatGPTGet all available CaseFact schemas for a user/mandant. This tool returns a list of CaseFact definitions including: - Name of the CaseFact - Data type (string, decimal, date, boolean, integer) - Allowed values (for enum types) - Format pattern (e.g., YYYY-MM-DD for dates) - Description - Whether it's required
get_contact
ChatGPTGet a single contact with full details including addresses.
get_deadlines_for_case
ChatGPTGet all deadlines for a specific case.
get_document_content
ChatGPTGet the plain extracted text of ONE document (no metadata). Lighter than get_documents_by_ids when only the text is needed. For locating passages inside a large document, prefer document_vector_search.
get_document_download_link
ChatGPTGet a time-limited link to download one document's file. Returns a direct HTTPS download URL (a temporary SAS link) for the document itself, without its extracted text — present it to the user as the download. For the document's text use get_document_content; for its extracted facts use get_document_facts.
get_document_fact_schema
ChatGPTList the fact fields a document's class (Dokklasse) can carry. Shows every field the document type defines — including ones not filled yet — as {key, label, type, group}. Read this before create_document_facts to learn the exact labels/keys; to see the values already present on the document use get_document_facts instead.
get_document_facts
ChatGPTRead the DocFacts JUNE extracted from one document, as readable pairs. DocFacts are the structured values pulled out of the document (dates, amounts, parties, reference numbers, …). Use after azure_search or get_all_documents_for_case gave you a document_id. For the raw document text use get_document_content instead.
get_documents_by_ids
ChatGPTGet document details with extracted content for specific document IDs. Use after azure_search or get_all_documents_for_case identified the relevant documents. Document IDs come from those tools. To offer a document as a download, use its downloadUrl. Never build a link from url or sasUri — those address blob storage directly and do not open outside the VNet.
get_fieldgroup_schema
ChatGPTGet column definitions for fieldgroup CaseFacts. Returns the subfield/column schema for one or more fieldgroup keys, including each column's GUID key, label, and data type.
get_incoming_messages_for_case
ChatGPTGet all incoming messages (mail, beA, ...) for a specific case.
get_notes_for_case
ChatGPTGet all notes (Aktennotizen) written on a specific case. The counterpart to create_note: use this to read what has already been noted on the case, e.g. before adding a note or to summarise the file's history. Notes are free text written by the team — phone calls, internal remarks — and are separate from documents and messages.
get_open_deadlines
ChatGPTGet YOUR open deadlines across all cases (you = the responsible clerk). Use this for questions like "which deadlines do I have this week". For the deadlines of one specific case use get_deadlines_for_case. The result is paged. Narrow with days before paging, and read total_count / has_more to decide whether to fetch the next page rather than pulling everything.
get_open_tasks
ChatGPTGet the open tasks assigned to the current user or their groups. The result is paged: this can be a large backlog (hundreds or thousands of tasks). Read total_count / has_more and fetch further pages only when you actually need them, rather than pulling everything at once.
get_outgoing_messages_for_case
ChatGPTGet all outgoing messages (mail, beA, ...) for a specific case.
get_recent_cases
ChatGPTThe cases you (the current user) opened most recently, newest first. Use this for "which cases was I just working on" or to pick up where you left off, without knowing a reference number. For the cases matching a value use search_cases_by_casefact; for one specific case use get_case_context.
get_task
ChatGPTGet a single task with full details.
get_tasks_for_case
ChatGPTGet all tasks for a specific case.
get_upcoming_appointments
ChatGPTGet upcoming appointments across ALL cases (today and later). Use this for questions like "which court dates are coming up" — filter court appointments via the type ID from get_value_list("AppointmentTypes"). For the appointments of one specific case use get_appointments_for_case. The result is paged; read total_count / has_more to decide whether to fetch the next page rather than pulling everything.
get_user_permissions
ChatGPTGet the mandates and individually granted cases of a user. Access to a case normally comes from its MANDATE: you may open a case if its mandate is in "mandates" and the case is not access-restricted. "cases" lists only the ADDITIONAL, case-level grants (used for access-restricted cases) — it is not the list of all readable cases, so do not treat a case as inaccessible just because it is missing there.
get_value_list
ChatGPTLook up JUNE reference IDs: participant roles, deadline types, appointment types/subtypes, meeting location types, document capture types, outgoing document types, contact types, countries. Use this whenever another tool requires a type, role or status ID (role_id, deadline type, appointment type, documentCaptureTypeId, ...) and you only know the display name — never guess IDs. Also use it to translate IDs in tool results back into display names.
list_document_templates
ChatGPTList the document templates ("Schreibenstemplates") usable for a case. Read this before create_case_document: it returns the templates released for the case's mandate, the output formats each one can produce, and per template the addressees you may pass — the case participants whose role the template allows. A template whose required role no active participant holds is still listed, with an empty "addressees" list and a "blocked_reason": create that participant first (create_contact + add_case_participant), then retry.
list_mandates
ChatGPTList the mandates (Mandate) available to you, with their names. Returns each mandate's id AND name so you can pick the right one — e.g. for create_case, or as a search filter. Only the mandates you are permitted for are listed. Returns: Dictionary containing: - status: "success" or "error" - mandates: List of {"id": int, "name": str} - mandate_ids: List of mandate IDs (integers) - error: Error message if failed
process_dispatch_document
ChatGPTSend case documents to a recipient (creates an outgoing message and a review task in JUNE — this WRITES data and triggers a workflow).
request_document_upload
ChatGPTStep 1 of uploading a LOCAL file into a case: get an upload target. Returns a short-lived upload URL. Upload the local file to it with an HTTP PUT, sending EVERY header from required_headers, e.g.: curl -X PUT -H "x-ms-blob-type: BlockBlob" \ -H "Content-Type: application/octet-stream" \ --data-binary @/path/to/file "<upload_url>" Then pass the returned handle to finalize_document_upload. Send the file as raw bytes (--data-binary, not -d/--form). Omitting Content-Type makes the client default to a form content type, and the platform firewall then parses the file as form data and answers 403. FILENAME RULES: use only letters, digits, spaces, dot, hyphen and underscore — no parentheses or other special characters; the platform firewall rejects those with HTTP 403 (rename "Klage (v2).pdf" to "Klage - v2.pdf"). THREE THINGS ANSWER 403 HERE, and the fix differs. The URL is valid only until "expires_utc": past that timestamp, call this tool again for a fresh target — renaming the file or changing headers cannot help. Before that timestamp, a 403 means the filename or the headers.
search_cases_by_casefact
ChatGPTSearch for cases where a specific CaseFact field matches criteria. Use this to find cases by CaseFact values, e.g. finding all cases with a specific Schadennummer or Aktenart. For fieldgroup CaseFacts (table-like fields with rows and columns), set is_fieldgroup=True and provide sub_field_name (GUID key of the column/subfield to search within).
search_contacts
ChatGPTSearch contacts by name, e-mail or any other contact field. Use get_contact afterwards for the full details of one match.
update_appointment
ChatGPTUpdate an existing appointment, e.g. reschedule it (WRITES data). Only the fields you pass are changed; everything else keeps its current value. Find the appointment via get_appointments_for_case or get_upcoming_appointments. Type, case and attendee are deliberately not editable here — delete and recreate the appointment instead.
update_case
ChatGPTUpdate core data of an existing case (WRITES data in JUNE). Only the fields you pass are changed; values cannot be cleared back to empty. The case reference number (Aktenzeichen) and the mandate are deliberately NOT editable here. WARNING: archiving does NOT check for open deadlines, appointments or tasks — check get_deadlines_for_case and get_tasks_for_case first and ask the user before archiving a case that still has open items. Archiving also makes the case read-only.
update_casefact
ChatGPTUpdate a CaseFact value in the database for a specific case. This tool updates a CaseFact in the database using the GUID key from the schema. The value should already be validated and formatted using the format_casefact_value tool before calling this.
update_document
ChatGPTUpdate metadata of an existing document (WRITES data in JUNE). Only the fields you pass are changed; everything else is preserved. Fields cannot be cleared/emptied with this tool. WARNING: changing document_capture_type_id deletes the document's extracted facts and triggers re-classification — only do this when the type is wrong. Moving email attachments to another case is not possible (the change is ignored by JUNE).
update_document_facts
ChatGPTChange existing DocFact values on one document (WRITES data in JUNE). Pass {field: new_value}, where field is the fact's label (or key) exactly as get_document_facts returns it — read that first to get the labels. The write is all-or-nothing: if any field is unknown it is rejected and nothing changes. Only existing single-value facts can be set. Grouped facts (line items), creating new facts, and documents without a case are not supported here.
whoami
ChatGPTShow which JUNE environment and user this connection is authenticated as.