WebExcellentAPI - Portal API (1.0.2.3)

Download OpenAPI specification:

Action-based Web API for Excellent Books ERP Portal operations.

How This API Works

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}

Base URL Example

https://your-server:port/WebExcellentAPI.hal

Authentication

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&register=INVc&id=laptop" \
  -H "Cookie: HSESSION=CC1AC3C5-DAC9C590-DA4FD41F-1E820CB7-C1713CC8"

See REST API documentation for full session configuration details.

Response Format

  • Response format depends on the operation: record operations commonly return XML; metadata, access-rights and field-action handlers return JSON.
  • XML results commonly use <data> or <res>. Reports are emitted inside <report> with a <lang> element.
  • Error locations vary: record/row deletion uses <error>, action results commonly use res/@errstr, and attachment deletion uses res/@err.

Quick Reference - Example URLs

Authentication

?action=login
?action=deactivate&usercode=API

Record Operations

?action=delete&register=IVVc&id=12345
?action=deleterow&register=IVVc&id=12345:2,3        (id format: {SerNr}:{rows})
?action=insertrow&register=IVVc&id=10001:0:1       (id format: {recordId}:{zeroBasedIndex}:{stp})
?action=posttext&register=MailVc&id=12345  (POST with body)

Document Generation

?action=document&register=IVVc&id=10001
?action=document&register=ORVc&id=10001

Attachments (action=action with sub-action in register)

?action=action&register=doupload&regname=IVVc&id=12345  (POST with file)
?action=action&register=getattachlist&regname=IVVc&id=12345
?action=action&register=getfile&regname=IVVc&id=12345&file={uuid}
?action=action&register=deleteattachment&regname=IVVc&id=12345&file={uuid}

Approvals

?action=action&register=checkapprovalstatus&regname=ActVc&id=12345
?action=action&register=sendforapproval&regname=IVVc&id=12345
?action=action&register=approveactivity&id=12345&usercode=JOHN
?action=action&register=rejectactivity&id=12345&usercode=JOHN
?action=action&register=cancelapproval&regname=IVVc&id=12345
?action=action&register=getapprovalpersons&regname=IVVc&id=12345&usercode=JOHN

Digital Signing (Dokobit)

?action=action&register=createsigningactivity&regname=ORVc&id=12345
?action=action&register=createsigningsess&id=12345
?action=action&register=startsigning&id=12345
?action=action&register=cancelsigning&id=12345&regname=ActVc
?action=action&register=signactivity&usercode=JOHN&id=99001
?action=action&register=getcontactpersons&usercode=JOHN&id=99001

Activities & Tasks

?action=action&register=getactivitydata&id=12345
?action=action&register=getcomments&id=12345
?action=action&register=addcomment&id=12345  (POST with comment)
?action=action&register=settaskdescription&id=12345  (POST with text)
?action=action&register=linktosourcerecord&id=99001&sourceRegName=IVVc&sourceRecordId=10001
?action=pastespecial&register=INVc&id=laptop
?action=pastespecial&register=CUVc&id=acme&compno=2
?action=pastespecial&register=AllCUVc&id=john
?action=action&register=getcustomercontactpersons&id=ACME
?action=action&register=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).

Field Triggers (windowactions)

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)

List Queries (no action parameter)

?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.

Reports

POST /WebExcellentAPI.hal?action=report&usercode=JOHN
Content-Type: application/json

{"reportwindow": "QTHistoryRClass", "repname": "QTHstRn", "spec": {"sStartDate": "2026-01-01", "sEndDate": "2026-01-31"}}

Employee Portal

?action=action&register=getemployeeinfo&id=EMP001&empcode=MANAGER01&portalcc=est
?action=action&register=getvacationbalance&empcode=EMP001
?action=action&register=getemptimeplan&empcode=EMP001&portalcc=est&sd=2024-01-01&ed=2024-01-31
?action=action&register=getemptimeplannewformat&empcode=EMP001&portalcc=est&sd=2025-01-01&ed=2025-01-31
?action=action&register=createrecordfromdocument&id=10001
?action=action&register=getcustomerstatusrecords&id=ACME
?action=action&register=getadminusers&portalcc=est

Utilities

