Product and Integration Guide

Launch RaportAI for clinicians, institutions, and external systems with clear rules.

This hub covers individual usage, corporate onboarding, HBYS/PACS/teleradiology integration, and the external API contract used by technical teams.

Documentation Scope
Aligned with the live product
March 2026
3Main guides: user, corporate, API
4Live product screenshots
Corporate API authenticationBearer rapi_xxx
Async report processingjobId + callback
Corporate workspaceorganization.html
Individual workflowreporting-ai.html

Where should you start?

Individual radiologist

Start with sign-in, dashboard, AI reporting, and export flow.

Open user guide
Hospital or imaging center

Start with corporate login, organization management, and API key issuance.

Open corporate guide
HBYS / PACS team

Focus on the async report API, callback signature, polling and rate limit rules.

Open API reference
Teleradiology partner

Use the corporate guide and checklist to structure multi-user operations.

Open checklist

How the platform is positioned

RaportAI integration map
RaportAI connects clinicians, institutions, HBYS/PACS systems, and reporting partners in a single operational model.
Separate login paths

Individual, corporate, admin, and accounting access are isolated. Wrong-role access fails closed.

Async processing model

AI jobs are queued, tracked, and scaled under load.

Security model

Corporate API keys are limited to authorized managers. Callback HMAC and rate limits are explicit.

Corporate workspace

Hospitals, imaging centers, and teleradiology teams use the corporate login path. After sign-in, the organization workspace exposes member management, API key generation, and institutional controls.

Organization workspace
Organization workspace: member roster, usage overview, and organizational settings.
API key page
API key management: create, rotate, revoke, and track the corporate integration key.

Corporate onboarding steps

1. Create the institutional account

Register the organization or have an administrator provision the account.

2. Use corporate login

Sign in via /kurumsal-login.html. Successful login lands on /organization.html.

3. Add members

Create radiologists, doctors, and technical users inside the organization workspace.

4. Generate the API key

Create the rapi_xxx key from the API key page and hand it to the HBYS/PACS team.

5. Configure callback flow

Use HTTPS callback URLs and verify RaportAI HMAC signatures.

6. Pilot before rollout

Run a low-volume pilot, verify callback and polling behavior, then switch live traffic.

Individual user guide

Individual radiologists do not need technical integration. Once authenticated, dashboard, AI reporting, templates, and report history are ready to use.

User dashboard
Dashboard: recent work, summaries, and quick start links.
AI reporting screen
AI reporting screen: dictation, AI structuring, and final review.

Typical individual flow

1. Sign in as a user

Use the user login path. It is isolated from admin and corporate logins.

2. Review the dashboard

Check recent reports and quick actions before starting.

3. Open AI reporting

Go to /reporting-ai.html and start recording or dictate findings.

4. Pick the template

Use modality and template matching to structure the report faster.

5. Review the generated output

Check and edit the generated report before saving.

6. Export or archive

Save the final report and manage it from report history.

External API reference

This channel is designed for hospitals, HBYS vendors, PACS providers, and teleradiology partners that need a stable, secure integration contract.

Base URLs and authentication

Production: https://raportai.com/api/external/v1 Staging: https://raportai-staging-staging.up.railway.app/api/external/v1 Authorization: Bearer rapi_xxx
Rule Meaning
rapi_ prefix The API key must use the RaportAI external format.
Active user Inactive users cannot authenticate.
Corporate manager only Unauthorized corporate users and individual accounts receive 403.
Rate limit Plan around roughly 60 requests per minute; use 2-5 second polling.

Core endpoints

Endpoint Purpose Notes
GET /templates Return normalized template list. Names are unique, sanitized, extension-free.
POST /report Start an async report job. Returns jobId, poll URL, and per-job hmacSecret.
GET /report/{jobId} Check status or fetch completed payload. States: pending, processing, completed, failed.
POST /pacs/report Start a multi-exam PACS report job. Single audio, multiple exams. Returns jobId and per-exam reports.
GET /pacs/report/{jobId} Poll multi-exam job status. Same states as single report; response includes per-exam breakdown.
curl -X POST "https://raportai.com/api/external/v1/report" \ -H "Authorization: Bearer rapi_xxx" \ -F "audio=@recording.webm" \ -F "sutCode=804200" \ -F "patientId=12345" \ -F "patientName=Ali Veli" \ -F "accessionNo=ACC-01" \ -F "callbackUrl=https://hbys.example.com/raportai/callback"

PACS / Teleradiology — Multi-Exam API

Send a single audio dictation containing multiple exam findings and receive a separate structured report for each exam. Designed for direct PACS and teleradiology system integration.

Endpoint

POST /api/external/v1/pacs/report

Request format

Send as multipart/form-data:

FieldTypeDescription
audioFileAudio file — supported formats listed below. Maximum 100 MB.
metadataJSON stringExam details (see structure below)

Metadata JSON structure

