Download OpenAPI specification:
Action-based Web API for Excellent Books ERP Portal operations.
Unlike traditional REST APIs with multiple endpoints, WebExcellentAPI uses a single endpoint with an action parameter that determines the operation:
GET/POST /WebExcellentAPI.hal?action={action_name}&{parameters}
https://your-server:port/WebExcellentAPI.hal
HTTP Basic Authentication (same credentials as REST API)
curl -u username:password "https://server:port/WebExcellentAPI.hal?action=login"
Cookie-Based Sessions (Recommended for Performance):
After initial Basic Auth, use the returned HSESSION cookie for subsequent requests to reduce server load significantly.
# Initial request with Basic Auth - save cookies
curl -u username:password "https://server:port/WebExcellentAPI.hal?action=login" -c cookies.txt
# Subsequent requests - use cookie only
curl "https://server:port/WebExcellentAPI.hal?action=pastespecial®ister=INVc&id=laptop" \
-H "Cookie: HSESSION=CC1AC3C5-DAC9C590-DA4FD41F-1E820CB7-C1713CC8"
See REST API documentation for full session configuration details.
<data> or <res>. Reports are emitted inside <report> with a <lang> element.<error>, action results commonly use res/@errstr, and attachment deletion uses res/@err.?action=login
?action=deactivate&usercode=API
?action=delete®ister=IVVc&id=12345
?action=deleterow®ister=IVVc&id=12345:2,3 (id format: {SerNr}:{rows})
?action=insertrow®ister=IVVc&id=10001:0:1 (id format: {recordId}:{zeroBasedIndex}:{stp})
?action=posttext®ister=MailVc&id=12345 (POST with body)
?action=document®ister=IVVc&id=10001
?action=document®ister=ORVc&id=10001
?action=action®ister=doupload®name=IVVc&id=12345 (POST with file)
?action=action®ister=getattachlist®name=IVVc&id=12345
?action=action®ister=getfile®name=IVVc&id=12345&file={uuid}
?action=action®ister=deleteattachment®name=IVVc&id=12345&file={uuid}
?action=action®ister=checkapprovalstatus®name=ActVc&id=12345
?action=action®ister=sendforapproval®name=IVVc&id=12345
?action=action®ister=approveactivity&id=12345&usercode=JOHN
?action=action®ister=rejectactivity&id=12345&usercode=JOHN
?action=action®ister=cancelapproval®name=IVVc&id=12345
?action=action®ister=getapprovalpersons®name=IVVc&id=12345&usercode=JOHN
?action=action®ister=createsigningactivity®name=ORVc&id=12345
?action=action®ister=createsigningsess&id=12345
?action=action®ister=startsigning&id=12345
?action=action®ister=cancelsigning&id=12345®name=ActVc
?action=action®ister=signactivity&usercode=JOHN&id=99001
?action=action®ister=getcontactpersons&usercode=JOHN&id=99001
?action=action®ister=getactivitydata&id=12345
?action=action®ister=getcomments&id=12345
?action=action®ister=addcomment&id=12345 (POST with comment)
?action=action®ister=settaskdescription&id=12345 (POST with text)
?action=action®ister=linktosourcerecord&id=99001&sourceRegName=IVVc&sourceRecordId=10001
?action=pastespecial®ister=INVc&id=laptop
?action=pastespecial®ister=CUVc&id=acme&compno=2
?action=pastespecial®ister=AllCUVc&id=john
?action=action®ister=getcustomercontactpersons&id=ACME
?action=action®ister=getitemstocklist&id=LAPTOP01
Note: pastespecial uses id parameter for search text. Returns max 50 results.
Search fields: INVc (Code, Name), CUVc/VEVc/AllCUVc (Code, Name, RegNr1), UserVc (Code, Name).
POST ?action=windowactions (with plain JSON body by default; encrypted=true enables legacy reversed Base64 text)
POST ?action=windowactions&usercode=JOHN (for __new with user defaults)
POST ?action=activeeditfields (get editable fields state)
?register=IVVc&usercode=JOHN&sd=2026-01-01&ed=2026-12-31&page=0&perpage=50
?register=ActVc&usercode=JOHN&search=pending&page=0&perpage=50
?register=CUVc&page=0&perpage=100
?register=Kanban&usercode=JOHN
Pages are zero-based: offset = page * perpage. Omitted page is 0. There is no default page size or 100-record cap; omitted perpage produces no rows in paginated lists. Order defaults to descending; only order=ascending selects ascending traversal. The envelope is <data page='...' total='...'>, without count/perpage/totalpages attributes.
ActVc, Kanban, IVVc, VIVc, IPVc, OPVc, StockTakeVc, ORVc and QTVc populate records only with nonblank usercode. Kanban ignores pagination/sort inputs and returns ToDo, InProgress and at most 10 Done rows. Its outer total is 0; column totals count returned rows.
POST /WebExcellentAPI.hal?action=report&usercode=JOHN
Content-Type: application/json
{"reportwindow": "QTHistoryRClass", "repname": "QTHstRn", "spec": {"sStartDate": "2026-01-01", "sEndDate": "2026-01-31"}}
?action=action®ister=getemployeeinfo&id=EMP001&empcode=MANAGER01&portalcc=est
?action=action®ister=getvacationbalance&empcode=EMP001
?action=action®ister=getemptimeplan&empcode=EMP001&portalcc=est&sd=2024-01-01&ed=2024-01-31
?action=action®ister=getemptimeplannewformat&empcode=EMP001&portalcc=est&sd=2025-01-01&ed=2025-01-31
?action=action®ister=createrecordfromdocument&id=10001
?action=action®ister=getcustomerstatusrecords&id=ACME
?action=action®ister=getadminusers&portalcc=est
?action=action®ister=getportalusers
?action=action®ister=getallusers
?action=action®ister=getnotifications&usercode=JOHN
?action=action®ister=getdashboardkpi
?action=action®ister=copyrecord®name=IVVc&id=12345
?action=action®ister=unokrecord®name=IVVc&id=12345&usercode=JOHN
?action=action®ister=getbilinks&usercode=JOHN
?action=action®ister=getactivitytypes
?action=action®ister=validateopforbank&id=50001&usercode=JOHN
?action=action®ister=signandsendopdsm&id=50001&usercode=JOHN
These parameters can be used with any WebExcellentAPI action:
| Parameter | Description |
|---|---|
compno |
Company number (for multi-company databases). If not specified, uses current/default company. |
usercode |
User code for user-specific operations |
portalcc |
Country code for country-specific features (est = Estonia, lat = Latvia) |
Example with company number:
?action=pastespecial®ister=INVc&id=laptop&compno=2
?action=action®ister=getattachlist®name=IVVc&id=12345&compno=3
Returns system formats, version information, employee data, portal access and supported capabilities. Capability values emitted in supported are yes. hassigning is included only when Dokobit is enabled; nonewtimetables depends on portal settings. Country-specific capabilities depend on portalcc. The example shows a subset of the response.
Example Request:
GET /WebExcellentAPI.hal?action=login&usercode=JOHN&portalcc=est
Example Response:
<res>
<supported>
<sendemail>yes</sendemail>
<usesessions>yes</usesessions>
<hasnotifications>yes</hasnotifications>
<createslinvoicefromorder>yes</createslinvoicefromorder>
<approvalrules>yes</approvalrules>
<unok>yes</unok>
<haspagination>yes</haspagination>
</supported>
</res>
| action required | string Value: "login" |
| usercode | string User code used to resolve employee data and portal access. |
| portalcc | string Enum: "est" "lat" Selects country-specific capability output; lat selects LAT, otherwise EST. |
Sets EXCPortalBlock.UseHRPortal to 0, stores the block, and invokes the close-service operation for class 92 with an empty second argument. Returns JSON {"res":"OK"}.
The deactivation branch does not require a usercode or test portal admin/accountant rights. usercode is read by the dispatcher for language/access setup.
Example Request:
GET /WebExcellentAPI.hal?action=deactivate
Example Response:
{"res":"OK"}
| action required | string Value: "deactivate" Action selector. |
| usercode | string Optional dispatcher language/access context; not checked by the deactivation branch. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Record deletion, row deletion/insertion and text posting. Delete supports IVVc, VIVc, IPVc, ORVc, QTVc, ActVc, CUVc, EPOrderDocVc, OPVc and INVc. Row deletion also supports IPVc, QTVc and OPVc; row insertion supports IVVc, VIVc, IPVc, OPVc, EXCExternalSignersVc and EXCSignSessVc. Matrix indexes are zero-based. Delete and row operations return data with an optional error element.
Deletes a record. The response is <data></data> when the handler reports no error; errors use <data><error>...</error></data>. An empty response does not establish that a record was found.
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=IVVc&id=10001
Example Response:
<data></data>
| action required | string Value: "delete" |
| register required | string Enum: "IVVc" "VIVc" "ORVc" "QTVc" "ActVc" "CUVc" "EPOrderDocVc" "IPVc" "OPVc" "INVc" Register to delete from |
| id required | string Record identifier: Code for CUVc/INVc; SerNr for the other listed registers. |
<data></data>
Deletes rows using zero-based matrix indexes: id={recordId}:{rows}. IVVc, IPVc, ORVc, QTVc, VIVc, OPVc, ActVc and EPOrderDocVc accept comma-separated indexes and delete them from highest to lowest. EXCExternalSignersVc and EXCSignSessVc accept one index. EXCSignSessVc uses a UUID as recordId; the other listed registers use SerNr. Errors use <data><error>...</error></data>.
Example Request:
GET /WebExcellentAPI.hal?action=deleterow®ister=IVVc&id=10001:0,2
Example Response:
<data></data>
| action required | string Value: "deleterow" |
| register required | string Enum: "IVVc" "ORVc" "VIVc" "ActVc" "EXCExternalSignersVc" "EXCSignSessVc" "EPOrderDocVc" "IPVc" "QTVc" "OPVc" |
| id required | string Example: id=10001:0,2 {recordId}:{rows}; zero-based indexes, with multiple indexes supported only as described above. |
<data></data>
Inserts a row at the zero-based matrix position in id={recordId}:{rowIndex}:{stp}. Position 0 inserts at the beginning. The index is passed directly to the insertion routine. stp is passed to the register row initializer; its meaning depends on the register. EXCSignSessVc uses a UUID as recordId; the other listed registers use SerNr. Errors use <data><error>...</error></data>.
Example Request:
GET /WebExcellentAPI.hal?action=insertrow®ister=IVVc&id=10001:0:1
Example Response:
<data></data>
| action required | string Value: "insertrow" |
| register required | string Enum: "IVVc" "VIVc" "EXCExternalSignersVc" "EXCSignSessVc" "IPVc" "OPVc" |
| id required | string Example: id=10001:0:1 {recordId}:{rowIndex}:{stp}; rowIndex is a zero-based insertion position. |
<data></data>
Writes form field set_field.Math to a record text field. For MailVc, the mail must have an activity description link; arbitrary mail bodies are not updated by this handler. EPOrderDocVc is read by SerNr. Errors, when reported, use an error element.
Example Request:
POST /WebExcellentAPI.hal?action=posttext®ister=MailVc&id=10001
Content-Type: application/x-www-form-urlencoded
set_field.Math=Example%20description
Example Response:
<data></data>
| action required | string Value: "posttext" |
| register required | string Enum: "MailVc" "EPOrderDocVc" |
| id required | string |
| set_field.Math | string Text content. |
<data></data>
PDF generation using action=document. Core registers: IVVc, VIVc, ORVc, QTVc, EPOrderDocVc, COVc, SVOVc and WSVc. The handler chooses the form; doccode and language query parameters are not read. The response contains file/name and file/base64, with an optional error element.
Generates a PDF and returns its filename and Base64 content in data/file. The handler chooses the document form. doccode and language query parameters are not read. Errors, when reported, appear in data/error.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=IVVc&id=10001
Example Response:
<data><file><name>DOCUMENT_10001.pdf</name><base64>BASE64_PDF</base64></file></data>
| action required | string Value: "document" |
| register required | string Enum: "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" "COVc" "SVOVc" "WSVc" |
| id required | string |
Upload, listing, download and deletion use action=action and the sub-action in register. Non-payroll attachment registers covered here: IVVc, VIVc, QTVc, StockTakeVc, ORVc, ActVc, CUVc, INVc, EPOrderDocVc, OPVc, IPVc, COVc, SVOVc, WSVc, SVOSerVc. Upload expects XML file/filename and file/base64. getattachlist returns data/res with regname=AttachVc followed by AttachVc rows. getfile returns Base64 content in data/file when found. deleteattachment returns <data><res err=''></res></data>: the attribute is err, and this handler leaves it empty even when no matching attachment is found. Its response does not confirm that a link was removed.
Uploads XML with root file and children filename and base64. The standard response has empty errstr and newdata; it does not return an attachment UUID or confirm storage. Use getattachlist to check the result and obtain the UUID.
Example Request:
POST /WebExcellentAPI.hal?action=action®ister=doupload®name=IVVc&id=10001
Content-Type: application/xml
<file><filename>document.pdf</filename><base64>BASE64_FILE</base64></file>
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" |
| register required | string Value: "doupload" |
| regname required | string Enum: "IVVc" "VIVc" "QTVc" "StockTakeVc" "ORVc" "ActVc" "CUVc" "INVc" "EPOrderDocVc" "EPShiftSheetVc" "OPVc" "IPVc" "COVc" "SVOVc" "WSVc" "SVOSerVc" Target register |
| id required | string Record identifier: Code for CUVc/INVc, itemCode:serialNumber for SVOSerVc, SerNr for the other listed registers. |
| filename | string |
| base64 | string Base64-encoded file content |
Returns attachment rows inside data, preceded by res regname='AttachVc'. Each row contains UUID, Name and Size. Size is copied from Attach2Vc.FileSize; this handler does not convert units.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getattachlist®name=IVVc&id=10001
Example Response:
<data><res regname='AttachVc'></res><AttachVc><UUID>00000000-0000-0000-0000-000000000001</UUID><Name>document.pdf</Name><Size>100</Size></AttachVc></data>
| action required | string Value: "action" |
| register required | string Value: "getattachlist" |
| regname required | string Enum: "IVVc" "VIVc" "QTVc" "StockTakeVc" "ORVc" "ActVc" "CUVc" "INVc" "EPOrderDocVc" "OPVc" "IPVc" "COVc" "SVOVc" "WSVc" "SVOSerVc" |
| id required | string Record identifier: Code for CUVc/INVc, itemCode:serialNumber for SVOSerVc, SerNr for the other listed registers. |
Returns the matching attachment as Base64 text in data/file. If no matching attachment is found, the response is <data><res></res></data>.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getfile®name=IVVc&id=10001&file=00000000-0000-0000-0000-000000000001
Example Response:
<data><res></res><file>BASE64_FILE</file></data>
| action required | string Value: "action" |
| register required | string Value: "getfile" |
| regname required | string Enum: "IVVc" "VIVc" "QTVc" "StockTakeVc" "ORVc" "ActVc" "CUVc" "INVc" "EPOrderDocVc" "OPVc" "IPVc" "COVc" "SVOVc" "WSVc" "SVOSerVc" |
| id required | string Record identifier: Code for CUVc/INVc, itemCode:serialNumber for SVOSerVc, SerNr for the other listed registers. |
| file required | string <uuid> File UUID |
checkapprovalstatus returns DummyVc data with res/@regname=DummyVc. sendforapproval requests approval for a source record. approveactivity and rejectactivity take an approval ActVc SerNr and require usercode in the unconfirmed activity's MainPersons. Their standard empty response does not establish that the activity changed.
Returns approval data in DummyVc; the response marker is res/@regname=DummyVc, regardless of the requested register. Fields are hasapprovals, cancancel, approvalstatus, message and approvaldate. approvalstatus is the ERP integer status. The example illustrates the response fields without assigning a meaning to the status number.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=checkapprovalstatus®name=IVVc&id=10001
Example Response:
<data><res errstr='' regname='DummyVc'></res><DummyVc><hasapprovals>1</hasapprovals><cancancel>0</cancancel><approvalstatus>3</approvalstatus><message></message><approvaldate></approvaldate></DummyVc></data>
| action required | string Value: "action" |
| register required | string Value: "checkapprovalstatus" |
| regname required | string Enum: "ActVc" "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" "OPVc" |
| id required | string |
Submits a record to the approval workflow.
Supported registers: IVVc, VIVc, ORVc, QTVc, ActVc, EPOrderDocVc, OPVc
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=sendforapproval®name=IVVc&id=12345
| action required | string Value: "action" |
| register required | string Value: "sendforapproval" |
| regname required | string Enum: "IVVc" "VIVc" "ORVc" "QTVc" "ActVc" "EPOrderDocVc" "OPVc" |
| id required | string |
Approves an unconfirmed approval activity only when usercode is included in its MainPersons. The supplied id is an ActVc SerNr. The standard empty result is also returned when these conditions are not met; it does not confirm that the activity changed.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=approveactivity&id=10001&usercode=JOHN
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" |
| register required | string Value: "approveactivity" |
| id required | string Approval activity SerNr in ActVc, rather than the source document number. |
| usercode required | string Approver's user code |
Rejects an unconfirmed approval activity only when usercode is included in its MainPersons. The supplied id is an ActVc SerNr. The standard empty result is also returned when these conditions are not met; it does not confirm that the activity changed.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=rejectactivity&id=10001&usercode=JOHN
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" |
| register required | string Value: "rejectactivity" |
| id required | string Approval activity SerNr in ActVc, rather than the source document number. |
| usercode required | string |
Returns XML with res/@regname=PersonVc. Each resolved user has Name, numeric Status, UserCode, canreject, canapprove, cansign and activity SerNr elements.
For the core register cases, the handler reads the record and its acceptance rules and collects linked activities with the approval flag and Invalid=0. After collection it keeps the greatest activity number per user code, and emits only entries whose user lookup succeeds. Status is the integer returned by the approval-state helper.
canapprove and canreject start at 0 and become 1 when a linked activity has MainPersons exactly equal to usercode and OKFlag=0. These variables are not reset between linked activities, so subsequent rows can retain 1. cansign remains 0 in these collection branches. The flags describe the values emitted by this handler.
Core register cases are IVVc, VIVc, ORVc, QTVc, EPOrderDocVc, OPVc and ActVc. Additional cases are PlanAbsenceVc and EPShiftSheetVc through the EST implementation, or EPOffWorkPlanVc and EPShiftSheetVc through the LAT implementation, selected by the installed payroll implementation. portalcc does not select this extension.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getapprovalpersons®name=IVVc&id=10001&usercode=JOHN
The example response shows an empty list.
Example Response:
<data><res regname="PersonVc"></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getapprovalpersons" Operation selector. |
| regname required | string Enum: "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" "OPVc" "ActVc" "PlanAbsenceVc" "EPOffWorkPlanVc" "EPShiftSheetVc" Register of the record. Extension cases depend on the installed payroll implementation. |
| id required | string Source record SerNr. |
| usercode | string User code compared with MainPersons to set the emitted action flags; not required to list users. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Digital signing operations. createsigningactivity is a placeholder: its creation block is disabled in production. startsigning initializes eligible activities but returns no URL in newdata.
The creation block is disabled in production, including register-specific and payroll delegation. This operation does not create a signing activity. The response emits the serial number of an unpopulated activity record; it is not a newly created activity ID.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createsigningactivity®name=ORVc&id=10001
Example Response:
<data><res newdata='0'></res></data>
| action required | string Value: "action" |
| register required | string Value: "createsigningactivity" |
| regname required | string Enum: "ORVc" "IVVc" "EPOrderDocVc" "EPContractVc" "EPTS2Vc" Accepted by the dispatcher; unused by the disabled creation block. |
| id required | string Accepted by the dispatcher; unused by the disabled creation block. |
Starts signing for an unconfirmed activity whose type permits signatures, excluding approval activities. The response contains errstr and an empty newdata; this handler never assigns a signing URL to newdata.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=startsigning&id=10001
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" |
| register required | string Value: "startsigning" |
| id required | string Activity SerNr in ActVc. |
| usercode | string Read by the dispatcher; unused by this signing initializer. |
Loads the signing session contact list only when the activity exists, OKFlag=0, TodoFlag is not the approval flag, and its activity type has AllowSignature=1. The signing session is looked up by current company and activity number.
Returns XML with res/@regname=PersonVc and empty errstr and newdata attributes. Each PersonVc contains Name, Status (the contact email address) and JobTitle (the contact job description). If the prerequisites or session lookup fail, the res element is still returned with no person rows. The helper does not check usercode against the activity persons.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getcontactpersons&id=10001
Example Response:
<data><res errstr="" newdata="" regname="PersonVc"></res>
<PersonVc><Name>Example signer</Name><Status>signer@example.invalid</Status><JobTitle>Manager</JobTitle></PersonVc>
</data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getcontactpersons" Operation selector. |
| id required | string Activity (ActVc) SerNr. |
| regname | string Read by the dispatcher but not used by this operation. |
| usercode | string Optional language selection in the dispatcher; unused by the contact-list helper. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Requests a Dokobit signing link only when the activity exists, OKFlag=0, usercode belongs to MainPersons, TodoFlag is not the approval flag, and the activity type exists with AllowSignature=1.
Returns XML <data><res errstr="..." newdata="..."></res></data>. newdata contains the link returned by the signing helper; errstr contains its error text with double quotes removed. If the eligibility checks fail, both attributes remain empty.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=signactivity&usercode=JOHN&id=10001
Example Response:
<data><res errstr="" newdata="https://SIGNING-SERVER/signing/SESSION-ID"></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "signactivity" Operation selector. |
| usercode required | string User code checked for membership in the activity MainPersons and passed to the signing helper. |
| id required | string Activity (ActVc) SerNr. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Activity and task management operations.
Sub-actions (via action=action):
getactivitydata - Get activity detailsgetcomments - Get activity commentsaddcomment - Add comment to activitysettaskdescription - Update task descriptiongetactivitytypes - List available activity typesWhen the activity exists and both source parameters are nonblank, creates record links in both directions between the activity and the supported source record, in the current company. The source record must also exist.
CUVc and EmplVc use Code; EPEmpVc uses EmpCode. Other supported sources use numeric SerNr. For EPOrderDocVc, AbsenceVc, EPOffWorkVc, PlanAbsenceVc, EPOffWorkPlanVc, EPShiftSheetVc, WorkedHoursVc and EPTS2Vc, the converted source number must also be positive.
Flushes the database and returns <data><res></res></data>, including when no links were created because an input, record or supported register case was missing. The response does not confirm that a link was created.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=linktosourcerecord&id=10001&sourceRegName=IVVc&sourceRecordId=10002
Example Response:
<data><res></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "linktosourcerecord" Operation selector. |
| id required | string Activity (ActVc) SerNr. |
| sourceRegName required | string Enum: "ORVc" "IVVc" "VIVc" "QTVc" "CUVc" "EmplVc" "EPEmpVc" "EPOrderDocVc" "AbsenceVc" "EPOffWorkVc" "PlanAbsenceVc" "EPOffWorkPlanVc" "EPShiftSheetVc" "WorkedHoursVc" "EPTS2Vc" Supported source register. |
| sourceRecordId required | string Source Code for CUVc/EmplVc, EmpCode for EPEmpVc, or numeric SerNr for the other cases. |
| usercode | string Optional user code used by the dispatcher for response language selection. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
pastespecial uses id as search text and requests up to 50 record IDs. Core lookup registers are INVc, CUVc, VEVc, AllCUVc, UserVc, APVc and ARVc. windowactions accepts plain JSON by default and dispatches INVc, IVVc, ORVc, CUVc, ActVc, QTVc, VIVc, EPOrderDocVc, OPVc and IPVc. activeeditfields supports ORVc and CUVc. Both body handlers support legacy encrypted=true input: Base64-encode JSON, then reverse the Base64 text.
Looks up records using URL-decoded id as search text and requests at most 50 record IDs. INVc, CUVc, VEVc, AllCUVc, UserVc, APVc and ARVc are handled by production. Record element names retain their register names; their field element names are lowercase. For INVc, bfilter is the stock location used to calculate instock.
Example Request:
GET /WebExcellentAPI.hal?action=pastespecial®ister=INVc&id=ITEM
Example Response:
<data><INVc><code>ITEM01</code><name>Example item</name><uprice1>100.00</uprice1><instock>5</instock><group>GROUP01</group><eucodex></eucodex></INVc></data>
| action required | string Value: "pastespecial" |
| register required | string Enum: "INVc" "CUVc" "VEVc" "AllCUVc" "UserVc" "APVc" "ARVc" Register to search in |
| id required | string URL-decoded lookup text passed to the core search helper. |
| compno | integer Company number (for multi-company databases) |
| bfilter | string For INVc, stock location used when calculating the returned instock value. |
Applies a field trigger to the supplied record values and returns JSON. Plain JSON is the default. For legacy encrypted=true, Base64-encode the JSON bytes, then reverse the Base64 text. The server reverses that text before Base64 decoding.
Use rowindex=-1 for a header field and a zero-based row index for a matrix field. headerfields and rowfields select fields and type codes as FieldName:TypeCode: 2 parses ISO dates; 5, 12 and 15 parse decimal values; other codes use strings. Type 15 is returned with one decimal place. Supply current values in values.header and values.rows. Trigger names and their effects depend on vcname. For IVVc, __new initializes defaults and __copy reads the source record from JSON id; these are field-trigger operations, not the copyrecord endpoint.
Example Request:
POST /WebExcellentAPI.hal?action=windowactions&usercode=JOHN
Content-Type: application/json
{
"vcname": "IVVc",
"fieldname": "__new",
"rowindex": -1,
"headerfields": "SerNr:1",
"rowfields": "",
"values": {
"header": {},
"rows": []
}
}
Example Response:
{"success": true, "res": true, "record": {"SerNr": "-1", "rows": []}}
| action required | string Value: "windowactions" |
| usercode | string User code for defaults (used with __new) |
| encrypted | string Enum: "true" "false" Enables legacy reversed Base64 input only when the value is true. |
Plain JSON is the default. For legacy encrypted=true, Base64-encode the JSON bytes, then reverse the Base64 text. The server reverses that text before Base64 decoding.
| vcname | string Enum: "INVc" "IVVc" "ORVc" "CUVc" "ActVc" "QTVc" "VIVc" "EPOrderDocVc" "OPVc" "IPVc" Register name |
| fieldname | string Field trigger name. IVVc supports __new and __copy; ActVc also supports __prepareActivity. |
| value | string New value for the field |
| rowindex | integer Default: -1 Zero-based matrix row index; -1 for a header field. |
| id | string Record ID (for __copy operation) |
| headerfields | string Comma-separated FieldName:TypeCode pairs. 2=date; 5,12,15=decimal; other codes=string. Type 15 is returned with one decimal place. |
| rowfields | string Comma-separated list of row fields with type codes. Format: FieldName:TypeCode,FieldName:TypeCode |
object | |
| sourceRegister | string Enum: "ORVc" "IVVc" "QTVc" "VIVc" "CUVc" Source register for __prepareActivity (ActVc only) |
| sourceRecordId | string Source record ID for __prepareActivity (ActVc only) |
{- "vcname": "IVVc",
- "fieldname": "CustCode",
- "value": "ACME",
- "rowindex": -1,
- "id": "string",
- "headerfields": "CustCode:1,InvDate:2,Sum4:5",
- "rowfields": "ArtCode:1,Quant:5,Price:5,Sum:5",
- "values": {
- "header": {
- "property1": "string",
- "property2": "string"
}, - "rows": [
- {
- "stp": 0,
- "property1": "string",
- "property2": "string"
}
]
}, - "sourceRegister": "ORVc",
- "sourceRecordId": "string"
}{- "success": true,
- "res": true,
- "messages": [
- {
- "description": "Customer credit limit exceeded"
}
], - "record": {
- "rows": [
- {
- "property1": "string",
- "property2": "string"
}
], - "property1": "string",
- "property2": "string"
}, - "activeFields": {
- "headerFields": true,
- "matrixFields": true,
- "exceptionHeaderList": "string",
- "exceptionMatrixList": "string"
}, - "rules": [
- {
- "rulefield": "string",
- "rulename": "string",
- "rulevalue": "string"
}
]
}Plain JSON is the default. For legacy encrypted=true, Base64-encode the JSON bytes, then reverse the Base64 text. The server reverses that text before Base64 decoding.
Returns information about which fields are currently editable based on record state. Useful for dynamically enabling/disabling form fields in custom UI.
Supported Registers: ORVc, CUVc
{
"vcname": "ORVc",
"id": "12345"
}
Checks if the order has any shipments (deliveries created).
| Condition | headerFields | matrixFields | exceptionHeaderList |
|---|---|---|---|
| No shipments | true | true | (empty) |
| Has shipments | true | false | CustCode |
When an order has been partially or fully shipped, the row fields become read-only to prevent changes that would conflict with the delivery. The customer code is also locked to maintain data integrity.
Returns dynamic rules based on the contact customer class (CCatVc.ClassType). These rules can be used by the UI to show/hide fields or apply validation.
Example: If contact has class with ClassType=COMPANY, returns:
{
"rules": [
{
"rulefield": "Classification",
"rulename": "type",
"rulevalue": "COMPANY"
}
]
}
The UI can use these rules to conditionally display fields relevant to companies vs individuals (e.g., show RegNr1 for companies, hide for private persons).
Response includes:
success - Always true for successful responseres - Operation resultactiveFields - Field editability flagsheaderFields - Whether header fields are editable (default: true)matrixFields - Whether row fields are editable (default: true)exceptionHeaderList - Comma-separated list of locked header fieldsexceptionMatrixList - Comma-separated list of locked row fieldsrules - Array of dynamic rules (CUVc only)Example Response:
{
"success": true,
"res": true,
"activeFields": {
"headerFields": true,
"matrixFields": false,
"exceptionHeaderList": "CustCode",
"exceptionMatrixList": ""
}
}
Example Response (CUVc with company class):
{
"success": true,
"res": true,
"activeFields": {
"headerFields": true,
"matrixFields": true,
"exceptionHeaderList": "",
"exceptionMatrixList": ""
},
"rules": [
{
"rulefield": "Classification",
"rulename": "type",
"rulevalue": "COMPANY"
}
]
}
Example Request:
POST /WebExcellentAPI.hal?action=activeeditfields
Content-Type: application/json
{"vcname":"ORVc","id":"10001"}
| action required | string Value: "activeeditfields" |
| encrypted | string Enum: "true" "false" Enables legacy reversed Base64 input only when the value is true. |
Plain JSON is the default. For legacy encrypted=true, Base64-encode the JSON bytes, then reverse the Base64 text. The server reverses that text before Base64 decoding.
| vcname | string Enum: "ORVc" "CUVc" |
| id | string ORVc SerNr or CUVc Code. |
{- "vcname": "ORVc",
- "id": "string"
}{- "success": true,
- "res": true,
- "activeFields": {
- "headerFields": true,
- "matrixFields": true,
- "exceptionHeaderList": "string",
- "exceptionMatrixList": "string"
}, - "rules": [
- {
- "rulefield": "string",
- "rulename": "string",
- "rulevalue": "string"
}
]
}Returns XML with res/@regname=ContactPersonVc. Traverses ContactRelVc rows whose CustCode equals id and reads each linked contact by ContactCode.
Each contact found is emitted as ContactPersonVc with Code, Name, Mobile, Phone, eMail and JobDesc. If no linked contacts are found, the res element remains and there are no contact rows.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getcustomercontactpersons&id=CUSTOMER01
Example Response:
<data><res regname="ContactPersonVc"></res>
<ContactPersonVc><Code>CONTACT01</Code><Name>Example contact</Name><Mobile>EXAMPLE-MOBILE</Mobile><Phone>EXAMPLE-PHONE</Phone><eMail>contact@example.invalid</eMail><JobDesc>Manager</JobDesc></ContactPersonVc>
</data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getcustomercontactpersons" Operation selector. |
| id required | string Customer (CUVc) Code matched against ContactRelVc.CustCode. |
| usercode | string Optional user code used by the dispatcher for response language selection. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Returns XML for the item identified by id. A missing item returns <data></data>.
For an existing item, res/@regname is INVcStockList. Each location with a nonzero calculated balance has an INVcStockList row with Type=row, Code, Name, Stock, Unit, Balance, UnitCost and Value.
A final INVcStockList row has Type=total, Balance, UnitCost and Value. Unit cost is value divided by balance; the total uses total value divided by total quantity.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getitemstocklist&id=ITEM01
Example Response:
<data><res regname="INVcStockList"></res>
<INVcStockList><Type>row</Type><Code>ITEM01</Code><Name>Example item</Name><Stock>MAIN</Stock><Unit>pcs</Unit><Balance>10</Balance><UnitCost>5</UnitCost><Value>50</Value></INVcStockList>
<INVcStockList><Type>total</Type><Balance>10</Balance><UnitCost>5</UnitCost><Value>50</Value></INVcStockList>
</data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getitemstocklist" Operation selector. |
| id required | string Item (INVc) Code. |
| usercode | string Optional user code used by the dispatcher for response language selection. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Lists records without an action parameter. Pages are zero-based (offset = page * perpage); omitted page is 0. Supply a positive perpage to receive records: there is no server page-size default or 100-record cap, and omitted perpage produces no rows in paginated lists. Only order=ascending selects ascending order; the default is descending. The paginated envelope is <data page='...' total='...'>, where total is the number of matched records before pagination. It has no count, perpage or totalpages attributes.
ActVc, Kanban, IVVc, VIVc, IPVc, OPVc, StockTakeVc, ORVc and QTVc populate records only when usercode is nonblank; otherwise they return empty lists.
Kanban is an exception: page, perpage, sortkey and order do not control its result. It sorts by TransDate, ActType and SerNr and returns ToDo, InProgress and Done containers with ActVc rows. ToDo and InProgress are unlimited; Done returns at most the last 10 entries after sorting. Each column total counts the rows actually returned. The outer total is always 0 in this implementation and is not a board count.
Record wrappers retain register names; field elements are lowercase. Date filtering applies only to handlers that use sd/ed. EPOrderDocVc uses empcode for employee scope. Lists check the authenticated caller's register access and, when usercode is supplied, that user's portal list access.
Lists records without an action parameter. Pages are zero-based (offset = page * perpage); omitted page is 0. Supply a positive perpage to receive records: there is no server page-size default or 100-record cap, and omitted perpage produces no rows in paginated lists. Only order=ascending selects ascending order; the default is descending. The paginated envelope is <data page='...' total='...'>, where total is the number of matched records before pagination. It has no count, perpage or totalpages attributes.
ActVc, Kanban, IVVc, VIVc, IPVc, OPVc, StockTakeVc, ORVc and QTVc populate records only when usercode is nonblank; otherwise they return empty lists.
Kanban is an exception: page, perpage, sortkey and order do not control its result. It sorts by TransDate, ActType and SerNr and returns ToDo, InProgress and Done containers with ActVc rows. ToDo and InProgress are unlimited; Done returns at most the last 10 entries after sorting. Each column total counts the rows actually returned. The outer total is always 0 in this implementation and is not a board count.
Record wrappers retain register names; field elements are lowercase. Date filtering applies only to handlers that use sd/ed. EPOrderDocVc uses empcode for employee scope. Lists check the authenticated caller's register access and, when usercode is supplied, that user's portal list access.
Example Request:
GET /WebExcellentAPI.hal?register=IVVc&usercode=JOHN&page=0&perpage=50&order=descending
Example Response:
<data page='0' total='1'><IVVc><sernr>10001</sernr><custcode>CUSTOMER01</custcode><addr0>Example customer</addr0><sum4>100.00</sum4><invdate>2026-01-15</invdate></IVVc></data>
| register required | string Enum: "INVc" "CUVc" "ActVc" "Kanban" "IVVc" "VIVc" "StockTakeVc" "ORVc" "QTVc" "EPOrderDocVc" "ARVc" "APVc" "OPVc" "IPVc" "ObjVc" "AccVc" Register to list |
| page | integer >= 0 Zero-based page number; omitted means 0. |
| perpage | integer >= 0 Page size. Omitted means 0 records; no default size or 100-record cap. Ignored for Kanban. |
| search | string |
| sortkey | string |
| order | string Enum: "ascending" "descending" Only ascending selects ascending traversal; omitted means descending. Ignored for Kanban. |
| sd | string <date> Start date (YYYY-MM-DD) |
| ed | string <date> End date (YYYY-MM-DD) |
| usercode | string ActVc, Kanban, IVVc, VIVc, IPVc, OPVc, StockTakeVc, ORVc and QTVc populate records only when usercode is nonblank; otherwise they return empty lists. Also selects the portal user whose access is checked. |
| bfilter | string Register-specific browse filter; comma-separated tokens are passed to handlers that use a filter list. |
| empcode | string Employee code used for EPOrderDocVc list scope. |
Returns a paginated list of accounts receivable entries with RVal > 0.
Uses the list query pattern — no action parameter.
Fields returned per record:
invoicenr - Invoice numberofficialsernr - Official serial numberrefstr - Reference stringrval - Remaining open value (M4 formatted)arcurncycode - Currency codecustcode - Customer codecustname - Customer nameduedate - Due date (YYYY-MM-DD format)Search matches against: InvoiceNr, CustCode, CustName, RefStr, OfficialSerNr, and amount.
Example Request:
GET /WebExcellentAPI.hal?register=ARVc&page=0&perpage=50&search=ACME&sortkey=DueDate
Example Response:
<data page='0' total='12'>
<ARVc>
<invoicenr>10001</invoicenr>
<custcode>ACME</custcode>
<custname>ACME Corporation</custname>
<rval>1250.00</rval>
<arcurncycode>EUR</arcurncycode>
<duedate>2026-03-31</duedate>
</ARVc>
</data>
Pages are zero-based (offset = page * perpage); omitted page is 0. Supply a positive perpage to receive records: there is no server page-size default or 100-record cap, and omitted perpage produces no rows in paginated lists. Only order=ascending selects ascending order; the default is descending. The paginated envelope is <data page='...' total='...'>, where total is the number of matched records before pagination. It has no count, perpage or totalpages attributes.
Field element names are lowercase.
| register required | string Value: "ARVc" |
| page | integer >= 0 Zero-based page number; omitted means 0. |
| perpage | integer >= 0 Page size. Omitted means 0 records; no default size or 100-record cap. |
| search | string Search across InvoiceNr, CustCode, CustName, RefStr, OfficialSerNr, amount |
| sortkey | string |
| order | string Enum: "ascending" "descending" Only ascending selects ascending traversal; omitted means descending. |
Returns a paginated list of accounts payable entries with RVal > 0.
Uses the list query pattern — no action parameter.
Fields returned per record:
sernr - Record serial numberinvoicenr - Invoice numberrefstr - Reference stringrval - Remaining open value (M4 formatted)curncycode - Currency codevecode - Vendor codevename - Vendor nameduedate - Due date (YYYY-MM-DD format)Search matches against: SerNr, VECode, VEName, RefStr, InvoiceNr, and amount.
Example Request:
GET /WebExcellentAPI.hal?register=APVc&page=0&perpage=50&search=SUPPLIER
Example Response:
<data page='0' total='8'>
<APVc>
<sernr>5001</sernr>
<invoicenr>SUP-2026-001</invoicenr>
<vecode>SUPPLIER</vecode>
<vename>Supplier Ltd</vename>
<rval>3200.00</rval>
<curncycode>EUR</curncycode>
<duedate>2026-04-15</duedate>
</APVc>
</data>
Pages are zero-based (offset = page * perpage); omitted page is 0. Supply a positive perpage to receive records: there is no server page-size default or 100-record cap, and omitted perpage produces no rows in paginated lists. Only order=ascending selects ascending order; the default is descending. The paginated envelope is <data page='...' total='...'>, where total is the number of matched records before pagination. It has no count, perpage or totalpages attributes.
Field element names are lowercase.
| register required | string Value: "APVc" |
| page | integer >= 0 Zero-based page number; omitted means 0. |
| perpage | integer >= 0 Page size. Omitted means 0 records; no default size or 100-record cap. |
| search | string Search across SerNr, VECode, VEName, RefStr, InvoiceNr, amount |
| sortkey | string |
| order | string Enum: "ascending" "descending" Only ascending selects ascending traversal; omitted means descending. |
POST action=report with JSON reportwindow, repname and spec. Match getstartupitems report window_class and report_function to reportwindow and repname; getreportfilters supplies filter metadata. Submit indexed flags as flags0, flags1, etc., and Date-suffixed fields as YYYY-MM-DD. JSON lang is not read. Access is checked for both the portal user and authenticated caller.
Runs a report from a plain JSON body. Match reportwindow to getstartupitems.reports[].window_class and repname to that entry's report_function. getreportfilters describes its filters. Indexed filter names such as flags[0] must be submitted as spec keys such as flags0. Keys ending in Date are parsed as YYYY-MM-DD.
The report must be allowed by both portal-user access and the authenticated caller's report/module access. Language comes from resolved user settings; JSON lang is not read. Successful output starts with <report><lang>...</lang> and contains the report output; validation/access errors use <data><res errstr="..." newdata=''></res></data>.
Example Request:
POST /WebExcellentAPI.hal?action=report&usercode=JOHN
Content-Type: application/json
{
"reportwindow": "QTHistoryRClass",
"repname": "QTHstRn",
"spec": {
"sStartDate": "2026-01-01",
"sEndDate": "2026-01-31"
}
}
Example Response:
<data><res errstr="Access denied" newdata=''></res></data>
| action required | string Value: "report" |
| usercode required | string Example: usercode=JOHN Portal user used for access-group and language resolution. |
| reportwindow required | string Report window class name (use |
| repname required | string report_function from getstartupitems for the selected reportwindow. |
object Report specification values. Keys ending in Date are parsed as YYYY-MM-DD. Use flags0, flags1, etc. for indexed flags; flags0 maps to flags[0]. |
{- "reportwindow": "QTHistoryRClass",
- "repname": "QTHstRn",
- "spec": {
- "sStartDate": "2025-01-01",
- "sEndDate": "2025-01-31"
}
}Returns the bundled ReportFilters.json metadata, with reports appended by an extension when supplied. The JSON root contains source_files, statistics and reports. Each report has title, window_class, module and filters; some also have note. Filters use label, interfacetype, datatype, field and required, with options arrays of value/label pairs where supplied. No default values are supplied by the base asset or generated by the loader. A report with note="Window class definition not found" has unresolved window metadata and an empty filters array.
This response has no repname/report_function property. Match window_class to getstartupitems.reports[].window_class to obtain report_function. The example is an excerpt; statistics describe the bundled catalog.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getreportfilters
Example Response:
{
"source_files": [
"product-bks/english/productwindows.hal",
"product-bks/estonian/productwindows.hal",
"product-bks/latvian/productwindows.hal"
],
"statistics": {
"total_reports": 989,
"reports_with_filters": 758,
"reports_without_filters": 231,
"reports_with_mandatory_fields": 501
},
"reports": [
{
"title": "Access Control",
"window_class": "UserAccessRClass",
"module": "modSY",
"filters": [
{
"label": "Person",
"interfacetype": "EditFieldTL",
"datatype": "string",
"required": false,
"field": "f1"
},
{
"label": "Function",
"interfacetype": "RadioButton",
"datatype": "integer",
"field": "flags[0]",
"required": false,
"options": [
{
"value": 0,
"label": "All Access Information"
},
{
"value": 1,
"label": "User Access Per Company"
},
{
"value": 2,
"label": "User Mail Access Groups"
},
{
"value": 3,
"label": "Access Groups per Company"
}
]
}
]
},
{
"title": "Access Group Report",
"window_class": "AccGrpCheckRClass",
"module": "modTC",
"note": "Window class definition not found",
"filters": []
}
]
}
| action required | string Value: "action" |
| register required | string Value: "getreportfilters" |
{- "source_files": [
- "string"
], - "statistics": {
- "property1": 0,
- "property2": 0
}, - "reports": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string",
- "filters": [
- {
- "label": "string",
- "interfacetype": "string",
- "datatype": "string",
- "field": "string",
- "required": true,
- "options": [
- {
- "value": 0,
- "label": "string"
}
]
}
], - "note": "string"
}
]
}Employee portal specific operations.
Sub-actions (via action=action):
getemployeeinfo - Employee detailsgetvacationbalance - Vacation days balance (access-controlled per EP-1989)getemptimeplan - Work schedulegetemptimeplannewformat - Work schedule (new format)getcontactpersons - Contact persons listgetapprovalpersons - Available approversgetcustomerstatusrecords - Customer's related records (invoices, orders, quotes, tasks)getcustomercontactpersons - Customer's contact persons listgetstartupitems - Module/register/report/document metadata (JSON)getuseraccessrights - Access rights per item for a user (JSON)Returns employee profile data for target id, using requester empcode. portalcc=est or lat is required to select the profile handler. Access allows the requester themselves, employees in a department the requester manages, or a user treated as a portal accountant/admin. When the employee is missing or access is denied, ProfileInfoVc is omitted.
ExtraUsedVacDays is emitted only when positive in EST and unconditionally in LAT. The example shows the denied/not-found envelope.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getemployeeinfo&id=EMP001&empcode=MANAGER01&portalcc=est
Example Response:
<data><res regname='ProfileInfoVc'></res></data>
| action required | string Value: "action" |
| register required | string Value: "getemployeeinfo" |
| empcode required | string Requesting employee code used for profile access checks. |
| portalcc required | string Enum: "est" "lat" Payroll locale ( |
| id required | string Target employee code. |
Returns the target employee's vacation balance. Portal accountants/admins bypass the employee-scope check. Other users can view themselves or employees in departments they manage, as resolved from usercode. The implementation is selected by installed payroll/localization (ExcUseLATPayroll and EST localization), not by portalcc. The example shows access denied.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getvacationbalance&empcode=EMP001&usercode=JOHN
Example Response:
<data><res errstr="You do not have access to view this data" newdata=''></res></data>
| action required | string Value: "action" |
| register required | string Value: "getvacationbalance" |
| empcode required | string |
| usercode required | string Requesting user's code. Required for access control check — determines whether the user is allowed to view the specified employee's data. |
Returns bundled HALStartup.json metadata, with extension entries appended to supported arrays. The root contains source_files, statistics, total_entries and arrays modules, registers, settings, documents, reports, exports, imports and maintenances.
Module objects contain title and code. Other item objects use title, window_class and module. Documents additionally provide form and form_class; reports provide report_function; exports, imports and maintenances provide export_function, import_function and maintenance_function respectively. Use a report's window_class and report_function as reportwindow and repname when running a report. The example is an excerpt; counts describe the bundled catalog and are not recomputed when extension entries are appended.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getstartupitems
Example Response:
{
"source_files": [
"english/Haengm.hal",
"english/Haengm2.hal",
"product-bks/english/sueng-estbks.hal"
],
"statistics": {
"modules": 82,
"registers": 509,
"settings": 1602,
"documents": 193,
"reports": 989,
"exports": 291,
"imports": 80,
"maintenances": 402
},
"total_entries": 4148,
"modules": [
{
"title": "ASP",
"code": "modASP"
}
],
"registers": [
{
"title": "Access Groups",
"window_class": "AccessVc",
"module": "modOneFuncMod"
}
],
"settings": [
{
"title": "(Croatia, Slovenia) VAT Rate Classification",
"window_class": "CashInvCroSBlockTClass",
"module": "modNL"
}
],
"documents": [
{
"title": "Activities",
"window_class": "ActDocRClass",
"form": "ActDocForm",
"form_class": "ActDocFClass",
"module": "modCRM"
}
],
"reports": [
{
"title": "Accepted Quotations Journal",
"window_class": "QTHistoryRClass",
"report_function": "QTHstRn",
"module": "modQT"
}
],
"exports": [
{
"title": "(Croatia, Slovenia) Cash Invoices Export",
"window_class": "CashInvCroEClass",
"export_function": "CashInvExEn",
"module": "modSL"
}
],
"imports": [
{
"title": "ARBA Tax List for Customer Perceptions",
"window_class": "ARBAVEPercIClass",
"import_function": "ARBAVEPercIn",
"module": "modSL"
}
],
"maintenances": [
{
"title": "Account Auto Elimination",
"window_class": "AccElimConsVClass",
"maintenance_function": "AccElimMn",
"module": "modCons"
}
]
}
| action required | string Value: "action" |
| register required | string Value: "getstartupitems" |
{- "source_files": [
- "string"
], - "statistics": {
- "property1": 0,
- "property2": 0
}, - "total_entries": 0,
- "modules": [
- {
- "title": "string",
- "code": "string"
}
], - "registers": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string"
}
], - "settings": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string"
}
], - "documents": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string",
- "form": "string",
- "form_class": "string"
}
], - "reports": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string",
- "report_function": "string"
}
], - "exports": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string",
- "export_function": "string"
}
], - "imports": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string",
- "import_function": "string"
}
], - "maintenances": [
- {
- "title": "string",
- "window_class": "string",
- "module": "string",
- "maintenance_function": "string"
}
]
}Returns a JSON array of item access rights using the user's access group and module access. If usercode is omitted, CurrentUser is used. Item types are module, register, report, setting, document, export, import and maintenance. Each object has type, name and access, with code for modules or window_class and module for other items. Access strings are full, read, none or unknown. If the user's access group cannot be resolved, the array is empty. The example shows an excerpt with illustrative access values.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getuseraccessrights&usercode=JOHN
Example Response:
[
{
"type": "module",
"name": "ASP",
"code": "modASP",
"access": "full"
},
{
"type": "register",
"name": "Access Groups",
"window_class": "AccessVc",
"access": "read",
"module": "modOneFuncMod"
}
]
| action required | string Value: "action" |
| register required | string Value: "getuseraccessrights" |
| usercode | string User code to get access rights for. Defaults to currently authenticated user if omitted. |
[- {
- "type": "module",
- "name": "string",
- "code": "string",
- "window_class": "string",
- "module": "string",
- "access": "full"
}
]Reads EPOrderDocVc by numeric id and processes every matrix row through the localised order-document action. It uses the LVA/LTU action when that localisation is present and the EST action when EST localisation is present.
During processing, it searches for a related EPOffWorkVc record by order and row employee in LVA/LTU, or AbsenceVc by order in EST. res/@newdata is the first matching number found during those searches; it is not guaranteed to identify a newly created record. empcode is unused and does not filter rows.
Returns XML with errstr and newdata attributes. This wrapper does not assign an error message; a missing document, no rows, no applicable localisation or no matching related record can leave both attributes empty.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createrecordfromdocument&id=10001
Example Response:
<data><res errstr="" newdata="10002"></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "createrecordfromdocument" Operation selector. |
| id required | string EPOrderDocVc SerNr. |
| empcode | string Read and passed by the dispatcher but unused; does not filter the document rows. |
| usercode | string Optional user code used by the dispatcher for response language selection. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Returns XML <data register="UserVc"> containing UserVc rows with Code, LoginEmailAddr, IDCode and Name. There is no res element.
Results are produced only when empcode is blank. Scans local users and global users, excluding closed entries, requiring a nonblank ID code and no employee record, and requiring resolved access with EXCPortalAccountant or EXCPortalAdmin. Global users must also resolve through the user lookup. Duplicate user codes are emitted once.
portalcc is read and forwarded but does not affect this list. A nonblank empcode returns <data register="UserVc"></data>.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getadminusers
Example Response:
<data register="UserVc">
<UserVc><Code>JOHN</Code><LoginEmailAddr>john@example.invalid</LoginEmailAddr><IDCode>EXAMPLE-ID</IDCode><Name>Example user</Name></UserVc>
</data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getadminusers" Operation selector. |
| portalcc | string Read and forwarded as country; unused by the user-list helper. |
| empcode | string Leave blank to receive results. Any nonblank value suppresses all rows. |
| usercode | string Optional user code used by the dispatcher for response language selection. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Returns XML with res/@regname=infovc, followed by groups of infovc elements in this order: invoices and their totals, sales orders, quotations, activities, purchase invoices and their totals. id is matched against the customer code, or the supplier code for purchase invoices.
Invoice selection first outputs invoices found for positive receivable balances, with no 10-row cap. It then adds other confirmed invoices in reverse customer/date key order until the combined counter reaches 10. Orders and quotations use reverse customer/date key traversal and can return 11 rows each. Activities return at most 10 rows and exclude approval activities. Purchase invoices return at most 10 rows in reverse supplier-key traversal. There is no single date sort across all groups.
The exact Type values and child elements are:
invoice: SerNr, Date, Date2 (payment due date), Sum, Currency, Balance, PayDeal (payment-term comment), Paid.invoicetotals: Open, OverDue, NotOverDue, calculated from all positive receivable balances traversed.salesorder: SerNr, Date, Date2 (planned shipment), Sum, Class, ClassName, Done, Closed, Status, Currency.quotation: SerNr, Date, Date2 (valid until), Sum, OrderNo, Rejected, Closed, Currency.activity: SerNr, Date, Persons, ContactPerson, Comments (comment count), Comment, ActType, OKFlag, ActTypeComment.purchaseinvoice: SerNr, Date, Date2 (due date), Sum, OKFlag, Currency, Balance, PayDeal (payment-term comment), Paid.purchaseinvoicetotals: Open, OverDue, NotOverDue, calculated from positive payable balances of the selected confirmed purchase invoices.Both totals elements are emitted even when there are no document rows. OverDue uses due dates before the current date; NotOverDue is Open - OverDue.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getcustomerstatusrecords&id=CUSTOMER01
Example Response:
<data><res regname="infovc"></res>
<infovc><Type>invoice</Type><SerNr>10001</SerNr><Date>2026-01-01</Date><Date2>2026-01-31</Date2><Sum>100</Sum><Currency>EUR</Currency><Balance>100</Balance><PayDeal>Example payment term</PayDeal><Paid>0</Paid></infovc>
<infovc><Type>invoicetotals</Type><Open>100</Open><OverDue>100</OverDue><NotOverDue>0</NotOverDue></infovc>
<infovc><Type>purchaseinvoicetotals</Type><Open>0</Open><OverDue>0</OverDue><NotOverDue>0</NotOverDue></infovc>
</data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getcustomerstatusrecords" Operation selector. |
| id required | string Customer/supplier code. |
| usercode | string Optional user code used by the dispatcher for response language selection. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Returns absence and planned-absence information for employees selected by department access and search. empcode supplies the employee context for department selection; it is not a filter limiting the output to that employee.
portalcc=est selects the EST implementation and portalcc=lat selects the LAT implementation. Other or missing values produce no body from this branch. Dates are read as YYYY-MM-DD; the wrapper does not validate missing dates or the date-range order.
The dispatcher resolves usercode access to EXCPortalAdmin, EXCPortalAccountant and EXCPortalShowAllAbsences. In EST, any of these rights permits selection from all departments; otherwise departments come from the employee's managed departments, fallback employee department and valid-contract department. A supplied department must be in that available set. In LAT, departments normally come from the employee's managed departments and current-contract department. Admin/accountant rights allow a supplied department override and an all-employee fallback when the resulting department list is empty; ShowAllAbsences selects the supplied department or all employees when it is blank.
Returns XML <data><res regname="EPEmpVc"></res>...</data>. Each EPEmpVc has empcode, empname, depname, depcode, and date-specific elements named dataYYYY-MM-DD, infoYYYY-MM-DD and detailsYYYY-MM-DD for days with data. Existing absence data takes precedence over planned data for the same employee/day.
A data element contains group:off:sernr for absence or group:plan:sernr:okflag for a plan. The info element contains the group name and displayed date range. The details element contains group, type (absence or plan), sernr, plannr, okflag, sd, ed, realsd, realed, approval, totaldays, recordsernr; approval contains approvalstatus, hasapprovals, cancancel, message, approvaldate.
The example shows the empty-selection response.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getemptimeplannewformat&usercode=JOHN&empcode=EMP001&portalcc=est&sd=2026-01-01&ed=2026-01-31
Example Response:
<data><res regname="EPEmpVc"></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "getemptimeplannewformat" Operation selector. |
| empcode | string Employee context for department selection. May be omitted for selection based on elevated user rights. |
| portalcc required | string Enum: "est" "lat" Selects the implementation. Missing or unsupported values produce no body. |
| sd required | string <date> Start date, read as YYYY-MM-DD. No wrapper validation. |
| ed required | string <date> End date, read as YYYY-MM-DD. No wrapper validation. |
| depcode | string Optional department restriction, subject to the selection rules above. |
| search | string Optional search over employee code/name and position code/name. |
| usercode | string Optional portal user whose access supplies admin/accountant and ShowAllAbsences selection rights; also used for response language. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Document conversion operations for sales workflows (quotation → order → invoice).
Sub-actions (via action=action):
createslinvoicefromorder - Create sales invoice from sales ordercreatesalesorderfromquotation - Create sales order from quotationcreateslinvoicefromquotation - Create sales invoice directly from quotationcopyrecord - Duplicate an existing recordunokrecord - Remove OK status (return to draft)Creates a sales invoice from an existing sales order.
?action=action®ister=createslinvoicefromorder&id={ORVc_SerNr}&usercode=JOHN
Response: <data><res errstr="" newdata="10001"/></data>
The newdata attribute contains the new invoice SerNr.
Creates a sales order from an existing quotation.
?action=action®ister=createsalesorderfromquotation&id={QTVc_SerNr}®name=QTVc&usercode=JOHN
Creates a sales invoice directly from a quotation (skipping order stage).
?action=action®ister=createslinvoicefromquotation&id={QTVc_SerNr}®name=QTVc&usercode=JOHN
Duplicates an existing record. Currently supports IVVc (invoices). New record gets current date and OKFlag=0 (draft).
?action=action®ister=copyrecord®name=IVVc&id=12345
Reverses record confirmation (sets OKFlag from 1 to 0). Requires appropriate access permissions (EXCPortalUnOK action). Supported registers: IVVc, ORVc, PlanAbsenceVc
?action=action®ister=unokrecord®name=IVVc&id=12345&usercode=JOHN
Creates a sales invoice from an existing sales order.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createslinvoicefromorder&id=5001&usercode=JOHN
Example Response:
<data>
<res errstr="" newdata="10001"/>
</data>
The newdata attribute contains the SerNr of the newly created invoice.
| action required | string Value: "action" |
| register required | string Value: "createslinvoicefromorder" |
| id required | string Sales order SerNr (from ORVc) |
| usercode required | string |
Creates a sales order from an existing quotation.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createsalesorderfromquotation&id=3001®name=QTVc&usercode=JOHN
Example Response:
<data>
<res errstr="" newdata="5001"/>
</data>
| action required | string Value: "action" |
| register required | string Value: "createsalesorderfromquotation" |
| id required | string Quotation SerNr (from QTVc) |
| regname required | string Value: "QTVc" |
| usercode required | string |
Creates a sales invoice directly from a quotation (skipping the sales order stage).
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createslinvoicefromquotation&id=3001®name=QTVc&usercode=JOHN
| action required | string Value: "action" |
| register required | string Value: "createslinvoicefromquotation" |
| id required | string Quotation SerNr (from QTVc) |
| regname required | string Value: "QTVc" |
| usercode required | string |
Creates a copy of an existing record.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=copyrecord®name=IVVc&id=10001
Behavior:
| action required | string Value: "action" |
| register required | string Value: "copyrecord" |
| regname required | string Value: "IVVc" Currently only IVVc supported |
| id required | string |
Clears confirmation for a supported record. The supplied user's access group must allow EXCUnOKAll or UnOKAll. IVVc, ORVc, VIVc and IPVc set OKFlag=0; OPVc sets DoneFlag=0. The core branches do not require the existing flag to be 1. The update must pass RecordUpdate before errstr is cleared. Payroll fallback is selected by installed payroll/localization, not portalcc.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=unokrecord®name=IVVc&id=10001&usercode=JOHN
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" |
| register required | string Value: "unokrecord" |
| regname required | string Enum: "IVVc" "ORVc" "PlanAbsenceVc" "VIVc" "OPVc" "IPVc" |
| id required | string |
| usercode required | string |
The handler assigns newdata=true without evaluating the supplied user's permissions.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=hasusernewapi&usercode=JOHN
Example Response:
<data><res errstr="" newdata='true'></res></data>
Paginated lists have no default page size or 100-row cap; omitted perpage yields no records. Kanban ignores page/perpage and returns ToDo, InProgress and at most 10 Done entries. Its limits cannot be set with a maxsize query parameter.
getnotifications returns ProfileVc/TaskCnt, a task count. getreportfilters and getstartupitems return JSON metadata. getvacationbalance selects implementation from installed payroll/localization rather than portalcc.
Returns a task count in ProfileVc/TaskCnt, calculated from the user's activity list with filter OKFlag. It does not return a collection of notification records.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getnotifications&usercode=JOHN
Example Response:
<data><res regname='ProfileVc'></res><ProfileVc><TaskCnt>2</TaskCnt></ProfileVc></data>
| action required | string Value: "action" |
| register required | string Value: "getnotifications" |
| usercode required | string |
Calls the outgoing-payment action ExcPINWClassNoSignOPDo in an updating context for the numeric OPVc number in id.
Returns XML with the helper's error text in res/@errstr and empty res/@newdata. If the helper reports failure with a positive message ID, its localised message is prepended to the error text. Double quotes are removed from the final error attribute. The response contains no bank acceptance or signing status.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=signandsendopdsm&id=10001
Example Response:
<data><res errstr="" newdata=""></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "signandsendopdsm" Operation selector. |
| id required | string Outgoing payment (OPVc) SerNr, converted to a number. |
| regname | string Read and passed by the dispatcher; unused by this handler. |
| usercode | string Optional language selection in the dispatcher; unused by this handler. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
Reads the outgoing payment (OPVc) identified by numeric id and calls the bank-queue validation helper. If the record is missing, errstr contains a localised record-not-found message followed by : and the supplied ID.
Returns XML with res/@errstr containing the error text, with double quotes removed, and empty res/@newdata. An empty errstr means the wrapper received no error text. The validator's separate row number and field name outputs are not included in the response.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=validateopforbank&id=10001
Example Response:
<data><res errstr="" newdata=""></res></data>
| action required | string Value: "action" Action selector. |
| register required | string Value: "validateopforbank" Operation selector. |
| id required | string Outgoing payment (OPVc) SerNr, converted to a number. |
| regname | string Read and passed by the dispatcher; unused by this handler. |
| usercode | string Optional language selection in the dispatcher; unused by this handler. |
| compno | string Optional company code. Omit to use the current company. An invalid code returns XML with res/@errstr="Invalid company code" and empty res/@newdata before the operation runs. |
WebExcellentAPI can be extended with custom actions, registers, and field triggers using HAL extension functions.
These extension points allow partners to add new functionality without modifying the core API code.
Each extension function is a global procedure defined in a HAL file and automatically called by the API when relevant.
| Extension Function | Purpose | Called When |
|---|---|---|
OuterExcellentAPIActions |
Add custom sub-actions | action=action®ister={YourAction} |
OuterExcellentAPIDeleteRecord |
Add custom registers to delete | action=delete®ister={YourRegister} |
OuterExcellentAPIDeleteRow |
Add custom registers to deleterow | action=deleterow |
OuterExcellentAPIInsertRow |
Add custom registers to insertrow | action=insertrow |
OuterExcellentAPIPostText |
Add custom registers to posttext | action=posttext |
OuterExcellentAPIPrint |
Add custom document types | action=document |
OuterExcellentAPIPasteSpecial |
Add custom registers to search | action=pastespecial |
OuterExcellentAPIGetList |
Add custom list types | List queries (no action) |
OuterExcellentAPIWindowActions |
Add custom field triggers | action=windowactions |
Country-specific variants are also supported by appending _EST or _LAT suffix (e.g., OuterExcellentAPIDeleteRecord_EST).
This is the most commonly used extension point. It allows you to add completely new sub-actions to the action=action endpoint.
HAL Signature (6 parameters):
global
procedure OuterExcellentAPIActions(
string type, // Value of register= parameter (the sub-action name)
string empcode, // Employee code from query string
string usercode, // User code from query string
string id, // ID from query string
string err, // Error string
var Boolean outputf // Set to false when you handle the response
)
URL pattern:
POST /WebExcellentAPI.hal?action=action®ister=MyCustomAction&id=12345&usercode=JOHN
Example implementation:
global
procedure OuterExcellentAPIActions(string type, string empcode, string usercode,
string id, string err, var Boolean outputf)
begin
switch (type) begin
case "MyCustomAction":
HandleMyCustomAction(id, usercode);
outputf = false; // false = we handled the output
end;
return;
end;
When outputf is set to false, the extension function is responsible for writing the HTTP response
(e.g., using WebOutString, WebSetContentType, SetHTTPResponseStatus).
Add new registers to the pastespecial action for lookup/search functionality.
URL pattern:
GET /WebExcellentAPI.hal?action=pastespecial®ister=MyRegister&id=searchtext
Add new list types for the list query endpoint (no action parameter).
URL pattern:
GET /WebExcellentAPI.hal?register=MyListType&page=1&perpage=50&search=text
Add custom field trigger logic for registers in the windowactions endpoint.
global procedure (not function)remote updating procedure3-file pattern for database-modifying extensions:
Employee portal operations for Estonian and Latvian payroll. Lists, delete, deleterow, insertrow, document, pastespecial and the seven payroll-specific actions require portalcc=est or portalcc=lat. Window actions route by JSON vcname and installed payroll/localization. Vacation balance, payroll login fields, approver discovery and unokrecord use installed payroll/localization checks.
Omit action to use the list dispatcher. Requires portalcc=est. bfilter accepts comma-separated contract statuses: open, active, suspended, ended. An employee must have a matching contract; returned contracts include all of that employee's contracts. Closed employees are excluded. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EmplVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EmplVc" Use EmplVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| bfilter | string Register-specific filter; see description. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=est. The first comma-separated bfilter value is a target employee code, subject to the handler's employee visibility check. A supplied filter limits selection to one employee. sd and ed are forwarded but unused. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=ContractVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "ContractVc" Use ContractVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
| bfilter | string Register-specific filter; see description. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=est. sd and ed are forwarded. ed limits StartDate. sd starts the managed-department pass; the initial employee/all-absence pass does not assign sd. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=AbsenceVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "AbsenceVc" Use AbsenceVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=est. sd and ed select year/month boundaries. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=WorkedHoursVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "WorkedHoursVc" Use WorkedHoursVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=est. sd and ed select StartDate boundaries. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPShiftSheetVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=est. The first comma-separated bfilter value is a target employee code, subject to employee visibility. Selects confirmed calculations (OKFlag=1) by CalcDate and keeps the highest SerNr for each contract and StartDate month. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=CalcPayrollVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "CalcPayrollVc" Use CalcPayrollVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
| bfilter | string Register-specific filter; see description. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=est. sd and ed select indexed absence-row StartDate boundaries. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=PlanAbsenceVc&portalcc=est&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "PlanAbsenceVc" Use PlanAbsenceVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. bfilter accepts comma-separated contract statuses: active, ended. active means Closed=0 and no EndDate before today. A filter requires a matching contract and excludes closed employees. Returned contracts include all of that employee's contracts. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPEmpVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPEmpVc" Use EPEmpVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| bfilter | string Register-specific filter; see description. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. The first comma-separated bfilter value is a target employee code, subject to employee visibility. Any nonblank bfilter also excludes closed contracts. sd and ed are forwarded but unused. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPContractVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPContractVc" Use EPContractVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
| bfilter | string Register-specific filter; see description. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. sd and ed select StartDate boundaries. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPOffWorkVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPOffWorkVc" Use EPOffWorkVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. sd and ed are forwarded to the timetable list. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPTS2Vc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPTS2Vc" Use EPTS2Vc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. sd and ed select StartDate boundaries. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPShiftSheetVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. The first comma-separated bfilter value is a target employee code, subject to employee visibility. Selects StatusFlag=1 or 4 calculations by StartDate. Without ed the backward scan starts one year after today. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPCalcResVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPCalcResVc" Use EPCalcResVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
| bfilter | string Register-specific filter; see description. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. sd and ed select StartDate boundaries. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPOffWorkPlanVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPOffWorkPlanVc" Use EPOffWorkPlanVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Omit action to use the list dispatcher. Requires portalcc=lat. Returns Code (lowercase value), Name and TimeTr. This handler does not use pagination, search, sorting, employee or date arguments.
Example Request:
GET /WebExcellentAPI.hal?register=EPExtraTimeTableRows&portalcc=lat
Example Response:
<data></data>
| register required | string Value: "EPExtraTimeTableRows" Use EPExtraTimeTableRows. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Omit action to use the list dispatcher. Requires portalcc=lat. sd and ed select StartDate boundaries. This handler populates results only for an administrator and excludes records with a blank DepCode. Results use ; total is the collected count before pagination. Record element names keep register casing; vector field element names are lowercase. empcode establishes employee/department scope; it is not a universal target-employee filter.
Example Request:
GET /WebExcellentAPI.hal?register=EPContrChangeVc&portalcc=lat&usercode=JOHN&empcode=JOHN&page=0&perpage=20&order=ascending
Example Response:
<data page='0' total='0'></data>
| register required | string Value: "EPContrChangeVc" Use EPContrChangeVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| page required | integer Zero-based page number. |
| perpage required | integer Page size; supply a positive value. The dispatcher supplies no default. |
| search | string Search text passed to this register's matching function. |
| sortkey | string HAL record field used by SortRecordArray. |
| order | string Enum: "ascending" "descending" Only ascending selects ascending order; omission selects descending. |
| sd | string Start date, YYYY-MM-DD; handling differs by register as described above. |
| ed | string End date, YYYY-MM-DD; handling differs by register as described above. |
<data page='0' total='0'></data>
Deletes a payroll record. Requires portalcc=est. id is Employee code. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EmplVc&portalcc=est&id=JOHN&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EmplVc" Use EmplVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Employee code. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=est. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=ContractVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "ContractVc" Use ContractVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=est. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=WorkedHoursVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "WorkedHoursVc" Use WorkedHoursVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=est. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPShiftSheetVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=est. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=PlanAbsenceVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "PlanAbsenceVc" Use PlanAbsenceVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=lat. id is Employee code. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPEmpVc&portalcc=lat&id=JOHN&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPEmpVc" Use EPEmpVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Employee code. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=lat. id is ContractNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPContractVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPContractVc" Use EPContractVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string ContractNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=lat. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPTS2Vc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPTS2Vc" Use EPTS2Vc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=lat. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPShiftSheetVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=lat. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPOffWorkPlanVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPOffWorkPlanVc" Use EPOffWorkPlanVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Deletes a payroll record. Requires portalcc=lat. id is Numeric SerNr. Returns when the handler reports no error; otherwise
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=EPContrChangeVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "delete" Use delete. |
| register required | string Value: "EPContrChangeVc" Use EPContrChangeVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Numeric SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex. rowIndex is one zero-based matrix index, passed directly to MatRowDelete. The handler reads one row index; it does not parse a row list. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=deleterow®ister=WorkedHoursVc&portalcc=est&id=10001:0&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "deleterow" Use deleterow. |
| register required | string Value: "WorkedHoursVc" Use WorkedHoursVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex, for example 10001:0. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex. rowIndex is one zero-based matrix index, passed directly to MatRowDelete. The handler reads one row index; it does not parse a row list. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=deleterow®ister=EPShiftSheetVc&portalcc=est&id=10001:0&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "deleterow" Use deleterow. |
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex, for example 10001:0. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex. rowIndex is one zero-based matrix index, passed directly to MatRowDelete. The handler reads one row index; it does not parse a row list. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=deleterow®ister=EPTS2Vc&portalcc=lat&id=10001:0&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "deleterow" Use deleterow. |
| register required | string Value: "EPTS2Vc" Use EPTS2Vc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex, for example 10001:0. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex. rowIndex is one zero-based matrix index, passed directly to MatRowDelete. The handler reads one row index; it does not parse a row list. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=deleterow®ister=EPShiftSheetVc&portalcc=lat&id=10001:0&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "deleterow" Use deleterow. |
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex, for example 10001:0. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex:stp. rowIndex is one zero-based matrix index, passed directly to MatRowInsert. stp is converted to an integer and passed to ClearRow; insertion uses rowIndex as the insertion position. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=insertrow®ister=WorkedHoursVc&portalcc=est&id=10001:0:1&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "insertrow" Use insertrow. |
| register required | string Value: "WorkedHoursVc" Use WorkedHoursVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex:stp, for example 10001:0:1. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex:stp. rowIndex is one zero-based matrix index, passed directly to MatRowInsert. stp is converted to an integer and passed to ClearRow; insertion uses rowIndex as the insertion position. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=insertrow®ister=EPShiftSheetVc&portalcc=est&id=10001:0:1&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "insertrow" Use insertrow. |
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex:stp, for example 10001:0:1. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex:stp. rowIndex is one zero-based matrix index, passed directly to MatRowInsert. stp is converted to an integer and passed to ClearRow; insertion uses rowIndex as the insertion position. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=insertrow®ister=EPTS2Vc&portalcc=lat&id=10001:0:1&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "insertrow" Use insertrow. |
| register required | string Value: "EPTS2Vc" Use EPTS2Vc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex:stp, for example 10001:0:1. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
id=SerNr:rowIndex:stp. rowIndex is one zero-based matrix index, passed directly to MatRowInsert. stp is converted to an integer and passed to ClearRow; insertion uses rowIndex as the insertion position. empcode is stored as LastUpdatedUser. Returns when no error is reported, or a nested error element.
Example Request:
GET /WebExcellentAPI.hal?action=insertrow®ister=EPShiftSheetVc&portalcc=lat&id=10001:0:1&usercode=JOHN&empcode=JOHN
Example Response:
<data></data>
| action required | string Value: "insertrow" Use insertrow. |
| register required | string Value: "EPShiftSheetVc" Use EPShiftSheetVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr:rowIndex:stp, for example 10001:0:1. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Payslip. id is the calculation SerNr; the calculation's contract must belong to empcode, or the caller must pass the administrator check. The response contains a filename and Base64 document data. Language comes from resolved user settings. A failed lookup or unmet condition can leave the file data empty.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=CalcPayrollVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><file><name></name><base64></base64></file></data>
| action required | string Value: "document" Use document. |
| register required | string Value: "CalcPayrollVc" Use CalcPayrollVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data><file><name></name><base64></base64></file></data>
Payslip. id is SerNr; available to its employee or an administrator. Uses an enabled external EPCalcResForm, otherwise EPCalcListForm. The response contains a filename and Base64 document data. Language comes from resolved user settings. A failed lookup or unmet condition can leave the file data empty.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=EPCalcResVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><file><name></name><base64></base64></file></data>
| action required | string Value: "document" Use document. |
| register required | string Value: "EPCalcResVc" Use EPCalcResVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data><file><name></name><base64></base64></file></data>
Timetable PDF. id is SerNr. The employee must occur on a timetable row or manage the timetable's department. The response contains a filename and Base64 document data. Language comes from resolved user settings. A failed lookup or unmet condition can leave the file data empty.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=EPTS2Vc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><file><name></name><base64></base64></file></data>
| action required | string Value: "document" Use document. |
| register required | string Value: "EPTS2Vc" Use EPTS2Vc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data><file><name></name><base64></base64></file></data>
Contract PDF. id is ContractNr. Available to the employee, an administrator, or a manager of its current department. Requires an enabled external EPContractForm. The response contains a filename and Base64 document data. Language comes from resolved user settings. A failed lookup or unmet condition can leave the file data empty.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=EPContractVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><file><name></name><base64></base64></file></data>
| action required | string Value: "document" Use document. |
| register required | string Value: "EPContractVc" Use EPContractVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string ContractNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data><file><name></name><base64></base64></file></data>
Planned-absence PDF. id is SerNr. Available to the employee, an administrator, or a manager of its department. Requires an enabled external EPOffWorkPlanForm. The response contains a filename and Base64 document data. Language comes from resolved user settings. A failed lookup or unmet condition can leave the file data empty.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=EPOffWorkPlanVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><file><name></name><base64></base64></file></data>
| action required | string Value: "document" Use document. |
| register required | string Value: "EPOffWorkPlanVc" Use EPOffWorkPlanVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string SerNr. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data><file><name></name><base64></base64></file></data>
Passes the URL-decoded id search text to the shared lookup with a limit of 50; outputs matching payroll records in a data wrapper. Employee lookup resolves codes; EST contracts use SerNr and LAT contracts use ContractNr.
Example Request:
GET /WebExcellentAPI.hal?action=pastespecial®ister=EmplVc&portalcc=est&id=JOHN
Example Response:
<data></data>
| action required | string Value: "pastespecial" Use pastespecial. |
| register required | string Value: "EmplVc" Use EmplVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Lookup search text. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Passes the URL-decoded id search text to the shared lookup with a limit of 50; outputs matching payroll records in a data wrapper. Employee lookup resolves codes; EST contracts use SerNr and LAT contracts use ContractNr.
Example Request:
GET /WebExcellentAPI.hal?action=pastespecial®ister=ContractVc&portalcc=est&id=JOHN
Example Response:
<data></data>
| action required | string Value: "pastespecial" Use pastespecial. |
| register required | string Value: "ContractVc" Use ContractVc. |
| portalcc required | string Value: "est" Payroll extension selector; required for this route. |
| id required | string Lookup search text. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Passes the URL-decoded id search text to the shared lookup with a limit of 50; outputs matching payroll records in a data wrapper. Employee lookup resolves codes; EST contracts use SerNr and LAT contracts use ContractNr.
Example Request:
GET /WebExcellentAPI.hal?action=pastespecial®ister=EPEmpVc&portalcc=lat&id=JOHN
Example Response:
<data></data>
| action required | string Value: "pastespecial" Use pastespecial. |
| register required | string Value: "EPEmpVc" Use EPEmpVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Lookup search text. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Passes the URL-decoded id search text to the shared lookup with a limit of 50; outputs matching payroll records in a data wrapper. Employee lookup resolves codes; EST contracts use SerNr and LAT contracts use ContractNr.
Example Request:
GET /WebExcellentAPI.hal?action=pastespecial®ister=EPContractVc&portalcc=lat&id=JOHN
Example Response:
<data></data>
| action required | string Value: "pastespecial" Use pastespecial. |
| register required | string Value: "EPContractVc" Use EPContractVc. |
| portalcc required | string Value: "lat" Payroll extension selector; required for this route. |
| id required | string Lookup search text. |
| empcode | string Requester's employee code; used by the payroll handler. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data></data>
Reads id as PlanAbsenceVc.SerNr (EST) or EPOffWorkPlanVc.SerNr (LAT), calls the country's plan-to-order-document helper and returns EPOrderDocVc.SerNr in res/@newdata. A missing source can leave newdata empty.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=orderdocfromoffworkplan&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res errstr="" newdata='10001'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "orderdocfromoffworkplan" Use orderdocfromoffworkplan. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| id required | string Source record number. |
<data><res errstr="" newdata='10001'></res></data>
Reads id as PlanAbsenceVc.SerNr (EST) or EPOffWorkPlanVc.SerNr (LAT), calls the country's conversion helper and returns AbsenceVc.SerNr (EST) or EPOffWorkVc.SerNr (LAT) in res/@newdata.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=offworkfromoffworkplan&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res errstr="" newdata='10001'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "offworkfromoffworkplan" Use offworkfromoffworkplan. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| id required | string Source record number. |
<data><res errstr="" newdata='10001'></res></data>
id is shiftSerNr or shiftSerNr:rowIndex. The optional row index is passed to the country's timetable-population helper. Inserts WorkedHoursVc (EST) or EPTS2Vc (LAT) if the generated matrix has rows, then returns its SerNr in res/@newdata. An empty generated matrix returns empty newdata.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=timetablefromshiftsheet&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res errstr="" newdata='10001'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "timetablefromshiftsheet" Use timetablefromshiftsheet. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| id required | string Shift SerNr with optional :rowIndex. |
<data><res errstr="" newdata='10001'></res></data>
id is EPShiftSheetVc.SerNr. Returns a comma-separated list of connected WorkedHoursVc (EST) or EPTS2Vc (LAT) numbers in res/@newdata. Returns an empty newdata when no numbers are collected.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=gettimetablelist&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res newdata='10001'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "gettimetablelist" Use gettimetablelist. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| id required | string Source record number. |
<data><res newdata='10001'></res></data>
id is the source EPShiftSheetVc.SerNr. Stores a copy with a new SerNr, PlanFlag=0 and OKFlag=0; returns the new number in res/@newdata. A missing source leaves newdata empty.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=copyshiftsheet&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res newdata='10001'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "copyshiftsheet" Use copyshiftsheet. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| id required | string Source record number. |
<data><res newdata='10001'></res></data>
With timetablenr, reads the timetable's distinct contracts and calculates day codes for sd to ed. With no timetablenr, reads shiftnr, refreshes absence day codes and missing contract rows, and updates the saved shift sheet. LAT also recalculates NormalHours. This call can change stored data. The response uses EPShiftSheetVc/rows; timetable results contain ContractNr and Day1 through Day32. The shift-sheet branch emits an empty rows element after its update.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getoffwork&portalcc=est&shiftnr=10001&sd=2026-01-01&ed=2026-01-31
Example Response:
<data><res regname='EPShiftSheetVc'></res><EPShiftSheetVc><rows></rows></EPShiftSheetVc></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "getoffwork" Use getoffwork. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| sd required | string Start date, YYYY-MM-DD. |
| ed required | string End date, YYYY-MM-DD. |
| shiftnr | string EPShiftSheetVc.SerNr; used when timetablenr is blank. |
| timetablenr | string WorkedHoursVc.SerNr (EST) or EPTS2Vc.SerNr (LAT); takes precedence over shiftnr. |
<data><res regname='EPShiftSheetVc'></res><EPShiftSheetVc><rows></rows></EPShiftSheetVc></data>
offempcode is a contract number: ContractVc.SerNr (EST) or EPContractVc.ContractNr (LAT). Both countries return EPOffWorkVc containing vacdays (balance) and useddays (days for the supplied period). EST uses an inclusive calendar-day difference and its balance as of ed; group is passed in but unused. LAT calculates the balance at sd and days from the off-work group's rules/time class; group is the off-work group code.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=calculateoffwork&portalcc=est&offempcode=10001&sd=2026-01-01&ed=2026-01-03
Example Response:
<data><res regname='EPOffWorkVc'></res><EPOffWorkVc><vacdays>0</vacdays><useddays>3</useddays></EPOffWorkVc></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "calculateoffwork" Use calculateoffwork. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| offempcode required | string Contract number, despite the parameter name. |
| group | string LAT off-work group; unused in EST. |
| sd required | string Start date, YYYY-MM-DD. |
| ed required | string End date, YYYY-MM-DD. |
<data><res regname='EPOffWorkVc'></res><EPOffWorkVc><vacdays>0</vacdays><useddays>3</useddays></EPOffWorkVc></data>
Selects payroll by ExcUseLATPayroll and HasLocalization(EST), independently of portalcc. empcode is the target employee. An administrator may view it; otherwise usercode must resolve to that employee or a manager of the target's department. Access denial returns res/@errstr. If the employee or current valid contract is absent, returns only res within data.
VacationBalanceVc fields: fiscalYearPeriod (YYYY-MM-DD - YYYY-MM-DD), allowance, carriedOver, daysTaken, available, additionalVacationDays. Numeric fields are formatted with a decimal point. EST uses the whole current calendar year: allowance and daysTaken come from the year's balance row, carriedOver sums earlier rows, available=allowance+carriedOver-daysTaken; additionalVacationDays is a separate positive additional-day allowance. LAT reports January 1 through today: carriedOver is the contract's AccVac, additionalVacationDays is earned additional days minus additional days used, and available excludes that additional-day balance.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getvacationbalance&empcode=JOHN&usercode=JOHN
Example Response:
<data><res regname='VacationBalanceVc'></res><VacationBalanceVc><fiscalYearPeriod>2026-01-01 - 2026-12-31</fiscalYearPeriod><allowance>28</allowance><carriedOver>0</carriedOver><daysTaken>0</daysTaken><available>28</available><additionalVacationDays>0</additionalVacationDays></VacationBalanceVc></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "getvacationbalance" Use getvacationbalance. |
| empcode required | string Target employee code. |
| usercode required | string Portal user used for the employee/manager access check. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<data><res regname='VacationBalanceVc'></res><VacationBalanceVc><fiscalYearPeriod>2026-01-01 - 2026-12-31</fiscalYearPeriod><allowance>28</allowance><carriedOver>0</carriedOver><daysTaken>0</daysTaken><available>28</available><additionalVacationDays>0</additionalVacationDays></VacationBalanceVc></data>
Supports EST PlanAbsenceVc, LAT EPOffWorkPlanVc and EPShiftSheetVc in both countries. portalcc chooses the plan/shift extension. A plan overlapping a shift can set message. Returns DummyVc with hasapprovals, cancancel, approvalstatus, message and approvaldate.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=checkapprovalstatus&portalcc=est®name=PlanAbsenceVc&id=10001&usercode=JOHN
Example Response:
<data><res errstr='' regname='DummyVc'></res><DummyVc><hasapprovals>0</hasapprovals><cancancel>0</cancancel><approvalstatus>0</approvalstatus><message></message><approvaldate></approvaldate></DummyVc></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "checkapprovalstatus" Use checkapprovalstatus. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "PlanAbsenceVc" "EPOffWorkPlanVc" "EPShiftSheetVc" EST plan: PlanAbsenceVc; LAT plan: EPOffWorkPlanVc; either country: EPShiftSheetVc. id is SerNr. |
| id required | string Record SerNr. |
<data><res errstr='' regname='DummyVc'></res><DummyVc><hasapprovals>0</hasapprovals><cancancel>0</cancancel><approvalstatus>0</approvalstatus><message></message><approvaldate></approvaldate></DummyVc></data>
Supports EST PlanAbsenceVc, LAT EPOffWorkPlanVc and EPShiftSheetVc in both countries. Calls the record's approval-request handler after the shared eligibility check. The payroll handlers suppress the dispatcher's generic response; the shared approval wrapper emits res/@errstr without newdata.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=sendforapproval&portalcc=lat®name=EPOffWorkPlanVc&id=10001&usercode=JOHN
Example Response:
<data><res errstr=''></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "sendforapproval" Use sendforapproval. |
| portalcc required | string Enum: "est" "lat" Payroll extension selector; required for this route. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "PlanAbsenceVc" "EPOffWorkPlanVc" "EPShiftSheetVc" EST plan: PlanAbsenceVc; LAT plan: EPOffWorkPlanVc; either country: EPShiftSheetVc. id is SerNr. |
| id required | string Record SerNr. |
<data><res errstr=''></res></data>
Supports EST PlanAbsenceVc, LAT EPOffWorkPlanVc and EPShiftSheetVc. Uses the installed LAT payroll check (otherwise EST), independently of portalcc. Discovers linked approval activities, keeps the latest activity per user, and returns PersonVc rows with Name, Status (integer state), UserCode, canreject, canapprove, cansign and SerNr (activity number).
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getapprovalpersons®name=PlanAbsenceVc&id=10001&usercode=JOHN
Example Response:
<data><res regname='PersonVc'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "getapprovalpersons" Use getapprovalpersons. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "PlanAbsenceVc" "EPOffWorkPlanVc" "EPShiftSheetVc" EST plan: PlanAbsenceVc; LAT plan: EPOffWorkPlanVc; either country: EPShiftSheetVc. id is SerNr. |
| id required | string Payroll record SerNr. |
<data><res regname='PersonVc'></res></data>
Payroll registers: EST EmplVc, ContractVc, PlanAbsenceVc, WorkedHoursVc; LAT EPEmpVc, EPContractVc, EPOffWorkPlanVc, EPContrChangeVc, EPTS2Vc. EPShiftSheetVc is handled by the shared attachment/record-link code. Employee IDs are codes; EST ContractVc uses SerNr, LAT EPContractVc uses ContractNr; plans, absences, shifts and EST timetables use SerNr. LAT EPTS2Vc is a dispatch case, but the resolver assigns id to ShiftSerNr before ReadFirstMain; successful targeting requires developer verification. Country-specific attachment and record-link resolution selects LAT only for portalcc=lat, otherwise EST. Lists AttachVc rows containing UUID, Name and Size. AbsenceVc/EPOffWorkVc are not implemented by the payroll attachment-list extensions.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getattachlist&portalcc=est®name=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res regname='AttachVc'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "getattachlist" Use getattachlist. |
| portalcc | string Enum: "est" "lat" lat selects LAT; otherwise the shared resolver uses EST. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "EPShiftSheetVc" Payroll register; see the country-specific support and EPTS2Vc limitation above. |
| id required | string Record identity described above. |
<data><res regname='AttachVc'></res></data>
Payroll registers: EST EmplVc, ContractVc, PlanAbsenceVc, WorkedHoursVc; LAT EPEmpVc, EPContractVc, EPOffWorkPlanVc, EPContrChangeVc, EPTS2Vc; also EST AbsenceVc and LAT EPOffWorkVc. EPShiftSheetVc is handled by the shared attachment/record-link code. Employee IDs are codes; EST ContractVc uses SerNr, LAT EPContractVc uses ContractNr; plans, absences, shifts and EST timetables use SerNr. LAT EPTS2Vc is a dispatch case, but the resolver assigns id to ShiftSerNr before ReadFirstMain; successful targeting requires developer verification. Country-specific attachment and record-link resolution selects LAT only for portalcc=lat, otherwise EST. Reads XML file/filename and file/base64 from the request body and links the decoded file to the record. The dispatcher returns its generic empty errstr/newdata response.
Example Request:
POST /WebExcellentAPI.hal?action=action®ister=doupload&portalcc=est®name=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN
Content-Type: application/xml
<file><filename>document.txt</filename><base64>SGVsbG8=</base64></file>
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "doupload" Use doupload. |
| portalcc | string Enum: "est" "lat" lat selects LAT; otherwise the shared resolver uses EST. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "AbsenceVc" "EPOffWorkVc" "EPShiftSheetVc" Payroll register; see the country-specific support and EPTS2Vc limitation above. |
| id required | string Record identity described above. |
<file><filename>document.txt</filename><base64>SGVsbG8=</base64></file>
<data><res errstr="" newdata=''></res></data>
Payroll registers: EST EmplVc, ContractVc, PlanAbsenceVc, WorkedHoursVc; LAT EPEmpVc, EPContractVc, EPOffWorkPlanVc, EPContrChangeVc, EPTS2Vc; also EST AbsenceVc and LAT EPOffWorkVc. EPShiftSheetVc is handled by the shared attachment/record-link code. Employee IDs are codes; EST ContractVc uses SerNr, LAT EPContractVc uses ContractNr; plans, absences, shifts and EST timetables use SerNr. LAT EPTS2Vc is a dispatch case, but the resolver assigns id to ShiftSerNr before ReadFirstMain; successful targeting requires developer verification. Country-specific attachment and record-link resolution selects LAT only for portalcc=lat, otherwise EST. file is the attachment UUID. Returns Base64 data in data/file when found; otherwise no file element.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getfile&portalcc=est®name=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN&file=00000000-0000-4000-8000-000000000001
Example Response:
<data><res></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "getfile" Use getfile. |
| portalcc | string Enum: "est" "lat" lat selects LAT; otherwise the shared resolver uses EST. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "AbsenceVc" "EPOffWorkVc" "EPShiftSheetVc" Payroll register; see the country-specific support and EPTS2Vc limitation above. |
| id required | string Record identity described above. |
| file required | string Attachment UUID. |
<data><res></res></data>
Payroll registers: EST EmplVc, ContractVc, PlanAbsenceVc, WorkedHoursVc; LAT EPEmpVc, EPContractVc, EPOffWorkPlanVc, EPContrChangeVc, EPTS2Vc; also EST AbsenceVc and LAT EPOffWorkVc. EPShiftSheetVc is handled by the shared attachment/record-link code. Employee IDs are codes; EST ContractVc uses SerNr, LAT EPContractVc uses ContractNr; plans, absences, shifts and EST timetables use SerNr. LAT EPTS2Vc is a dispatch case, but the resolver assigns id to ShiftSerNr before ReadFirstMain; successful targeting requires developer verification. Country-specific attachment and record-link resolution selects LAT only for portalcc=lat, otherwise EST. file is the attachment UUID; removes its record link. Response uses res/@err.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=deleteattachment&portalcc=est®name=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN&file=00000000-0000-4000-8000-000000000001
Example Response:
<data><res err=''></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "deleteattachment" Use deleteattachment. |
| portalcc | string Enum: "est" "lat" lat selects LAT; otherwise the shared resolver uses EST. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "AbsenceVc" "EPOffWorkVc" "EPShiftSheetVc" Payroll register; see the country-specific support and EPTS2Vc limitation above. |
| id required | string Record identity described above. |
| file required | string Attachment UUID. |
<data><res err=''></res></data>
Payroll registers: EST EmplVc, ContractVc, PlanAbsenceVc, WorkedHoursVc; LAT EPEmpVc, EPContractVc, EPOffWorkPlanVc, EPContrChangeVc, EPTS2Vc; also EST AbsenceVc and LAT EPOffWorkVc. EPShiftSheetVc is handled by the shared attachment/record-link code. Employee IDs are codes; EST ContractVc uses SerNr, LAT EPContractVc uses ContractNr; plans, absences, shifts and EST timetables use SerNr. LAT EPTS2Vc is a dispatch case, but the resolver assigns id to ShiftSerNr before ReadFirstMain; successful targeting requires developer verification. Country-specific attachment and record-link resolution selects LAT only for portalcc=lat, otherwise EST. Returns LinkVc rows with ID, VcName, Comment, Users, Size and CompNr. If the payroll resolver returns no record ID, the shared code falls back to ConstructRecordIDString.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getrecordlinks&portalcc=est®name=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN
Example Response:
<data><res regname='LinkVc'></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "getrecordlinks" Use getrecordlinks. |
| portalcc | string Enum: "est" "lat" lat selects LAT; otherwise the shared resolver uses EST. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "AbsenceVc" "EPOffWorkVc" "EPShiftSheetVc" Payroll register; see the country-specific support and EPTS2Vc limitation above. |
| id required | string Record identity described above. |
<data><res regname='LinkVc'></res></data>
Supports EST PlanAbsenceVc and AbsenceVc, and LAT EPOffWorkVc. Clears OKFlag through RecordUpdate. EST AbsenceVc can be unconfirmed only when CalcSerNr<=0. The supplied user's access group must allow EXCUnOKAll or UnOKAll. Selects the installed payroll/localization, independently of portalcc. Returns res/@errstr and res/@newdata; an unperformed update retains the default error.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=unokrecord®name=PlanAbsenceVc&id=10001&usercode=JOHN
Example Response:
<data><res errstr="" newdata=''></res></data>
| action required | string Value: "action" Use action. |
| register required | string Value: "unokrecord" Use unokrecord. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "PlanAbsenceVc" "AbsenceVc" "EPOffWorkVc" Payroll register. |
| id required | string SerNr. |
<data><res errstr="" newdata=''></res></data>
POST plain JSON. Routes by vcname and installed payroll/localization, independently of portalcc. __new prepares defaults; __copy loads the source identified by JSON id and applies record-duplication logic.
| Payroll | vcname | fieldname triggers |
|---|---|---|
| EST | EmplVc | TaxCode, IDCode, __new, __copy |
| EST | AbsenceVc | ContrSerNr, StartDate, EndDate, AbsTypeCode, Period1, Period2, PrevAbsSerNr, __new |
| EST | PlanAbsenceVc | ContrSerNr, StartDate1, EndDate1, AbsTypeCode, __new, __copy |
| LAT | EPEmpVc | StrCode, MarriageDate, BirthDate, TaxGroup, TaxGroupRow, __new, __copy |
| LAT | EPOffWorkVc | EmpCode, ContractNr, Group, StartDate, EndDate, __new |
| LAT | EPOffWorkPlanVc | EmpCode, ContractNr, __new, __copy |
| Shared | EPOrderDocVc | ShortSign, OrdType, LTxtCode, FilterType, FilterString, EmpCodeRow, __new, __copy |
Header values are hydrated from values.header for the requested headerfields. PlanAbsenceVc hydrates only values.rows[0] for requested rowfields; its field triggers use rowindex. The other five country-specific payroll handlers do not hydrate existing matrix values from values.rows. EPOrderDocVc is handled by the shared dispatcher; it hydrates every supplied values.rows entry (stp defaults to 1), and its employee-fill/paste actions use installed payroll/localization. Datatype 2 parses a date; 5, 12 and 15 parse decimal values; other values are passed as strings. EPOrderDocVc also handles datatype 9 as text, converting literal \n to carriage returns. Responses are JSON with success, res, record and optional messages/field controls. Legacy encrypted=true accepts reversed Base64 text (reverse first, then Base64-decode).
Example Request:
POST /WebExcellentAPI.hal?action=windowactions&usercode=JOHN
Content-Type: application/json
{"vcname":"EmplVc","fieldname":"__new","headerfields":"Code:1","rowfields":"","values":{"header":{}}}
Example Response:
{"success":true,"res":true,"record":{"Code":""},"activeFields":{"headerFields":true,"matrixFields":true,"exceptionHeaderList":"","exceptionMatrixList":""}}
| action required | string Value: "windowactions" Use windowactions. |
| usercode | string Portal user code used to resolve access and language. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| encrypted | string Value: "true" Only true activates legacy reversed-Base64 decoding. |
| vcname required | string Enum: "EmplVc" "AbsenceVc" "PlanAbsenceVc" "EPEmpVc" "EPOffWorkVc" "EPOffWorkPlanVc" "EPOrderDocVc" |
| fieldname required | string One of the triggers for vcname in the table. |
| value | string New field value; dates use YYYY-MM-DD and decimal values use a point. |
| rowindex | integer Default: -1 -1 for a header field; zero-based matrix index for row fields. |
| headerfields | string Comma-separated FieldName:datatype entries; controls header hydration and returned fields. |
| rowfields | string Comma-separated FieldName:datatype entries; controls row fields and the changed row field's conversion. |
| id | string Source record ID for __copy: employee code, plan SerNr or order-document SerNr. |
object |
{- "vcname": "EmplVc",
- "fieldname": "__new",
- "headerfields": "Code:1",
- "rowfields": "",
- "values": {
- "header": { }
}
}{ }action=login includes contractnr, depcode and empcode directly inside res. The employee is found by usercode; contractnr is the first valid contract (EST SerNr or LAT ContractNr), and depcode is the resolved department. The fields can be empty. Payroll user-data selection uses installed LAT payroll and EST localization, independently of portalcc.
Within supported, both payroll variants emit timetablesfromshiftrows=yes and gettimetablelist=yes. portalcc=lat selects the LAT capability branch and adds contractchanges=yes; otherwise the EST capability branch is used. Shared capabilities include sendemail, usesessions, hasnotifications, createslinvoicefromorder, approvalrules, unok and haspagination, all emitted as yes. nonewtimetables=yes is conditional on the portal setting; hassigning=yes is conditional on signing being enabled. The example shows only the payroll portion of the larger res response.
Example Request:
GET /WebExcellentAPI.hal?action=login&usercode=JOHN&portalcc=lat
Example Response:
<res><contractnr>10001</contractnr><depcode>DEPT</depcode><empcode>JOHN</empcode><supported><contractchanges>yes</contractchanges><timetablesfromshiftrows>yes</timetablesfromshiftrows><gettimetablelist>yes</gettimetablelist></supported></res>
| action required | string Value: "login" Use login. |
| usercode required | string User code used to look up the linked payroll employee. |
| portalcc | string Enum: "est" "lat" Selects the supported capability branch: lat, otherwise EST. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
<res><contractnr>10001</contractnr><depcode>DEPT</depcode><empcode>JOHN</empcode><supported><contractchanges>yes</contractchanges><timetablesfromshiftrows>yes</timetablesfromshiftrows><gettimetablelist>yes</gettimetablelist></supported></res>
Resolves source regname/id and target toRegName/toRecordId using the same payroll record-ID resolver as getrecordlinks. EST employees use Code, contracts/timetables/plans/absences use SerNr; LAT employees use EmpCode, contracts use ContractNr and plans/contract changes/absences use SerNr. LAT EPTS2Vc resolver assigns ShiftSerNr before ReadFirstMain; targeting requires developer verification. Shared resolution falls back to ConstructRecordIDString when no payroll record ID is returned. Country selection is LAT for portalcc=lat, otherwise EST. Creates links in both directions and flushes the database; blank identifiers or equal source/target IDs skip creation. This handler emits no body.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createrecordlink&portalcc=est®name=PlanAbsenceVc&id=10001&toRegName=ContractVc&toRecordId=10002
Example Response: Empty body.
| action required | string Value: "action" Use action. |
| register required | string Value: "createrecordlink" Use createrecordlink. |
| portalcc | string Enum: "est" "lat" lat selects LAT; otherwise the shared resolver uses EST. |
| usercode | string Portal user code used to resolve access and language. |
| empcode | string Requester's employee code; used by the payroll handler. |
| compno | string Optional company code; an invalid code returns res/@errstr. |
| regname required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "AbsenceVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "EPOffWorkVc" "EPShiftSheetVc" Source register. |
| id required | string Source record identity. |
| toRegName required | string Enum: "EmplVc" "ContractVc" "PlanAbsenceVc" "WorkedHoursVc" "AbsenceVc" "EPEmpVc" "EPContractVc" "EPOffWorkPlanVc" "EPContrChangeVc" "EPTS2Vc" "EPOffWorkVc" "EPShiftSheetVc" Target register. |
| toRecordId required | string Target record identity. |