?action=action&register=getportalusers
?action=action&register=getallusers
?action=action&register=getnotifications&usercode=JOHN
?action=action&register=getdashboardkpi
?action=action&register=copyrecord&regname=IVVc&id=12345
?action=action&register=unokrecord&regname=IVVc&id=12345&usercode=JOHN
?action=action&register=getbilinks&usercode=JOHN
?action=action&register=getactivitytypes
?action=action&register=validateopforbank&id=50001&usercode=JOHN
?action=action&register=signandsendopdsm&id=50001&usercode=JOHN

Global Parameters

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&register=INVc&id=laptop&compno=2
?action=action&register=getattachlist&regname=IVVc&id=12345&compno=3

Authentication

Login and session management operations.

Actions: login, deactivate

Login and get system info

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Deactivate Excellent Portal for the current company

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"}
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Records

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.

Delete a record

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&register=IVVc&id=10001

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete rows from record

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&register=IVVc&id=10001:0,2

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Insert new row into record

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&register=IVVc&id=10001:0:1

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Post text content to record

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&register=MailVc&id=10001
Content-Type: application/x-www-form-urlencoded

set_field.Math=Example%20description

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "posttext"
register
required
string
Enum: "MailVc" "EPOrderDocVc"
id
required
string
Request Body schema: application/x-www-form-urlencoded
required
set_field.Math
string

Text content.

Responses

Response samples

Content type
application/xml
<data></data>

Documents

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.

Generate document PDF

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&register=IVVc&id=10001

Example Response:

<data><file><name>DOCUMENT_10001.pdf</name><base64>BASE64_PDF</base64></file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "document"
register
required
string
Enum: "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" "COVc" "SVOVc" "WSVc"
id
required
string

Responses

Attachments

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.

Upload file attachment

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&register=doupload&regname=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Request Body schema: application/xml
required
filename
string
base64
string

Base64-encoded file content

Responses

List attachments for record

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&register=getattachlist&regname=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Download attachment

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&register=getfile&regname=IVVc&id=10001&file=00000000-0000-0000-0000-000000000001

Example Response:

<data><res></res><file>BASE64_FILE</file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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

Responses

Approvals

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.

Check approval status

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&register=checkapprovalstatus&regname=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>
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "checkapprovalstatus"
regname
required
string
Enum: "ActVc" "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" "OPVc"
id
required
string

Responses

Submit record for approval

Submits a record to the approval workflow.

Supported registers: IVVc, VIVc, ORVc, QTVc, ActVc, EPOrderDocVc, OPVc

Example Request:

GET /WebExcellentAPI.hal?action=action&register=sendforapproval&regname=IVVc&id=12345
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "sendforapproval"
regname
required
string
Enum: "IVVc" "VIVc" "ORVc" "QTVc" "ActVc" "EPOrderDocVc" "OPVc"
id
required
string

Responses

Approve a record

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&register=approveactivity&id=10001&usercode=JOHN

Example Response:

<data><res errstr="" newdata=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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

Responses

Reject a record

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&register=rejectactivity&id=10001&usercode=JOHN

Example Response:

<data><res errstr="" newdata=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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

Responses

Get approval persons for a record

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&register=getapprovalpersons&regname=IVVc&id=10001&usercode=JOHN

The example response shows an empty list.

Example Response:

<data><res regname="PersonVc"></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Signing

Digital signing operations. createsigningactivity is a placeholder: its creation block is disabled in production. startsigning initializes eligible activities but returns no URL in newdata.

Signing activity creation placeholder

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&register=createsigningactivity&regname=ORVc&id=10001

Example Response:

<data><res newdata='0'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Start signing process

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&register=startsigning&id=10001

Example Response:

<data><res errstr="" newdata=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get signing contact persons for an activity

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get a Dokobit signing link for an activity

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&register=signactivity&usercode=JOHN&id=10001

Example Response:

<data><res errstr="" newdata="https://SIGNING-SERVER/signing/SESSION-ID"></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Activities

Activity and task management operations.

Sub-actions (via action=action):

  • getactivitydata - Get activity details
  • getcomments - Get activity comments
  • addcomment - Add comment to activity
  • settaskdescription - Update task description
  • getactivitytypes - List available activity types

Link an activity to a source record

When 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&register=linktosourcerecord&id=10001&sourceRegName=IVVc&sourceRecordId=10002

Example Response:

<data><res></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Lookups

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.

Search records (paste special)

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Execute field change logic (Field Triggers)

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": []}}
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Request Body schema:
required

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)

Responses

Request samples