{ "patientUid": "1.2.3.4.5.6.7890", "patientName": "Patient Name", "exams": [ { "accessionNumber": "ACC-2026-001", "sutCode": "803910", "teleCode": "R100000", "templateContent": "FINDINGS:\n{{BULGULAR}}\n\nCONCLUSION:\n{{SONUC}}", "templateFormat": "txt" }, { "accessionNumber": "ACC-2026-002", "sutCode": "804102" } ], "callbackUrl": "https://your-server.com/api/callback", "inputLang": "tr", "outputLang": "tr" }

Metadata fields

FieldTypeRequiredDescription
patientUidstringNoDICOM patient UID or HBYS patient identifier
patientNamestringNoPatient name
examsarrayYesExam list (min 1, max 20)
exams[].accessionNumberstringNoDICOM accession number
exams[].sutCodestringYesSGK SUT code (5-7 digit numeric, regex ^\d{5,7}$, e.g. 804200)
exams[].teleCodestringNoTeleradiology R/S code
exams[].templateContentstringNoCustom template (TXT, RTF or HTML)
exams[].templateFormatstringNo"txt", "rtf" or "html" (required if templateContent is set). HTML format preserves bold/italic formatting.
callbackUrlstringNoWebhook URL (HTTPS required)
inputLangstringNoInput language (default: tr)
outputLangstringNoOutput language (default: tr)

Template placeholders

If you send a custom template, use these placeholders:

  • {{BULGULAR}} — Findings section
  • {{SONUC}} / {{SONUC}} — Conclusion / impression
  • {{IZLENIM}} — Impression
  • {{TEKNIK}} — Technical information
  • {{KLINIK}} — Clinical information
  • {{KARSILASTIRMA}} — Comparison

Response (202 Accepted)

{ "jobId": "550e8400-e29b-41d4-a716-446655440000", "status": "pending", "examCount": 2, "estimatedSeconds": 90, "pollUrl": "/api/external/v1/pacs/report/550e8400-...", "hmacSecret": "abc123..." }

Poll status: GET /api/external/v1/pacs/report/{jobId}

Completed response:

{ "jobId": "550e8400-...", "status": "completed", "patientUid": "1.2.3.4.5.6.7890", "reports": [ { "accessionNumber": "ACC-2026-001", "sutCode": "803910", "modality": "CT", "examName": "Brain CT", "status": "completed", "transcript": "Brain CT examination...", "reportText": "FINDINGS: Normal...", "reportHtml": "<p>FINDINGS: Normal...</p>", "filledTemplate": "FINDINGS:\nNormal...\n\nCONCLUSION:\nNo pathology detected.", "templateUsed": "custom" }, { "accessionNumber": "ACC-2026-002", "sutCode": "804102", "modality": "MR", "examName": "Lumbar MR", "status": "completed", "transcript": "...", "reportText": "...", "reportHtml": "...", "filledTemplate": null, "templateUsed": "matched" } ] }

Webhook callback

When a callback URL is specified, a POST request is sent upon job completion:

Header / BodyDescription
X-RaportAI-TimestampISO 8601 timestamp
X-RaportAI-SignatureHMAC-SHA256 hex signature (verify with hmacSecret)
BodySame completed response format as above

cURL example

curl -X POST https://api.raportai.com/api/external/v1/pacs/report \ -H "Authorization: Bearer rapi_xxxxx" \ -F "audio=@dictation.wav" \ -F 'metadata={ "patientUid": "1.2.3.4.5.6.7890", "patientName": "Mehmet Yilmaz", "exams": [ {"accessionNumber": "ACC-001", "sutCode": "803910"}, {"accessionNumber": "ACC-002", "sutCode": "804102"} ], "callbackUrl": "https://pacs.company.com/callback" }'

Error codes

HTTPCodeDescription
400INVALID_METADATAMetadata JSON is invalid
400NO_EXAMSExam list is empty
400TOO_MANY_EXAMSMax 20 exams per request
400MISSING_ACCESSIONAccession number missing
400INVALID_SUT_CODESUT code format invalid
400INVALID_AUDIOAudio file is invalid
401UNAUTHORIZEDAPI key missing or invalid
402INSUFFICIENT_CREDITSNot enough report credits
409DUPLICATE_SUBMISSIONSame audio already submitted
429RATE_LIMITRequest limit exceeded

Report Credits

RuleDescription
Deduction unitEach successful report costs 1 credit (not per audio file)
Multi-exam1 audio with 7 exams, all successful = 7 credits deducted
Failed reportNo credit deducted (0 credits)
Insufficient creditsHTTP 402 — job is not created
Remaining creditsShown in every response as remainingCredits
Credits usedShown in completed jobs as creditsUsed

Limits

LimitValue
Max audio file50 MB
Max exams per request20
Request limit60 / minute
Estimated processing time~30-45 sec / exam
Supported formatsWAV, MP3, M4A, OGG, WebM
Supported languagesTurkish (tr), English (en), Russian (ru), Azerbaijani (az), French (fr), German (de)
Never embed the API key in client-side (frontend) code. Store it as a server-side environment variable.