NAV
  • Introduction
  • 1) Registration & authentication
  • 2) Account (Balance)
  • 3) Tasks
  • 4) Retrieving results
  • 5) Checklists
  • 6) Directories
  • 7) Call categories
  • 8) Task search filters
  • 9) Call check scripts
  • 10) Downloading report files
  • 11) Error codes
  • 12) Plans & Pricing
  • On-premise deployment (inside the company perimeter)
  • Introduction

    Transcripto API is a REST interface for integrating with an intelligent system that automatically transcribes calls, analyzes chats, and generates analytical and business reports.

    The API enables you to embed customer communication processing directly into your CRM, contact center, or corporate platform — from data ingestion to metrics and ready-to-use visual reports.


    How it works

    1. Import calls and messages

    You can send data in several ways:

    The system automatically creates a processing task and stores all data in your account.

    2. Speech-to-text

    Uploaded audio recordings are transcribed; the system converts speech to text, separates speakers (operator / customer), captures duration, time, and other metadata.

    More details: task details · task list by filters

    3. Analysis and metric extraction

    The AI module analyzes the resulting texts:

    Results are stored in the database and exposed via the API as a structured JSON document.

    More details: calls_analysis

    4. Reports and analytics

    Transcripto generates two types of reports:

    Both report types are available in PDF or HTML and can be easily integrated into a CRM, BI, or internal portals.

    Example: Business report

    open in a new tab.

    Example: Operator quality report

    open in a new tab.


    How to use the API

    Below is a typical integration scenario.

    1. Authentication

    Obtain an access token:

    POST /auth/login
    

    Use it in the Authorization: Bearer <token> header for all subsequent requests.


    2. Import calls or chats

    Create a call processing task (you can pass either a file or a link):

    POST /addtaskcall
    
    POST /addtaskcallbyurl
    

    Create a task to analyze customer text communication: chats, messengers, email threads:

    POST /add_chat_analysis_task
    

    The API returns a unique task_code for tracking status, or an error code describing the problem.


    3. Check task status

    Check the state of a specific task:

    GET /gettask?task_code=<GUID>
    

    Get the list of all tasks by the specified filter criteria:

    GET /user/tasks/filter
    

    4. Retrieve analytics

    After a task of type 'call' (call) or 'chat' (chat) reaches status 'completed' (processing finished), you can request the detailed analysis and the communication text using:

    GET /api/calls_analysis/{task_code}
    

    5. Create a report generation task

    To download a period report file, create a task with the report type identifier:

     POST /user/callreport
    

    Get the task identifier from the response, track status via gettask, wait for the status to change to 'completed', and in the gettask response obtain the generated file names.

    6. Download the report file

    Pass the file name to:

    # PDF
    curl -G "https://<host>/user/callreport/file" \
      --data-urlencode "task_code=<GUID>" \
      --data-urlencode "filename=report_78157.pdf"
    
    # HTML
    curl -G "https://<host>/user/callreport/file" \
      --data-urlencode "task_code=<GUID>" \
      --data-urlencode "filename=report_78157.html"
    

    If you need custom analytics and reporting for your customer interaction data, send your request to info@transcripto.ru — we will do our best to implement your requirements.

    1) Registration & authentication

    User registration

    To receive a URL, username, and password to access the Transcripto API, email info@transcripto.ru and include:

    After reviewing your request, you will receive API access credentials: a unique URL, username, and password for authentication.


    Obtain a token (API KEY)

    POST /auth/login

    To obtain a token (JWT), call /auth/login — it will return a token for accessing private API methods.

    Example request (cURL):

    curl -X POST "https://<host>/auth/login" \
      -H "Content-Type: application/json" \
      --data-raw '{
        "email": "user@example.com",
        "password_hash": "2bb80d537b1da3e38bd30361aa855686bde0...<hash>",
        "captcha_token": "<captcha-token>"
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    emailstringyesUser email.
    password_hashstringyesUser password hash.
    captcha_tokenstringyesCAPTCHA token to confirm the request.

    Example response (200):

    {
      "message": "Login successful",
      "error_code": 0,
      "token": "<jwt>",
      "locale": "en",
      "user_id": 83,
      "email": "user@example.com",
      "tariff": {
        "id": 4,
        "name": "Enterprise",
        "identifier": "enterprise",
        "days_left": 64,
        "start_date": "2025-07-24T09:26:14.868326Z",
        "end_date": "2025-12-23T09:26:14.868326Z",
        "remaining_resources": {
          "available_audio_minutes": 4994,
          "available_call_minutes": 9655,
          "available_text_tokens": 600000,
          "available_image_tokens": 98
        },
        "usage": {
          "used_audio_minutes": 5006,
          "used_call_minutes": 0,
          "used_text_tokens": 0,
          "used_image_tokens": 9902
        },
        "transcription_enabled": true,
        "image_generation_enabled": true,
        "calls_enabled": true
      },
      "directories": [
        { "id": 70, "name": "Website promotion" }
      ],
      "last_tasks": [
        {
          "directory_id": null,
          "status": "completed",
          "id": "b7a62594-a664-4519-b0de-077b5522e245",
          "created_at": "2025-10-20T08:45:25.670423Z",
          "file_path": "exten-110-060865882-20251020-112158-1760948518.13620249.wav",
          "task_length": 6.4
        },
        {
          "directory_id": null,
          "status": "completed",
          "id": "04a7b144-e43b-4792-affa-65a030c1b6bf",
          "created_at": "2025-10-20T08:45:22.964481Z",
          "file_path": "q-888-060501523-20251020-114310-1760949769.13620656.wav",
          "task_length": 2.0
        }
      ],
      "call_activity_tree": {
        "2025": { "10": { "01": 247, "02": 316 } }
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    messagestringSuccessful authentication message.
    error_codeintError code (0 on success).
    tokenstring (JWT)Authorization token for private methods.
    localestringDefault language for the user.
    user_idintUser identifier.
    emailstringUser email.
    tariffobjectActive plan information (see fields below).
    tariff.idintPlan identifier.
    tariff.namestringPlan name.
    tariff.identifierstringUnique plan identifier.
    tariff.days_leftintNumber of days remaining until plan expiration.
    tariff.start_datedatetimePlan start date (ISO 8601).
    tariff.end_datedatetimePlan end date (ISO 8601).
    tariff.remaining_resources.available_audio_minutesintAvailable audio minutes.
    tariff.remaining_resources.available_call_minutesintAvailable call minutes.
    tariff.remaining_resources.available_text_tokensintAvailable text tokens.
    tariff.remaining_resources.available_image_tokensintAvailable image tokens.
    tariff.usage.used_audio_minutesintUsed audio minutes.
    tariff.usage.used_call_minutesintUsed call minutes.
    tariff.usage.used_text_tokensintUsed text tokens.
    tariff.usage.used_image_tokensintUsed image tokens.
    tariff.transcription_enabledboolWhether transcription is enabled.
    tariff.image_generation_enabledboolWhether image generation is enabled.
    tariff.calls_enabledboolWhether call processing is enabled.
    directoriesarrayUser directories.
    directories[].idintDirectory identifier.
    directories[].namestringDirectory name.
    last_tasksarrayLatest user tasks (up to 5).
    last_tasks[].directory_idint \null
    last_tasks[].statusstringTask status.
    last_tasks[].idstring (uuid)Public task code (code_uuid).
    last_tasks[].created_atdatetimeCreation time (ISO 8601, Z).
    last_tasks[].file_pathstringFile name (for audio/calls).
    last_tasks[].task_lengthnumberDuration in minutes.
    call_activity_treeobjectCall activity tree by years/months/days.

    2) Account (Balance)

    Get current balance and active plan details

    GET /user/tariff

    Returns information about the user's active plan, remaining resources, and usage. Requires JWT authorization.

    Example request (cURL):

    curl -X GET "https://<host>/user/tariff" \
      -H "Authorization: Bearer <JWT>" \
      -H "Accept-Language: en"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    No parameters in URL/body. The Authorization: Bearer <JWT> header is required.

    Example response (200)

    {
      "success": true,
      "errorcode": 0,
      "tariff": {
        "id": 4,
        "name": "Enterprise",
        "identifier": "enterprise",
        "days_left": 64,
        "text_tokens": 600000,
        "image_tokens": 98,
        "limits": {
          "audio_minutes": 10000,
          "call_minutes": 9655,
          "text_tokens": 600000,
          "image_tokens": 10000,
          "report_count": 25,
          "video_minutes": 3000,
          "chat_count": 500
        },
        "remaining_resources": {
          "available_audio_minutes": 4994,
          "available_call_minutes": 9655,
          "available_text_tokens": 600000,
          "available_image_tokens": 98,
          "available_report_count": 24,
          "available_video_minutes": 2980,
          "available_chat_count": 500
        },
        "usage": {
          "used_audio_minutes": 5006,
          "used_call_minutes": 0,
          "used_text_tokens": 0,
          "used_image_tokens": 9902,
          "used_report_count": 1,
          "used_video_minutes": 20,
          "used_chat_count": 0
        },
        "transcription_enabled": true,
        "image_generation_enabled": true,
        "calls_enabled": true,
        "start_date": "2025-07-24T09:26:14.868326Z",
        "end_date": "2025-12-23T09:26:14.868326Z",
        "price": {
          "currency": "USD",
          "value": 99.9
        }
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    errorcodeintError code (0 on success).
    tariffobjectActive plan information (see fields below).
    tariff.idintPlan identifier.
    tariff.namestringPlan name.
    tariff.identifierstringUnique plan identifier.
    tariff.days_leftintFull days until plan expiration (rounded up, minimum 0).
    tariff.text_tokensintLegacy: duplicates remaining_resources.available_text_tokens for backward compatibility.
    tariff.image_tokensintLegacy: duplicates remaining_resources.available_image_tokens for backward compatibility.
    tariff.limitsobjectPlan limits.
    tariff.limits.audio_minutesintMax audio minutes per plan.
    tariff.limits.call_minutesintMax call minutes per plan.
    tariff.limits.text_tokensintMax text tokens.
    tariff.limits.image_tokensintMax image generation tokens.
    tariff.limits.report_countintReport limit (business reports).
    tariff.limits.video_minutesintVideo minutes limit.
    tariff.limits.chat_countintChat analysis interaction limit.
    tariff.remaining_resourcesobjectCurrent remaining resources.
    tariff.remaining_resources.available_audio_minutesintAvailable audio minutes.
    tariff.remaining_resources.available_call_minutesintAvailable call minutes.
    tariff.remaining_resources.available_text_tokensintAvailable text tokens.
    tariff.remaining_resources.available_image_tokensintAvailable image generation tokens.
    tariff.remaining_resources.available_report_countintAvailable reports.
    tariff.remaining_resources.available_video_minutesintAvailable video minutes.
    tariff.remaining_resources.available_chat_countintAvailable chat analyses.
    tariff.usageobjectActual usage (calculated as limit - remaining, not below 0).
    tariff.usage.used_audio_minutesintUsed audio minutes.
    tariff.usage.used_call_minutesintUsed call minutes.
    tariff.usage.used_text_tokensintUsed text tokens.
    tariff.usage.used_image_tokensintUsed image generation tokens.
    tariff.usage.used_report_countintUsed reports.
    tariff.usage.used_video_minutesintUsed video minutes.
    tariff.usage.used_chat_countintUsed chat analyses.
    tariff.transcription_enabledboolWhether transcription is enabled.
    tariff.image_generation_enabledboolWhether image generation is enabled.
    tariff.calls_enabledboolWhether call processing is enabled.
    tariff.start_datedatetimePlan start date (ISO 8601, UTC, Z).
    tariff.end_datedatetimePlan end date (ISO 8601, UTC, Z).
    tariff.priceobject(Optional) Plan price for the region from Accept-Language.
    tariff.price.currencystringCurrency.
    tariff.price.valuenumberPrice.

    3) Tasks


    Create a call processing task (file)

    POST /addtaskcall — multipart/form-data

    Creates a task to process a call from an uploaded file.

    Example request (cURL):

    curl -X POST "https://<host>/addtaskcall" \
      -H "Authorization: Bearer <JWT>" \
      -F "file=@/path/to/call.wav" \
      -F "directory_id=123" \
      -F "operator_name=Ivan" \
      -F "client_id=C-42" \
      -F "call_type=inbound" \
      -F "call_date=2025-10-20" \
      -F "call_datetime=2025-10-20T10:00:00+03:00" \
      -F "processing_type=standard"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    filefileyesCall audio file (WAV/MP3/OGG, etc.). Minimum duration ≈ 2 seconds.
    directory_idintnoDirectory ID (0 is treated as null).
    operator_namestringnoOperator name/label (default global).
    client_idstringnoCustomer identifier.
    call_typestringnoinbound \
    call_datedatenoCall date YYYY-MM-DD.
    call_datetimedatetimenoFull date/time in ISO 8601 with TZ (e.g., 2025-10-20T10:00:00+03:00).
    processing_typestringnoQueue mode: standard \

    Example response (200)

    {
      "id": 101,
      "error_code": 0,
      "code": "a1bc2d3e-4f56-7890-abcd-ef1234567890"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    idintInternal task identifier.
    error_codeintError code (0 on success).
    codestring (uuid)Public task code.

    Possible errors (HTTP 200, JSON)

    CodeDescription
    4001Invalid parameters (including an invalid directory_id or call_datetime without TZ).
    4024File not provided.
    4025Unsupported file format.
    4026File decoding error.
    4044No active plan.
    4050Not enough plan minutes (calls).
    4091Duplicate file (same original filename already uploaded).
    4092Audio is too short (< 2 sec) or length limit exceeded.
    5000Internal server error.

    Create a call processing task by URL

    POST /addtaskcallbyurl — JSON

    Creates a task to process a call by downloading the audio from a link.

    Example request (cURL):

    curl -X POST "https://<host>/addtaskcallbyurl" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "file_url": "https://example.com/rec_001.wav",
        "directory_id": 123,
        "operator_name": "Ivan",
        "client_id": "C-42",
        "call_type": "outbound",
        "call_date": "2025-10-20",
        "call_datetime": "2025-10-20T10:00:00+03:00",
        "processing_type": "analysis"
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_urlstring (URL)yesDirect link to the audio file.
    directory_idintnoDirectory ID.
    operator_namestringnoOperator name/label (default global).
    client_idstringnoCustomer identifier.
    call_typestringnoinbound \
    call_datedatenoYYYY-MM-DD.
    call_datetimedatetimenoISO 8601 with TZ.
    processing_typestringnoMode: analysis \

    Example response (200)

    {
      "id": 102,
      "error_code": 0,
      "code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    idintInternal task identifier.
    error_codeintError code (0 on success).
    codestring (uuid)Public task code.

    Possible errors (HTTP 200, JSON)

    CodeDescription
    4001Invalid parameters (including call_datetime without TZ).
    4002file_url not provided.
    4024Failed to download the file by URL.
    4044No active plan.
    4050Not enough plan minutes (calls).
    4092Audio is too short/empty after downloading.
    5000Internal server error.

    Create an audio processing task (file)

    POST /addtaskaudio — multipart/form-data

    Adds a task to process an arbitrary audio file.

    Example request (cURL):

    curl -X POST "https://<host>/addtaskaudio" \
      -H "Authorization: Bearer <JWT>" \
      -F "file=@/path/to/audio.mp3" \
      -F "directory_id=321" \
      -F "file_lang=00"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    filefileyesAudio file. Minimum duration ≈ 2 seconds.
    directory_idintnoDirectory ID.
    file_langstringnoLanguage/locale code (default 00 — auto-detect).

    Example response (200)

    {
      "id": 103,
      "error_code": 0,
      "code": "a1bc2d3e-4f56-7890-abcd-ef1234567890"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    idintInternal task identifier.
    error_codeintError code (0 on success).
    codestring (uuid)Public task code.

    Possible errors (HTTP 200, JSON)

    CodeDescription
    4024File not provided.
    4025Unsupported file format.
    4026File decoding error.
    4044No active plan.
    4050Not enough plan minutes (audio).
    4092Audio is too short/too long.
    5000Internal server error.

    Create a YouTube processing task

    POST /addtaskyoutube — JSON

    Adds a task to transcribe audio from a video link (YouTube/VK/TikTok, etc. are supported).

    Example request (cURL):

    curl -X POST "https://<host>/addtaskyoutube" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "file_path": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "directory_id": 555,
        "file_lang": "00"
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_pathstring (URL)yesVideo link.
    directory_idintnoDirectory ID.
    file_langstringnoLanguage/locale code (default 00).

    Example response (200)

    {
      "id": 104,
      "error_code": 0,
      "code": "b2cd3e4f-5678-90ab-cdef-0123456789ab",
      "demo": false
    }
    

    Parameter description (response)

    ParameterTypeDescription
    idintInternal task identifier.
    error_codeintError code (0 on success).
    codestring (uuid)Public task code.
    demoboolDemo mode flag (usually false for the private API).

    Possible errors (HTTP 200, JSON)

    CodeDescription
    4017Invalid/unsupported URL.
    4044No active plan.
    5000Internal server error.

    Create a chat analysis task (text)

    POST /add_chat_analysis_task — JSON

    Accepts text/chunks of a dialog, creates a chat task, and queues it for analysis.

    Example request (cURL):

    curl -X POST "https://<host>/add_chat_analysis_task" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "text": "Dialog with a customer...",
        "chunks": null,
        "operator_name": "Operator 1",
        "call_date": "2025-10-20"
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    textstring \nullno
    chunksarray \nullno
    operator_namestringnoOperator name/label.
    call_datedatenoYYYY-MM-DD \

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Chat analysis task created",
      "task_code": "c0ffee00-1234-5678-aaaa-bbbbbbbbbbbb"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the task was created successfully.
    error_codeintError code (0 on success).
    success_messagestringSuccess message.
    task_codestring (uuid)Public task code.

    Create a report task (calls/chats)

    POST /user/callreport — JSON

    Creates a task to generate a period report for your calls/chats.

    Example request (cURL):

    curl -X POST "https://<host>/user/callreport" \
      -H "Authorization: Bearer <JWT>" \
      -H "Accept-Language: en" \
      -H "Content-Type: application/json" \
      -d '{
        "start_date": "2025-10-01",
        "end_date": "2025-10-31",
        "report_type": "standard"
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    start_datedate \datetimeyes
    end_datedate \datetimeyes
    report_typestringnoReport type: standard (default) \

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Report task created",
      "report_task_code": "b7a62594-a664-4519-b0de-077b5522e245",
      "available_report_count": 7
    }
    

    The available_report_count field is present only for business reports and shows the remaining report quota after the deduction.

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the task was created successfully.
    error_codeintError code (0 on success).
    success_messagestringSuccess message.
    report_task_codestring (uuid)Public report task code (GUID).
    available_report_countintRemaining report quota (only for business).

    Possible errors (HTTP 200, JSON)

    CodeDescription
    4023Unauthorized (missing/invalid JWT).
    4060Dates not provided (start_date/end_date).
    4061Invalid date format.
    4062start_date is later than end_date.
    4602No active plan or business report quota exhausted.
    5000Generic internal error.

    4) Retrieving results

    Get all user tasks with the specified filters

    POST /tasks/filter
    GET /tasks/filter

    Purpose. Flexible task selection across many criteria: basic task fields, full-text search, call analytics filters (only via *_id) and checklist answer filters. Pagination is supported for both methods. Important: date filters apply to Task.call_datetime (UTC).

    Example request (POST, JSON body):

    curl -X POST "https://<host>/tasks/filter" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -H "Accept-Language: en" \
      -d '{
        "task_type": "call",
        "status": "completed",
        "date_from": "2025-10-01",
        "date_to": "2025-10-31",
        "message": "esim setup",
        "operator_name": "Ivanov",
        "call_type": "inbound",
        "tags_any": "eSIM,APN",
        "script_alignment_min": 60,
        "customer_satisfaction_score_min": 7,
        "tone_id": [1,2],
        "resolved_status_id": 5,
        "priority_id": 3,
        "funnel_stage_id": [4,5],
        "risk_signal_id": null,
        "sales_signal_id": null,
        "operator_politeness": [4,5],
        "operator_politeness_min": 3,
        "operator_politeness_max": 5,
        "length_min": 3.5,
        "length_max": 120,
        "checklist_id": 7,
        "answers": ["Yes","Partially"],
        "page": 1,
        "per_page": 12
      }'
    

    Example request (GET, query parameters only):

    curl -G "https://<host>/tasks/filter" \
      -H "Authorization: Bearer <JWT>" \
      -H "Accept-Language: en" \
      --data-urlencode "task_type=call" \
      --data-urlencode "status=completed" \
      --data-urlencode "date_from=2025-10-01" \
      --data-urlencode "date_to=2025-10-31" \
      --data-urlencode "message=esim" \
      --data-urlencode "operator_name=Ivanov" \
      --data-urlencode "call_type=inbound" \
      --data-urlencode "tags_any=eSIM,APN" \
      --data-urlencode "tone_id=1,2" \
      --data-urlencode "priority_id=3" \
      --data-urlencode "resolved_status_id=5" \
      --data-urlencode "operator_politeness=4,5" \
      --data-urlencode "operator_politeness_min=3" \
      --data-urlencode "operator_politeness_max=5" \
      --data-urlencode "length_min=3.5" \
      --data-urlencode "length_max=120" \
      --data-urlencode "checklist_id=7" \
      --data-urlencode "answers=Yes" \
      --data-urlencode "page=1" \
      --data-urlencode "per_page=12"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    task_codestring (UUID \legacy)no
    task_idintnoInternal task identifier.
    date_fromdate \datetimeno
    date_todate \datetimeno
    task_typestringnoTask type: call, chat, email, audio, youtubenew, callreport.
    statusstringnoStatus: pending, processing, audio_completed, completed, completed2, error.
    call_typestringnoCall type: inbound \
    operator_namestringnoSubstring match on operator name (ILIKE).
    messagestringnoFull-text search across: CallsAnalysis.summary, TaskResult.original_text, TaskResult.normalized_text.
    tone_idint \int[]no
    resolved_status_idint \int[]no
    priority_idint \int[]no
    funnel_stage_idint \int[]no
    risk_signal_idint \int[]no
    sales_signal_idint \int[]no
    script_alignment_minnumbernoMin script alignment (0–100).
    script_alignment_maxnumbernoMax script alignment (0–100).
    customer_satisfaction_score_minintnoMin CSAT (0–10).
    customer_satisfaction_score_maxintnoMax CSAT (0–10).
    operator_politenessint \int[]no
    operator_politeness_minintnoLower bound of rating (1..5).
    operator_politeness_maxintnoUpper bound of rating (1..5).
    tags_anystring \string[]no
    tags_allstring \string[]no
    length_minnumbernoMin task duration (minutes) by Task.task_length.
    length_maxnumbernoMax task duration (minutes) by Task.task_length.
    checklist_idintnoFilter by a checklist question.
    answersstring \string[]no
    pageintnoPage number (default 1).
    per_pageintnoPage size (default 10).
    Accept-LanguageheadernoLocalization language (ru, en, etc.).

    Notes: - tags_any and tags_all accept either a CSV string or an array; for GET, you can pass tags_any=a,b,c. - If checklist_id and answers are set, tasks are returned where the answer for that question matches any of the provided values. - Sorting is fixed: updated_at DESC.

    Example response (200)

    {
      "tasks": [
        {
          "id": 12345,
          "type": "call",
          "status": "completed",
          "file_name": "rec_2025-10-20_0845.wav",
          "created_at": "2025-10-20T08:45:14+00:00",
          "updated_at": "2025-10-20T08:47:10+00:00",
    
          "operator_name": "Ivanov",
          "call_time": "2025-10-20T08:45:00+00:00",
          "call_type": "inbound",
          "call_date": "2025-10-20",
    
          "error_message": null,
          "directory_id": 123,
          "task_length": 64.2,
          "task_code": "9289bd97-ac8c-41b3-bce8-fbcd86f1da7c",
          "report_type": null,
          "customer_satisfaction_score": 8
        }
      ],
      "pagination": {
        "current_page": 1,
        "per_page": 12,
        "total_tasks": 34,
        "total_pages": 3
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    tasksarrayList of found tasks.
    tasks[].idintTask identifier.
    tasks[].typestringTask type.
    tasks[].statusstringProcessing status.
    tasks[].file_namestring \null
    tasks[].created_atdatetime \null
    tasks[].updated_atdatetime \null
    tasks[].operator_namestring \null
    tasks[].call_timedatetime \null
    tasks[].call_typestring \null
    tasks[].call_datedate \null
    tasks[].error_messagestring \null
    tasks[].directory_idint \null
    tasks[].task_lengthnumberDuration in minutes (for chat/email returns 0).
    tasks[].task_codestring (uuid)Public task code.
    tasks[].report_typestring \null
    tasks[].customer_satisfaction_scoreint \null
    paginationobjectPagination information.
    pagination.current_pageintCurrent page.
    pagination.per_pageintPage size.
    pagination.total_tasksintTotal tasks found.
    pagination.total_pagesintTotal pages.

    Get detailed task data

    GET /gettask

    Purpose. Return the core task information: statuses, files, dates, duration, short raw/normalized text (if any), bindings and errors.

    Example request (cURL):

    curl -G "https://<host>/gettask" \
      -H "Authorization: Bearer <JWT>" \
      --data-urlencode "task_code=9360911d-34ce-4e1f-9259-2ba0a1b96ae7"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    task_codeuuid-stringyesPublic task GUID.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "id": 112233,
      "type": "call",
      "status": "completed",
      "file_name": "rec_2025-10-01_0750.wav",
      "created_at": "2025-10-01T07:50:00+00:00",
      "updated_at": "2025-10-01T08:02:31+00:00",
      "call_date": "2025-10-01",
      "error_message": null,
      "directory_id": 77,
      "report_type": null,
      "task_code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7",
      "task_length": 16.62,
      "task_result": {
        "blog_post": null,
        "image_prompt": null,
        "normalized_text": null,
        "original_text": "Operator: Hello, Smile Telecom, my name is Olga..."
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the response is successful.
    error_codeintError code (0 on success).
    idintInternal task identifier.
    typestringcall \
    statusstringpending \
    file_namestring \null
    created_atdatetimeCreation time (ISO 8601, with TZ).
    updated_atdatetimeUpdate time (ISO 8601, with TZ).
    call_datedate \null
    error_messagestring \null
    directory_idint \null
    report_typestring \null
    task_codeuuid-stringPublic task GUID.
    task_lengthnumberDuration/size of the source data.
    task_resultobject \null

    Notes


    Get call analysis for a task

    GET /api/calls_analysis_v2/{task_code}

    Purpose. Return the call analytics structure for a call/task: narrative, intents, reasons, signals, recommendations, scores (CSAT/emotions/politeness), tags, checklists, etc.

    Example request (cURL):

    curl -X GET "https://<host>/api/calls_analysis_v2/9360911d-34ce-4e1f-9259-2ba0a1b96ae7" \
      -H "Authorization: Bearer <JWT>" \
      -H "Accept: application/json" \
      -H "Accept-Language: en"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    task_codepath-uuidyesTask GUID in the URL path.
    Accept-LanguageheadernoLocalization of human-readable texts (if available).

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "task_code": "9360911d-34ce-4e1f-9259-2ba0a1b96ae7",
      "call_datetime": "2025-10-01T07:50:00+00:00",
      "call_type": "inbound",
      "duration_sec": 996,
      "transcript": {
        "language": "en",
        "turns": 128
      },
      "analysis": {
        "summary": "The customer wants to enable eSIM and a static IP for remote access; the operator explained the steps, confirmed the plan, and promised to send an SMS with instructions.",
        "sentiment": "positive",
        "scores": {
          "csat": 9,
          "politeness": 0.95,
          "empathy": 0.86
        },
        "actions": [
          "Send an SMS with eSIM activation instructions",
          "Provide APN parameters for a stable connection",
          "Check whether there are outages in the customer's area"
        ],
        "tags": ["eSIM","APN","Static IP","Remote access"],
        "analysis_notes": {
          "decision_driver": "eSIM activation + static IP",
          "emotional_dynamics": "calm, grateful",
          "funnel_stage": "qualification",
          "intention": "get stable remote access",
          "key_obstacles": "no eSIM activation in the personal account; possible network outages",
          "next_action": "the customer is waiting for SMS confirmation and instructions",
          "operator_commitments": "send SMS, provide APN, check outages",
          "product_or_service": "mobile service, eSIM, static IPv4",
          "reason_for_contact": "eSIM activation, issues with VoLTE",
          "risk_signals": "none",
          "root_cause": "technical",
          "sales_signals": "upsell"
        }
      },
      "call_checklists": [
        {
          "checklist_id": 7,
          "title": "Greeting script",
          "score": 0.9,
          "answers": [
            {"question_id": 1, "title": "Operator introduced themselves", "value": true},
            {"question_id": 2, "title": "Verified customer details", "value": true}
          ]
        }
      ],
      "category_ids": [101, 202],
      "customer_satisfaction_score": 9
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the response is successful.
    error_codeintError code (0 on success).
    task_codeuuid-stringTask GUID.
    call_datetimedatetimeCall time (ISO 8601, with TZ).
    call_typestringinbound \
    duration_secintCall duration in seconds.
    transcriptobjectShort transcript statistics.
    transcript.languagestringTranscript language (BCP-47).
    transcript.turnsintNumber of dialogue turns.
    analysisobjectFinal call analytics.
    analysis.summarystringShort conversation summary.
    analysis.sentimentstringOverall sentiment (positive/neutral/negative).
    analysis.scoresobjectNormalized metrics (for example, CSAT).
    analysis.actionsstring[]Recommended next steps.
    analysis.tagsstring[]Call tags.
    analysis.analysis_notesobjectDetailed notes (signals, intent, etc.).
    call_checklistsarrayChecklist results for the call.
    category_idsint[]Categories (if classification was performed).
    customer_satisfaction_scoreint \null

    Notes

    5) Checklists

    API for managing checklist questions and working with task answers.


    Get active checklist questions

    GET /checklist
    GET /checklist/{user_id} — optional, for an administrator

    Example request (cURL):

    curl -X GET "https://<host>/checklist" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    user_idpath-intnoUser identifier (variant GET /checklist/{user_id}). Without the parameter — active checklists of the current user.
    AuthorizationheaderyesBearer <JWT> token.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "data": [
        { "id": 1, "question": "Did the operator introduce themselves to the customer?", "is_active": true },
        { "id": 2, "question": "Did the operator clarify the purpose of the call?", "is_active": true }
      ]
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    dataarrayList of active checklist questions.
    data[].idintQuestion identifier.
    data[].questionstringQuestion text.
    data[].is_activeboolWhether the question is active.

    Pagination

    Not used for this method (all active questions are returned).


    Create a checklist question

    POST /checklist

    Creates a new checklist question for the current user.

    Example request (cURL):

    curl -X POST "https://<host>/checklist" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{ "question": "Did the operator introduce themselves?" }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    questionstringyesChecklist question text.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Checklist question created",
      "data": { "id": 101, "question": "Did the operator introduce themselves?", "is_active": true }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    messagestringService message confirming creation.
    dataobjectCreated checklist question.
    data.idintQuestion identifier.
    data.questionstringQuestion text.
    data.is_activeboolActive flag (default true).

    Edit a checklist question

    POST /checklist/{checklist_id}

    Edits the question text if there are no conflicting dependencies yet (business constraints may apply).

    Example request (cURL):

    curl -X POST "https://<host>/checklist/101" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{ "question": "Did the operator clearly introduce themselves?" }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    checklist_idpath-intyesQuestion identifier in the URL.
    questionstringyesNew question text.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Checklist question updated",
      "data": { "id": 101, "question": "Did the operator clearly introduce themselves?", "is_active": true }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    messagestringService message confirming update.
    dataobjectUpdated checklist question.
    data.idintQuestion identifier.
    data.questionstringQuestion text.
    data.is_activeboolActive flag.

    Delete (hide) a checklist question

    POST /checklist/delete/{checklist_id}

    Deletes/hides a checklist question.

    Example request (cURL):

    curl -X POST "https://<host>/checklist/delete/101" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    checklist_idpath-intyesQuestion identifier, passed in the URL.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Checklist question deleted",
      "id": 101
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    messagestringService message confirming deletion/hiding.
    idintDeleted question identifier.

    Get checklist answers for a task

    GET /checklist/answer/{task_id}

    Returns answers to checklist questions for a specific task.

    Example request (cURL):

    curl -X GET "https://<host>/checklist/answer/12345" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    task_idpath-intyesTask identifier.
    AuthorizationheaderyesBearer <JWT> token.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "data": [
        { "checklist_id": 1, "question": "Did the operator introduce themselves?", "answer": "Yes" },
        { "checklist_id": 2, "question": "Did the operator clarify the purpose of the call?", "answer": "No" }
      ]
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    dataarrayList of answers for the task.
    data[].checklist_idintChecklist question identifier.
    data[].questionstringQuestion text (for client convenience).
    data[].answerstringUser/operator answer.

    Field construction rules

    Example elements

    Checklist question: json { "id": 7, "question": "Did they state the plan conditions?", "is_active": true }

    Task answer: json { "checklist_id": 7, "question": "Did they state the plan conditions?", "answer": "Yes" }

    Notes

    6) Directories

    Section for managing user directories where tasks are stored.


    Get the list of directories

    GET /user/directories

    Returns all directories created by the user.

    Example request (cURL):

    curl -X GET "https://<host>/user/directories" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    No parameters in URL/body. The Authorization: Bearer <JWT> header is required.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "directories": [
        { "id": 70, "name": "Website promotion" },
        { "id": 71, "name": "Sales department" }
      ]
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    directoriesarrayList of user directories.
    directories[].idintDirectory identifier.
    directories[].namestringDirectory name.

    Create a directory

    POST /user/directories

    Creates a new directory for organizing user tasks.

    Example request (cURL):

    curl -X POST "https://<host>/user/directories" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{ "name": "New directory" }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    namestringyesName of the new directory.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "directory": { "id": 123, "name": "New directory" }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    directoryobjectThe created directory.
    directory.idintDirectory identifier.
    directory.namestringDirectory name.

    Delete a directory

    DELETE /user/directories/delete/{directory_id}

    Deletes the specified directory. Note: the path contains exactly one directory_id at the end.

    Example request (cURL):

    curl -X DELETE "https://<host>/user/directories/delete/123" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    directory_idpath-intyesIdentifier of the directory to delete (passed in the URL).

    Example response (200)

    {
      "error_code": 0,
      "message": "Directory deleted successfully"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    error_codeintError code (0 on success).
    messagestringSuccessful deletion message.

    7) Call categories

    Directory of call categories. Allows you to build a hierarchical taxonomy of interaction topics (parent → child).


    Category list

    POST /user/call_categories/list

    Returns the user's categories with search and pagination support.

    Example request (cURL, JSON in body):

    curl -X POST "https://<host>/user/call_categories/list" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "q": "tech",
        "parent_id": null,
        "page": 1,
        "per_page": 10
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    qstringnoSearch by partial match of name/description.
    parent_idint \nullno
    pageintnoPage number (default 1).
    per_pageintnoPage size (default 20).
    AuthorizationheaderyesBearer <JWT> token.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "items": [
        {
          "id": 1,
          "name": "Sales",
          "description": "Sales calls",
          "parent_id": null,
          "children_count": 2,
          "created_at": "2025-10-20T12:35:41+00:00",
          "updated_at": "2025-10-22T09:10:00+00:00"
        }
      ],
      "total": 3,
      "page": 1,
      "per_page": 10
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    itemsarrayCategory list on the current page.
    items[].idintCategory identifier.
    items[].namestringCategory name.
    items[].descriptionstring \null
    items[].parent_idint \null
    items[].children_countintNumber of child categories.
    items[].created_atdatetimeCreation time (ISO 8601).
    items[].updated_atdatetimeUpdate time (ISO 8601).
    totalintTotal records matching the filter.
    pageintCurrent page number.
    per_pageintPage size.

    Create a category

    POST /user/call_categories/create

    Creates a new user category.

    Example request (cURL):

    curl -X POST "https://<host>/user/call_categories/create" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{ "name": "Tech support", "description": "Technical inquiries", "parent_id": null }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    namestringyesCategory name.
    descriptionstringnoDescription.
    parent_idint \nullno

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Saved successfully",
      "data": {
        "id": 12,
        "name": "Tech support",
        "description": "Technical inquiries",
        "parent_id": null,
        "created_at": "2025-10-20T12:35:41+00:00",
        "updated_at": "2025-10-20T12:35:41+00:00"
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    success_messagestringService message confirming save.
    dataobjectCreated category (see fields below).
    data.idintIdentifier.
    data.namestringName.
    data.descriptionstring \null
    data.parent_idint \null
    data.created_atdatetimeCreation time (ISO 8601).
    data.updated_atdatetimeUpdate time (ISO 8601).

    Edit a category

    POST /user/call_categories/edit/{id}

    Edits category properties. The ID is taken from the URL; you can also pass category_id in the request body (if present, it takes precedence).

    Example request (cURL):

    curl -X POST "https://<host>/user/call_categories/edit/12" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{ "name": "Tech support (L2)", "description": "Complex technical issues", "parent_id": 2 }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    idpath-intyesCategory identifier in the URL.
    category_idintnoIdentifier in the body (overrides id from the URL).
    namestringnoNew name.
    descriptionstringnoNew description.
    parent_idint \nullno

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Saved successfully",
      "data": {
        "id": 12,
        "name": "Tech support (L2)",
        "description": "Complex technical issues",
        "parent_id": 2,
        "created_at": "2025-10-20T12:35:41+00:00",
        "updated_at": "2025-10-22T09:10:00+00:00"
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    success_messagestringService message confirming save.
    dataobjectUpdated category (fields same as in “Create a category”).

    Delete a category

    POST /user/call_categories/delete/{id}

    Deletes a user category.

    Example request (cURL):

    curl -X POST "https://<host>/user/call_categories/delete/12" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    idpath-intyesCategory identifier.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Deleted successfully"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    messagestringService message confirming deletion.

    Error codes (HTTP 200) {#kody-oshibok-http-200}

    CodeDescription
    4023Unauthorized / user not found
    4045Cannot delete a category that has child records
    4059Category not found (or not accessible to the user)
    5000Internal server error

    8) Task search filters

    API for saving, listing, and deleting saved task search filters.

    General: all methods require JWT authorization. Errors are returned with HTTP 200 and the body { "success": false, "error_code": <int>, "error_message": "<string>" }.


    Save filter configuration

    POST /tasks/filters/save

    Creates a new filter or updates an existing one by name (for the current user). The criteria field must be passed in the same format as the /tasks/filter endpoint parameters.

    Example request (cURL):

    curl -X POST "https://<host>/tasks/filters/save" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Critical calls — October",
        "criteria": {
          "task_type": "call",
          "status": "completed",
          "date_from": "2025-10-01",
          "date_to": "2025-10-31",
          "message": "complaint",
          "call_type": "inbound",
          "operator_name": "Ivanov",
          "tone_id": [1,2],
          "resolved_status_id": 5,
          "priority_id": 3,
          "funnel_stage_id": [4,5],
          "risk_signal_id": null,
          "sales_signal_id": null,
          "script_alignment_min": 60,
          "customer_satisfaction_score_min": 8,
          "operator_politeness": [4,5],
          "operator_politeness_min": 3,
          "operator_politeness_max": 5,
          "tags_any": "eSIM,APN",
          "length_min": 2,
          "length_max": 90,
          "checklist_id": 7,
          "answers": ["Yes","Partially"],
          "page": 1,
          "per_page": 12
        }
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    namestringyesFilter name. If it already exists, it will be updated.
    criteriaobject (JSON)yesKeys correspond to /tasks/filter: task_type, status, date_from, date_to, message, call_type, operator_name, tone_id, resolved_status_id, priority_id, funnel_stage_id, risk_signal_id, sales_signal_id, script_alignment_min/max, customer_satisfaction_score_min/max, operator_politeness (list of values 1..5), operator_politeness_min/max, tags_any, tags_all, length_min/max, checklist_id, answers, page, per_page.

    Example successful response (200)

    { "success": true, "message": "Filter created or updated" }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    messagestringService message describing the operation.

    Possible errors (HTTP 200, JSON)

    CodeMessage (example)Description
    4045Required fields are missingRequired fields name and/or criteria were not provided.
    5000Internal server errorInternal server error.

    List saved filters

    GET /tasks/filters/list

    Returns all saved filters for the current user.

    Example request (cURL):

    curl -X GET "https://<host>/tasks/filters/list" \
      -H "Authorization: Bearer <JWT>"
    

    Example response (200)

    {
      "success": true,
      "count": 2,
      "filters": [
        {
          "id": 42,
          "name": "Critical calls — October",
          "criteria": {
            "task_type": "call",
            "priority_id": 3,
            "date_from": "2025-10-01",
            "date_to": "2025-10-31"
          },
          "created_at": "2025-10-31T12:00:00"
        },
        {
          "id": 43,
          "name": "Chats with low CSAT",
          "criteria": {
            "task_type": "chat",
            "customer_satisfaction_score_max": 4
          },
          "created_at": "2025-11-01T09:15:00"
        }
      ]
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    countintNumber of filters found.
    filtersarraySaved filters.
    filters[].idintFilter identifier.
    filters[].namestringFilter name.
    filters[].criteriaobjectJSON criteria (see /tasks/filter).
    filters[].created_atstring (ISO)Creation date/time.

    Delete a saved filter

    POST /tasks/filters/delete/{filter_id}

    Deletes a saved filter by its identifier.

    Example request (cURL):

    curl -X POST "https://<host>/tasks/filters/delete/42" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    filter_idpath-intyesFilter identifier (in the URL).

    Example response (200)

    { "success": true, "message": "Filter deleted" }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    messagestringService message describing the operation.

    Possible errors (HTTP 200, JSON)

    CodeMessage (example)Description
    4066Filter not foundNo filter with such filter_id was found for the current user.
    5000Internal server errorInternal server error.

    Notes

    9) Call check scripts

    API for managing call check scripts (create, edit, delete, retrieve).


    Get the list of scripts

    POST /user/call_check_scripts/list

    Returns the list of user scripts with filtering and pagination.

    Example request (cURL):

    curl -X POST "https://<host>/user/call_check_scripts/list" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "q": "welcome",
        "only_active": true,
        "page": 1,
        "per_page": 10
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    qstringnoSearch by partial match of identifier/title.
    only_activeboolnoReturn only active ones (true/1/yes).
    pageintnoPage number (default 1).
    per_pageintnoPage size (default 20).
    AuthorizationheaderyesBearer <JWT> token.

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "total": 2,
      "page": 1,
      "per_page": 10,
      "items": [
        {
          "id": 11,
          "identifier": "welcome_v1",
          "title": "Customer greeting",
          "description": "Greeting and data verification script",
          "is_active": true,
          "version": 1,
          "script_body": "Hello! My name is ...",
          "created_at": "2025-10-20T12:35:41Z",
          "updated_at": "2025-10-22T09:10:00Z"
        }
      ]
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    totalintTotal records.
    pageintCurrent page number.
    per_pageintPage size.
    itemsarrayScript list.
    items[].idintScript identifier.
    items[].identifierstringScript identifier unique within the user.
    items[].titlestringScript title.
    items[].descriptionstring \null
    items[].is_activeboolActive flag.
    items[].versionintScript version.
    items[].script_bodystringScript text (plain text).
    items[].created_atdatetimeCreation time (ISO 8601).
    items[].updated_atdatetimeUpdate time (ISO 8601).

    Create a script

    POST /user/call_check_scripts/create

    Creates a new call check script.

    Example request (cURL):

    curl -X POST "https://<host>/user/call_check_scripts/create" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "identifier": "welcome_v1",
        "title": "Customer greeting",
        "description": "Greeting and data verification script",
        "is_active": true,
        "version": 1,
        "script_body": "Hello! My name is ..."
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    identifierstringyesUnique script identifier (within the user).
    titlestringyesScript title (non-empty string).
    descriptionstringnoScript description.
    is_activeboolnoActive flag (default true).
    versionintnoVersion (default 1).
    script_bodystringyesScript text (non-empty plain text).

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Saved successfully",
      "data": {
        "id": 11,
        "identifier": "welcome_v1",
        "title": "Customer greeting",
        "description": "Greeting and data verification script",
        "is_active": true,
        "version": 1,
        "script_body": "Hello! My name is ...",
        "created_at": "2025-10-20T12:35:41Z",
        "updated_at": "2025-10-20T12:35:41Z"
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    success_messagestringService message confirming save.
    dataobjectCreated script (fields same as in the list item).

    Edit a script

    POST /user/call_check_scripts/edit/{script_id}

    Updates script properties. script_id is taken from the URL; if script_id is present in the request body, it takes precedence.

    Example request (cURL):

    curl -X POST "https://<host>/user/call_check_scripts/edit/11" \
      -H "Authorization: Bearer <JWT>" \
      -H "Content-Type: application/json" \
      -d '{
        "script_id": 11,
        "identifier": "welcome_v2",
        "title": "Customer greeting (extended)",
        "description": "Added verification block",
        "is_active": true,
        "version": 2,
        "script_body": "Hello! My name is ..., let's verify your details ..."
      }'
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    script_idpath-int \intyes
    identifierstringnoNew identifier (non-empty, unique).
    titlestringnoNew title (non-empty).
    descriptionstringnoNew description.
    is_activeboolnoNew active flag.
    versionintnoNew version (integer).
    script_bodystringnoNew script text (non-empty plain text).

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "success_message": "Saved successfully",
      "data": {
        "id": 11,
        "identifier": "welcome_v2",
        "title": "Customer greeting (extended)",
        "description": "Added verification block",
        "is_active": true,
        "version": 2,
        "script_body": "Hello! My name is ..., let's verify your details ...",
        "created_at": "2025-10-20T12:35:41Z",
        "updated_at": "2025-10-22T09:10:00Z"
      }
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    success_messagestringService message confirming save.
    dataobjectUpdated script (fields same as in list item).

    Delete a script

    POST /user/call_check_scripts/delete/{script_id}

    Deletes a script. script_id is taken from the URL; if script_id is present in the request body, it takes precedence.

    Example request (cURL):

    curl -X POST "https://<host>/user/call_check_scripts/delete/11" \
      -H "Authorization: Bearer <JWT>"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    script_idpath-int \intyes

    Example response (200)

    {
      "success": true,
      "error_code": 0,
      "message": "Deleted successfully"
    }
    

    Parameter description (response)

    ParameterTypeDescription
    successboolWhether the request completed successfully.
    error_codeintError code (0 on success).
    messagestringService message confirming deletion.

    10) Downloading report files

    This section contains methods for downloading generated report and export files.
    Important: /get_file requires JWT authorization; /user/callreport/file does not require JWT — access is by task_code.


    Period interaction report (callreport): PDF/HTML

    GET /user/callreport/file?task_code=<GUID>&filename=<name>

    Purpose. Download a generated report file created by a callreport type task. Authorization is performed only by the task GUID (task_code).

    Example requests (cURL):

    # PDF (no JWT)
    curl -G "https://<host>/user/callreport/file" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245" \
      --data-urlencode "filename=report_78157.pdf"
    
    # HTML (no JWT)
    curl -G "https://<host>/user/callreport/file" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245" \
      --data-urlencode "filename=report_78157.html"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    task_codestringyesPublic task GUID (Task.code_uuid) or its short code.
    filenamestringyesFile name stored on the server (e.g., report_78157.pdf).

    Example response (success)

    Errors (HTTP 200, JSON)

    CodeMessage (short)
    4001task_code and filename are required
    4002Invalid filename
    4003Invalid path
    4041Task not found
    4044User id not found for task
    4043File missing on disk
    5001Internal handler error
    5000Generic internal error

    DOCX report for a call

    GET /get_file?file_type=docx_call&task_code=<GUID>

    Purpose. Generate and download a DOCX report for a call task (structure: raw text, header, metadata, analytics, issues, checklist).

    Example request (cURL):

    curl -G "https://<host>/get_file" \
      -H "Authorization: Bearer <JWT>" \
      --data-urlencode "file_type=docx_call" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_typestringyesAlways docx_call.
    task_codestringyesPublic GUID of the user task.

    Example response (success)

    Errors (HTTP 200, JSON)

    CodeMessage (short)
    4023Unauthorized (missing/invalid JWT)
    4045Missing task_code
    4021Task not found for the user
    4056Invalid task type (call expected)
    4057No analysis/checklist data
    5002DB error
    5000Generic internal error

    TXT report for a call

    GET /get_file?file_type=txt_call&task_code=<GUID>

    Purpose. Generate and download a TXT report for a call task (core analytics fields and checklists in text form).

    Example request (cURL):

    curl -G "https://<host>/get_file" \
      -H "Authorization: Bearer <JWT>" \
      --data-urlencode "file_type=txt_call" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_typestringyesAlways txt_call.
    task_codestringyesPublic GUID of the user task.

    Example response (success)

    Errors (HTTP 200, JSON)

    CodeMessage (short)
    4023Unauthorized (missing/invalid JWT)
    4045Missing task_code
    4021Task not found for the user
    4056Invalid task type (call expected)
    4057No analysis/checklist data
    5002DB error
    5000Generic internal error

    DOCX report for a YouTube task

    GET /get_file?file_type=docx_youtube&task_code=<GUID>

    Purpose. Generate and download a DOCX report for a YouTube task (raw/normalized text, summary, short post, blog post).

    Example request (cURL):

    curl -G "https://<host>/get_file" \
      -H "Authorization: Bearer <JWT>" \
      --data-urlencode "file_type=docx_youtube" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_typestringyesAlways docx_youtube.
    task_codestringyesPublic GUID of the user task.

    Example response (success)

    Errors (HTTP 200, JSON)

    CodeMessage (short)
    4023Unauthorized (missing/invalid JWT)
    4045Missing task_code
    4021Task not found for the user
    4061Invalid task type (youtubenew expected)
    4062Invalid task status (completed expected)
    4057No data (TaskResult is empty)
    5002DB error
    5000Generic internal error

    TXT report for a YouTube task

    GET /get_file?file_type=txt_youtube&task_code=<GUID>

    Purpose. Generate and download a TXT report for a YouTube task.

    Example request (cURL):

    curl -G "https://<host>/get_file" \
      -H "Authorization: Bearer <JWT>" \
      --data-urlencode "file_type=txt_youtube" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_typestringyesAlways txt_youtube.
    task_codestringyesPublic GUID of the user task.

    Example response (success)

    Errors (HTTP 200, JSON)

    CodeMessage (short)
    4023Unauthorized (missing/invalid JWT)
    4045Missing task_code
    4021Task not found for the user
    4061Invalid task type
    4062Invalid task status
    4057No data
    5002DB error
    5000Generic internal error

    Original call audio file

    GET /get_file?file_type=audio&task_code=<GUID>

    Purpose. Download the original audio file attached to a call task.

    Example request (cURL):

    curl -G "https://<host>/get_file" \
      -H "Authorization: Bearer <JWT>" \
      --data-urlencode "file_type=audio" \
      --data-urlencode "task_code=b7a62594-a664-4519-b0de-077b5522e245"
    

    Parameter description (request)

    ParameterTypeRequiredDescription
    file_typestringyesAlways audio.
    task_codestringyesPublic GUID of the user task.

    Example response (success)

    Errors (HTTP 200, JSON)

    CodeMessage (short)
    4023Unauthorized (missing/invalid JWT)
    4045Missing task_code
    4021Task not found for the user
    4046File not found on disk
    5002DB error
    5000Generic internal error

    11) Error codes

    Contains the full list of API error codes and their meaning — from invalid data formats to internal server errors.

    Below are the possible API error codes.

    CodeDescription
    4001Invalid data/parameter format
    4002Required parameter is missing
    4012Invalid/expired token
    4020task_code is not specified
    4021Task not found
    4023Unauthorized
    4024File not uploaded / download error
    4025Unsupported file format
    4026File decoding/encoding error
    4030–4037User validation errors
    4033User not found
    4034Plan (tariff) not found
    4041Resource is unavailable
    4043Invalid YouTube link
    4044No active plan (tariff)
    4045Required fields are missing
    4046Amount/currency does not match the plan
    4047Unsupported file_type or currency
    4050Insufficient plan resources
    4052Failed to determine audio duration
    4053Checklist/record not found
    4054Duplicate checklist question
    4055Cannot edit — answers already exist
    4056Access denied
    4057Analysis/result data not found
    4060start_date/end_date were not provided
    4061Invalid date format
    4062start_date is later than end_date
    4070DOCX library is unavailable
    5000Internal error
    5002Database error
    5003Report generation error

    12) Plans & Pricing

    Base rates


    Minute/message discounts

    Discounts apply only for Enterprise and Enterprise+ plans.

    PlanDiscountPrice per minutePrice per chat
    Pro0.08 €0.01 €
    Enterprise−10%0.072 €0.009 €
    Enterprise+−20%0.064 €0.008 €

    Package table

    PlanIncluded in the packageUnit price inside the packagePackage price (€)Overage in this plan
    Pro5,000 min + 5,000 chats0.08 €/min, 0.01 €/chat400 € 450 $0.08 €/min, 0.01 €/chat
    Enterprise10,000 min + 10,000 chats0.072 €/min, 0.009 €/chat600 € 820 $0.072 €/min, 0.009 €/chat
    Enterprise+>10,000 min and/or >10,000 chats0.064 €/min, 0.008 €/chatvolume-based0.064 €/min, 0.008 €/chat

    What is included in all plans


    Audio-dialog transcription without analytics

    Price: 0.02 €/min


    On-premise deployment (inside the company perimeter)

    ItemOne-time (EUR)Recurring (EUR)Brief descriptionThroughput (approx.)
    Hardware (2× DGX Spark)26,000 €2-node cluster based on Grace Blackwell SuperchipAudio: 15,000–30,000 min/day • Chats: 50,000–120,000/day
    Transcripto software license16,000 €Transcription & analytics platform
    Total one-time (hardware + software + rollout)42,000 €Delivery, installation, on-prem deployment, documentation, acceptance
    Support (updates, support, Jira)1,900 €/monthRegular updates, monitoring, support

    For all questions, email info@transcripto.eu.