Content type
{
  • "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": {
    },
  • "sourceRegister": "ORVc",
  • "sourceRecordId": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "res": true,
  • "messages": [
    ],
  • "record": {
    },
  • "activeFields": {
    },
  • "rules": [
    ]
}

Get active/editable fields

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


Request Body Structure (plain JSON)

{
  "vcname": "ORVc",
  "id": "12345"
}

Per-Register Behavior

ORVc (Sales Order)

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.

CUVc (Contact)

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 Structure

Response includes:

  • success - Always true for successful response
  • res - Operation result
  • activeFields - Field editability flags
    • headerFields - Whether header fields are editable (default: true)
    • matrixFields - Whether row fields are editable (default: true)
    • exceptionHeaderList - Comma-separated list of locked header fields
    • exceptionMatrixList - Comma-separated list of locked row fields
  • rules - 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"}
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "activeeditfields"
encrypted
string
Enum: "true" "false"

Enables legacy reversed Base64 input only when the value is true.

Request Body schema:
required

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.

Responses

Request samples

Content type
{
  • "vcname": "ORVc",
  • "id": "string"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "res": true,
  • "activeFields": {
    },
  • "rules": [
    ]
}

Get contact persons for a customer

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get item stock by location

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Lists

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.

List records with pagination

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

List open accounts receivable (ARVc)

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 number
  • officialsernr - Official serial number
  • refstr - Reference string
  • rval - Remaining open value (M4 formatted)
  • arcurncycode - Currency code
  • custcode - Customer code
  • custname - Customer name
  • duedate - 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.

Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

List open accounts payable (APVc)

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 number
  • invoicenr - Invoice number
  • refstr - Reference string
  • rval - Remaining open value (M4 formatted)
  • curncycode - Currency code
  • vecode - Vendor code
  • vename - Vendor name
  • duedate - 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.

Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Reports

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.

Generate report

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>
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "report"
usercode
required
string
Example: usercode=JOHN

Portal user used for access-group and language resolution.

Request Body schema: application/json
required
reportwindow
required
string

Report window class name (use getreportfilters to discover available values)

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].

Responses

Request samples

Content type
application/json
{
  • "reportwindow": "QTHistoryRClass",
  • "repname": "QTHstRn",
  • "spec": {
    }
}

Get report filter definitions

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&register=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": []
    }
  ]
}
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "getreportfilters"

Responses

Response samples

Content type
application/json
{
  • "source_files": [
    ],
  • "statistics": {
    },
  • "reports": [
    ]
}

Portal

Employee portal specific operations.

Sub-actions (via action=action):

  • getemployeeinfo - Employee details
  • getvacationbalance - Vacation days balance (access-controlled per EP-1989)
  • getemptimeplan - Work schedule
  • getemptimeplannewformat - Work schedule (new format)
  • getcontactpersons - Contact persons list
  • getapprovalpersons - Available approvers
  • getcustomerstatusrecords - Customer's related records (invoices, orders, quotes, tasks)
  • getcustomercontactpersons - Customer's contact persons list
  • getstartupitems - Module/register/report/document metadata (JSON)
  • getuseraccessrights - Access rights per item for a user (JSON)

Get employee information

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&register=getemployeeinfo&id=EMP001&empcode=MANAGER01&portalcc=est

Example Response:

<data><res regname='ProfileInfoVc'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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 (est for Estonian, lat for Latvian)

id
required
string

Target employee code.

Responses

Get vacation balance

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&register=getvacationbalance&empcode=EMP001&usercode=JOHN

Example Response:

<data><res errstr="You do not have access to view this data" newdata=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get startup items (modules, registers, reports)

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&register=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"
    }
  ]
}
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "getstartupitems"

Responses

Response samples

Content type
application/json
{
  • "source_files": [
    ],
  • "statistics": {
    },
  • "total_entries": 0,
  • "modules": [
    ],
  • "registers": [
    ],
  • "settings": [
    ],
  • "documents": [
    ],
  • "reports": [
    ],
  • "exports": [
    ],
  • "imports": [
    ],
  • "maintenances": [
    ]
}

Get user access rights

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&register=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"
  }
]
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Process order-document rows to create related records

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&register=createrecordfromdocument&id=10001

Example Response:

<data><res errstr="" newdata="10002"></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get portal admin and accountant users

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get customer status records

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Get employee time plan in XML with date-prefixed fields

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&register=getemptimeplannewformat&usercode=JOHN&empcode=EMP001&portalcc=est&sd=2026-01-01&ed=2026-01-31

