<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.7kas.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maintenance+script</id>
	<title>Wiki 7Kas - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.7kas.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maintenance+script"/>
	<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=Special:Contributions/Maintenance_script"/>
	<updated>2026-11-07T00:46:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI&amp;diff=1350</id>
		<title>TuCloudAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI&amp;diff=1350"/>
		<updated>2026-11-05T14:20:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: year-end periods (year_wrap) and 29/02&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|1=New here? Start with &#039;&#039;&#039;[[TuCloudAPI help|the self-discovery endpoint]]&#039;&#039;&#039;. This reference is generated from &amp;lt;code&amp;gt;func=help&amp;lt;/code&amp;gt;, so it never drifts.}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&#039;&#039;&#039;TuCloudAPI&#039;&#039;&#039; is the REST API to manage &#039;&#039;&#039;FuturePBX&#039;&#039;&#039; (the multi-tenant cloud PBX). &#039;&#039;&#039;HTTPS + JSON&#039;&#039;&#039;, GET or POST (parameters form-urlencoded; audio uploads POST the file as the body). Base URL:&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=NAME&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
&lt;br /&gt;
== Authentication &amp;amp; tenant ==&lt;br /&gt;
Every call needs an &#039;&#039;&#039;API key&#039;&#039;&#039; (&amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;). Every PBX-scoped function also needs &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; — the PBX &#039;&#039;&#039;name&#039;&#039;&#039; (e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;(ukey, pbx)&amp;lt;/code&amp;gt; pair is the tenant boundary: the server resolves the PBX name to its id and verifies that the key&#039;s OWN account owns it — for every role, SuperRoot included. A PBX that does not exist and one the key does not own both answer &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;. It never trusts a numeric tenant from the caller.&lt;br /&gt;
&lt;br /&gt;
== Response format ==&lt;br /&gt;
&#039;&#039;&#039;Always HTTP 200.&#039;&#039;&#039; Every PBX-scoped function always returns a JSON envelope: success &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:true, ...}&amp;lt;/code&amp;gt;, empty &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:true,&amp;quot;rows&amp;quot;:[]}&amp;lt;/code&amp;gt;, error &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:...,&amp;quot;message&amp;quot;:...}&amp;lt;/code&amp;gt; (common codes: &amp;lt;code&amp;gt;missing_pbx, forbidden, invalid_param, not_found, conflict, in_use, db_error, server_busy&amp;lt;/code&amp;gt;). IDs are exposed as &amp;lt;code&amp;gt;_id&amp;lt;/code&amp;gt;. A missing or invalid &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; answers a bare &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; and nothing else. The legacy account functions return their data object directly, &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; when there is nothing.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Dashboard (landing counts) ===&lt;br /&gt;
* [[TuCloudAPI getdashboard]] — Landing-page dashboard: per-tenant object counts + a cheap health metric, in one call.&lt;br /&gt;
=== Extensions (Extensiones) ===&lt;br /&gt;
* [[TuCloudAPI getextensions]] — List the PBX extensions (safe display fields; NEVER the SIP password).&lt;br /&gt;
* [[TuCloudAPI getextension]] — Get one extension with all editable fields (NO password).&lt;br /&gt;
* [[TuCloudAPI getextlookups]] — Tenant-scoped option lists for the extension form selects: caller IDs (clis), music-on-hold (music), outgoing services (outs), the extension list (exts, for Enviar a / backup monitor), registration servers (servers) and next_free: the create-form number prefill for a REGISTERED extension (3-4 digits, the same check as checkextnum), a string, or null when no number is free.&lt;br /&gt;
* [[TuCloudAPI checkextnum]] — Is this number free for a NEW extension of this PBX? The same check addextension runs under its lock, so the two never disagree.&lt;br /&gt;
* [[TuCloudAPI addextension]] — Create an extension.&lt;br /&gt;
* [[TuCloudAPI updateextension]] — Edit an extension.&lt;br /&gt;
* [[TuCloudAPI deleteextension]] — Delete an extension after a tenant + dependency check.&lt;br /&gt;
* [[TuCloudAPI setextpassword]] — Rotate ONE extension&#039;s SIP password.&lt;br /&gt;
* [[TuCloudAPI getextpassword]] — Plaintext SIP password for ONE extension (the portal&#039;s «Clave SIP» eye toggle).&lt;br /&gt;
* [[TuCloudAPI getextqr]] — SIP provisioning QR for one extension, rendered server-side to a PNG (base64).&lt;br /&gt;
=== CLIs / DIDs (Numeracion) ===&lt;br /&gt;
* [[TuCloudAPI getclis]] — List the PBX CLIs / DIDs (inbound numbers) with the grid fields.&lt;br /&gt;
* [[TuCloudAPI getcli]] — Get one CLI with all editable fields, including the full 192-key timer matrix under &amp;quot;timers&amp;quot;.&lt;br /&gt;
* [[TuCloudAPI getclilookups]] — Tenant-scoped option lists for the CLI form: routes (all route selects), schedule profiles (template_h), and defined calendar templates (template_c helper).&lt;br /&gt;
* [[TuCloudAPI addcli]] — Create a CLI / DID.&lt;br /&gt;
* [[TuCloudAPI updatecli]] — Edit a CLI.&lt;br /&gt;
* [[TuCloudAPI deletecli]] — Delete a CLI after a tenant + dependency check.&lt;br /&gt;
=== Routes (Rutas) ===&lt;br /&gt;
* [[TuCloudAPI getroutes]] — List inbound routes for the PBX with step counts.&lt;br /&gt;
* [[TuCloudAPI getroute]] — Get one route header plus its ordered steps (destinations).&lt;br /&gt;
* [[TuCloudAPI getroutelookups]] — Tenant-scoped destination pickers for the step editor: the app enum plus extensions, groups, locutions, schedules, calendars, routes and queues (app=10 &amp;quot;Cola&amp;quot;: _id = the stable voip_queue.id stored in the step appdata, label = the queue title).&lt;br /&gt;
* [[TuCloudAPI addroute]] — Create an inbound route (header only; add steps with addroutestep).&lt;br /&gt;
* [[TuCloudAPI updateroute]] — Rename/annotate a route header.&lt;br /&gt;
* [[TuCloudAPI deleteroute]] — Delete a route.&lt;br /&gt;
* [[TuCloudAPI addroutestep]] — Append a step to a route (priority = max+1).&lt;br /&gt;
* [[TuCloudAPI updateroutestep]] — Change a step&#039;s app/appdata/timer (and optionally priority).&lt;br /&gt;
* [[TuCloudAPI deleteroutestep]] — Remove a step; the remaining steps&#039; priorities are auto-compacted to 1..N by the DB trigger.&lt;br /&gt;
=== Blacklist (inbound intercept) ===&lt;br /&gt;
* [[TuCloudAPI getblacklist]] — List the inbound-intercept rules for the PBX.&lt;br /&gt;
* [[TuCloudAPI getblacklistlookups]] — Tenant-scoped pickers for the rule form: routes (the divert target) and CLIs/DIDs (cli_id; 0 = all DIDs / generic rule).&lt;br /&gt;
* [[TuCloudAPI addblacklist]] — Create an inbound-intercept rule.&lt;br /&gt;
* [[TuCloudAPI updateblacklist]] — Edit an inbound-intercept rule.&lt;br /&gt;
* [[TuCloudAPI deleteblacklist]] — Delete an inbound-intercept rule.&lt;br /&gt;
=== Contacts (Agenda) ===&lt;br /&gt;
* [[TuCloudAPI getcontacts]] — List the PBX contacts (address book).&lt;br /&gt;
* [[TuCloudAPI addcontact]] — Create a contact.&lt;br /&gt;
* [[TuCloudAPI updatecontact]] — Edit a contact.&lt;br /&gt;
* [[TuCloudAPI deletecontact]] — Delete a contact.&lt;br /&gt;
=== Calendar (date overrides) ===&lt;br /&gt;
* [[TuCloudAPI getcalendars]] — List the PBX calendar date-overrides (one row = one recurring month/day + time window that reroutes inbound to a route for CLIs on that template).&lt;br /&gt;
* [[TuCloudAPI getcalendar]] — Get one calendar row.&lt;br /&gt;
* [[TuCloudAPI getcalendarlookups]] — Tenant-scoped pickers: routes (the destination) and the set of template values already in use (suggestions for the template spinner).&lt;br /&gt;
* [[TuCloudAPI addcalendar]] — Create a calendar date-override.&lt;br /&gt;
* [[TuCloudAPI updatecalendar]] — Edit a calendar row (same fields and period rule as addcalendar).&lt;br /&gt;
* [[TuCloudAPI deletecalendar]] — Delete a calendar row.&lt;br /&gt;
=== Ring groups (Grupos) ===&lt;br /&gt;
* [[TuCloudAPI getgroups]] — List the PBX ring/hunt groups with a member count.&lt;br /&gt;
* [[TuCloudAPI getgroup]] — Get one group.&lt;br /&gt;
* [[TuCloudAPI getgrouplookups]] — Tenant-scoped pickers: extensions (members), music (MOH), and CLIs (for the admin forward caller-id).&lt;br /&gt;
* [[TuCloudAPI addgroup]] — Create a ring group.&lt;br /&gt;
* [[TuCloudAPI updategroup]] — Edit a ring group (same fields as addgroup; gr editable, conflict on collision).&lt;br /&gt;
* [[TuCloudAPI deletegroup]] — Delete a ring group.&lt;br /&gt;
=== Locutions / IVR (Locuciones) ===&lt;br /&gt;
* [[TuCloudAPI getlocutions]] — List the PBX locutions / IVR prompts.&lt;br /&gt;
* [[TuCloudAPI getlocution]] — Get one locution with its DTMF digit-&amp;gt;route map (+ resolved route names), has_audio and audio_url.&lt;br /&gt;
* [[TuCloudAPI getlocutionlookups]] — Tenant-scoped route picker for the 11 DTMF digit destinations.&lt;br /&gt;
* [[TuCloudAPI addlocution]] — Create a locution / IVR.&lt;br /&gt;
* [[TuCloudAPI updatelocution]] — Edit a locution (name, waitext, digit routes).&lt;br /&gt;
* [[TuCloudAPI deletelocution]] — Delete a locution.&lt;br /&gt;
* [[TuCloudAPI getlocutionvoices]] — Catalogo para el selector de texto a voz: voces disponibles e idiomas admitidos.&lt;br /&gt;
* [[TuCloudAPI synthlocution]] — Genera el audio de una locucion a partir de un texto y lo deja PENDIENTE DE ACEPTAR: NO sustituye la locucion.&lt;br /&gt;
* [[TuCloudAPI uploadlocution]] — Sube un fichero de audio y lo deja COMO el audio de una locucion.&lt;br /&gt;
* [[TuCloudAPI commitlocution]] — Acepta el audio pendiente (el generado por synthlocution o subido por uploadlocution) y lo convierte en la locucion.&lt;br /&gt;
* [[TuCloudAPI discardlocution]] — Tira el audio pendiente sin tocar la locucion.&lt;br /&gt;
=== Music on hold (MOH) ===&lt;br /&gt;
* [[TuCloudAPI getmusics]] — List the PBX music-on-hold classes with has_audio (whether the track exists) and audio_url (the getaudio player URL).&lt;br /&gt;
* [[TuCloudAPI getmusic]] — Get one MOH class (+ has_audio, audio_url).&lt;br /&gt;
* [[TuCloudAPI addmusic]] — Create a MOH class.&lt;br /&gt;
* [[TuCloudAPI uploadmusic]] — Sube un fichero de audio para una clase de musica y lo deja PENDIENTE DE ACEPTAR: NO sustituye la que suena.&lt;br /&gt;
* [[TuCloudAPI commitmusic]] — Acepta el audio pendiente y lo convierte en la musica que suena.&lt;br /&gt;
* [[TuCloudAPI discardmusic]] — Tira el audio pendiente sin tocar la musica.&lt;br /&gt;
* [[TuCloudAPI deletemusic]] — Delete a MOH class.&lt;br /&gt;
=== Schedules (Horarios) ===&lt;br /&gt;
* [[TuCloudAPI getschedules]] — List the PBX weekly schedules (the WHEN grid a CLI&#039;s schedule profile points at).&lt;br /&gt;
* [[TuCloudAPI getschedule]] — Get one schedule with the full 84-cell weekly grid under &amp;quot;slots&amp;quot;.&lt;br /&gt;
* [[TuCloudAPI addschedule]] — Create a weekly schedule.&lt;br /&gt;
* [[TuCloudAPI updateschedule]] — Edit a schedule (template/name/grid).&lt;br /&gt;
* [[TuCloudAPI deleteschedule]] — Delete a schedule.&lt;br /&gt;
=== Outbound routing (Rutas de salida) ===&lt;br /&gt;
* [[TuCloudAPI getoutgoings]] — List the outbound-routing profiles (Servicios de salida) with rule counts.&lt;br /&gt;
* [[TuCloudAPI getoutgoing]] — Get one outbound profile plus its ordered allow/deny rules (longest-prefix first).&lt;br /&gt;
* [[TuCloudAPI getoutgoinglookups]] — Tenant-scoped route picker for a rule&#039;s divert destination (route_id; 0 = block).&lt;br /&gt;
* [[TuCloudAPI addoutgoing]] — Create an outbound-routing profile (header; add rules with addoutrule).&lt;br /&gt;
* [[TuCloudAPI updateoutgoing]] — Rename/annotate an outbound profile.&lt;br /&gt;
* [[TuCloudAPI deleteoutgoing]] — Delete an outbound profile.&lt;br /&gt;
* [[TuCloudAPI addoutrule]] — Append an allow/deny rule to a profile.&lt;br /&gt;
* [[TuCloudAPI updateoutrule]] — Edit an outbound rule (dst/denyallow/route_id/nota).&lt;br /&gt;
* [[TuCloudAPI deleteoutrule]] — Remove an outbound rule.&lt;br /&gt;
=== Phonebooks (Agendas) ===&lt;br /&gt;
* [[TuCloudAPI getphonebooks]] — List the PBX phonebooks (address books) with contact counts.&lt;br /&gt;
* [[TuCloudAPI getphonebook]] — Get one phonebook plus its contacts.&lt;br /&gt;
* [[TuCloudAPI addphonebook]] — Create a phonebook.&lt;br /&gt;
* [[TuCloudAPI updatephonebook]] — Edit a phonebook.&lt;br /&gt;
* [[TuCloudAPI deletephonebook]] — Delete a phonebook and all its contacts (DB cascade).&lt;br /&gt;
* [[TuCloudAPI addphonebookcontact]] — Add a contact to a phonebook.&lt;br /&gt;
* [[TuCloudAPI updatephonebookcontact]] — Edit a phonebook contact (tenant-checked via the row).&lt;br /&gt;
* [[TuCloudAPI deletephonebookcontact]] — Remove a phonebook contact (tenant-checked).&lt;br /&gt;
=== Call queues / ACD (Colas) ===&lt;br /&gt;
* [[TuCloudAPI getqueues]] — List the PBX call queues (ACD) with member counts.&lt;br /&gt;
* [[TuCloudAPI getqueue]] — Get one queue&#039;s config.&lt;br /&gt;
* [[TuCloudAPI getqueuelookups]] — Tenant-scoped pickers for the queue form: music (MOH classes), the strategy enum, and next_free (the create-form exten prefill = first free 3-digit queue number, null if 900-999 full).&lt;br /&gt;
* [[TuCloudAPI addqueue]] — Create a call queue.&lt;br /&gt;
* [[TuCloudAPI updatequeue]] — Edit a queue&#039;s config.&lt;br /&gt;
* [[TuCloudAPI deletequeue]] — Delete a queue.&lt;br /&gt;
=== Agents / queue members (Agentes) ===&lt;br /&gt;
* [[TuCloudAPI getagents]] — List the PBX agents (queue members) with the queue title and the agent&#039;s extension name resolved.&lt;br /&gt;
* [[TuCloudAPI getagentlookups]] — Dropdown data for the agent screens: this PBX&#039;s queues (assign an agent to a queue) and its extensions {_id,num,name}.&lt;br /&gt;
* [[TuCloudAPI addagent]] — Add an extension to a queue as a static member.&lt;br /&gt;
* [[TuCloudAPI updateagent]] — Update a queue member&#039;s penalty / paused / reason_paused (partial — only the fields sent are changed).&lt;br /&gt;
* [[TuCloudAPI deleteagent]] — Remove a queue member (agent) by _id.&lt;br /&gt;
=== Portal admin users (Usuarios) ===&lt;br /&gt;
* [[TuCloudAPI getadminusers]] — List this PBX&#039;s portal users (tucloud_sec_users).&lt;br /&gt;
* [[TuCloudAPI getadminuser]] — Get one portal user by login (_id) within this PBX.&lt;br /&gt;
* [[TuCloudAPI getadminuserlookups]] — Picker for the user form: the distinct roles used in this PBX (free-text datalist suggestions), and invite:true: users are created by email invitation, with no username and no password (always true on this build).&lt;br /&gt;
* [[TuCloudAPI addadminuser]] — Invite a new portal user to THIS PBX.&lt;br /&gt;
* [[TuCloudAPI updateadminuser]] — Edit a portal user in THIS PBX: name, active, priv_admin, role and phone are replaced as sent; disable_2fa=1 turns 2FA off and clears the secret (never enables).&lt;br /&gt;
* [[TuCloudAPI requestadminuseremail]] — Ask to change a portal user&#039;s EMAIL (their magic-link login), the twin of requestpbxemail.&lt;br /&gt;
* [[TuCloudAPI resendadminuseremail]] — Mail again the link of the user&#039;s open email change (the invitation of an invited user, or a change), pending or expired, with a fresh 24 hours; the previous link is then ignored.&lt;br /&gt;
* [[TuCloudAPI canceladminuseremail]] — Drop the user&#039;s open email change (pending, or expired): its link is then ignored.&lt;br /&gt;
* [[TuCloudAPI getadminuseremailchange]] — Status of the user&#039;s latest email change, from tucloudapi&#039;s own state (never magiclogin): none | pending (email, expires_in) | expired (until resent or cancelled) | done (notice: sent|failed|skipped, the informational mail to the old address) | failed (reason taken|error) | cancelled, with invite (true when it is the invitation) and its Spanish message.&lt;br /&gt;
* [[TuCloudAPI deleteadminuser]] — Delete a portal user by login within this PBX; their open email change is cancelled with them.&lt;br /&gt;
=== PBX settings (Configuracion) ===&lt;br /&gt;
* [[TuCloudAPI getpbxconfig]] — Get this PBX&#039;s settings (single record, no id needed, tenant from the binding).&lt;br /&gt;
* [[TuCloudAPI getpbxconfiglookups]] — Picker for the admin_ext_id field: this PBX&#039;s extensions.&lt;br /&gt;
* [[TuCloudAPI updatepbxconfig]] — Update this PBX&#039;s settings (strict set).&lt;br /&gt;
* [[TuCloudAPI requestpbxemail]] — Ask to change this PBX&#039;s MASTER EMAIL (tucloud_pbx.email: the administrator&#039;s magic-link and password login).&lt;br /&gt;
* [[TuCloudAPI getpbxemailchange]] — Status of this PBX&#039;s latest master-email change, from tucloudapi&#039;s own state (never magiclogin): none | pending (email, expires_in) | done (email, notice: sent|failed|skipped, the informational mail to the old address) | expired | failed (reason taken|error) | cancelled, each with its Spanish message.&lt;br /&gt;
* [[TuCloudAPI cancelpbxemail]] — Cancel this PBX&#039;s pending master-email change (its link is then ignored).&lt;br /&gt;
=== Security profiles / ACL (Perfiles) ===&lt;br /&gt;
* [[TuCloudAPI getprofiles]] — List this PBX&#039;s security profiles (Perfiles) with member counts.&lt;br /&gt;
* [[TuCloudAPI getprofile]] — Get one profile + its full app-permission matrix (all catalog apps, with app_type).&lt;br /&gt;
* [[TuCloudAPI getprofileapps]] — Get a profile&#039;s app-permission matrix only (the Aplicaciones/Perfiles editor).&lt;br /&gt;
* [[TuCloudAPI getseclookups]] — Pickers for the security section: the global app catalog (matrix columns) + this PBX&#039;s profiles (membership picker).&lt;br /&gt;
* [[TuCloudAPI getprofileusers]] — List the admin users assigned to a profile (read-only &amp;quot;Miembros&amp;quot; list; edits stay per-user via setuserprofiles).&lt;br /&gt;
* [[TuCloudAPI getuserprofiles]] — Get an admin user&#039;s profile membership + the profile picker (this PBX only).&lt;br /&gt;
* [[TuCloudAPI addprofile]] — Create a security profile in this PBX.&lt;br /&gt;
* [[TuCloudAPI updateprofile]] — Rename a profile (description).&lt;br /&gt;
* [[TuCloudAPI deleteprofile]] — Delete a profile.&lt;br /&gt;
* [[TuCloudAPI getsections]] — The catalog of portal sections (login v2, 2026-10-31): one row per section of the new web, in sidebar order, from the NEW table tucloud_sec_sections (24 rows; pbx_config is the PBX administrator&#039;s and has no row).&lt;br /&gt;
* [[TuCloudAPI getprofilesections]] — One profile&#039;s section access (login v2): every catalog section with access Y/N, from the NEW table tucloud_sec_groups_sections; a section without a row answers N.&lt;br /&gt;
* [[TuCloudAPI setprofilesections]] — FULL replace of one profile&#039;s section access (login v2; the «mantenimiento de accesos de los grupos» the operator asked for on 2026-10-31).&lt;br /&gt;
* [[TuCloudAPI setprofileapps]] — RETIRED 2026-10-31 (operator: the legacy matrix is never altered again).&lt;br /&gt;
* [[TuCloudAPI setprofileapp]] — RETIRED 2026-10-31 (operator: the legacy matrix is never altered again).&lt;br /&gt;
* [[TuCloudAPI setuserprofiles]] — Full-replace an admin user&#039;s profile membership (this PBX only).&lt;br /&gt;
=== Call detail records (CDR) ===&lt;br /&gt;
* [[TuCloudAPI getcdr]] — List a period of this PBX&#039;s call detail records (Registro de llamadas), newest first.&lt;br /&gt;
* [[TuCloudAPI getcdrlookups]] — CDR form pickers: the selectable years + the result (disposition) label set.&lt;br /&gt;
=== Reports / statistics (Informes) ===&lt;br /&gt;
* [[TuCloudAPI getreports]] — Call-volume statistics (Informes / Estadisticas de Llamadas) for a month — VOLUME ONLY, no prices.&lt;br /&gt;
=== AI assistant (Asistente IA) ===&lt;br /&gt;
* [[TuCloudAPI aichat]] — AI assistant for this PBX (Spanish).&lt;br /&gt;
=== Scheduled tasks (Tareas programadas) ===&lt;br /&gt;
* [[TuCloudAPI gettasks]] — List scheduled tasks (tareas programadas) for the PBX, with schedule + status labels and step counts.&lt;br /&gt;
* [[TuCloudAPI gettask]] — Get one scheduled task and its ordered steps.&lt;br /&gt;
* [[TuCloudAPI gettasksteps]] — Get the ordered steps of a task (tenant-checked).&lt;br /&gt;
* [[TuCloudAPI gettasklog]] — Get the last 100 execution-log rows for a task (read-only history), newest first.&lt;br /&gt;
* [[TuCloudAPI getapps]] — List the 8 target entity types (&amp;quot;apps&amp;quot;) a task step can act on.&lt;br /&gt;
* [[TuCloudAPI getappactions]] — List the configurable fields (&amp;quot;actions&amp;quot;) for an app — the dynamic-form catalog (field, type 0-5, data, metadata).&lt;br /&gt;
* [[TuCloudAPI getappsrecords]] — List this PBX&#039;s selectable records for an app (the record picker), via the tenant-scoped lookup function.&lt;br /&gt;
* [[TuCloudAPI getactiondata]] — List the selectable value options for an action (the value picker), for select/checkbox action types, via the tenant-scoped lookup function.&lt;br /&gt;
* [[TuCloudAPI getpbxs]] — List the PBXs assigned to the calling ukey&#039;s account (post-login selector; show only if &amp;gt;1).&lt;br /&gt;
* [[TuCloudAPI addtask]] — Create a scheduled task (status forced 0).&lt;br /&gt;
* [[TuCloudAPI updatetask]] — Edit a task (does not change status).&lt;br /&gt;
* [[TuCloudAPI deletetask]] — Delete a task (DB cascade of steps/log + crontab removal via the operator trigger).&lt;br /&gt;
* [[TuCloudAPI addtaskstep]] — Append a step to a task.&lt;br /&gt;
* [[TuCloudAPI updatetaskstep]] — Change a step&#039;s value (blank -&amp;gt; NULL).&lt;br /&gt;
* [[TuCloudAPI deletetaskstep]] — Remove a step.&lt;br /&gt;
=== Call simulator ===&lt;br /&gt;
* [[TuCloudAPI simulatecall]] — Simulate how a call routes (inbound DID / outbound / internal) WITHOUT placing a real call, returning the ordered decision trace (flujo).&lt;br /&gt;
=== Audio files ===&lt;br /&gt;
* [[TuCloudAPI getaudio]] — General-purpose audio file server (not only for the simulator): serve a locution or music-on-hold audio file base64-encoded (audio/wav) — for hover-preview, players, downloads, etc.&lt;br /&gt;
=== FuturePBX ===&lt;br /&gt;
* [[TuCloudAPI getpbxloclog]] — FuturePBX IVR/locution DTMF key-press log for a period.&lt;br /&gt;
=== Meta / discovery ===&lt;br /&gt;
* [[TuCloudAPI help]] — Lists the API functions available to the role of the calling ukey, with each function&#039;s description, parameters (meaning, optional/default), an example call and the response format.&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
* [[TuCloudAPI helloworld]] — Health check / connectivity test.&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[TuCloudAPI SetDebugLevel]] — Sets the runtime debug/log verbosity level.&lt;br /&gt;
* [[TuCloudAPI ReloadUsersKeys]] — Hot-reloads the API keys from the database without restarting the service.&lt;br /&gt;
* [[TuCloudAPI resetinternalkey]] — Regenerates the non-showable internal API key for an account.&lt;br /&gt;
=== Account management (inherited) ===&lt;br /&gt;
* [[TuCloudAPI getaccountcodeid]] — Lists (id, accountcode) pairs of the accounts under the caller.&lt;br /&gt;
* [[TuCloudAPI getaccountcodedata]] — Returns full account profile rows (view_voip_users_api) for the caller&#039;s accounts.&lt;br /&gt;
* [[TuCloudAPI lockaccountcode]] — Blocks (locks) an account (blocked=SI).&lt;br /&gt;
* [[TuCloudAPI unlockaccountcode]] — Unblocks (unlocks) an account (blocked=NO).&lt;br /&gt;
* [[TuCloudAPI addaccountcode]] — Creates a new account (client) under the caller.&lt;br /&gt;
* [[TuCloudAPI getcredit]] — Returns credit and status (credit, credit_limit, creditalarm, email, blocked).&lt;br /&gt;
=== auth ===&lt;br /&gt;
* [[TuCloudAPI authrequest]] — Ask for a magic-link e-mail.&lt;br /&gt;
* [[TuCloudAPI authpoll]] — Has the user authorized the magic link? PUBLIC, like authrequest.&lt;br /&gt;
* [[TuCloudAPI authchallenge]] — A proof-of-work captcha challenge (ALTCHA protocol, SHA-256).&lt;br /&gt;
* [[TuCloudAPI authlogin]] — The password door.&lt;br /&gt;
* [[TuCloudAPI authwhoami]] — The current session context, and it refreshes the idle timer.&lt;br /&gt;
* [[TuCloudAPI authlogout]] — Destroy the session and clear the cookie.&lt;br /&gt;
=== queue_live ===&lt;br /&gt;
* [[TuCloudAPI getqueueevents]] — Today&#039;s events of ONE queue (local day), newest first, at most 200, with the same deduplication as getqueuestats (core events; module EXITQUEUE FULL/JOINEMPTY kept as refused).&lt;br /&gt;
* [[TuCloudAPI getlivestatus]] — LIVE state of the PBX as ONE snapshot of the presence feed: each extension&#039;s state (unregistered/idle/ringing/busy, &amp;quot;unknown&amp;quot; when it is not published) and its calls in progress (ringing/talking/hold/dialing, the other party, seconds since start and since answer), and each queue&#039;s live picture (agents logged in / available / paused, the waiting calls in queue order with their wait, every member with its status).&lt;br /&gt;
=== queue_stats ===&lt;br /&gt;
* [[TuCloudAPI getqueuestats]] — Call-center history from voip_queue_log (gabpbx contract v1, 2026-10-31): totals, per interval, per queue and per agent between two local days (Europe/Madrid, inclusive).&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
Full technical reference (architecture, auth model, side effects): see the project repo &amp;lt;code&amp;gt;doc/TUCLOUDAPI_REFERENCE.md&amp;lt;/code&amp;gt;. Scheduled-tasks engine: the 6 &amp;lt;code&amp;gt;tucloud_pbx_tasks*&amp;lt;/code&amp;gt; tables + the &amp;lt;code&amp;gt;.231&amp;lt;/code&amp;gt; crontab trigger.&lt;br /&gt;
&lt;br /&gt;
[[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI_updatecalendar&amp;diff=1349</id>
		<title>TuCloudAPI updatecalendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI_updatecalendar&amp;diff=1349"/>
		<updated>2026-11-05T14:20:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: year-end periods (year_wrap) and 29/02&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;TuCloudAPI function to manage FuturePBX (the cloud PBX). Available to: &#039;&#039;&#039;SuperRoot, Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Requires the &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; parameter (the PBX &#039;&#039;&#039;name&#039;&#039;&#039;, e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The server verifies that your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;&#039;s own account owns that PBX, whatever its role; otherwise, and also for a PBX that does not exist, it returns &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;forbidden&amp;quot;}&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Edit a calendar row (same fields and period rule as addcalendar). hold ABSENT keeps the stored value. With hold 0, expires_on is kept while the period (start and end) does not change, and computed again from today when it does or when the row goes from 1 to 0; hold 1 clears it. 404 if not in the caller&#039;s PBX. Requires a non-readonly ukey.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=updatecalendar&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
GET, or POST with the parameters form-urlencoded in the body. Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter. Always HTTP 200; the response is a JSON envelope.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; || string || Yes || — || FuturePBX NAME (e.g. tucall). The (ukey, pbx) pair is the tenant boundary; the server verifies the ukey owns this PBX.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar row id (_id).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar-template group 1-99.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthstart&amp;lt;/code&amp;gt; || integer || Yes || — || Start month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthend&amp;lt;/code&amp;gt; || integer || Yes || — || End month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dayend&amp;lt;/code&amp;gt; || integer || Yes || — || End day 1-31.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt; || integer || Yes || — || Route _id to divert to (required, in-tenant).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;daystart&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Start day 1-31, or 0/blank = all days (Todos).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timestart&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || Start time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timeend&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || End time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hold&amp;lt;/code&amp;gt; || integer || No || — || «Repetir cada año» 1/0; absent = keep the stored value.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nota&amp;lt;/code&amp;gt; || string || No || — || Free note (max 256).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://tucloudapi.7kas.com:9087/tucloud?func=updatecalendar&amp;amp;ukey=KEY&amp;amp;pbx=tucall&amp;amp;id=81522&amp;amp;template=1&amp;amp;monthstart=1&amp;amp;daystart=1&amp;amp;monthend=1&amp;amp;dayend=1&amp;amp;destination=197&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
{ok, calendar:{...}}.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
Always HTTP 200. On failure the body is &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;. Common codes: &amp;lt;code&amp;gt;missing_pbx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invalid_param&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;not_found&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conflict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in_use&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db_error&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_busy&amp;lt;/code&amp;gt;; the Response section above lists any specific to this function.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[TuCloudAPI]]&lt;br /&gt;
[[Category:TuCloudAPI SuperRoot]][[Category:TuCloudAPI Operator]][[Category:TuCloudAPI Client]][[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI_addcalendar&amp;diff=1348</id>
		<title>TuCloudAPI addcalendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI_addcalendar&amp;diff=1348"/>
		<updated>2026-11-05T14:20:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: year-end periods (year_wrap) and 29/02&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;TuCloudAPI function to manage FuturePBX (the cloud PBX). Available to: &#039;&#039;&#039;SuperRoot, Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Requires the &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; parameter (the PBX &#039;&#039;&#039;name&#039;&#039;&#039;, e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The server verifies that your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;&#039;s own account owns that PBX, whatever its role; otherwise, and also for a PBX that does not exist, it returns &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;forbidden&amp;quot;}&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Create a calendar date-override. Fields: template 1-99 (the calendar group a CLI&#039;s template_c selects), monthstart/monthend 1-12, daystart/dayend 1-31, timestart/timeend HH:MM (blank = 00:00), destination = an in-tenant route _id (required), hold «Repetir cada año» 1/0, nota (max 256). A period that crosses the year end (start after end) is accepted when it lasts at most 62 days, both ends included, counted in a non-leap year (23/12 -&amp;gt; 01/01 = 10); a longer one -&amp;gt; invalid_param, field monthend, reason year_wrap. «Repetir cada año» (operator 2026-11-05): 1 = the row repeats every year on those dates; 0 = only its next occurrence: expires_on is the last day of it (Europe/Madrid) and the day after, the row is deleted by itself. The next occurrence is this year&#039;s when its end day is today or later, else next year&#039;s. The trigger derives the MMDD/HHMM columns + root; the API writes only the editable fields. No dedup (duplicates allowed, per legacy). Requires a non-readonly ukey.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=addcalendar&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
GET, or POST with the parameters form-urlencoded in the body. Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter. Always HTTP 200; the response is a JSON envelope.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; || string || Yes || — || FuturePBX NAME (e.g. tucall). The (ukey, pbx) pair is the tenant boundary; the server verifies the ukey owns this PBX.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar-template group 1-99.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthstart&amp;lt;/code&amp;gt; || integer || Yes || — || Start month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthend&amp;lt;/code&amp;gt; || integer || Yes || — || End month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dayend&amp;lt;/code&amp;gt; || integer || Yes || — || End day 1-31.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt; || integer || Yes || — || Route _id to divert to (required, in-tenant).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;daystart&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Start day 1-31, or 0/blank = all days (Todos).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timestart&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || Start time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timeend&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || End time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hold&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; || «Repetir cada año»: 1 = every year (the default), 0 = only the next occurrence, then deleted by itself.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nota&amp;lt;/code&amp;gt; || string || No || — || Free note (max 256).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://tucloudapi.7kas.com:9087/tucloud?func=addcalendar&amp;amp;ukey=KEY&amp;amp;pbx=tucall&amp;amp;template=1&amp;amp;monthstart=12&amp;amp;daystart=25&amp;amp;monthend=12&amp;amp;dayend=25&amp;amp;destination=197&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
{ok, calendar:{...}}.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
Always HTTP 200. On failure the body is &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;. Common codes: &amp;lt;code&amp;gt;missing_pbx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invalid_param&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;not_found&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conflict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in_use&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db_error&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_busy&amp;lt;/code&amp;gt;; the Response section above lists any specific to this function.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[TuCloudAPI]]&lt;br /&gt;
[[Category:TuCloudAPI SuperRoot]][[Category:TuCloudAPI Operator]][[Category:TuCloudAPI Client]][[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=MediaWiki:Common.js&amp;diff=1347</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=MediaWiki:Common.js&amp;diff=1347"/>
		<updated>2026-11-05T13:51:30Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API console regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* === BEGIN restapi-generated (wikidocs/gen_assets.py) -- do not edit inside, it is overwritten ===&lt;br /&gt;
   MediaWiki:Common.js is SHARED with other teams (tucloudapi appends its own page-gated&lt;br /&gt;
   loaders after the END marker). publish.sh preserves everything outside these markers. */&lt;br /&gt;
/* 7Kas API Console -- interactive explorer for [[API Console]].&lt;br /&gt;
   SAFE BY DESIGN: pure client-side URL builder. No wiki proxy, no cross-origin fetch;&lt;br /&gt;
   &amp;quot;Run&amp;quot; opens the real 7Kas API (api.7kas.com) in a new tab using the reader&#039;s OWN ukey.&lt;br /&gt;
   Identity is enforced server-side and each key is rate-limited (taskslimit), so this adds&lt;br /&gt;
   no attack surface beyond what the public API already exposes. */&lt;br /&gt;
(function(){&lt;br /&gt;
 if (mw.config.get(&#039;wgPageName&#039;) !== &#039;API_Console&#039;) { return; }&lt;br /&gt;
 var API = &#039;https://api.7kas.com:9080/7Kas&#039;;&lt;br /&gt;
 var CAT = {&amp;quot;help&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;meta&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=help&amp;amp;ukey=KEY&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Return only this function&#039;s documentation. Omit for the full catalogue.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;helloworld&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;health&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=helloworld&amp;amp;ukey=KEY&amp;quot;,&amp;quot;params&amp;quot;:[]},&amp;quot;getaccountcodeid&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;accounts&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getaccountcodeid&amp;amp;ukey=OPKEY&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account code (exact). Omit for all.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows (up to 10000).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getaccountcodedata&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;accounts&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getaccountcodedata&amp;amp;ukey=OPKEY&amp;amp;accountcodeid=123&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account id. Omit for all.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;1000&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;lockaccountcode&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;accounts&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=lockaccountcode&amp;amp;ukey=OPKEY&amp;amp;accountcodeid=123&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account id to lock.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;unlockaccountcode&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;accounts&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=unlockaccountcode&amp;amp;ukey=OPKEY&amp;amp;accountcodeid=123&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account id to unlock.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;addaccountcode&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;accounts&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=addaccountcode&amp;amp;ukey=OPKEY&amp;amp;accountcode=NEW1&amp;amp;credit=0&amp;amp;password=secret&amp;amp;name=John&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account code (login). Required. Max 20.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;credit&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Initial credit. Required. Max 20.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;password&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account password. Required. Max 40.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;name&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Contact/holder name. Required. Max 100.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;company&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Company name.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 100&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;address&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Postal address.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 200&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;phone&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Phone.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;email&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Primary e-mail.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 100&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;date_added&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Creation date.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;description&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Free description.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 200&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;language&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;UI language code.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 5&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;postal_code&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Postal code.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 10&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;city&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;City.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 50&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;province&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Province.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 50&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;nif&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Tax id (NIF/CIF).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;blocked&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Blocked flag (SI/NO).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 4&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;postpaid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Postpaid flag.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 4&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;admin&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Admin flag.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 4&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode_comis&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Commissioner account this account belongs to.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;comisionista&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Is-commissioner flag (SI/NO).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 4&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;groups&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Group memberships.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 100&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;movil_sms&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Mobile for SMS.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;email2&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Secondary e-mail.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 100&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;fax&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Fax.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;nota&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Internal note.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 500&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;web&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Website.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 100&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;flags&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account flags.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;tariff&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Tariff code.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;daycallmail&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Daily-call report e-mail(s).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 100&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;root&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Parent operator root. Forced to the caller&#039;s own unless SuperRoot.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric, max 10&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;credit_limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Credit limit.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;comis_minutos&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Commission minutes.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;ratio&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Commission ratio.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;creditalarm&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Credit alarm threshold.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;aindirecto_coste&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Indirect-access cost.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;intlimit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;International limit.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;daycall&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Daily-call limit.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;intlock&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;International lock flag.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;numeric&amp;quot;}]},&amp;quot;getcredit&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;accounts&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcredit&amp;amp;ukey=KEY&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account to query (operators/SuperRoot only). Omit for your own.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 20&amp;quot;}]},&amp;quot;getcdr&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;cdr&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcdr&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year of the records (e.g. 2026).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day of month (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour (0-23).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;only valid together with day&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account id. Ignored/forced to the caller&#039;s own for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;userfield&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by tucloud PBX id (the CDR userfield column). One accountcode can host several PBXs, so accountcodeid alone does not isolate a switchboard.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;strict: rows whose userfield is empty never match&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows. SHM fast-path up to 10000, PostgreSQL fallback up to 1000.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getcallsbilling&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbilling&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=voc&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year (e.g. 2026).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;model&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;voc&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;voc = detailed calls; toc = totals.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;valid: voc|toc (case-insensitive)&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account code (non-clients). Forced to own for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=voc only&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour (0-23).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=voc only, requires day&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows. SHM up to 10000, PostgreSQL up to 1000.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Server-side search pattern.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 40&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search_fields&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Comma-separated fields (whitelist: dst, cid_num, cid_name, cli_billing, dial_cid_num, accountcode, prefix, dtype, context, tariff, fromuri).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 200&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search_mode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;contains&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Match mode.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;prefix|suffix|contains|exact&amp;quot;}]},&amp;quot;getcallsbillingtotalroot&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbillingtotalroot&amp;amp;ukey=SRKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;root=5&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;root&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Root/operator id. Required for SuperRoot; operators use their own.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;required when SuperRoot&amp;quot;}]},&amp;quot;getcallsbillingcount&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbillingcount&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=voc&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;model&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;voc&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;voc or toc.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;valid: voc|toc&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account code (non-clients).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=voc only&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=voc only, requires day&amp;quot;}]},&amp;quot;getcallsbillingtotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbillingtotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getcallsbillingaccounttotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbillingaccounttotal&amp;amp;ukey=OPKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;accountcode=CLI1&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account code to total.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;}]},&amp;quot;getcallsbillingdetailtotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbillingdetailtotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account code (non-clients).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;requires day&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Server-side search pattern.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 40&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search_fields&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Comma-separated searchable fields.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 200&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search_mode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;contains&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Match mode.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;prefix|suffix|contains|exact&amp;quot;}]},&amp;quot;getcallsbillingcomis&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;billing&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getcallsbillingcomis&amp;amp;ukey=COMISKEY&amp;amp;year=2026&amp;amp;month=7&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year. Optional (defaults applied server-side).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12. Optional.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getservices&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;services&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getservices&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;service&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Service prefix (e.g. osttrc). Omit for all services.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account (non-clients). Forced to own for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;requires day&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows (SHM up to 10000, PostgreSQL up to 1000).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getservicestotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;services&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getservicestotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;service&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Service prefix. Omit for all.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account (non-clients).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 20&amp;quot;}]},&amp;quot;getincomingcalls&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;incomingcalls&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getincomingcalls&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=vic&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year (e.g. 2026).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;model&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;vic&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;vic = detail records; tic = totals.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;valid: vic|tic (case-insensitive)&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account id (non-clients). Forced to own for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=vic only&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour (0-23).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=vic only, requires day&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows. SHM up to 10000, PostgreSQL up to 1000.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Server-side search pattern.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 40&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search_fields&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Comma-separated fields to search (whitelist: src, dst).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 200&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;search_mode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;contains&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Match mode.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;prefix|suffix|contains|exact&amp;quot;}]},&amp;quot;getincomingcallstotalroot&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;incomingcalls&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getincomingcallstotalroot&amp;amp;ukey=SRKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;root=5&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;root&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Root/operator id. Required for SuperRoot; operators use their own.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;required when SuperRoot&amp;quot;}]},&amp;quot;getincomingcallscount&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;incomingcalls&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getincomingcallscount&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=vic&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;model&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;vic&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;vic or tic.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;valid: vic|tic&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account id (non-clients).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=vic only&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;model=vic only, requires day&amp;quot;}]},&amp;quot;getincomingcallstotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;incomingcalls&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getincomingcallstotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getincomingcallsaccounttotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;incomingcalls&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getincomingcallsaccounttotal&amp;amp;ukey=OPKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;accountcodeid=123&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Account id.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getincomingcallsdetailtotal&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;incomingcalls&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getincomingcallsdetailtotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account id (non-clients).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;requires day&amp;quot;}]},&amp;quot;getclis&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;clis&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getclis&amp;amp;ukey=KEY&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account code. Forced to the caller&#039;s own for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;active&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by active flag.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 2&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;route&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by route.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 32&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;type&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by CLI type.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 2&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;1000&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Maximum rows to return (capped at 1000).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getwgpeers&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getwgpeers&amp;amp;ukey=OPKEY&amp;amp;server_id=1&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;server_id&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;WireGuard server id.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;setwgstatus&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=setwgstatus&amp;amp;ukey=OPKEY&amp;amp;host=h1&amp;amp;root=5&amp;amp;status=1&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;host&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Peer host id.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;root&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Operator root the peer belongs to.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;status&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;New status (e.g. 0=disabled, 1=enabled).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;registerwgserver&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=registerwgserver&amp;amp;ukey=OPKEY&amp;amp;server_id=1&amp;amp;wg_pubkey=...&amp;amp;wg_listen_port=51820&amp;amp;wg_endpoint=vpn.example.com:51820&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;server_id&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Server id.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;wg_pubkey&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Server WireGuard public key (max 44).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;wg_listen_port&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;UDP listen port.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;wg_endpoint&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Public endpoint host:port (max 64).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;registerwgdevice&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=registerwgdevice&amp;amp;ukey=OPKEY&amp;amp;mac=AA:BB:CC:DD:EE:FF&amp;amp;wg_pubkey=...&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;mac&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Device MAC address (max 17).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;wg_pubkey&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Device WireGuard public key (max 44).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getwgconfig&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getwgconfig&amp;amp;ukey=KEY&amp;amp;password=DEVICEPASS&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;password&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;The device vpnpassword (max 128).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;registervpnwgdevice&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=registervpnwgdevice&amp;amp;ukey=KEY&amp;amp;host=h1&amp;amp;password=PASS&amp;amp;wg_pubkey=...&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;host&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;VPN host id (max 32).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;password&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;VPN password (max 128).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;wg_pubkey&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Device WireGuard public key (max 44).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getvpnwgconfig&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;wireguard&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getvpnwgconfig&amp;amp;ukey=KEY&amp;amp;host=h1&amp;amp;password=PASS&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;host&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;VPN host id (max 32).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;password&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;VPN password (max 128).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getpbxloclog&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;tucloud&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getpbxloclog&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;limit=100&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;year&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Year (e.g. 2026).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;month&amp;quot;,&amp;quot;req&amp;quot;:true,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Month, 1-12.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;day&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by day of month (1-31).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by hour (0-23).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;only valid together with day&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcodeid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by account id (non-clients). Forced to own for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;tucloudpbx_id&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by virtual PBX id.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;loc_id&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by locution/IVR id.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;pbxname&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by PBX name.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 32&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;pressed&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by DTMF key(s) pressed.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 80&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;src&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by source number.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 80&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;dst&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter by destination number.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max length 80&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows (PostgreSQL up to 1000).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getrecordings&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;recordings&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getrecordings&amp;amp;ukey=KEY&amp;amp;from=2026-07-01&amp;amp;to=2026-07-31&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;from&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Start date. Default: 31 days ago.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;YYYY-MM-DD&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;to&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;End date (inclusive). Default: today.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;YYYY-MM-DD&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;hour&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Filter to one hour of the day. Returns recordings whose start time falls in that hour (e.g. hour=14 =&amp;gt; 14:00-14:59).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;0-23&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;withtranscript&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;1 = only recordings that already have a transcript.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;withsummary&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;1 = only recordings that already have a summary.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;accountcode&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Operators/SuperRoot only: filter to one account. Ignored/forced for clients.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;string, max 20&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;root&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;SuperRoot only: filter to one operator root.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;limit&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;100&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Max rows (up to 1000).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;offset&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;0&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Pagination offset.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getrecordingtranscript&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;recordings&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getrecordingtranscript&amp;amp;ukey=KEY&amp;amp;id=5270558&amp;amp;summary=1&amp;amp;format=text&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Recording id. Provide id OR uniqueid.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;uniqueid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Call uniqueid. Provide id OR uniqueid.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 80&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;summary&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;1 = include the summary (resumen) when available.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;format&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;json&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;json = object; text = downloadable .txt.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;json|text&amp;quot;}]},&amp;quot;getrecordingfile&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;recordings&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getrecordingfile&amp;amp;ukey=KEY&amp;amp;id=5270558&amp;amp;dl=1&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Recording id. Provide id OR uniqueid.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;uniqueid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Call uniqueid. Provide id OR uniqueid.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 80&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;dl&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;1 = force download (Content-Disposition attachment).&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;}]},&amp;quot;getrecordingcertification&amp;quot;:{&amp;quot;cat&amp;quot;:&amp;quot;recordings&amp;quot;,&amp;quot;ex&amp;quot;:&amp;quot;https://api.7kas.com:9080/7Kas?func=getrecordingcertification&amp;amp;ukey=KEY&amp;amp;id=5270558&amp;quot;,&amp;quot;params&amp;quot;:[{&amp;quot;n&amp;quot;:&amp;quot;id&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;integer&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Recording id. Provide id OR uniqueid.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;&amp;quot;},{&amp;quot;n&amp;quot;:&amp;quot;uniqueid&amp;quot;,&amp;quot;req&amp;quot;:false,&amp;quot;def&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;,&amp;quot;d&amp;quot;:&amp;quot;Call uniqueid. Provide id OR uniqueid.&amp;quot;,&amp;quot;notes&amp;quot;:&amp;quot;max 80&amp;quot;}]}};&lt;br /&gt;
 function el(t,a,x){var e=document.createElement(t);if(a){for(var k in a){e.setAttribute(k,a[k]);}}if(x!=null){e.textContent=x;}return e;}&lt;br /&gt;
 function byId(id){return document.getElementById(id);}&lt;br /&gt;
 function group(){var g={};Object.keys(CAT).forEach(function(n){var c=CAT[n].cat||&#039;other&#039;;(g[c]=g[c]||[]).push(n);});return g;}&lt;br /&gt;
 function buildURL(){&lt;br /&gt;
   var uk=byId(&#039;ac-ukey&#039;).value.trim(), fn=byId(&#039;ac-func&#039;).value;&lt;br /&gt;
   var qs=&#039;?func=&#039;+encodeURIComponent(fn)+&#039;&amp;amp;ukey=&#039;+encodeURIComponent(uk||&#039;YOUR_KEY&#039;);&lt;br /&gt;
   (CAT[fn].params||[]).forEach(function(p){var e=byId(&#039;ac-p-&#039;+p.n);var v=e?(&#039;&#039;+e.value).trim():&#039;&#039;;if(v){qs+=&#039;&amp;amp;&#039;+encodeURIComponent(p.n)+&#039;=&#039;+encodeURIComponent(v);}});&lt;br /&gt;
   var url=API+qs; byId(&#039;ac-url&#039;).value=url; return url;&lt;br /&gt;
 }&lt;br /&gt;
 function renderParams(){&lt;br /&gt;
   var fn=byId(&#039;ac-func&#039;).value, box=byId(&#039;ac-params&#039;); box.innerHTML=&#039;&#039;;&lt;br /&gt;
   (CAT[fn].params||[]).forEach(function(p){&lt;br /&gt;
     var row=el(&#039;div&#039;,{&#039;class&#039;:&#039;ac-p&#039;}), lab=el(&#039;label&#039;,{&#039;for&#039;:&#039;ac-p-&#039;+p.n});&lt;br /&gt;
     lab.appendChild(el(&#039;span&#039;,null,p.n+&#039; &#039;));&lt;br /&gt;
     lab.appendChild(el(&#039;small&#039;,null,&#039;(&#039;+p.type+(p.req?&#039;, required&#039;:&#039;, optional&#039;)+&#039;)&#039;));&lt;br /&gt;
     if(p.req){lab.appendChild(el(&#039;span&#039;,{&#039;class&#039;:&#039;ac-req&#039;},&#039; *&#039;));}&lt;br /&gt;
     row.appendChild(lab);&lt;br /&gt;
     var inp=el(&#039;input&#039;,{id:&#039;ac-p-&#039;+p.n,type:&#039;text&#039;,placeholder:(p.d||&#039;&#039;)+(p.notes?&#039; -- &#039;+p.notes:&#039;&#039;)});&lt;br /&gt;
     if(p.def){inp.value=p.def;}&lt;br /&gt;
     inp.addEventListener(&#039;input&#039;,buildURL); row.appendChild(inp); box.appendChild(row);&lt;br /&gt;
   });&lt;br /&gt;
   buildURL();&lt;br /&gt;
 }&lt;br /&gt;
 $(function(){&lt;br /&gt;
   var host=byId(&#039;api-console-app&#039;); if(!host||host.getAttribute(&#039;data-done&#039;)){return;} host.setAttribute(&#039;data-done&#039;,&#039;1&#039;); host.innerHTML=&#039;&#039;;&lt;br /&gt;
   var r1=el(&#039;div&#039;,{&#039;class&#039;:&#039;ac-row&#039;});&lt;br /&gt;
   r1.appendChild(el(&#039;label&#039;,{&#039;for&#039;:&#039;ac-ukey&#039;},&#039;Your API key (ukey)&#039;));&lt;br /&gt;
   r1.appendChild(el(&#039;input&#039;,{id:&#039;ac-ukey&#039;,type:&#039;text&#039;,placeholder:&#039;paste your ukey here&#039;,autocomplete:&#039;off&#039;,spellcheck:&#039;false&#039;})); host.appendChild(r1);&lt;br /&gt;
   var r2=el(&#039;div&#039;,{&#039;class&#039;:&#039;ac-row&#039;});&lt;br /&gt;
   r2.appendChild(el(&#039;label&#039;,{&#039;for&#039;:&#039;ac-func&#039;},&#039;Function&#039;));&lt;br /&gt;
   var sel=el(&#039;select&#039;,{id:&#039;ac-func&#039;}), g=group();&lt;br /&gt;
   Object.keys(g).sort().forEach(function(c){var og=el(&#039;optgroup&#039;,{label:c});g[c].sort().forEach(function(n){og.appendChild(el(&#039;option&#039;,{value:n},n));});sel.appendChild(og);});&lt;br /&gt;
   sel.addEventListener(&#039;change&#039;,renderParams); r2.appendChild(sel); host.appendChild(r2);&lt;br /&gt;
   host.appendChild(el(&#039;div&#039;,{id:&#039;ac-params&#039;}));&lt;br /&gt;
   var r3=el(&#039;div&#039;,{&#039;class&#039;:&#039;ac-row&#039;});&lt;br /&gt;
   r3.appendChild(el(&#039;label&#039;,{&#039;for&#039;:&#039;ac-url&#039;},&#039;Request URL&#039;));&lt;br /&gt;
   r3.appendChild(el(&#039;textarea&#039;,{id:&#039;ac-url&#039;,readonly:&#039;readonly&#039;})); host.appendChild(r3);&lt;br /&gt;
   var bar=el(&#039;div&#039;,{&#039;class&#039;:&#039;ac-row&#039;});&lt;br /&gt;
   var run=el(&#039;button&#039;,null,&#039;Run ▶  (open result)&#039;); run.addEventListener(&#039;click&#039;,function(){window.open(buildURL(),&#039;_blank&#039;,&#039;noopener&#039;);});&lt;br /&gt;
   var cp=el(&#039;button&#039;,null,&#039;Copy URL&#039;); cp.addEventListener(&#039;click&#039;,function(){byId(&#039;ac-url&#039;).select();try{document.execCommand(&#039;copy&#039;);}catch(e){}});&lt;br /&gt;
   bar.appendChild(run); bar.appendChild(cp); host.appendChild(bar);&lt;br /&gt;
   var note=el(&#039;div&#039;,{&#039;class&#039;:&#039;ac-note&#039;}); note.innerHTML=&#039;This runs a &amp;lt;b&amp;gt;real&amp;lt;/b&amp;gt; call with &amp;lt;b&amp;gt;your&amp;lt;/b&amp;gt; key. You only ever see your own data (identity is forced server-side). The result opens in a new tab as JSON.&#039;;&lt;br /&gt;
   host.appendChild(note);&lt;br /&gt;
   if(sel.options.length){ sel.value=(&#039;getcdr&#039; in CAT)?&#039;getcdr&#039;:sel.options[0].value; renderParams(); }&lt;br /&gt;
 });&lt;br /&gt;
})();&lt;br /&gt;
/* === END restapi-generated === */&lt;br /&gt;
/* TuCloudAPI Console loader (tucloudapi) -- gated to its own page; bulk in MediaWiki:TuCloudAPIConsole.js. */&lt;br /&gt;
if (mw.config.get(&#039;wgPageName&#039;) === &#039;TuCloudAPI_Console&#039;) {&lt;br /&gt;
  mw.loader.load(&#039;/index.php?title=MediaWiki:TuCloudAPIConsole.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039;);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_unlockaccountcode&amp;diff=1345</id>
		<title>API unlockaccountcode</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_unlockaccountcode&amp;diff=1345"/>
		<updated>2026-11-05T13:47:47Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Unblocks (unlocks) an account (blocked=NO). Requires write permission (operator/SuperRoot, not read-only).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=unlockaccountcode&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || Yes || — || Account id to unlock.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=unlockaccountcode&amp;amp;ukey=OPKEY&amp;amp;accountcodeid=123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object confirming the unlock.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_setwgstatus&amp;diff=1344</id>
		<title>API setwgstatus</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_setwgstatus&amp;diff=1344"/>
		<updated>2026-11-05T13:47:47Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Enables/disables a WireGuard peer. Operators/SuperRoot only (client ukeys rejected).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=setwgstatus&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; || string || Yes || — || Peer host id.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; || integer || Yes || — || Operator root the peer belongs to.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; || integer || Yes || — || New status (e.g. 0=disabled, 1=enabled).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=setwgstatus&amp;amp;ukey=OPKEY&amp;amp;host=h1&amp;amp;root=5&amp;amp;status=1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object confirming the change.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_registerwgserver&amp;diff=1342</id>
		<title>API registerwgserver</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_registerwgserver&amp;diff=1342"/>
		<updated>2026-11-05T13:47:46Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Registers/updates a WireGuard server (public key, listen port, endpoint). Operators/SuperRoot only.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=registerwgserver&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt; || integer || Yes || — || Server id.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wg_pubkey&amp;lt;/code&amp;gt; || string || Yes || — || Server WireGuard public key (max 44).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wg_listen_port&amp;lt;/code&amp;gt; || integer || Yes || — || UDP listen port.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wg_endpoint&amp;lt;/code&amp;gt; || string || Yes || — || Public endpoint host:port (max 64).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=registerwgserver&amp;amp;ukey=OPKEY&amp;amp;server_id=1&amp;amp;wg_pubkey=...&amp;amp;wg_listen_port=51820&amp;amp;wg_endpoint=vpn.example.com:51820&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object confirming registration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_registerwgdevice&amp;diff=1341</id>
		<title>API registerwgdevice</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_registerwgdevice&amp;diff=1341"/>
		<updated>2026-11-05T13:47:46Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Registers an SSIP device&#039;s WireGuard public key (keyed by device MAC). Operators/SuperRoot only.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=registerwgdevice&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mac&amp;lt;/code&amp;gt; || string || Yes || — || Device MAC address (max 17).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wg_pubkey&amp;lt;/code&amp;gt; || string || Yes || — || Device WireGuard public key (max 44).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=registerwgdevice&amp;amp;ukey=OPKEY&amp;amp;mac=AA:BB:CC:DD:EE:FF&amp;amp;wg_pubkey=...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object confirming registration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_registervpnwgdevice&amp;diff=1340</id>
		<title>API registervpnwgdevice</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_registervpnwgdevice&amp;diff=1340"/>
		<updated>2026-11-05T13:47:45Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Registers a non-SSIP VPN WireGuard device, authenticated by (host, password) of the VPN pair (voip_vtun). No role gate.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=registervpnwgdevice&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; || string || Yes || — || VPN host id (max 32).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || string || Yes || — || VPN password (max 128).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wg_pubkey&amp;lt;/code&amp;gt; || string || Yes || — || Device WireGuard public key (max 44).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=registervpnwgdevice&amp;amp;ukey=KEY&amp;amp;host=h1&amp;amp;password=PASS&amp;amp;wg_pubkey=...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object confirming registration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_profile_Operator&amp;diff=1338</id>
		<title>API profile Operator</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_profile_Operator&amp;diff=1338"/>
		<updated>2026-11-05T13:47:45Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Profile &#039;&#039;&#039;Operator&#039;&#039;&#039; (reseller): 37 functions over its own root. Sees account and root prices and profit (VOC). No SuperRoot-only functions.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Meta / discovery ==&lt;br /&gt;
* [[API help]] — Lists the API functions available to the role of the calling ukey, with each function&#039;s description, parameters (meaning, optional/default), an example call and the response format.&lt;br /&gt;
== Outgoing call billing ==&lt;br /&gt;
* [[API getcallsbilling]] — Outgoing-call billing records for a period.&lt;br /&gt;
* [[API getcallsbillingtotalroot]] — Monthly billing total for one root/operator (TOC).&lt;br /&gt;
* [[API getcallsbillingcount]] — Row count for the given filter (smart pagination).&lt;br /&gt;
* [[API getcallsbillingtotal]] — Grand billing total for the caller&#039;s scope for the month.&lt;br /&gt;
* [[API getcallsbillingaccounttotal]] — Monthly billing total for one account.&lt;br /&gt;
* [[API getcallsbillingdetailtotal]] — Total over VOC detail rows matching the filter (with total_rows for pagination).&lt;br /&gt;
* [[API getcallsbillingcomis]] — Commission billing for a commissioner: aggregates the calls of the accounts assigned to the caller (accountcode_comis) and returns commission minutes/amount — never exposing costs.&lt;br /&gt;
== Pay-per-use services ==&lt;br /&gt;
* [[API getservices]] — Detail of pay-per-use services (dtype=SERVICIOS, e.g.&lt;br /&gt;
* [[API getservicestotal]] — Aggregate total of pay-per-use services for the period (all services, or one via service=&amp;lt;prefix&amp;gt;).&lt;br /&gt;
== Incoming calls ==&lt;br /&gt;
* [[API getincomingcalls]] — Incoming-call records for a period.&lt;br /&gt;
* [[API getincomingcallstotalroot]] — Monthly incoming total for one root/operator (TIC).&lt;br /&gt;
* [[API getincomingcallscount]] — Row count for the given filter (smart pagination).&lt;br /&gt;
* [[API getincomingcallstotal]] — Grand incoming total for the caller&#039;s scope for the month.&lt;br /&gt;
* [[API getincomingcallsaccounttotal]] — Monthly incoming total for one account.&lt;br /&gt;
* [[API getincomingcallsdetailtotal]] — Total over VIC detail rows matching the filter (with total_rows for pagination).&lt;br /&gt;
== CDR (call detail) ==&lt;br /&gt;
* [[API getcdr]] — Call Detail Records (CDR) for a period.&lt;br /&gt;
== Call recordings ==&lt;br /&gt;
* [[API getrecordings]] — Lists the caller&#039;s call recordings with availability flags (has_transcript, has_summary, has_audio).&lt;br /&gt;
* [[API getrecordingtranscript]] — Returns the transcription of one of the caller&#039;s recordings, with or without the summary (resumen).&lt;br /&gt;
* [[API getrecordingfile]] — Downloads the audio recording (stereo MP3) of one of the caller&#039;s calls.&lt;br /&gt;
* [[API getrecordingcertification]] — Downloads the integrity/veracity certification of one of the caller&#039;s recordings: file, user, date, time, uniqueid, src, dst and the SHA-512 hash (matches voip_callrecord.recordhash).&lt;br /&gt;
== CLIs / lines ==&lt;br /&gt;
* [[API getclis]] — Lists CLIs (caller-line identities / DDIs) for the account.&lt;br /&gt;
== Tucloud PBX ==&lt;br /&gt;
* [[API getpbxloclog]] — Tucloud PBX IVR/locution DTMF key-press log for a period.&lt;br /&gt;
== Account management ==&lt;br /&gt;
* [[API getaccountcodeid]] — Lists (id, accountcode) pairs of the accounts under the caller.&lt;br /&gt;
* [[API getaccountcodedata]] — Returns full account profile rows (view_voip_users_api) for the caller&#039;s accounts.&lt;br /&gt;
* [[API lockaccountcode]] — Blocks (locks) an account (blocked=SI).&lt;br /&gt;
* [[API unlockaccountcode]] — Unblocks (unlocks) an account (blocked=NO).&lt;br /&gt;
* [[API addaccountcode]] — Creates a new account (client) under the caller.&lt;br /&gt;
* [[API getcredit]] — Returns credit and status (credit, credit_limit, creditalarm, email, blocked).&lt;br /&gt;
== WireGuard / VPN ==&lt;br /&gt;
* [[API getwgpeers]] — Lists WireGuard peers of a server (SSIP-transparent union of SSIP + VPN pairs).&lt;br /&gt;
* [[API setwgstatus]] — Enables/disables a WireGuard peer.&lt;br /&gt;
* [[API registerwgserver]] — Registers/updates a WireGuard server (public key, listen port, endpoint).&lt;br /&gt;
* [[API registerwgdevice]] — Registers an SSIP device&#039;s WireGuard public key (keyed by device MAC).&lt;br /&gt;
* [[API getwgconfig]] — Returns the WireGuard config for an SSIP device, authenticated by the device&#039;s vpnpassword (no role gate — any valid ukey with the correct password).&lt;br /&gt;
* [[API registervpnwgdevice]] — Registers a non-SSIP VPN WireGuard device, authenticated by (host, password) of the VPN pair (voip_vtun).&lt;br /&gt;
* [[API getvpnwgconfig]] — Returns the WireGuard config for a non-SSIP VPN device, authenticated by (host, password) of the VPN pair.&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
* [[API helloworld]] — Health check / connectivity test.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[API VoIP]] · [[API Console|▶ Try it live]]&lt;br /&gt;
[[Category:API profile]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_profile_Client_(of_operator)&amp;diff=1337</id>
		<title>API profile Client (of operator)</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_profile_Client_(of_operator)&amp;diff=1337"/>
		<updated>2026-11-05T13:47:44Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Profile &#039;&#039;&#039;Client of an operator&#039;&#039;&#039; (root&amp;gt;0): 24 functions, own data only. Sees &#039;&#039;&#039;only its own selling price&#039;&#039;&#039; (root column). Identity forced by the server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Meta / discovery ==&lt;br /&gt;
* [[API help]] — Lists the API functions available to the role of the calling ukey, with each function&#039;s description, parameters (meaning, optional/default), an example call and the response format.&lt;br /&gt;
== Outgoing call billing ==&lt;br /&gt;
* [[API getcallsbilling]] — Outgoing-call billing records for a period.&lt;br /&gt;
* [[API getcallsbillingcount]] — Row count for the given filter (smart pagination).&lt;br /&gt;
* [[API getcallsbillingtotal]] — Grand billing total for the caller&#039;s scope for the month.&lt;br /&gt;
* [[API getcallsbillingdetailtotal]] — Total over VOC detail rows matching the filter (with total_rows for pagination).&lt;br /&gt;
* [[API getcallsbillingcomis]] — Commission billing for a commissioner: aggregates the calls of the accounts assigned to the caller (accountcode_comis) and returns commission minutes/amount — never exposing costs.&lt;br /&gt;
== Pay-per-use services ==&lt;br /&gt;
* [[API getservices]] — Detail of pay-per-use services (dtype=SERVICIOS, e.g.&lt;br /&gt;
* [[API getservicestotal]] — Aggregate total of pay-per-use services for the period (all services, or one via service=&amp;lt;prefix&amp;gt;).&lt;br /&gt;
== Incoming calls ==&lt;br /&gt;
* [[API getincomingcalls]] — Incoming-call records for a period.&lt;br /&gt;
* [[API getincomingcallscount]] — Row count for the given filter (smart pagination).&lt;br /&gt;
* [[API getincomingcallstotal]] — Grand incoming total for the caller&#039;s scope for the month.&lt;br /&gt;
* [[API getincomingcallsdetailtotal]] — Total over VIC detail rows matching the filter (with total_rows for pagination).&lt;br /&gt;
== CDR (call detail) ==&lt;br /&gt;
* [[API getcdr]] — Call Detail Records (CDR) for a period.&lt;br /&gt;
== Call recordings ==&lt;br /&gt;
* [[API getrecordings]] — Lists the caller&#039;s call recordings with availability flags (has_transcript, has_summary, has_audio).&lt;br /&gt;
* [[API getrecordingtranscript]] — Returns the transcription of one of the caller&#039;s recordings, with or without the summary (resumen).&lt;br /&gt;
* [[API getrecordingfile]] — Downloads the audio recording (stereo MP3) of one of the caller&#039;s calls.&lt;br /&gt;
* [[API getrecordingcertification]] — Downloads the integrity/veracity certification of one of the caller&#039;s recordings: file, user, date, time, uniqueid, src, dst and the SHA-512 hash (matches voip_callrecord.recordhash).&lt;br /&gt;
== CLIs / lines ==&lt;br /&gt;
* [[API getclis]] — Lists CLIs (caller-line identities / DDIs) for the account.&lt;br /&gt;
== Tucloud PBX ==&lt;br /&gt;
* [[API getpbxloclog]] — Tucloud PBX IVR/locution DTMF key-press log for a period.&lt;br /&gt;
== Account management ==&lt;br /&gt;
* [[API getcredit]] — Returns credit and status (credit, credit_limit, creditalarm, email, blocked).&lt;br /&gt;
== WireGuard / VPN ==&lt;br /&gt;
* [[API getwgconfig]] — Returns the WireGuard config for an SSIP device, authenticated by the device&#039;s vpnpassword (no role gate — any valid ukey with the correct password).&lt;br /&gt;
* [[API registervpnwgdevice]] — Registers a non-SSIP VPN WireGuard device, authenticated by (host, password) of the VPN pair (voip_vtun).&lt;br /&gt;
* [[API getvpnwgconfig]] — Returns the WireGuard config for a non-SSIP VPN device, authenticated by (host, password) of the VPN pair.&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
* [[API helloworld]] — Health check / connectivity test.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[API VoIP]] · [[API Console|▶ Try it live]]&lt;br /&gt;
[[Category:API profile]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_profile_Client_(direct)&amp;diff=1336</id>
		<title>API profile Client (direct)</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_profile_Client_(direct)&amp;diff=1336"/>
		<updated>2026-11-05T13:47:44Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Profile &#039;&#039;&#039;Direct 7Kas client&#039;&#039;&#039; (root=0): 24 functions, own data only. Sees &#039;&#039;&#039;only its own selling price&#039;&#039;&#039; (accountcode column). Identity forced by the server.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Meta / discovery ==&lt;br /&gt;
* [[API help]] — Lists the API functions available to the role of the calling ukey, with each function&#039;s description, parameters (meaning, optional/default), an example call and the response format.&lt;br /&gt;
== Outgoing call billing ==&lt;br /&gt;
* [[API getcallsbilling]] — Outgoing-call billing records for a period.&lt;br /&gt;
* [[API getcallsbillingcount]] — Row count for the given filter (smart pagination).&lt;br /&gt;
* [[API getcallsbillingtotal]] — Grand billing total for the caller&#039;s scope for the month.&lt;br /&gt;
* [[API getcallsbillingdetailtotal]] — Total over VOC detail rows matching the filter (with total_rows for pagination).&lt;br /&gt;
* [[API getcallsbillingcomis]] — Commission billing for a commissioner: aggregates the calls of the accounts assigned to the caller (accountcode_comis) and returns commission minutes/amount — never exposing costs.&lt;br /&gt;
== Pay-per-use services ==&lt;br /&gt;
* [[API getservices]] — Detail of pay-per-use services (dtype=SERVICIOS, e.g.&lt;br /&gt;
* [[API getservicestotal]] — Aggregate total of pay-per-use services for the period (all services, or one via service=&amp;lt;prefix&amp;gt;).&lt;br /&gt;
== Incoming calls ==&lt;br /&gt;
* [[API getincomingcalls]] — Incoming-call records for a period.&lt;br /&gt;
* [[API getincomingcallscount]] — Row count for the given filter (smart pagination).&lt;br /&gt;
* [[API getincomingcallstotal]] — Grand incoming total for the caller&#039;s scope for the month.&lt;br /&gt;
* [[API getincomingcallsdetailtotal]] — Total over VIC detail rows matching the filter (with total_rows for pagination).&lt;br /&gt;
== CDR (call detail) ==&lt;br /&gt;
* [[API getcdr]] — Call Detail Records (CDR) for a period.&lt;br /&gt;
== Call recordings ==&lt;br /&gt;
* [[API getrecordings]] — Lists the caller&#039;s call recordings with availability flags (has_transcript, has_summary, has_audio).&lt;br /&gt;
* [[API getrecordingtranscript]] — Returns the transcription of one of the caller&#039;s recordings, with or without the summary (resumen).&lt;br /&gt;
* [[API getrecordingfile]] — Downloads the audio recording (stereo MP3) of one of the caller&#039;s calls.&lt;br /&gt;
* [[API getrecordingcertification]] — Downloads the integrity/veracity certification of one of the caller&#039;s recordings: file, user, date, time, uniqueid, src, dst and the SHA-512 hash (matches voip_callrecord.recordhash).&lt;br /&gt;
== CLIs / lines ==&lt;br /&gt;
* [[API getclis]] — Lists CLIs (caller-line identities / DDIs) for the account.&lt;br /&gt;
== Tucloud PBX ==&lt;br /&gt;
* [[API getpbxloclog]] — Tucloud PBX IVR/locution DTMF key-press log for a period.&lt;br /&gt;
== Account management ==&lt;br /&gt;
* [[API getcredit]] — Returns credit and status (credit, credit_limit, creditalarm, email, blocked).&lt;br /&gt;
== WireGuard / VPN ==&lt;br /&gt;
* [[API getwgconfig]] — Returns the WireGuard config for an SSIP device, authenticated by the device&#039;s vpnpassword (no role gate — any valid ukey with the correct password).&lt;br /&gt;
* [[API registervpnwgdevice]] — Registers a non-SSIP VPN WireGuard device, authenticated by (host, password) of the VPN pair (voip_vtun).&lt;br /&gt;
* [[API getvpnwgconfig]] — Returns the WireGuard config for a non-SSIP VPN device, authenticated by (host, password) of the VPN pair.&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
* [[API helloworld]] — Health check / connectivity test.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[API VoIP]] · [[API Console|▶ Try it live]]&lt;br /&gt;
[[Category:API profile]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_lockaccountcode&amp;diff=1335</id>
		<title>API lockaccountcode</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_lockaccountcode&amp;diff=1335"/>
		<updated>2026-11-05T13:47:43Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Blocks (locks) an account (blocked=SI). Requires write permission (operator/SuperRoot, not read-only).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=lockaccountcode&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || Yes || — || Account id to lock.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=lockaccountcode&amp;amp;ukey=OPKEY&amp;amp;accountcodeid=123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object confirming the lock.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_help&amp;diff=1334</id>
		<title>API help</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_help&amp;diff=1334"/>
		<updated>2026-11-05T13:47:43Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|This is the &#039;&#039;&#039;self-discovery&#039;&#039;&#039; endpoint. It returns the list of functions your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; can call, each fully documented. This whole wiki is generated from it.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lists the API functions available to the role of the calling ukey, with each function&#039;s description, parameters (meaning, optional/default), an example call and the response format. Optional name=&amp;lt;func&amp;gt; returns just that function.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=help&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || string || No || — || Return only this function&#039;s documentation. Omit for the full catalogue.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=help&amp;amp;ukey=KEY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object: {api, url, authentication, response_format, role, count, functions:[{name, category, description, parameters:[{name,type,required,default,description,notes}], example, response}]}.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_helloworld&amp;diff=1333</id>
		<title>API helloworld</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_helloworld&amp;diff=1333"/>
		<updated>2026-11-05T13:47:43Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Health check / connectivity test. Returns a fixed greeting; useful to verify the API is up and the ukey is valid.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=helloworld&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
None beyond &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;func=helloworld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=helloworld&amp;amp;ukey=KEY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Fixed object: {&amp;quot;Test&amp;quot;:&amp;quot;Hola Mundo&amp;quot;}.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getwgpeers&amp;diff=1332</id>
		<title>API getwgpeers</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getwgpeers&amp;diff=1332"/>
		<updated>2026-11-05T13:47:42Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lists WireGuard peers of a server (SSIP-transparent union of SSIP + VPN pairs). Operators see their own scope; SuperRoot all. Not available to clients.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getwgpeers&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt; || integer || Yes || — || WireGuard server id.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getwgpeers&amp;amp;ukey=OPKEY&amp;amp;server_id=1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: peer rows.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getwgconfig&amp;diff=1331</id>
		<title>API getwgconfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getwgconfig&amp;diff=1331"/>
		<updated>2026-11-05T13:47:42Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns the WireGuard config for an SSIP device, authenticated by the device&#039;s vpnpassword (no role gate — any valid ukey with the correct password).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getwgconfig&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || string || Yes || — || The device vpnpassword (max 128).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getwgconfig&amp;amp;ukey=KEY&amp;amp;password=DEVICEPASS&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object/records with the WireGuard configuration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getvpnwgconfig&amp;diff=1330</id>
		<title>API getvpnwgconfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getvpnwgconfig&amp;diff=1330"/>
		<updated>2026-11-05T13:47:42Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns the WireGuard config for a non-SSIP VPN device, authenticated by (host, password) of the VPN pair. No role gate.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getvpnwgconfig&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;host&amp;lt;/code&amp;gt; || string || Yes || — || VPN host id (max 32).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || string || Yes || — || VPN password (max 128).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getvpnwgconfig&amp;amp;ukey=KEY&amp;amp;host=h1&amp;amp;password=PASS&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object/records with the WireGuard configuration.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getservicestotal&amp;diff=1329</id>
		<title>API getservicestotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getservicestotal&amp;diff=1329"/>
		<updated>2026-11-05T13:47:41Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Aggregate total of pay-per-use services for the period (all services, or one via service=&amp;lt;prefix&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getservicestotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;service&amp;lt;/code&amp;gt; || string || No || — || Service prefix. Omit for all. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account (non-clients). &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getservicestotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row (columns depend on role).&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getservices&amp;diff=1327</id>
		<title>API getservices</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getservices&amp;diff=1327"/>
		<updated>2026-11-05T13:47:41Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Detail of pay-per-use services (dtype=SERVICIOS, e.g. STT osttrc), decoupled from calls. Optional service=&amp;lt;prefix&amp;gt; narrows to one service. Same role columns and SHM+PostgreSQL behaviour as getcallsbilling (voc).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getservices&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;service&amp;lt;/code&amp;gt; || string || No || — || Service prefix (e.g. osttrc). Omit for all services. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account (non-clients). Forced to own for clients. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day (1-31).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour. &amp;lt;small&amp;gt;(requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows (SHM up to 10000, PostgreSQL up to 1000).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getservices&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records; every row has dtype=SERVICIOS and prefix=the service.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getrecordingtranscript&amp;diff=1326</id>
		<title>API getrecordingtranscript</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getrecordingtranscript&amp;diff=1326"/>
		<updated>2026-11-05T13:47:40Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns the transcription of one of the caller&#039;s recordings, with or without the summary (resumen). Select the recording by id OR uniqueid. format=json returns an object; format=text returns a downloadable text/plain .txt (transcript, plus a &amp;quot;--- RESUMEN ---&amp;quot; block when summary=1). Scoped to the caller&#039;s (root, accountcode) by the key.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getrecordingtranscript&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || integer || No || — || Recording id. Provide id OR uniqueid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uniqueid&amp;lt;/code&amp;gt; || string || No || — || Call uniqueid. Provide id OR uniqueid. &amp;lt;small&amp;gt;(max 80)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt; || integer || No || — || 1 = include the summary (resumen) when available.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;format&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;json&amp;lt;/code&amp;gt; || json = object; text = downloadable .txt. &amp;lt;small&amp;gt;(json|text)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getrecordingtranscript&amp;amp;ukey=KEY&amp;amp;id=5270558&amp;amp;summary=1&amp;amp;format=text&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
json: {transcript, summary(or null), lang, engine, confidence, src, dst, daterecord}. text: text/plain body (Content-Disposition attachment &amp;quot;&amp;lt;uniqueid&amp;gt;.txt&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getrecordings&amp;diff=1325</id>
		<title>API getrecordings</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getrecordings&amp;diff=1325"/>
		<updated>2026-11-05T13:47:40Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lists the caller&#039;s call recordings with availability flags (has_transcript, has_summary, has_audio). Clients see only their own (root, accountcode) — forced from the key; operators their root; SuperRoot all. Use it to find a recording id/uniqueid to download.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getrecordings&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; || string || No || — || Start date. Default: 31 days ago. &amp;lt;small&amp;gt;(YYYY-MM-DD)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt; || string || No || — || End date (inclusive). Default: today. &amp;lt;small&amp;gt;(YYYY-MM-DD)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter to one hour of the day. Returns recordings whose start time falls in that hour (e.g. hour=14 =&amp;gt; 14:00-14:59). &amp;lt;small&amp;gt;(0-23)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;withtranscript&amp;lt;/code&amp;gt; || integer || No || — || 1 = only recordings that already have a transcript.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;withsummary&amp;lt;/code&amp;gt; || integer || No || — || 1 = only recordings that already have a summary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || integer || No || — || Operators/SuperRoot only: filter to one account. Ignored/forced for clients. &amp;lt;small&amp;gt;(string, max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; || integer || No || — || SuperRoot only: filter to one operator root.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows (up to 1000).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getrecordings&amp;amp;ukey=KEY&amp;amp;from=2026-07-01&amp;amp;to=2026-07-31&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records: id, uniqueid, daterecord, src, dst, nota, status, has_transcript, has_summary, has_audio, engine, lang, confidence.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getrecordingfile&amp;diff=1324</id>
		<title>API getrecordingfile</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getrecordingfile&amp;diff=1324"/>
		<updated>2026-11-05T13:47:39Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Downloads the audio recording (stereo MP3) of one of the caller&#039;s calls. Select by id OR uniqueid. Streams with HTTP Range (206) so players can seek. Scoped to the caller&#039;s (root, accountcode) by the key; only files still on disk are served (404-as-{} otherwise).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getrecordingfile&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || integer || No || — || Recording id. Provide id OR uniqueid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uniqueid&amp;lt;/code&amp;gt; || string || No || — || Call uniqueid. Provide id OR uniqueid. &amp;lt;small&amp;gt;(max 80)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dl&amp;lt;/code&amp;gt; || integer || No || — || 1 = force download (Content-Disposition attachment).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getrecordingfile&amp;amp;ukey=KEY&amp;amp;id=5270558&amp;amp;dl=1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
audio/mpeg body (supports Range/206). On missing/foreign/no-file: {}.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getrecordingcertification&amp;diff=1323</id>
		<title>API getrecordingcertification</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getrecordingcertification&amp;diff=1323"/>
		<updated>2026-11-05T13:47:39Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Downloads the integrity/veracity certification of one of the caller&#039;s recordings: file, user, date, time, uniqueid, src, dst and the SHA-512 hash (matches voip_callrecord.recordhash). New recordings deliver it as JSON (application/json); older ones as a legacy plain-text file, transparently. Select by id OR uniqueid. Scoped by the key.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getrecordingcertification&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || integer || No || — || Recording id. Provide id OR uniqueid.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;uniqueid&amp;lt;/code&amp;gt; || string || No || — || Call uniqueid. Provide id OR uniqueid. &amp;lt;small&amp;gt;(max 80)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getrecordingcertification&amp;amp;ukey=KEY&amp;amp;id=5270558&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
application/json body (Content-Disposition attachment &amp;quot;&amp;lt;uniqueid&amp;gt;.cert.json&amp;quot;) for migrated recordings; text/plain &amp;quot;&amp;lt;uniqueid&amp;gt;.cert.txt&amp;quot; for legacy ones. On missing/foreign: {}.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getpbxloclog&amp;diff=1321</id>
		<title>API getpbxloclog</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getpbxloclog&amp;diff=1321"/>
		<updated>2026-11-05T13:47:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Tucloud PBX IVR/locution DTMF key-press log for a period. Role-resolved (clients see only their own account; operators their scope; SuperRoot all). Single SQL function; unset filters default to NULL server-side.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getpbxloclog&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year (e.g. 2026).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day of month (1-31).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour (0-23). &amp;lt;small&amp;gt;(only valid together with day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || No || — || Filter by account id (non-clients). Forced to own for clients.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tucloudpbx_id&amp;lt;/code&amp;gt; || integer || No || — || Filter by virtual PBX id.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;loc_id&amp;lt;/code&amp;gt; || integer || No || — || Filter by locution/IVR id.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbxname&amp;lt;/code&amp;gt; || string || No || — || Filter by PBX name. &amp;lt;small&amp;gt;(max length 32)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pressed&amp;lt;/code&amp;gt; || string || No || — || Filter by DTMF key(s) pressed. &amp;lt;small&amp;gt;(max length 80)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; || string || No || — || Filter by source number. &amp;lt;small&amp;gt;(max length 80)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; || string || No || — || Filter by destination number. &amp;lt;small&amp;gt;(max length 80)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows (PostgreSQL up to 1000).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getpbxloclog&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getincomingcallstotalroot&amp;diff=1320</id>
		<title>API getincomingcallstotalroot</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getincomingcallstotalroot&amp;diff=1320"/>
		<updated>2026-11-05T13:47:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Monthly incoming total for one root/operator (TIC). Not available to clients.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getincomingcallstotalroot&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; || integer || No || — || Root/operator id. Required for SuperRoot; operators use their own. &amp;lt;small&amp;gt;(required when SuperRoot)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getincomingcallstotalroot&amp;amp;ukey=SRKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;root=5&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getincomingcallstotal&amp;diff=1319</id>
		<title>API getincomingcallstotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getincomingcallstotal&amp;diff=1319"/>
		<updated>2026-11-05T13:47:38Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Grand incoming total for the caller&#039;s scope for the month.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getincomingcallstotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getincomingcallstotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row (columns depend on role).&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getincomingcallsdetailtotal&amp;diff=1318</id>
		<title>API getincomingcallsdetailtotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getincomingcallsdetailtotal&amp;diff=1318"/>
		<updated>2026-11-05T13:47:37Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Total over VIC detail rows matching the filter (with total_rows for pagination). Same filters/search as getincomingcalls (vic).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getincomingcallsdetailtotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || No || — || Filter by account id (non-clients).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day (1-31).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour. &amp;lt;small&amp;gt;(requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getincomingcallsdetailtotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row incl. total_rows.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getincomingcallscount&amp;diff=1317</id>
		<title>API getincomingcallscount</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getincomingcallscount&amp;diff=1317"/>
		<updated>2026-11-05T13:47:37Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Row count for the given filter (smart pagination). model=vic|tic.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getincomingcallscount&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;vic&amp;lt;/code&amp;gt; || vic or tic. &amp;lt;small&amp;gt;(valid: vic|tic)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || No || — || Filter by account id (non-clients).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day. &amp;lt;small&amp;gt;(model=vic only)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour. &amp;lt;small&amp;gt;(model=vic only, requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getincomingcallscount&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=vic&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object: {&amp;quot;total_rows&amp;quot;:N}.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getincomingcallsaccounttotal&amp;diff=1315</id>
		<title>API getincomingcallsaccounttotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getincomingcallsaccounttotal&amp;diff=1315"/>
		<updated>2026-11-05T13:47:36Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Monthly incoming total for one account. Not available to clients.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getincomingcallsaccounttotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || Yes || — || Account id.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getincomingcallsaccounttotal&amp;amp;ukey=OPKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;accountcodeid=123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getincomingcalls&amp;diff=1314</id>
		<title>API getincomingcalls</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getincomingcalls&amp;diff=1314"/>
		<updated>2026-11-05T13:47:36Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Incoming-call records for a period. model=vic (detail, supports day/hour) or tic (totals). Role-based columns: clients see only their own account (accountcodeid forced) and their selling price; operators their scope; SuperRoot everything incl. provider costs. SHM fast-path + PostgreSQL fallback. Server-side search on src/dst.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getincomingcalls&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year (e.g. 2026).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;vic&amp;lt;/code&amp;gt; || vic = detail records; tic = totals. &amp;lt;small&amp;gt;(valid: vic|tic (case-insensitive))&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || No || — || Filter by account id (non-clients). Forced to own for clients.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day (1-31). &amp;lt;small&amp;gt;(model=vic only)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour (0-23). &amp;lt;small&amp;gt;(model=vic only, requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows. SHM up to 10000, PostgreSQL up to 1000.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search&amp;lt;/code&amp;gt; || string || No || — || Server-side search pattern. &amp;lt;small&amp;gt;(max 40)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_fields&amp;lt;/code&amp;gt; || string || No || — || Comma-separated fields to search (whitelist: src, dst). &amp;lt;small&amp;gt;(max 200)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_mode&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt; || Match mode. &amp;lt;small&amp;gt;(prefix|suffix|contains|exact)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getincomingcalls&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=vic&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records (columns depend on role).&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcredit&amp;diff=1313</id>
		<title>API getcredit</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcredit&amp;diff=1313"/>
		<updated>2026-11-05T13:47:36Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns credit and status (credit, credit_limit, creditalarm, email, blocked). Any role: clients (and operators/SuperRoot without accountcode) get their own; operators/SuperRoot with accountcode query that account within their scope.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcredit&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Account to query (operators/SuperRoot only). Omit for your own. &amp;lt;small&amp;gt;(max length 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcredit&amp;amp;ukey=KEY&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: fields [credit, credit_limit, creditalarm, email, blocked].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getclis&amp;diff=1312</id>
		<title>API getclis</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getclis&amp;diff=1312"/>
		<updated>2026-11-05T13:47:35Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lists CLIs (caller-line identities / DDIs) for the account. Clients see only their own account&#039;s CLIs (accountcode is forced); operators and SuperRoot see their scope.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getclis&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account code. Forced to the caller&#039;s own for clients. &amp;lt;small&amp;gt;(max length 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt; || string || No || — || Filter by active flag. &amp;lt;small&amp;gt;(max length 2)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;route&amp;lt;/code&amp;gt; || string || No || — || Filter by route. &amp;lt;small&amp;gt;(max length 32)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || string || No || — || Filter by CLI type. &amp;lt;small&amp;gt;(max length 2)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt; || Maximum rows to return (capped at 1000).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getclis&amp;amp;ukey=KEY&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records: {&amp;quot;RecordCount&amp;quot;:N,&amp;quot;fields&amp;quot;:[...],&amp;quot;1&amp;quot;:[...],...}.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcdr&amp;diff=1311</id>
		<title>API getcdr</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcdr&amp;diff=1311"/>
		<updated>2026-11-05T13:47:35Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Call Detail Records (CDR) for a period. One function serves all roles (CDR has no pricing columns). Clients see only their own account (accountcodeid is forced); operators their scope; SuperRoot everything. Served from SHM cache with PostgreSQL fallback.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcdr&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year of the records (e.g. 2026).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day of month (1-31).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour (0-23). &amp;lt;small&amp;gt;(only valid together with day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || No || — || Filter by account id. Ignored/forced to the caller&#039;s own for clients.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;userfield&amp;lt;/code&amp;gt; || string || No || — || Filter by tucloud PBX id (the CDR userfield column). One accountcode can host several PBXs, so accountcodeid alone does not isolate a switchboard. &amp;lt;small&amp;gt;(strict: rows whose userfield is empty never match)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows. SHM fast-path up to 10000, PostgreSQL fallback up to 1000.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcdr&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records: {&amp;quot;RecordCount&amp;quot;:N,&amp;quot;fields&amp;quot;:[...],&amp;quot;1&amp;quot;:[...],...}. Columns: calldate, clisrc, clidst, clid, src, dst, billsec, lastapp, disposition, uniqueid, channel, dstchannel, callfrom. callfrom = call-direction code (0 = undetermined, 1 = incoming/entrante, 2 = outgoing/saliente, 3 = incoming re-launched as outgoing). Source of truth: the COMMENT on tucall.voip_cdr.callfrom.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbillingtotalroot&amp;diff=1310</id>
		<title>API getcallsbillingtotalroot</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbillingtotalroot&amp;diff=1310"/>
		<updated>2026-11-05T13:47:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Monthly billing total for one root/operator (TOC). Not available to clients.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbillingtotalroot&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; || integer || No || — || Root/operator id. Required for SuperRoot; operators use their own. &amp;lt;small&amp;gt;(required when SuperRoot)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbillingtotalroot&amp;amp;ukey=SRKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;root=5&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbillingtotal&amp;diff=1309</id>
		<title>API getcallsbillingtotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbillingtotal&amp;diff=1309"/>
		<updated>2026-11-05T13:47:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Grand billing total for the caller&#039;s scope for the month.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbillingtotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbillingtotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row (columns depend on role).&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbillingdetailtotal&amp;diff=1308</id>
		<title>API getcallsbillingdetailtotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbillingdetailtotal&amp;diff=1308"/>
		<updated>2026-11-05T13:47:34Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Total over VOC detail rows matching the filter (with total_rows for pagination). Same filters/search as getcallsbilling (voc).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbillingdetailtotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account code (non-clients). &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day (1-31).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour. &amp;lt;small&amp;gt;(requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search&amp;lt;/code&amp;gt; || string || No || — || Server-side search pattern. &amp;lt;small&amp;gt;(max 40)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_fields&amp;lt;/code&amp;gt; || string || No || — || Comma-separated searchable fields. &amp;lt;small&amp;gt;(max 200)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_mode&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt; || Match mode. &amp;lt;small&amp;gt;(prefix|suffix|contains|exact)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbillingdetailtotal&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row incl. total_rows.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbillingcount&amp;diff=1307</id>
		<title>API getcallsbillingcount</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbillingcount&amp;diff=1307"/>
		<updated>2026-11-05T13:47:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Row count for the given filter (smart pagination). model=voc|toc.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbillingcount&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;voc&amp;lt;/code&amp;gt; || voc or toc. &amp;lt;small&amp;gt;(valid: voc|toc)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account code (non-clients). &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day. &amp;lt;small&amp;gt;(model=voc only)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour. &amp;lt;small&amp;gt;(model=voc only, requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbillingcount&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=voc&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object: {&amp;quot;total_rows&amp;quot;:N}.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbillingcomis&amp;diff=1306</id>
		<title>API getcallsbillingcomis</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbillingcomis&amp;diff=1306"/>
		<updated>2026-11-05T13:47:33Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Commission billing for a commissioner: aggregates the calls of the accounts assigned to the caller (accountcode_comis) and returns commission minutes/amount — never exposing costs. The caller account must be flagged comisionista=SI.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbillingcomis&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || No || — || Year. Optional (defaults applied server-side).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || No || — || Month, 1-12. Optional.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbillingcomis&amp;amp;ukey=COMISKEY&amp;amp;year=2026&amp;amp;month=7&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON per client: accountcode, name, company, comis_minutos, comis_pct, comis_total, blocked.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbillingaccounttotal&amp;diff=1304</id>
		<title>API getcallsbillingaccounttotal</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbillingaccounttotal&amp;diff=1304"/>
		<updated>2026-11-05T13:47:32Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Monthly billing total for one account. Not available to clients.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbillingaccounttotal&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Account code to total. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbillingaccounttotal&amp;amp;ukey=OPKEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;accountcode=CLI1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON: one aggregate row.&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getcallsbilling&amp;diff=1303</id>
		<title>API getcallsbilling</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getcallsbilling&amp;diff=1303"/>
		<updated>2026-11-05T13:47:32Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Outgoing-call billing records for a period. model=voc (detailed calls, supports day/hour and server-side search) or toc (per-account totals). Role-based columns: clients see only their own account (accountcode forced) and their price; operators their scope + profit; SuperRoot everything incl. provider costs. SHM fast-path + PostgreSQL fallback.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getcallsbilling&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;year&amp;lt;/code&amp;gt; || integer || Yes || — || Year (e.g. 2026).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;month&amp;lt;/code&amp;gt; || integer || Yes || — || Month, 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;voc&amp;lt;/code&amp;gt; || voc = detailed calls; toc = totals. &amp;lt;small&amp;gt;(valid: voc|toc (case-insensitive))&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account code (non-clients). Forced to own for clients. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;day&amp;lt;/code&amp;gt; || integer || No || — || Filter by day (1-31). &amp;lt;small&amp;gt;(model=voc only)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hour&amp;lt;/code&amp;gt; || integer || No || — || Filter by hour (0-23). &amp;lt;small&amp;gt;(model=voc only, requires day)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows. SHM up to 10000, PostgreSQL up to 1000.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search&amp;lt;/code&amp;gt; || string || No || — || Server-side search pattern. &amp;lt;small&amp;gt;(max 40)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_fields&amp;lt;/code&amp;gt; || string || No || — || Comma-separated fields (whitelist: dst, cid_num, cid_name, cli_billing, dial_cid_num, accountcode, prefix, dtype, context, tariff, fromuri). &amp;lt;small&amp;gt;(max 200)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_mode&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;contains&amp;lt;/code&amp;gt; || Match mode. &amp;lt;small&amp;gt;(prefix|suffix|contains|exact)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getcallsbilling&amp;amp;ukey=KEY&amp;amp;year=2026&amp;amp;month=7&amp;amp;model=voc&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records (columns depend on role).&lt;br /&gt;
&lt;br /&gt;
== Column visibility by profile ==&lt;br /&gt;
Pricing/cost columns depend on the caller&#039;s profile (GOD LAW):&lt;br /&gt;
* &#039;&#039;&#039;SuperRoot&#039;&#039;&#039; — provider cost + selling price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Operator&#039;&#039;&#039; — account price + root price + profit (VOC only).&lt;br /&gt;
* &#039;&#039;&#039;Client (direct, root=0)&#039;&#039;&#039; — only its own selling price (accountcode column).&lt;br /&gt;
* &#039;&#039;&#039;Client (of operator, root&amp;gt;0)&#039;&#039;&#039; — only its own selling price (root column).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]], [[API profile Client (of operator)]], [[API profile Client (direct)]]&lt;br /&gt;
[[Category:API Operator]][[Category:API Client]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getaccountcodeid&amp;diff=1302</id>
		<title>API getaccountcodeid</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getaccountcodeid&amp;diff=1302"/>
		<updated>2026-11-05T13:47:32Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lists (id, accountcode) pairs of the accounts under the caller. Operators/SuperRoot only.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getaccountcodeid&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || No || — || Filter by account code (exact). Omit for all. &amp;lt;small&amp;gt;(max length 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; || Max rows (up to 10000).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getaccountcodeid&amp;amp;ukey=OPKEY&amp;amp;limit=100&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records: fields [id, accountcode].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_getaccountcodedata&amp;diff=1301</id>
		<title>API getaccountcodedata</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_getaccountcodedata&amp;diff=1301"/>
		<updated>2026-11-05T13:47:31Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Returns full account profile rows (view_voip_users_api) for the caller&#039;s accounts. Operators/SuperRoot only.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=getaccountcodedata&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcodeid&amp;lt;/code&amp;gt; || integer || No || — || Filter by account id. Omit for all.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt; || Max rows.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Pagination offset.&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=getaccountcodedata&amp;amp;ukey=OPKEY&amp;amp;accountcodeid=123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
FillRecords2JSON records (account profile columns).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_addaccountcode&amp;diff=1300</id>
		<title>API addaccountcode</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_addaccountcode&amp;diff=1300"/>
		<updated>2026-11-05T13:47:31Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;7Kas VoIP REST API function. Available to: &#039;&#039;&#039;Operator&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Creates a new account (client) under the caller. Requires write permission (operator/SuperRoot, not read-only). For non-SuperRoot the root is forced to the caller&#039;s own.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 GET  …/7Kas?func=addaccountcode&amp;amp;ukey=YOUR_KEY&amp;amp;…&lt;br /&gt;
Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode&amp;lt;/code&amp;gt; || string || Yes || — || Account code (login). Required. Max 20.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;credit&amp;lt;/code&amp;gt; || string || Yes || — || Initial credit. Required. Max 20.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; || string || Yes || — || Account password. Required. Max 40.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; || string || Yes || — || Contact/holder name. Required. Max 100.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;company&amp;lt;/code&amp;gt; || string || No || — || Company name. &amp;lt;small&amp;gt;(max 100)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; || string || No || — || Postal address. &amp;lt;small&amp;gt;(max 200)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;phone&amp;lt;/code&amp;gt; || string || No || — || Phone. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt; || string || No || — || Primary e-mail. &amp;lt;small&amp;gt;(max 100)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;date_added&amp;lt;/code&amp;gt; || string || No || — || Creation date. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;description&amp;lt;/code&amp;gt; || string || No || — || Free description. &amp;lt;small&amp;gt;(max 200)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;language&amp;lt;/code&amp;gt; || string || No || — || UI language code. &amp;lt;small&amp;gt;(max 5)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;postal_code&amp;lt;/code&amp;gt; || string || No || — || Postal code. &amp;lt;small&amp;gt;(max 10)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;city&amp;lt;/code&amp;gt; || string || No || — || City. &amp;lt;small&amp;gt;(max 50)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;province&amp;lt;/code&amp;gt; || string || No || — || Province. &amp;lt;small&amp;gt;(max 50)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nif&amp;lt;/code&amp;gt; || string || No || — || Tax id (NIF/CIF). &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;blocked&amp;lt;/code&amp;gt; || string || No || — || Blocked flag (SI/NO). &amp;lt;small&amp;gt;(max 4)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;postpaid&amp;lt;/code&amp;gt; || string || No || — || Postpaid flag. &amp;lt;small&amp;gt;(max 4)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt; || string || No || — || Admin flag. &amp;lt;small&amp;gt;(max 4)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;accountcode_comis&amp;lt;/code&amp;gt; || string || No || — || Commissioner account this account belongs to. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;comisionista&amp;lt;/code&amp;gt; || string || No || — || Is-commissioner flag (SI/NO). &amp;lt;small&amp;gt;(max 4)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;groups&amp;lt;/code&amp;gt; || string || No || — || Group memberships. &amp;lt;small&amp;gt;(max 100)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;movil_sms&amp;lt;/code&amp;gt; || string || No || — || Mobile for SMS. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;email2&amp;lt;/code&amp;gt; || string || No || — || Secondary e-mail. &amp;lt;small&amp;gt;(max 100)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fax&amp;lt;/code&amp;gt; || string || No || — || Fax. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nota&amp;lt;/code&amp;gt; || string || No || — || Internal note. &amp;lt;small&amp;gt;(max 500)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;web&amp;lt;/code&amp;gt; || string || No || — || Website. &amp;lt;small&amp;gt;(max 100)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;flags&amp;lt;/code&amp;gt; || string || No || — || Account flags. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tariff&amp;lt;/code&amp;gt; || string || No || — || Tariff code. &amp;lt;small&amp;gt;(max 20)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;daycallmail&amp;lt;/code&amp;gt; || string || No || — || Daily-call report e-mail(s). &amp;lt;small&amp;gt;(max 100)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; || integer || No || — || Parent operator root. Forced to the caller&#039;s own unless SuperRoot. &amp;lt;small&amp;gt;(numeric, max 10)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;credit_limit&amp;lt;/code&amp;gt; || integer || No || — || Credit limit. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;comis_minutos&amp;lt;/code&amp;gt; || integer || No || — || Commission minutes. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ratio&amp;lt;/code&amp;gt; || integer || No || — || Commission ratio. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;creditalarm&amp;lt;/code&amp;gt; || integer || No || — || Credit alarm threshold. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;aindirecto_coste&amp;lt;/code&amp;gt; || integer || No || — || Indirect-access cost. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intlimit&amp;lt;/code&amp;gt; || integer || No || — || International limit. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;daycall&amp;lt;/code&amp;gt; || integer || No || — || Daily-call limit. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intlock&amp;lt;/code&amp;gt; || integer || No || — || International lock flag. &amp;lt;small&amp;gt;(numeric)&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://api.7kas.com:9080/7Kas?func=addaccountcode&amp;amp;ukey=OPKEY&amp;amp;accountcode=NEW1&amp;amp;credit=0&amp;amp;password=secret&amp;amp;name=John&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
Object with the new account id / result of api_add_voip_user.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[API VoIP]] · &#039;&#039;&#039;[[API Console|▶ Try it live]]&#039;&#039;&#039; · Profiles: [[API profile Operator]]&lt;br /&gt;
[[Category:API Operator]][[Category:API function]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=API_VoIP&amp;diff=1299</id>
		<title>API VoIP</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=API_VoIP&amp;diff=1299"/>
		<updated>2026-11-05T13:47:30Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: API docs regenerated from func=help (operator catalogue)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|New here? Jump to &#039;&#039;&#039;[[API help|the self-discovery endpoint]]&#039;&#039;&#039; or open the live &#039;&#039;&#039;[[API Console|▶ API Console]]&#039;&#039;&#039; to try any call with your own key.}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
The 7Kas VoIP REST API exposes query and management functions over CDR, billing, incoming calls, call recordings (audio/transcripts/certification), accounts, pay-per-use services, CLIs, Tucloud PBX and WireGuard. &#039;&#039;&#039;HTTPS, GET, JSON.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Self-discovery (start here) ==&lt;br /&gt;
The API documents itself, filtered by your role:&lt;br /&gt;
 …/7Kas?func=help&amp;amp;ukey=YOUR_KEY              (full catalogue for your profile)&lt;br /&gt;
 …/7Kas?func=help&amp;amp;ukey=YOUR_KEY&amp;amp;name=getcdr  (one function)&lt;br /&gt;
See &#039;&#039;&#039;[[API help]]&#039;&#039;&#039;. This wiki is generated from that same source, so it never drifts.&lt;br /&gt;
&lt;br /&gt;
== Authentication ==&lt;br /&gt;
Every call needs an &#039;&#039;&#039;API key&#039;&#039;&#039; (parameter &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;, max 40) issued by 7Kas. Clients have their identity parameters (accountcode/accountcodeid) forced server-side to their own values.&lt;br /&gt;
&lt;br /&gt;
== Response format ==&lt;br /&gt;
&#039;&#039;&#039;Always HTTP 200&#039;&#039;&#039;; on any error (bad/missing func or ukey, validation error, unknown function, task-limit exceeded) the body is &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;.&lt;br /&gt;
Data functions use &amp;lt;code&amp;gt;FillRecords2JSON&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{ &amp;quot;RecordCount&amp;quot;: N, &amp;quot;fields&amp;quot;: [...], &amp;quot;1&amp;quot;: [...], &amp;quot;2&amp;quot;: [...] }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Empty result ⇒ &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;. SQL NULL ⇒ JSON &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Limits ==&lt;br /&gt;
Up to &#039;&#039;&#039;10,000&#039;&#039;&#039; rows/request from the SHM cache; &#039;&#039;&#039;1,000&#039;&#039;&#039; from PostgreSQL. Paginate with &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;offset&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Catalogue by profile ==&lt;br /&gt;
* &#039;&#039;&#039;[[API profile Operator]]&#039;&#039;&#039; — 37 functions&lt;br /&gt;
* &#039;&#039;&#039;[[API profile Client (of operator)]]&#039;&#039;&#039; — 24 functions (client of an operator, root&amp;gt;0)&lt;br /&gt;
* &#039;&#039;&#039;[[API profile Client (direct)]]&#039;&#039;&#039; — 24 functions (direct 7Kas client, root=0)&lt;br /&gt;
&lt;br /&gt;
== Try it ==&lt;br /&gt;
Open the &#039;&#039;&#039;[[API Console]]&#039;&#039;&#039;: paste your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;, pick a function, fill parameters and run a real (read-only-safe) call from your browser.&lt;br /&gt;
&lt;br /&gt;
[[Category:API]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI_updatecalendar&amp;diff=1296</id>
		<title>TuCloudAPI updatecalendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI_updatecalendar&amp;diff=1296"/>
		<updated>2026-11-05T13:29:25Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: Repetir cada año (hold) and expires_on&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;TuCloudAPI function to manage FuturePBX (the cloud PBX). Available to: &#039;&#039;&#039;SuperRoot, Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Requires the &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; parameter (the PBX &#039;&#039;&#039;name&#039;&#039;&#039;, e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The server verifies that your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;&#039;s own account owns that PBX, whatever its role; otherwise, and also for a PBX that does not exist, it returns &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;forbidden&amp;quot;}&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Edit a calendar row (same fields as addcalendar). hold ABSENT keeps the stored value. With hold 0, expires_on is kept while the end (monthend/dayend) does not change, and computed again from today when it does or when the row goes from 1 to 0; hold 1 clears it. 404 if not in the caller&#039;s PBX. Requires a non-readonly ukey.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=updatecalendar&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
GET, or POST with the parameters form-urlencoded in the body. Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter. Always HTTP 200; the response is a JSON envelope.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; || string || Yes || — || FuturePBX NAME (e.g. tucall). The (ukey, pbx) pair is the tenant boundary; the server verifies the ukey owns this PBX.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar row id (_id).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar-template group 1-99.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthstart&amp;lt;/code&amp;gt; || integer || Yes || — || Start month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthend&amp;lt;/code&amp;gt; || integer || Yes || — || End month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dayend&amp;lt;/code&amp;gt; || integer || Yes || — || End day 1-31.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt; || integer || Yes || — || Route _id to divert to (required, in-tenant).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;daystart&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Start day 1-31, or 0/blank = all days (Todos).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timestart&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || Start time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timeend&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || End time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hold&amp;lt;/code&amp;gt; || integer || No || — || «Repetir cada año» 1/0; absent = keep the stored value.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nota&amp;lt;/code&amp;gt; || string || No || — || Free note (max 256).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://tucloudapi.7kas.com:9087/tucloud?func=updatecalendar&amp;amp;ukey=KEY&amp;amp;pbx=tucall&amp;amp;id=81522&amp;amp;template=1&amp;amp;monthstart=1&amp;amp;daystart=1&amp;amp;monthend=1&amp;amp;dayend=1&amp;amp;destination=197&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
{ok, calendar:{...}}.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
Always HTTP 200. On failure the body is &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;. Common codes: &amp;lt;code&amp;gt;missing_pbx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invalid_param&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;not_found&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conflict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in_use&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db_error&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_busy&amp;lt;/code&amp;gt;; the Response section above lists any specific to this function.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[TuCloudAPI]]&lt;br /&gt;
[[Category:TuCloudAPI SuperRoot]][[Category:TuCloudAPI Operator]][[Category:TuCloudAPI Client]][[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI_getcalendars&amp;diff=1295</id>
		<title>TuCloudAPI getcalendars</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI_getcalendars&amp;diff=1295"/>
		<updated>2026-11-05T13:29:25Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: Repetir cada año (hold) and expires_on&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;TuCloudAPI function to manage FuturePBX (the cloud PBX). Available to: &#039;&#039;&#039;SuperRoot, Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Requires the &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; parameter (the PBX &#039;&#039;&#039;name&#039;&#039;&#039;, e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The server verifies that your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;&#039;s own account owns that PBX, whatever its role; otherwise, and also for a PBX that does not exist, it returns &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;forbidden&amp;quot;}&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
List the PBX calendar date-overrides (one row = one recurring month/day + time window that reroutes inbound to a route for CLIs on that template). Optional template filter. hold = «Repetir cada año» 1/0; expires_on = for hold 0, the ISO date (YYYY-MM-DD) of the last day it applies (the day after, the row is deleted), null for hold 1. Tenant from (ukey, pbx).&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=getcalendars&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
GET, or POST with the parameters form-urlencoded in the body. Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter. Always HTTP 200; the response is a JSON envelope.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; || string || Yes || — || FuturePBX NAME (e.g. tucall). The (ukey, pbx) pair is the tenant boundary; the server verifies the ukey owns this PBX.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt; || integer || No || — || Filter to one calendar-template group (omit for all).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt; || string || No || — || Optional nota search (contains).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://tucloudapi.7kas.com:9087/tucloud?func=getcalendars&amp;amp;ukey=KEY&amp;amp;pbx=tucall&amp;amp;template=1&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
{ok, rows:[{_id,template,monthstart,daystart,monthend,dayend,timestart,timeend,destination,destination_name,hold,expires_on,nota}]}.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
Always HTTP 200. On failure the body is &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;. Common codes: &amp;lt;code&amp;gt;missing_pbx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invalid_param&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;not_found&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conflict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in_use&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db_error&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_busy&amp;lt;/code&amp;gt;; the Response section above lists any specific to this function.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[TuCloudAPI]]&lt;br /&gt;
[[Category:TuCloudAPI SuperRoot]][[Category:TuCloudAPI Operator]][[Category:TuCloudAPI Client]][[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI_getcalendar&amp;diff=1294</id>
		<title>TuCloudAPI getcalendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI_getcalendar&amp;diff=1294"/>
		<updated>2026-11-05T13:29:25Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: Repetir cada año (hold) and expires_on&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;TuCloudAPI function to manage FuturePBX (the cloud PBX). Available to: &#039;&#039;&#039;SuperRoot, Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Requires the &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; parameter (the PBX &#039;&#039;&#039;name&#039;&#039;&#039;, e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The server verifies that your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;&#039;s own account owns that PBX, whatever its role; otherwise, and also for a PBX that does not exist, it returns &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;forbidden&amp;quot;}&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Get one calendar row. 404-style not_found if not in the caller&#039;s PBX.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=getcalendar&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
GET, or POST with the parameters form-urlencoded in the body. Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter. Always HTTP 200; the response is a JSON envelope.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; || string || Yes || — || FuturePBX NAME (e.g. tucall). The (ukey, pbx) pair is the tenant boundary; the server verifies the ukey owns this PBX.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar row id (_id).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://tucloudapi.7kas.com:9087/tucloud?func=getcalendar&amp;amp;ukey=KEY&amp;amp;pbx=tucall&amp;amp;id=81522&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
{ok, calendar:{_id,template,monthstart,daystart,monthend,dayend,timestart,timeend,destination,destination_name,hold,expires_on,nota}}. expires_on: as in getcalendars.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
Always HTTP 200. On failure the body is &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;. Common codes: &amp;lt;code&amp;gt;missing_pbx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invalid_param&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;not_found&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conflict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in_use&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db_error&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_busy&amp;lt;/code&amp;gt;; the Response section above lists any specific to this function.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[TuCloudAPI]]&lt;br /&gt;
[[Category:TuCloudAPI SuperRoot]][[Category:TuCloudAPI Operator]][[Category:TuCloudAPI Client]][[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI_addcalendar&amp;diff=1293</id>
		<title>TuCloudAPI addcalendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI_addcalendar&amp;diff=1293"/>
		<updated>2026-11-05T13:29:24Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI calendar: Repetir cada año (hold) and expires_on&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;TuCloudAPI function to manage FuturePBX (the cloud PBX). Available to: &#039;&#039;&#039;SuperRoot, Operator, Client&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Requires the &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; parameter (the PBX &#039;&#039;&#039;name&#039;&#039;&#039;, e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The server verifies that your &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;&#039;s own account owns that PBX, whatever its role; otherwise, and also for a PBX that does not exist, it returns &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;forbidden&amp;quot;}&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Create a calendar date-override. Fields: template 1-99 (the calendar group a CLI&#039;s template_c selects), monthstart/monthend 1-12, daystart/dayend 1-31, timestart/timeend HH:MM (blank = 00:00), destination = an in-tenant route _id (required), hold «Repetir cada año» 1/0, nota (max 256). «Repetir cada año» (operator 2026-11-05): 1 = the row repeats every year on those dates; 0 = only its next occurrence: expires_on is the last day of it (Europe/Madrid) and the day after, the row is deleted by itself. The next occurrence is this year&#039;s when its end day is today or later, else next year&#039;s. The trigger derives the MMDD/HHMM columns + root; the API writes only the editable fields. No dedup (duplicates allowed, per legacy). Requires a non-readonly ukey.&lt;br /&gt;
&lt;br /&gt;
== Call ==&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=addcalendar&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
GET, or POST with the parameters form-urlencoded in the body. Requires the &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; parameter. Always HTTP 200; the response is a JSON envelope.&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Parameter !! Type !! Required !! Default !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; || string || Yes || — || FuturePBX NAME (e.g. tucall). The (ukey, pbx) pair is the tenant boundary; the server verifies the ukey owns this PBX.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;template&amp;lt;/code&amp;gt; || integer || Yes || — || Calendar-template group 1-99.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthstart&amp;lt;/code&amp;gt; || integer || Yes || — || Start month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;monthend&amp;lt;/code&amp;gt; || integer || Yes || — || End month 1-12.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dayend&amp;lt;/code&amp;gt; || integer || Yes || — || End day 1-31.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;destination&amp;lt;/code&amp;gt; || integer || Yes || — || Route _id to divert to (required, in-tenant).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;daystart&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; || Start day 1-31, or 0/blank = all days (Todos).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timestart&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || Start time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timeend&amp;lt;/code&amp;gt; || string || No || &amp;lt;code&amp;gt;00:00&amp;lt;/code&amp;gt; || End time HH:MM.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hold&amp;lt;/code&amp;gt; || integer || No || &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; || «Repetir cada año»: 1 = every year (the default), 0 = only the next occurrence, then deleted by itself.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nota&amp;lt;/code&amp;gt; || string || No || — || Free note (max 256).&lt;br /&gt;
|}&lt;br /&gt;
== Example ==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://tucloudapi.7kas.com:9087/tucloud?func=addcalendar&amp;amp;ukey=KEY&amp;amp;pbx=tucall&amp;amp;template=1&amp;amp;monthstart=12&amp;amp;daystart=25&amp;amp;monthend=12&amp;amp;dayend=25&amp;amp;destination=197&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
{ok, calendar:{...}}.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
Always HTTP 200. On failure the body is &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:&amp;quot;...&amp;quot;,&amp;quot;message&amp;quot;:&amp;quot;...&amp;quot;}&amp;lt;/code&amp;gt;. Common codes: &amp;lt;code&amp;gt;missing_pbx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;invalid_param&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;not_found&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;conflict&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;in_use&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db_error&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_busy&amp;lt;/code&amp;gt;; the Response section above lists any specific to this function.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Back to [[TuCloudAPI]]&lt;br /&gt;
[[Category:TuCloudAPI SuperRoot]][[Category:TuCloudAPI Operator]][[Category:TuCloudAPI Client]][[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.7kas.com/index.php?title=TuCloudAPI&amp;diff=1292</id>
		<title>TuCloudAPI</title>
		<link rel="alternate" type="text/html" href="https://wiki.7kas.com/index.php?title=TuCloudAPI&amp;diff=1292"/>
		<updated>2026-11-03T23:50:30Z</updated>

		<summary type="html">&lt;p&gt;Maintenance script: TuCloudAPI reference: portal users email + magic link (generated from func=help)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Note|1=New here? Start with &#039;&#039;&#039;[[TuCloudAPI help|the self-discovery endpoint]]&#039;&#039;&#039;. This reference is generated from &amp;lt;code&amp;gt;func=help&amp;lt;/code&amp;gt;, so it never drifts.}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&#039;&#039;&#039;TuCloudAPI&#039;&#039;&#039; is the REST API to manage &#039;&#039;&#039;FuturePBX&#039;&#039;&#039; (the multi-tenant cloud PBX). &#039;&#039;&#039;HTTPS + JSON&#039;&#039;&#039;, GET or POST (parameters form-urlencoded; audio uploads POST the file as the body). Base URL:&lt;br /&gt;
 https://tucloudapi.7kas.com:9087/tucloud?func=NAME&amp;amp;ukey=YOUR_KEY&amp;amp;pbx=PBX_NAME&lt;br /&gt;
&lt;br /&gt;
== Authentication &amp;amp; tenant ==&lt;br /&gt;
Every call needs an &#039;&#039;&#039;API key&#039;&#039;&#039; (&amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt;). Every PBX-scoped function also needs &amp;lt;code&amp;gt;pbx&amp;lt;/code&amp;gt; — the PBX &#039;&#039;&#039;name&#039;&#039;&#039; (e.g. &amp;lt;code&amp;gt;tucall&amp;lt;/code&amp;gt;). The &amp;lt;code&amp;gt;(ukey, pbx)&amp;lt;/code&amp;gt; pair is the tenant boundary: the server resolves the PBX name to its id and verifies that the key&#039;s OWN account owns it — for every role, SuperRoot included. A PBX that does not exist and one the key does not own both answer &amp;lt;code&amp;gt;forbidden&amp;lt;/code&amp;gt;. It never trusts a numeric tenant from the caller.&lt;br /&gt;
&lt;br /&gt;
== Response format ==&lt;br /&gt;
&#039;&#039;&#039;Always HTTP 200.&#039;&#039;&#039; Every PBX-scoped function always returns a JSON envelope: success &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:true, ...}&amp;lt;/code&amp;gt;, empty &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:true,&amp;quot;rows&amp;quot;:[]}&amp;lt;/code&amp;gt;, error &amp;lt;code&amp;gt;{&amp;quot;ok&amp;quot;:false,&amp;quot;code&amp;quot;:...,&amp;quot;message&amp;quot;:...}&amp;lt;/code&amp;gt; (common codes: &amp;lt;code&amp;gt;missing_pbx, forbidden, invalid_param, not_found, conflict, in_use, db_error, server_busy&amp;lt;/code&amp;gt;). IDs are exposed as &amp;lt;code&amp;gt;_id&amp;lt;/code&amp;gt;. A missing or invalid &amp;lt;code&amp;gt;ukey&amp;lt;/code&amp;gt; answers a bare &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; and nothing else. The legacy account functions return their data object directly, &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; when there is nothing.&lt;br /&gt;
&lt;br /&gt;
== Functions ==&lt;br /&gt;
=== Dashboard (landing counts) ===&lt;br /&gt;
* [[TuCloudAPI getdashboard]] — Landing-page dashboard: per-tenant object counts + a cheap health metric, in one call.&lt;br /&gt;
=== Extensions (Extensiones) ===&lt;br /&gt;
* [[TuCloudAPI getextensions]] — List the PBX extensions (safe display fields; NEVER the SIP password).&lt;br /&gt;
* [[TuCloudAPI getextension]] — Get one extension with all editable fields (NO password).&lt;br /&gt;
* [[TuCloudAPI getextlookups]] — Tenant-scoped option lists for the extension form selects: caller IDs (clis), music-on-hold (music), outgoing services (outs), the extension list (exts, for Enviar a / backup monitor), registration servers (servers) and next_free: the create-form number prefill for a REGISTERED extension (3-4 digits, the same check as checkextnum), a string, or null when no number is free.&lt;br /&gt;
* [[TuCloudAPI checkextnum]] — Is this number free for a NEW extension of this PBX? The same check addextension runs under its lock, so the two never disagree.&lt;br /&gt;
* [[TuCloudAPI addextension]] — Create an extension.&lt;br /&gt;
* [[TuCloudAPI updateextension]] — Edit an extension.&lt;br /&gt;
* [[TuCloudAPI deleteextension]] — Delete an extension after a tenant + dependency check.&lt;br /&gt;
* [[TuCloudAPI setextpassword]] — Rotate ONE extension&#039;s SIP password.&lt;br /&gt;
* [[TuCloudAPI getextpassword]] — Plaintext SIP password for ONE extension (the portal&#039;s «Clave SIP» eye toggle).&lt;br /&gt;
* [[TuCloudAPI getextqr]] — SIP provisioning QR for one extension, rendered server-side to a PNG (base64).&lt;br /&gt;
=== CLIs / DIDs (Numeracion) ===&lt;br /&gt;
* [[TuCloudAPI getclis]] — List the PBX CLIs / DIDs (inbound numbers) with the grid fields.&lt;br /&gt;
* [[TuCloudAPI getcli]] — Get one CLI with all editable fields, including the full 192-key timer matrix under &amp;quot;timers&amp;quot;.&lt;br /&gt;
* [[TuCloudAPI getclilookups]] — Tenant-scoped option lists for the CLI form: routes (all route selects), schedule profiles (template_h), and defined calendar templates (template_c helper).&lt;br /&gt;
* [[TuCloudAPI addcli]] — Create a CLI / DID.&lt;br /&gt;
* [[TuCloudAPI updatecli]] — Edit a CLI.&lt;br /&gt;
* [[TuCloudAPI deletecli]] — Delete a CLI after a tenant + dependency check.&lt;br /&gt;
=== Routes (Rutas) ===&lt;br /&gt;
* [[TuCloudAPI getroutes]] — List inbound routes for the PBX with step counts.&lt;br /&gt;
* [[TuCloudAPI getroute]] — Get one route header plus its ordered steps (destinations).&lt;br /&gt;
* [[TuCloudAPI getroutelookups]] — Tenant-scoped destination pickers for the step editor: the app enum plus extensions, groups, locutions, schedules, calendars, routes and queues (app=10 &amp;quot;Cola&amp;quot;: _id = the stable voip_queue.id stored in the step appdata, label = the queue title).&lt;br /&gt;
* [[TuCloudAPI addroute]] — Create an inbound route (header only; add steps with addroutestep).&lt;br /&gt;
* [[TuCloudAPI updateroute]] — Rename/annotate a route header.&lt;br /&gt;
* [[TuCloudAPI deleteroute]] — Delete a route.&lt;br /&gt;
* [[TuCloudAPI addroutestep]] — Append a step to a route (priority = max+1).&lt;br /&gt;
* [[TuCloudAPI updateroutestep]] — Change a step&#039;s app/appdata/timer (and optionally priority).&lt;br /&gt;
* [[TuCloudAPI deleteroutestep]] — Remove a step; the remaining steps&#039; priorities are auto-compacted to 1..N by the DB trigger.&lt;br /&gt;
=== Blacklist (inbound intercept) ===&lt;br /&gt;
* [[TuCloudAPI getblacklist]] — List the inbound-intercept rules for the PBX.&lt;br /&gt;
* [[TuCloudAPI getblacklistlookups]] — Tenant-scoped pickers for the rule form: routes (the divert target) and CLIs/DIDs (cli_id; 0 = all DIDs / generic rule).&lt;br /&gt;
* [[TuCloudAPI addblacklist]] — Create an inbound-intercept rule.&lt;br /&gt;
* [[TuCloudAPI updateblacklist]] — Edit an inbound-intercept rule.&lt;br /&gt;
* [[TuCloudAPI deleteblacklist]] — Delete an inbound-intercept rule.&lt;br /&gt;
=== Contacts (Agenda) ===&lt;br /&gt;
* [[TuCloudAPI getcontacts]] — List the PBX contacts (address book).&lt;br /&gt;
* [[TuCloudAPI addcontact]] — Create a contact.&lt;br /&gt;
* [[TuCloudAPI updatecontact]] — Edit a contact.&lt;br /&gt;
* [[TuCloudAPI deletecontact]] — Delete a contact.&lt;br /&gt;
=== Calendar (date overrides) ===&lt;br /&gt;
* [[TuCloudAPI getcalendars]] — List the PBX calendar date-overrides (one row = one recurring month/day + time window that reroutes inbound to a route for CLIs on that template).&lt;br /&gt;
* [[TuCloudAPI getcalendar]] — Get one calendar row.&lt;br /&gt;
* [[TuCloudAPI getcalendarlookups]] — Tenant-scoped pickers: routes (the destination) and the set of template values already in use (suggestions for the template spinner).&lt;br /&gt;
* [[TuCloudAPI addcalendar]] — Create a calendar date-override.&lt;br /&gt;
* [[TuCloudAPI updatecalendar]] — Edit a calendar row (same fields as addcalendar).&lt;br /&gt;
* [[TuCloudAPI deletecalendar]] — Delete a calendar row.&lt;br /&gt;
=== Ring groups (Grupos) ===&lt;br /&gt;
* [[TuCloudAPI getgroups]] — List the PBX ring/hunt groups with a member count.&lt;br /&gt;
* [[TuCloudAPI getgroup]] — Get one group.&lt;br /&gt;
* [[TuCloudAPI getgrouplookups]] — Tenant-scoped pickers: extensions (members), music (MOH), and CLIs (for the admin forward caller-id).&lt;br /&gt;
* [[TuCloudAPI addgroup]] — Create a ring group.&lt;br /&gt;
* [[TuCloudAPI updategroup]] — Edit a ring group (same fields as addgroup; gr editable, conflict on collision).&lt;br /&gt;
* [[TuCloudAPI deletegroup]] — Delete a ring group.&lt;br /&gt;
=== Locutions / IVR (Locuciones) ===&lt;br /&gt;
* [[TuCloudAPI getlocutions]] — List the PBX locutions / IVR prompts.&lt;br /&gt;
* [[TuCloudAPI getlocution]] — Get one locution with its DTMF digit-&amp;gt;route map (+ resolved route names), has_audio and audio_url.&lt;br /&gt;
* [[TuCloudAPI getlocutionlookups]] — Tenant-scoped route picker for the 11 DTMF digit destinations.&lt;br /&gt;
* [[TuCloudAPI addlocution]] — Create a locution / IVR.&lt;br /&gt;
* [[TuCloudAPI updatelocution]] — Edit a locution (name, waitext, digit routes).&lt;br /&gt;
* [[TuCloudAPI deletelocution]] — Delete a locution.&lt;br /&gt;
* [[TuCloudAPI getlocutionvoices]] — Catalogo para el selector de texto a voz: voces disponibles e idiomas admitidos.&lt;br /&gt;
* [[TuCloudAPI synthlocution]] — Genera el audio de una locucion a partir de un texto y lo deja PENDIENTE DE ACEPTAR: NO sustituye la locucion.&lt;br /&gt;
* [[TuCloudAPI uploadlocution]] — Sube un fichero de audio y lo deja COMO el audio de una locucion.&lt;br /&gt;
* [[TuCloudAPI commitlocution]] — Acepta el audio pendiente (el generado por synthlocution o subido por uploadlocution) y lo convierte en la locucion.&lt;br /&gt;
* [[TuCloudAPI discardlocution]] — Tira el audio pendiente sin tocar la locucion.&lt;br /&gt;
=== Music on hold (MOH) ===&lt;br /&gt;
* [[TuCloudAPI getmusics]] — List the PBX music-on-hold classes with has_audio (whether the track exists) and audio_url (the getaudio player URL).&lt;br /&gt;
* [[TuCloudAPI getmusic]] — Get one MOH class (+ has_audio, audio_url).&lt;br /&gt;
* [[TuCloudAPI addmusic]] — Create a MOH class.&lt;br /&gt;
* [[TuCloudAPI uploadmusic]] — Sube un fichero de audio para una clase de musica y lo deja PENDIENTE DE ACEPTAR: NO sustituye la que suena.&lt;br /&gt;
* [[TuCloudAPI commitmusic]] — Acepta el audio pendiente y lo convierte en la musica que suena.&lt;br /&gt;
* [[TuCloudAPI discardmusic]] — Tira el audio pendiente sin tocar la musica.&lt;br /&gt;
* [[TuCloudAPI deletemusic]] — Delete a MOH class.&lt;br /&gt;
=== Schedules (Horarios) ===&lt;br /&gt;
* [[TuCloudAPI getschedules]] — List the PBX weekly schedules (the WHEN grid a CLI&#039;s schedule profile points at).&lt;br /&gt;
* [[TuCloudAPI getschedule]] — Get one schedule with the full 84-cell weekly grid under &amp;quot;slots&amp;quot;.&lt;br /&gt;
* [[TuCloudAPI addschedule]] — Create a weekly schedule.&lt;br /&gt;
* [[TuCloudAPI updateschedule]] — Edit a schedule (template/name/grid).&lt;br /&gt;
* [[TuCloudAPI deleteschedule]] — Delete a schedule.&lt;br /&gt;
=== Outbound routing (Rutas de salida) ===&lt;br /&gt;
* [[TuCloudAPI getoutgoings]] — List the outbound-routing profiles (Servicios de salida) with rule counts.&lt;br /&gt;
* [[TuCloudAPI getoutgoing]] — Get one outbound profile plus its ordered allow/deny rules (longest-prefix first).&lt;br /&gt;
* [[TuCloudAPI getoutgoinglookups]] — Tenant-scoped route picker for a rule&#039;s divert destination (route_id; 0 = block).&lt;br /&gt;
* [[TuCloudAPI addoutgoing]] — Create an outbound-routing profile (header; add rules with addoutrule).&lt;br /&gt;
* [[TuCloudAPI updateoutgoing]] — Rename/annotate an outbound profile.&lt;br /&gt;
* [[TuCloudAPI deleteoutgoing]] — Delete an outbound profile.&lt;br /&gt;
* [[TuCloudAPI addoutrule]] — Append an allow/deny rule to a profile.&lt;br /&gt;
* [[TuCloudAPI updateoutrule]] — Edit an outbound rule (dst/denyallow/route_id/nota).&lt;br /&gt;
* [[TuCloudAPI deleteoutrule]] — Remove an outbound rule.&lt;br /&gt;
=== Phonebooks (Agendas) ===&lt;br /&gt;
* [[TuCloudAPI getphonebooks]] — List the PBX phonebooks (address books) with contact counts.&lt;br /&gt;
* [[TuCloudAPI getphonebook]] — Get one phonebook plus its contacts.&lt;br /&gt;
* [[TuCloudAPI addphonebook]] — Create a phonebook.&lt;br /&gt;
* [[TuCloudAPI updatephonebook]] — Edit a phonebook.&lt;br /&gt;
* [[TuCloudAPI deletephonebook]] — Delete a phonebook and all its contacts (DB cascade).&lt;br /&gt;
* [[TuCloudAPI addphonebookcontact]] — Add a contact to a phonebook.&lt;br /&gt;
* [[TuCloudAPI updatephonebookcontact]] — Edit a phonebook contact (tenant-checked via the row).&lt;br /&gt;
* [[TuCloudAPI deletephonebookcontact]] — Remove a phonebook contact (tenant-checked).&lt;br /&gt;
=== Call queues / ACD (Colas) ===&lt;br /&gt;
* [[TuCloudAPI getqueues]] — List the PBX call queues (ACD) with member counts.&lt;br /&gt;
* [[TuCloudAPI getqueue]] — Get one queue&#039;s config.&lt;br /&gt;
* [[TuCloudAPI getqueuelookups]] — Tenant-scoped pickers for the queue form: music (MOH classes), the strategy enum, and next_free (the create-form exten prefill = first free 3-digit queue number, null if 900-999 full).&lt;br /&gt;
* [[TuCloudAPI addqueue]] — Create a call queue.&lt;br /&gt;
* [[TuCloudAPI updatequeue]] — Edit a queue&#039;s config.&lt;br /&gt;
* [[TuCloudAPI deletequeue]] — Delete a queue.&lt;br /&gt;
=== Agents / queue members (Agentes) ===&lt;br /&gt;
* [[TuCloudAPI getagents]] — List the PBX agents (queue members) with the queue title and the agent&#039;s extension name resolved.&lt;br /&gt;
* [[TuCloudAPI getagentlookups]] — Dropdown data for the agent screens: this PBX&#039;s queues (assign an agent to a queue) and its extensions {_id,num,name}.&lt;br /&gt;
* [[TuCloudAPI addagent]] — Add an extension to a queue as a static member.&lt;br /&gt;
* [[TuCloudAPI updateagent]] — Update a queue member&#039;s penalty / paused / reason_paused (partial — only the fields sent are changed).&lt;br /&gt;
* [[TuCloudAPI deleteagent]] — Remove a queue member (agent) by _id.&lt;br /&gt;
=== Portal admin users (Usuarios) ===&lt;br /&gt;
* [[TuCloudAPI getadminusers]] — List this PBX&#039;s portal users (tucloud_sec_users).&lt;br /&gt;
* [[TuCloudAPI getadminuser]] — Get one portal user by login (_id) within this PBX.&lt;br /&gt;
* [[TuCloudAPI getadminuserlookups]] — Picker for the user form: the distinct roles used in this PBX (free-text datalist suggestions), and invite:true: users are created by email invitation, with no username and no password (always true on this build).&lt;br /&gt;
* [[TuCloudAPI addadminuser]] — Invite a new portal user to THIS PBX.&lt;br /&gt;
* [[TuCloudAPI updateadminuser]] — Edit a portal user in THIS PBX: name, active, priv_admin, role and phone are replaced as sent; disable_2fa=1 turns 2FA off and clears the secret (never enables).&lt;br /&gt;
* [[TuCloudAPI requestadminuseremail]] — Ask to change a portal user&#039;s EMAIL (their magic-link login), the twin of requestpbxemail.&lt;br /&gt;
* [[TuCloudAPI resendadminuseremail]] — Mail again the link of the user&#039;s open email change (the invitation of an invited user, or a change), pending or expired, with a fresh 24 hours; the previous link is then ignored.&lt;br /&gt;
* [[TuCloudAPI canceladminuseremail]] — Drop the user&#039;s open email change (pending, or expired): its link is then ignored.&lt;br /&gt;
* [[TuCloudAPI getadminuseremailchange]] — Status of the user&#039;s latest email change, from tucloudapi&#039;s own state (never magiclogin): none | pending (email, expires_in) | expired (until resent or cancelled) | done (notice: sent|failed|skipped, the informational mail to the old address) | failed (reason taken|error) | cancelled, with invite (true when it is the invitation) and its Spanish message.&lt;br /&gt;
* [[TuCloudAPI deleteadminuser]] — Delete a portal user by login within this PBX; their open email change is cancelled with them.&lt;br /&gt;
=== PBX settings (Configuracion) ===&lt;br /&gt;
* [[TuCloudAPI getpbxconfig]] — Get this PBX&#039;s settings (single record, no id needed, tenant from the binding).&lt;br /&gt;
* [[TuCloudAPI getpbxconfiglookups]] — Picker for the admin_ext_id field: this PBX&#039;s extensions.&lt;br /&gt;
* [[TuCloudAPI updatepbxconfig]] — Update this PBX&#039;s settings (strict set).&lt;br /&gt;
* [[TuCloudAPI requestpbxemail]] — Ask to change this PBX&#039;s MASTER EMAIL (tucloud_pbx.email: the administrator&#039;s magic-link and password login).&lt;br /&gt;
* [[TuCloudAPI getpbxemailchange]] — Status of this PBX&#039;s latest master-email change, from tucloudapi&#039;s own state (never magiclogin): none | pending (email, expires_in) | done (email, notice: sent|failed|skipped, the informational mail to the old address) | expired | failed (reason taken|error) | cancelled, each with its Spanish message.&lt;br /&gt;
* [[TuCloudAPI cancelpbxemail]] — Cancel this PBX&#039;s pending master-email change (its link is then ignored).&lt;br /&gt;
=== Security profiles / ACL (Perfiles) ===&lt;br /&gt;
* [[TuCloudAPI getprofiles]] — List this PBX&#039;s security profiles (Perfiles) with member counts.&lt;br /&gt;
* [[TuCloudAPI getprofile]] — Get one profile + its full app-permission matrix (all catalog apps, with app_type).&lt;br /&gt;
* [[TuCloudAPI getprofileapps]] — Get a profile&#039;s app-permission matrix only (the Aplicaciones/Perfiles editor).&lt;br /&gt;
* [[TuCloudAPI getseclookups]] — Pickers for the security section: the global app catalog (matrix columns) + this PBX&#039;s profiles (membership picker).&lt;br /&gt;
* [[TuCloudAPI getprofileusers]] — List the admin users assigned to a profile (read-only &amp;quot;Miembros&amp;quot; list; edits stay per-user via setuserprofiles).&lt;br /&gt;
* [[TuCloudAPI getuserprofiles]] — Get an admin user&#039;s profile membership + the profile picker (this PBX only).&lt;br /&gt;
* [[TuCloudAPI addprofile]] — Create a security profile in this PBX.&lt;br /&gt;
* [[TuCloudAPI updateprofile]] — Rename a profile (description).&lt;br /&gt;
* [[TuCloudAPI deleteprofile]] — Delete a profile.&lt;br /&gt;
* [[TuCloudAPI getsections]] — The catalog of portal sections (login v2, 2026-10-31): one row per section of the new web, in sidebar order, from the NEW table tucloud_sec_sections (24 rows; pbx_config is the PBX administrator&#039;s and has no row).&lt;br /&gt;
* [[TuCloudAPI getprofilesections]] — One profile&#039;s section access (login v2): every catalog section with access Y/N, from the NEW table tucloud_sec_groups_sections; a section without a row answers N.&lt;br /&gt;
* [[TuCloudAPI setprofilesections]] — FULL replace of one profile&#039;s section access (login v2; the «mantenimiento de accesos de los grupos» the operator asked for on 2026-10-31).&lt;br /&gt;
* [[TuCloudAPI setprofileapps]] — RETIRED 2026-10-31 (operator: the legacy matrix is never altered again).&lt;br /&gt;
* [[TuCloudAPI setprofileapp]] — RETIRED 2026-10-31 (operator: the legacy matrix is never altered again).&lt;br /&gt;
* [[TuCloudAPI setuserprofiles]] — Full-replace an admin user&#039;s profile membership (this PBX only).&lt;br /&gt;
=== Call detail records (CDR) ===&lt;br /&gt;
* [[TuCloudAPI getcdr]] — List a period of this PBX&#039;s call detail records (Registro de llamadas), newest first.&lt;br /&gt;
* [[TuCloudAPI getcdrlookups]] — CDR form pickers: the selectable years + the result (disposition) label set.&lt;br /&gt;
=== Reports / statistics (Informes) ===&lt;br /&gt;
* [[TuCloudAPI getreports]] — Call-volume statistics (Informes / Estadisticas de Llamadas) for a month — VOLUME ONLY, no prices.&lt;br /&gt;
=== AI assistant (Asistente IA) ===&lt;br /&gt;
* [[TuCloudAPI aichat]] — AI assistant for this PBX (Spanish).&lt;br /&gt;
=== Scheduled tasks (Tareas programadas) ===&lt;br /&gt;
* [[TuCloudAPI gettasks]] — List scheduled tasks (tareas programadas) for the PBX, with schedule + status labels and step counts.&lt;br /&gt;
* [[TuCloudAPI gettask]] — Get one scheduled task and its ordered steps.&lt;br /&gt;
* [[TuCloudAPI gettasksteps]] — Get the ordered steps of a task (tenant-checked).&lt;br /&gt;
* [[TuCloudAPI gettasklog]] — Get the last 100 execution-log rows for a task (read-only history), newest first.&lt;br /&gt;
* [[TuCloudAPI getapps]] — List the 8 target entity types (&amp;quot;apps&amp;quot;) a task step can act on.&lt;br /&gt;
* [[TuCloudAPI getappactions]] — List the configurable fields (&amp;quot;actions&amp;quot;) for an app — the dynamic-form catalog (field, type 0-5, data, metadata).&lt;br /&gt;
* [[TuCloudAPI getappsrecords]] — List this PBX&#039;s selectable records for an app (the record picker), via the tenant-scoped lookup function.&lt;br /&gt;
* [[TuCloudAPI getactiondata]] — List the selectable value options for an action (the value picker), for select/checkbox action types, via the tenant-scoped lookup function.&lt;br /&gt;
* [[TuCloudAPI getpbxs]] — List the PBXs assigned to the calling ukey&#039;s account (post-login selector; show only if &amp;gt;1).&lt;br /&gt;
* [[TuCloudAPI addtask]] — Create a scheduled task (status forced 0).&lt;br /&gt;
* [[TuCloudAPI updatetask]] — Edit a task (does not change status).&lt;br /&gt;
* [[TuCloudAPI deletetask]] — Delete a task (DB cascade of steps/log + crontab removal via the operator trigger).&lt;br /&gt;
* [[TuCloudAPI addtaskstep]] — Append a step to a task.&lt;br /&gt;
* [[TuCloudAPI updatetaskstep]] — Change a step&#039;s value (blank -&amp;gt; NULL).&lt;br /&gt;
* [[TuCloudAPI deletetaskstep]] — Remove a step.&lt;br /&gt;
=== Call simulator ===&lt;br /&gt;
* [[TuCloudAPI simulatecall]] — Simulate how a call routes (inbound DID / outbound / internal) WITHOUT placing a real call, returning the ordered decision trace (flujo).&lt;br /&gt;
=== Audio files ===&lt;br /&gt;
* [[TuCloudAPI getaudio]] — General-purpose audio file server (not only for the simulator): serve a locution or music-on-hold audio file base64-encoded (audio/wav) — for hover-preview, players, downloads, etc.&lt;br /&gt;
=== FuturePBX ===&lt;br /&gt;
* [[TuCloudAPI getpbxloclog]] — FuturePBX IVR/locution DTMF key-press log for a period.&lt;br /&gt;
=== Meta / discovery ===&lt;br /&gt;
* [[TuCloudAPI help]] — Lists the API functions available to the role of the calling ukey, with each function&#039;s description, parameters (meaning, optional/default), an example call and the response format.&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
* [[TuCloudAPI helloworld]] — Health check / connectivity test.&lt;br /&gt;
=== Administration ===&lt;br /&gt;
* [[TuCloudAPI SetDebugLevel]] — Sets the runtime debug/log verbosity level.&lt;br /&gt;
* [[TuCloudAPI ReloadUsersKeys]] — Hot-reloads the API keys from the database without restarting the service.&lt;br /&gt;
* [[TuCloudAPI resetinternalkey]] — Regenerates the non-showable internal API key for an account.&lt;br /&gt;
=== Account management (inherited) ===&lt;br /&gt;
* [[TuCloudAPI getaccountcodeid]] — Lists (id, accountcode) pairs of the accounts under the caller.&lt;br /&gt;
* [[TuCloudAPI getaccountcodedata]] — Returns full account profile rows (view_voip_users_api) for the caller&#039;s accounts.&lt;br /&gt;
* [[TuCloudAPI lockaccountcode]] — Blocks (locks) an account (blocked=SI).&lt;br /&gt;
* [[TuCloudAPI unlockaccountcode]] — Unblocks (unlocks) an account (blocked=NO).&lt;br /&gt;
* [[TuCloudAPI addaccountcode]] — Creates a new account (client) under the caller.&lt;br /&gt;
* [[TuCloudAPI getcredit]] — Returns credit and status (credit, credit_limit, creditalarm, email, blocked).&lt;br /&gt;
=== auth ===&lt;br /&gt;
* [[TuCloudAPI authrequest]] — Ask for a magic-link e-mail.&lt;br /&gt;
* [[TuCloudAPI authpoll]] — Has the user authorized the magic link? PUBLIC, like authrequest.&lt;br /&gt;
* [[TuCloudAPI authchallenge]] — A proof-of-work captcha challenge (ALTCHA protocol, SHA-256).&lt;br /&gt;
* [[TuCloudAPI authlogin]] — The password door.&lt;br /&gt;
* [[TuCloudAPI authwhoami]] — The current session context, and it refreshes the idle timer.&lt;br /&gt;
* [[TuCloudAPI authlogout]] — Destroy the session and clear the cookie.&lt;br /&gt;
=== queue_live ===&lt;br /&gt;
* [[TuCloudAPI getqueueevents]] — Today&#039;s events of ONE queue (local day), newest first, at most 200, with the same deduplication as getqueuestats (core events; module EXITQUEUE FULL/JOINEMPTY kept as refused).&lt;br /&gt;
* [[TuCloudAPI getlivestatus]] — LIVE state of the PBX as ONE snapshot of the presence feed: each extension&#039;s state (unregistered/idle/ringing/busy, &amp;quot;unknown&amp;quot; when it is not published) and its calls in progress (ringing/talking/hold/dialing, the other party, seconds since start and since answer), and each queue&#039;s live picture (agents logged in / available / paused, the waiting calls in queue order with their wait, every member with its status).&lt;br /&gt;
=== queue_stats ===&lt;br /&gt;
* [[TuCloudAPI getqueuestats]] — Call-center history from voip_queue_log (gabpbx contract v1, 2026-10-31): totals, per interval, per queue and per agent between two local days (Europe/Madrid, inclusive).&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
Full technical reference (architecture, auth model, side effects): see the project repo &amp;lt;code&amp;gt;doc/TUCLOUDAPI_REFERENCE.md&amp;lt;/code&amp;gt;. Scheduled-tasks engine: the 6 &amp;lt;code&amp;gt;tucloud_pbx_tasks*&amp;lt;/code&amp;gt; tables + the &amp;lt;code&amp;gt;.231&amp;lt;/code&amp;gt; crontab trigger.&lt;br /&gt;
&lt;br /&gt;
[[Category:TuCloudAPI]]&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
</feed>