Example Response:

<data><res regname="EPEmpVc"></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Record Creation

Document conversion operations for sales workflows (quotation → order → invoice).

Sub-actions (via action=action):

  • createslinvoicefromorder - Create sales invoice from sales order
  • createsalesorderfromquotation - Create sales order from quotation
  • createslinvoicefromquotation - Create sales invoice directly from quotation
  • copyrecord - Duplicate an existing record
  • unokrecord - Remove OK status (return to draft)

createslinvoicefromorder

Creates a sales invoice from an existing sales order.

?action=action&register=createslinvoicefromorder&id={ORVc_SerNr}&usercode=JOHN

Response: <data><res errstr="" newdata="10001"/></data> The newdata attribute contains the new invoice SerNr.

createsalesorderfromquotation

Creates a sales order from an existing quotation.

?action=action&register=createsalesorderfromquotation&id={QTVc_SerNr}&regname=QTVc&usercode=JOHN

createslinvoicefromquotation

Creates a sales invoice directly from a quotation (skipping order stage).

?action=action&register=createslinvoicefromquotation&id={QTVc_SerNr}&regname=QTVc&usercode=JOHN

copyrecord

Duplicates an existing record. Currently supports IVVc (invoices). New record gets current date and OKFlag=0 (draft).

?action=action&register=copyrecord&regname=IVVc&id=12345

unokrecord

Reverses record confirmation (sets OKFlag from 1 to 0). Requires appropriate access permissions (EXCPortalUnOK action). Supported registers: IVVc, ORVc, PlanAbsenceVc

?action=action&register=unokrecord&regname=IVVc&id=12345&usercode=JOHN

Create invoice from sales order

Creates a sales invoice from an existing sales order.

Example Request:

GET /WebExcellentAPI.hal?action=action&register=createslinvoicefromorder&id=5001&usercode=JOHN

Example Response:

<data>
  <res errstr="" newdata="10001"/>
</data>

The newdata attribute contains the SerNr of the newly created invoice.

Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "createslinvoicefromorder"
id
required
string

Sales order SerNr (from ORVc)

usercode
required
string

Responses

Create sales order from quotation

Creates a sales order from an existing quotation.

Example Request:

GET /WebExcellentAPI.hal?action=action&register=createsalesorderfromquotation&id=3001&regname=QTVc&usercode=JOHN

Example Response:

<data>
  <res errstr="" newdata="5001"/>
</data>
Authorizations:
basicAuthsessionCookie
query Parameters
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

Responses

Create invoice from quotation

Creates a sales invoice directly from a quotation (skipping the sales order stage).

Example Request:

GET /WebExcellentAPI.hal?action=action&register=createslinvoicefromquotation&id=3001&regname=QTVc&usercode=JOHN
Authorizations:
basicAuthsessionCookie
query Parameters
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

Responses

Duplicate a record

Creates a copy of an existing record.

Example Request:

GET /WebExcellentAPI.hal?action=action&register=copyrecord&regname=IVVc&id=10001

Behavior:

  • Creates new record with data from source
  • Sets date to current date
  • Sets OKFlag=0 (draft)
  • Generates new SerNr
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "copyrecord"
regname
required
string
Value: "IVVc"

Currently only IVVc supported

id
required
string

Responses

Remove OK status from record

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&register=unokrecord&regname=IVVc&id=10001&usercode=JOHN

Example Response:

<data><res errstr="" newdata=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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

Responses

Utilities

Utility and metadata sub-actions use action=action.

hasusernewapi

The handler assigns newdata=true without evaluating the supplied user's permissions.

Example Request:

GET /WebExcellentAPI.hal?action=action&register=hasusernewapi&usercode=JOHN

Example Response:

<data><res errstr="" newdata='true'></res></data>

List limits

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.

Get user notifications

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&register=getnotifications&usercode=JOHN

Example Response:

<data><res regname='ProfileVc'></res><ProfileVc><TaskCnt>2</TaskCnt></ProfileVc></data>
Authorizations:
basicAuthsessionCookie
query Parameters
action
required
string
Value: "action"
register
required
string
Value: "getnotifications"
usercode
required
string

Responses

Run the outgoing-payment DSM action

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&register=signandsendopdsm&id=10001

Example Response:

<data><res errstr="" newdata=""></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Validate an outgoing payment for bank processing

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&register=validateopforbank&id=10001

Example Response:

<data><res errstr="" newdata=""></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Extensibility

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 Functions Reference

Extension Function Purpose Called When
OuterExcellentAPIActions Add custom sub-actions action=action&register={YourAction}
OuterExcellentAPIDeleteRecord Add custom registers to delete action=delete&register={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).


OuterExcellentAPIActions - Custom Sub-Actions

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&register=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).


OuterExcellentAPIPasteSpecial - Custom Search Registers

Add new registers to the pastespecial action for lookup/search functionality.

URL pattern:

GET /WebExcellentAPI.hal?action=pastespecial&register=MyRegister&id=searchtext

OuterExcellentAPIGetList - Custom List Types

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

OuterExcellentAPIWindowActions - Custom Field Triggers

Add custom field trigger logic for registers in the windowactions endpoint.


Architecture Notes for Extensions

  • Extension functions are global procedure (not function)
  • They are called automatically if defined - no registration needed
  • For sub-actions that modify the database, delegate to a remote updating procedure
  • Web handlers (global procedures) cannot modify the database directly
  • Use temp files to pass large payloads across the remote procedure boundary (areas cannot cross)

3-file pattern for database-modifying extensions:

  1. Web handler file: global procedure (HTTP I/O + validation)
  2. Remote file: remote updating procedure (database operations)
  3. Data definition file: settings block for configuration (API keys, secrets)

Payroll

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.

List EST employees

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List EST contracts

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List EST absences

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List EST timetables

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List EST shift sheets

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List EST payroll calculations

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List EST planned absences

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT employees

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT contracts

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT absences

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT timetables

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT shift sheets

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT payroll calculations

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT planned absences

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

List LAT extra timetable row definitions

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

List LAT contract changes

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data page='0' total='0'></data>

Delete EST EmplVc

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&register=EmplVc&portalcc=est&id=JOHN&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete EST ContractVc

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&register=ContractVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete EST WorkedHoursVc

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&register=WorkedHoursVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete EST EPShiftSheetVc

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&register=EPShiftSheetVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete EST PlanAbsenceVc

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&register=PlanAbsenceVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete LAT EPEmpVc

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&register=EPEmpVc&portalcc=lat&id=JOHN&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete LAT EPContractVc

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&register=EPContractVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete LAT EPTS2Vc

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&register=EPTS2Vc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete LAT EPShiftSheetVc

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&register=EPShiftSheetVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete LAT EPOffWorkPlanVc

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&register=EPOffWorkPlanVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete LAT EPContrChangeVc

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&register=EPContrChangeVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete a EST WorkedHoursVc row

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&register=WorkedHoursVc&portalcc=est&id=10001:0&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete a EST EPShiftSheetVc row

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&register=EPShiftSheetVc&portalcc=est&id=10001:0&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete a LAT EPTS2Vc row

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&register=EPTS2Vc&portalcc=lat&id=10001:0&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Delete a LAT EPShiftSheetVc row

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&register=EPShiftSheetVc&portalcc=lat&id=10001:0&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Insert a EST WorkedHoursVc row

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&register=WorkedHoursVc&portalcc=est&id=10001:0:1&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Insert a EST EPShiftSheetVc row

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&register=EPShiftSheetVc&portalcc=est&id=10001:0:1&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Insert a LAT EPTS2Vc row

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&register=EPTS2Vc&portalcc=lat&id=10001:0:1&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Insert a LAT EPShiftSheetVc row

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&register=EPShiftSheetVc&portalcc=lat&id=10001:0:1&usercode=JOHN&empcode=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Get EST CalcPayrollVc PDF

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&register=CalcPayrollVc&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><file><name></name><base64></base64></file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><file><name></name><base64></base64></file></data>

Get LAT EPCalcResVc PDF

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&register=EPCalcResVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><file><name></name><base64></base64></file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><file><name></name><base64></base64></file></data>

Get LAT EPTS2Vc PDF

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&register=EPTS2Vc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><file><name></name><base64></base64></file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><file><name></name><base64></base64></file></data>

Get LAT EPContractVc PDF

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&register=EPContractVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><file><name></name><base64></base64></file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><file><name></name><base64></base64></file></data>

Get LAT EPOffWorkPlanVc PDF

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&register=EPOffWorkPlanVc&portalcc=lat&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><file><name></name><base64></base64></file></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><file><name></name><base64></base64></file></data>

Look up EST EmplVc

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&register=EmplVc&portalcc=est&id=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Look up EST ContractVc

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&register=ContractVc&portalcc=est&id=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Look up LAT EPEmpVc

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&register=EPEmpVc&portalcc=lat&id=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Look up LAT EPContractVc

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&register=EPContractVc&portalcc=lat&id=JOHN

Example Response:

<data></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data></data>

Create an order document from an absence plan

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&register=orderdocfromoffworkplan&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><res errstr="" newdata='10001'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res errstr="" newdata='10001'></res></data>

Create an absence from an absence plan

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&register=offworkfromoffworkplan&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><res errstr="" newdata='10001'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res errstr="" newdata='10001'></res></data>

Create a timetable from a shift sheet

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&register=timetablefromshiftsheet&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><res errstr="" newdata='10001'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res errstr="" newdata='10001'></res></data>

Get timetable numbers connected to a shift sheet

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&register=gettimetablelist&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><res newdata='10001'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res newdata='10001'></res></data>

Copy a shift sheet

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&register=copyshiftsheet&portalcc=est&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><res newdata='10001'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res newdata='10001'></res></data>

Get absence day codes and update a shift sheet

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res regname='EPShiftSheetVc'></res><EPShiftSheetVc><rows></rows></EPShiftSheetVc></data>

Calculate absence days

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res regname='EPOffWorkVc'></res><EPOffWorkVc><vacdays>0</vacdays><useddays>3</useddays></EPOffWorkVc></data>

Get employee vacation balance

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&register=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<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>

Check payroll approval status

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&register=checkapprovalstatus&portalcc=est&regname=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res errstr='' regname='DummyVc'></res><DummyVc><hasapprovals>0</hasapprovals><cancancel>0</cancancel><approvalstatus>0</approvalstatus><message></message><approvaldate></approvaldate></DummyVc></data>

Submit a payroll plan or shift sheet for approval

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&register=sendforapproval&portalcc=lat&regname=EPOffWorkPlanVc&id=10001&usercode=JOHN

Example Response:

<data><res errstr=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res errstr=''></res></data>

Get payroll approvers

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&register=getapprovalpersons&regname=PlanAbsenceVc&id=10001&usercode=JOHN

Example Response:

<data><res regname='PersonVc'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res regname='PersonVc'></res></data>

List payroll attachments

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&register=getattachlist&portalcc=est&regname=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN

Example Response:

<data><res regname='AttachVc'></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res regname='AttachVc'></res></data>

Upload a payroll attachment

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&register=doupload&portalcc=est&regname=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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Request Body schema: application/xml
required
string

Responses

Request samples

Content type
application/xml
<file><filename>document.txt</filename><base64>SGVsbG8=</base64></file>

Response samples

Content type
application/xml
<data><res errstr="" newdata=''></res></data>

Download a payroll attachment

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&register=getfile&portalcc=est&regname=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN&file=00000000-0000-4000-8000-000000000001

Example Response:

<data><res></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res></res></data>

Remove a payroll attachment link

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&register=deleteattachment&portalcc=est&regname=PlanAbsenceVc&id=10001&usercode=JOHN&empcode=JOHN&file=00000000-0000-4000-8000-000000000001

Example Response:

<data><res err=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res err=''></res></data>

Unconfirm a payroll record

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&register=unokrecord&regname=PlanAbsenceVc&id=10001&usercode=JOHN

Example Response:

<data><res errstr="" newdata=''></res></data>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<data><res errstr="" newdata=''></res></data>

Run payroll window field actions

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":""}}
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Request Body schema: application/json
required
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

Responses

Request samples

Content type
application/json
{
  • "vcname": "EmplVc",
  • "fieldname": "__new",
  • "headerfields": "Code:1",
  • "rowfields": "",
  • "values": {
    }
}

Response samples

Content type
application/json
{ }

Get payroll fields in the portal login response

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>
Authorizations:
basicAuthsessionCookie
query Parameters
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.

Responses

Response samples

Content type
application/xml
<res><contractnr>10001</contractnr><depcode>DEPT</depcode><empcode>JOHN</empcode><supported><contractchanges>yes</contractchanges><timetablesfromshiftrows>yes</timetablesfromshiftrows><gettimetablelist>yes</gettimetablelist></supported></res>