Download OpenAPI specification:
Action-based Web API for Excellent Books ERP Portal operations.
Unlike traditional REST APIs with multiple endpoints, WebExcellentAPI uses a single endpoint with an action parameter that determines the operation:
GET/POST /WebExcellentAPI.hal?action={action_name}&{parameters}
https://your-server:port/WebExcellentAPI.hal
HTTP Basic Authentication (same credentials as REST API)
curl -u username:password "https://server:port/WebExcellentAPI.hal?action=login"
Cookie-Based Sessions (Recommended for Performance):
After initial Basic Auth, use the returned HSESSION cookie for subsequent requests to reduce server load significantly.
# Initial request with Basic Auth - save cookies
curl -u username:password "https://server:port/WebExcellentAPI.hal?action=login" -c cookies.txt
# Subsequent requests - use cookie only
curl "https://server:port/WebExcellentAPI.hal?action=pastespecial®ister=INVc&id=laptop" \
-H "Cookie: HSESSION=CC1AC3C5-DAC9C590-DA4FD41F-1E820CB7-C1713CC8"
See REST API documentation for full session configuration details.
<data> or <res> elements<error> element or errstr attribute?action=login
?action=deactivate&usercode=API
?action=delete®ister=IVVc&id=12345
?action=deleterow®ister=IVVc&id=12345:2,3 (id format: {SerNr}:{rows})
?action=insertrow®ister=IVVc&id=12345:1:1 (id format: {SerNr}:{afterRow}:{rowType})
?action=posttext®ister=MailVc&id=12345 (POST with body)
?action=document®ister=IVVc&id=12345&doccode=INV
?action=document®ister=ORVc&id=54321&doccode=ORD&language=est
?action=action®ister=doupload®name=IVVc&id=12345 (POST with file)
?action=action®ister=getattachlist®name=IVVc&id=12345
?action=action®ister=getfile®name=IVVc&id=12345&file={uuid}
?action=action®ister=deleteattachment®name=IVVc&id=12345&file={uuid}
?action=action®ister=checkapprovalstatus®name=ActVc&id=12345
?action=action®ister=sendforapproval®name=IVVc&id=12345
?action=action®ister=approveactivity&id=12345&usercode=JOHN
?action=action®ister=rejectactivity&id=12345&usercode=JOHN
?action=action®ister=cancelapproval®name=IVVc&id=12345
?action=action®ister=createsigningactivity®name=ORVc&id=12345
?action=action®ister=createsigningsess&id=12345
?action=action®ister=startsigning&id=12345
?action=action®ister=cancelsigning&id=12345®name=ActVc
?action=action®ister=getactivitydata&id=12345
?action=action®ister=getcomments&id=12345
?action=action®ister=addcomment&id=12345 (POST with comment)
?action=action®ister=settaskdescription&id=12345 (POST with text)
?action=pastespecial®ister=INVc&id=laptop
?action=pastespecial®ister=CUVc&id=acme&compno=2
?action=pastespecial®ister=AllCUVc&id=john
Note: pastespecial uses id parameter for search text. Returns max 50 results.
Search fields: INVc (Code, Name), CUVc/VEVc/AllCUVc (Code, Name, RegNr1), UserVc (Code, Name).
POST ?action=windowactions (with Base64-encoded JSON body)
POST ?action=windowactions&usercode=JOHN (for __new with user defaults)
POST ?action=activeeditfields (get editable fields state)
?register=IVVc&sd=2024-01-01&ed=2024-12-31&perpage=50
?register=ActVc&search=pending&sortkey=TransDate&order=descending
?register=CUVc&page=1&perpage=100
?register=Kanban&usercode=JOHN
POST /WebExcellentAPI.hal?action=report
Content-Type: application/json
{"reportwindow": "INEClass", "lang": "EST", "spec": {"d1": "31.12.2025"}, "repname": "InvValRn"}
?action=action®ister=getemployeeinfo&empcode=EMP001
?action=action®ister=getvacationbalance&empcode=EMP001
?action=action®ister=getemptimeplan&empcode=EMP001&sd=2024-01-01&ed=2024-01-31
?action=action®ister=getportalusers
?action=action®ister=getallusers
?action=action®ister=getnotifications&usercode=JOHN
?action=action®ister=getdashboardkpi
?action=action®ister=copyrecord®name=IVVc&id=12345
?action=action®ister=unokrecord®name=IVVc&id=12345&usercode=JOHN
?action=action®ister=getbilinks&usercode=JOHN
?action=action®ister=getactivitytypes
These parameters can be used with any WebExcellentAPI action:
| Parameter | Description |
|---|---|
compno |
Company number (for multi-company databases). If not specified, uses current/default company. |
usercode |
User code for user-specific operations |
portalcc |
Country code for country-specific features (est = Estonia, lat = Latvia) |
Example with company number:
?action=pastespecial®ister=INVc&id=laptop&compno=2
?action=action®ister=getattachlist®name=IVVc&id=12345&compno=3
Authenticates and returns system configuration including supported features, date formats, and version info.
Example Request:
GET /WebExcellentAPI.hal?action=login
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Example Response:
<res>
<dateformat>YYYY-MM-DD</dateformat>
<dec_separator>,</dec_separator>
<apiversion>2.1</apiversion>
<version>8.5</version>
<supported>
<activities>1</activities>
<invoices>1</invoices>
<attachments>1</attachments>
<hassigning>1</hassigning>
</supported>
</res>
| action required | string Value: "login" |
Record manipulation operations including delete, row operations, and text posting.
Actions: delete, deleterow, insertrow, posttext
Supported Registers:
Deletes a record from the specified register.
Example Request:
GET /WebExcellentAPI.hal?action=delete®ister=IVVc&id=12345
Example Response (Success):
<data><res errstr=""/></data>
Example Response (Error):
<data><res errstr="Record is locked"/></data>
| action required | string Value: "delete" |
| register required | string Enum: "IVVc" "VIVc" "ORVc" "QTVc" "ActVc" "CUVc" "EPOrderDocVc" Register to delete from |
| id required | string Record ID (SerNr) |
Deletes specific rows from a multi-row record (invoice, order, etc.).
Important: The id parameter uses a colon-separated format: {SerNr}:{rows}
Example Request:
GET /WebExcellentAPI.hal?action=deleterow®ister=IVVc&id=12345:2,3,5
12345 = Record SerNr2,3,5 = Row numbers to delete (1-based, comma-separated)Multiple rows can be deleted in a single request.
| action required | string Value: "deleterow" |
| register required | string Enum: "IVVc" "ORVc" "VIVc" "EXCExternalSignersVc" "EXCSignSessVc" "EPOrderDocVc" |
| id required | string Example: id=12345:2,3 Format: {SerNr}:{rows} - Record ID and comma-separated row numbers |
Inserts a new empty row into a multi-row record.
Important: The id parameter uses a colon-separated format: {SerNr}:{afterRow}:{rowType}
Example Request:
GET /WebExcellentAPI.hal?action=insertrow®ister=IVVc&id=12345:1:1
12345 = Record SerNr1 = Insert after row number (0 = at beginning)1 = Row type (stp field value, typically 1 for normal item row)Common row types (stp):
1 = Normal item row2 = Text/comment row3 = Credit row| action required | string Value: "insertrow" |
| register required | string Enum: "IVVc" "VIVc" "EXCExternalSignersVc" "EXCSignSessVc" |
| id required | string Example: id=12345:1:1 Format: {SerNr}:{afterRow}:{rowType} - Record ID, row position, and row type |
Posts text/HTML content to a record's text field (e.g., email body, document text).
Example Request:
POST /WebExcellentAPI.hal?action=posttext®ister=MailVc&id=12345
Content-Type: application/x-www-form-urlencoded
set_field.Math=<p>Email body content here</p>
| action required | string Value: "posttext" |
| register required | string Enum: "MailVc" "EPOrderDocVc" |
| id required | string |
| set_field.Math | string Text/HTML content |
Document generation and PDF printing.
Actions: document
Supported Registers: IVVc, VIVc, ORVc, QTVc, EPOrderDocVc
Generates a PDF document for printing or download.
Example Request:
GET /WebExcellentAPI.hal?action=document®ister=IVVc&id=12345&doccode=INV
Example Response:
<data>
<file>
<name>Invoice_12345.pdf</name>
<base64>JVBERi0xLjQK...</base64>
</file>
</data>
The base64 field contains the PDF file encoded in base64.
| action required | string Value: "document" |
| register required | string Enum: "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" |
| id required | string |
| doccode | string Document template code |
| language | string Enum: "est" "lat" "eng" Document language |
File upload, download, listing, and deletion.
Sub-actions (via action=action):
doupload - Upload file attachment (POST)getattachlist - List attachments for recordgetfile - Download attachment by UUIDdeleteattachment - Remove attachmentgetrecordlinks - Get linked recordssendemail - Email document with PDF attachmentSupported Registers: IVVc, VIVc, QTVc, StockTakeVc, ORVc, ActVc, CUVc, EPOrderDocVc
File Size Limit:
Maximum upload size is configured in Excellent Books:
Technics > Registers > Program Settings > Web tab > Max Web Post Size
File Format: Files are transferred as Base64-encoded content wrapped in XML:
<root><file><filename>document.pdf</filename><base64>...</base64></file></root>
Endpoint:
POST /WebExcellentAPI.hal?action=action®ister=doupload®name=IVVc&id=2525040
Request Body:
<root>
<file>
<filename>invoice_scan.pdf</filename>
<base64>JVBERi0xLjQK...base64_encoded_content...</base64>
</file>
</root>
Parameters:
action=action - Required for sub-action callsregister=doupload - The sub-action to executeregname=IVVc - Target register (IVVc, VIVc, ORVc, CUVc, etc.)id=2525040 - SerNr of the record to attach file tocurl Example:
curl -X POST "https://server:port/WebExcellentAPI.hal?action=action®ister=doupload®name=IVVc&id=2525040" \
-u username:password \
-H "Content-Type: application/xml" \
-d '<root><file><filename>document.pdf</filename><base64>JVBERi0xLjQK...</base64></file></root>'
Success Response:
<data><res errstr="" uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890"/></data>
The returned uuid identifies the uploaded file for later use with getfile or deleteattachment.
Sends email with document PDF attachment to the customer/contact. Prerequisites:
?action=action®ister=sendemail®name=IVVc&id=10001&usercode=JOHN
Supported registers for sendemail: IVVc, ORVc, QTVc
Returns list of records linked to the specified record (e.g., orders linked to invoice).
?action=action®ister=getrecordlinks®name=IVVc&id=10001
Uploads a file attachment to a record.
Example Request:
POST /WebExcellentAPI.hal?action=action®ister=doupload®name=IVVc&id=12345
Content-Type: application/xml
<root>
<file>
<filename>receipt.pdf</filename>
<base64>JVBERi0xLjQK...</base64>
</file>
</root>
Example Response:
<data><res errstr="" uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890"/></data>
| action required | string Value: "action" |
| register required | string Value: "doupload" |
| regname required | string Enum: "IVVc" "VIVc" "QTVc" "StockTakeVc" "ORVc" "ActVc" "CUVc" "EPOrderDocVc" "EPShiftSheetVc" Target register |
| id required | string |
object |
Returns list of all attachments for a record.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getattachlist®name=IVVc&id=12345
Example Response:
<data>
<attachment uuid="a1b2c3d4..." filename="receipt.pdf" size="102400" date="2024-01-15"/>
<attachment uuid="e5f67890..." filename="photo.jpg" size="51200" date="2024-01-16"/>
</data>
| action required | string Value: "action" |
| register required | string Value: "getattachlist" |
| regname required | string |
| id required | string |
Downloads an attachment file by UUID.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getfile®name=IVVc&id=12345&file=a1b2c3d4-e5f6-7890-abcd-ef1234567890
| action required | string Value: "action" |
| register required | string Value: "getfile" |
| regname required | string |
| id required | string |
| file required | string <uuid> File UUID |
Approval workflow operations for documents and activities.
Sub-actions (via action=action):
checkapprovalstatus - Get current approval statesendforapproval - Submit for approvalapproveactivity - Approve recordrejectactivity - Reject recordcancelapproval - Cancel pending approvalsignactivity - Sign approved recordApproval Status Codes:
Returns the current approval status of a record.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=checkapprovalstatus®name=IVVc&id=12345
Example Response:
<data>
<res errstr="" regname="IVVc"/>
<DummyVc>
<hasapprovals>1</hasapprovals>
<approvalstatus>3</approvalstatus>
<message>Waiting for approval from MANAGER</message>
<cancancel>1</cancancel>
</DummyVc>
</data>
Status Codes:
| action required | string Value: "action" |
| register required | string Value: "checkapprovalstatus" |
| regname required | string Enum: "ActVc" "IVVc" "VIVc" "ORVc" "QTVc" "EPOrderDocVc" |
| id required | string |
Submits a record to the approval workflow.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=sendforapproval®name=IVVc&id=12345
| action required | string Value: "action" |
| register required | string Value: "sendforapproval" |
| regname required | string |
| id required | string |
Approves a record pending approval.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=approveactivity&id=12345&usercode=MANAGER
| action required | string Value: "action" |
| register required | string Value: "approveactivity" |
| id required | string |
| usercode required | string Approver's user code |
Rejects a record pending approval.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=rejectactivity&id=12345&usercode=MANAGER
| action required | string Value: "action" |
| register required | string Value: "rejectactivity" |
| id required | string |
| usercode required | string |
Digital signing operations using Dokobit integration.
Sub-actions (via action=action):
createsigningactivity - Create signing activity for documentcreatesigningsess - Create signing sessionstartsigning - Initiate signing processcancelsigning - Cancel signing sessionSupported for: ORVc, IVVc, EPOrderDocVc, EPContractVc
Creates a digital signing activity for a document (Dokobit integration).
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createsigningactivity®name=ORVc&id=12345
| action required | string Value: "action" |
| register required | string Value: "createsigningactivity" |
| regname required | string Enum: "ORVc" "IVVc" "EPOrderDocVc" "EPContractVc" "EPTS2Vc" |
| id required | string |
Initiates the digital signing process for a signer.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=startsigning&id=12345
Returns a URL to redirect the user to the Dokobit signing interface.
| action required | string Value: "action" |
| register required | string Value: "startsigning" |
| id required | string Signing activity or session SerNr |
| usercode | string User code (optional, uses session user if not specified) |
Activity and task management operations.
Sub-actions (via action=action):
getactivitydata - Get activity detailsgetcomments - Get activity commentsaddcomment - Add comment to activitysettaskdescription - Update task descriptiongetactivitytypes - List available activity typesPaste special, search, and field trigger operations.
Actions: pastespecial, windowactions, activeeditfields
Search for records to populate lookup fields.
Supported Registers: INVc, CUVc, VEVc, AllCUVc, UserVc
Simulates field changes in the UI, executing business logic and returning computed values. This is useful for building custom form UIs that need real-time field calculations without saving the record.
Supported Registers: IVVc, ORVc, CUVc, ActVc, QTVc, VIVc
How it works:
Use Cases:
Special Fields:
__new - Initialize a new empty record with defaults__copy - Duplicate an existing recordReturns which fields are currently editable based on record state.
Supported Registers: ORVc, CUVc
Use Cases:
Searches for records to use in paste special / lookup fields.
Note: This endpoint uses the id parameter for the search text (not search).
Returns a maximum of 50 results (hardcoded limit, pagination not supported).
Searchable Fields by Register:
| Register | Fields Searched |
|---|---|
| INVc | Code, Name |
| CUVc | Code, Name, RegNr1 |
| VEVc | Code, Name, RegNr1 (vendors only) |
| AllCUVc | Code, Name, RegNr1 (all contacts) |
| UserVc | Code, Name |
Search Behavior:
id=laptop dell matches items containing BOTH "laptop" AND "dell"Example Request:
GET /WebExcellentAPI.hal?action=pastespecial®ister=INVc&id=laptop
GET /WebExcellentAPI.hal?action=pastespecial®ister=CUVc&id=ACME&compno=2
Example Response:
<data>
<INVc>
<Code>LAPTOP01</Code>
<Name>Dell Laptop 15"</Name>
<UPrice1>899.00</UPrice1>
</INVc>
<INVc>
<Code>LAPTOP02</Code>
<Name>HP Laptop 14"</Name>
<UPrice1>749.00</UPrice1>
</INVc>
</data>
| action required | string Value: "pastespecial" |
| register required | string Enum: "INVc" "CUVc" "VEVc" "AllCUVc" "UserVc" Register to search in |
| id required | string Search text. Searched fields depend on register:
|
| compno | integer Company number (for multi-company databases) |
| bfilter | string Additional filter (only for INVc) |
Simulates a field value change in the UI and returns the record with all computed/derived fields updated. This is the core API for building custom form UIs that need real-time field calculations.
The request body must be Base64-encoded JSON (reversed byte order, then Base64).
Supported Registers: IVVc, ORVc, CUVc, ActVc, QTVc, VIVc
{
"vcname": "IVVc",
"fieldname": "CustCode",
"value": "ACME",
"rowindex": -1,
"headerfields": "CustCode:1,PayDeal:1,Addr0:1,CurncyCode:1",
"rowfields": "ArtCode:1,Quant:5,Price:5,Sum:5",
"values": {
"header": {
"CustCode": "ACME",
"InvDate": "2024-01-15"
},
"rows": [
{"stp": 1, "ArtCode": "ITEM01", "Quant": "2", "Price": "100.00"}
]
}
}
Field Type Codes (in headerfields/rowfields):
| Field | Triggers | Description |
|---|---|---|
CustCode |
Address, PayDeal, Language, Region, SalesMan | Loads customer defaults |
ArtCode |
Price, VATCode, Description, SalesAcc | Loads item defaults |
Quant |
Sum, row recalculation | Recalculates line total |
Price |
Sum, row recalculation | Recalculates line total |
CurncyCode |
FrRate, ToRateB1, ToRateB2, BaseSum4 | Updates exchange rates |
PayDeal |
PayDate, PriceList | Loads payment terms |
InvDate |
Exchange rates, periods | Updates date-dependent values |
VATCode |
VAT calculation | Recalculates VAT |
Sum |
vRebate back-calculation | Calculates discount from sum |
SerialNr |
Dimensions, quantity | Loads serial number data |
UnitCode |
UnitFactor calculations | Updates unit conversions |
Location |
Stock validation | Validates stock location |
__new |
All defaults | Creates new empty invoice |
__copy |
Duplicate record | Copies existing invoice |
| Field | Triggers | Description |
|---|---|---|
CustCode |
Address, PayDeal, SalesMan | Loads customer defaults |
ArtCode |
Price, VATCode, Description | Loads item defaults |
Quant |
Sum, Price recalculation | Recalculates line (may update price for quantity discounts) |
Price |
Sum recalculation | Recalculates line total |
PlanShip |
Delivery date, PriceList | Updates planned shipment |
SerialNr |
Item, Location, Dimensions | Loads serial number and item |
__new |
All defaults | Creates new empty order |
__copy |
Duplicate record | Copies existing order |
| Field | Triggers | Description |
|---|---|---|
RegNr2 |
VAT validation | Validates registration number |
Name |
Search/validation | Name processing |
Person |
Mobile from contact relation | Loads contact person mobile |
CountryCode |
Address format | Updates address format |
IBANCode |
IBAN validation | Validates bank account |
VATNr |
VAT law validation | Validates VAT number |
__new |
All defaults | Creates new contact |
__copy |
Duplicate record | Copies existing contact |
| Field | Triggers | Description |
|---|---|---|
CUCode |
CUName, Phone, Contact | Loads customer info |
ActType |
Default values | Loads activity type defaults |
TransDate |
EndDate, CostTime | Calculates duration |
StartTime |
CostTime calculation | Recalculates duration |
EndTime |
CostTime calculation | Recalculates duration |
ActResult |
EndTime, CostTime | Closes activity |
MainPersons |
Expands user codes | Expands group to users |
__new |
All defaults | Creates new activity |
__prepareActivity |
From source record | Creates activity from order/invoice |
| Field | Triggers | Description |
|---|---|---|
CustCode |
Address, PayDeal, PriceList | Loads customer defaults |
ArtCode |
Price, VATCode, Description | Loads item defaults |
Quant |
Sum, Price recalculation | Recalculates line |
Price |
Sum recalculation | Recalculates line total |
PriceList |
Item prices update | Updates all row prices |
QTDate |
Validity dates | Updates related dates |
__new |
All defaults | Creates new quotation |
__copy |
Duplicate record | Copies existing quotation |
| Field | Triggers | Description |
|---|---|---|
VECode |
VAT codes, Objects | Loads vendor defaults |
PayVal |
VATVal calculation | Recalculates VAT |
AccNumber |
Objects, defaults | Loads account defaults |
VATCode |
VAT calculation | Updates VAT amounts |
Sum |
Totals recalculation | Recalculates totals |
PayDeal |
DueDate | Loads payment terms |
CredInv |
Rate, POSerNr | Loads credit invoice source |
__new |
All defaults | Creates new purchase invoice |
__copy |
Duplicate record | Copies existing invoice |
{
"success": true,
"res": true,
"messages": [
{"description": "Customer credit limit exceeded"}
],
"record": {
"CustCode": "ACME",
"Addr0": "ACME Corporation",
"PayDeal": "NET30",
"Sum4": "242.00",
"rows": [
{"ArtCode": "ITEM01", "Quant": "2", "Price": "100.00", "Sum": "200.00"}
]
}
}
Response Fields:
success - Always true for successful responseres - Operation resultmessages - Array of warning messages (if any)record - Updated record with computed values| action required | string Value: "windowactions" |
| usercode | string User code for defaults (used with __new) |
Base64-encoded JSON (reversed byte order)
{- "success": true,
- "res": true,
- "messages": [
- {
- "description": "Customer credit limit exceeded"
}
], - "record": {
- "rows": [
- {
- "property1": "string",
- "property2": "string"
}
], - "property1": "string",
- "property2": "string"
}, - "activeFields": {
- "headerFields": true,
- "matrixFields": true,
- "exceptionHeaderList": "string",
- "exceptionMatrixList": "string"
}, - "rules": [
- {
- "rulefield": "string",
- "rulename": "string",
- "rulevalue": "string"
}
]
}Returns information about which fields are currently editable based on record state. Useful for dynamically enabling/disabling form fields in custom UI.
Supported Registers: ORVc, CUVc
{
"vcname": "ORVc",
"id": "12345"
}
Checks if the order has any shipments (deliveries created).
| Condition | headerFields | matrixFields | exceptionHeaderList |
|---|---|---|---|
| No shipments | true | true | (empty) |
| Has shipments | true | false | CustCode |
When an order has been partially or fully shipped, the row fields become read-only to prevent changes that would conflict with the delivery. The customer code is also locked to maintain data integrity.
Returns dynamic rules based on the contact customer class (CCatVc.ClassType). These rules can be used by the UI to show/hide fields or apply validation.
Example: If contact has class with ClassType=COMPANY, returns:
{
"rules": [
{
"rulefield": "Classification",
"rulename": "type",
"rulevalue": "COMPANY"
}
]
}
The UI can use these rules to conditionally display fields relevant to companies vs individuals (e.g., show RegNr1 for companies, hide for private persons).
Response includes:
success - Always true for successful responseres - Operation resultactiveFields - Field editability flagsheaderFields - Whether header fields are editable (default: true)matrixFields - Whether row fields are editable (default: true)exceptionHeaderList - Comma-separated list of locked header fieldsexceptionMatrixList - Comma-separated list of locked row fieldsrules - Array of dynamic rules (CUVc only)Example Response (ORVc with shipments):
{
"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"
}
]
}
| action required | string Value: "activeeditfields" |
Base64-encoded JSON with vcname and record id
{- "success": true,
- "res": true,
- "activeFields": {
- "headerFields": true,
- "matrixFields": true,
- "exceptionHeaderList": "string",
- "exceptionMatrixList": "string"
}, - "rules": [
- {
- "rulefield": "string",
- "rulename": "string",
- "rulevalue": "string"
}
]
}Data listing and browsing with pagination and filtering.
Usage: Omit action parameter, use register directly
Supported Registers:
Common Parameters:
page - Page number (1-based)perpage - Records per page (max 100)search - Search textsortkey - Sort fieldorder - ascending/descendingsd, ed - Date rangeRetrieves a paginated list of records. Note: No action parameter - use register directly.
Example Requests:
GET /WebExcellentAPI.hal?register=IVVc&sd=2024-01-01&ed=2024-12-31&perpage=50
GET /WebExcellentAPI.hal?register=ActVc&search=pending&page=2
GET /WebExcellentAPI.hal?register=CUVc&sortkey=Name&order=ascending
Example Response:
<data count="150" page="1" perpage="50" totalpages="3">
<IVVc>
<SerNr>10001</SerNr>
<InvDate>2024-01-15</InvDate>
<CustCode>ACME</CustCode>
<Sum4>1250.00</Sum4>
</IVVc>
<!-- more records... -->
</data>
| register required | string Enum: "INVc" "CUVc" "ActVc" "Kanban" "IVVc" "VIVc" "StockTakeVc" "ORVc" "QTVc" "EPOrderDocVc" Register to list |
| page | integer >= 1 |
| perpage | integer [ 1 .. 100 ] |
| search | string |
| sortkey | string |
| order | string Enum: "ascending" "descending" |
| sd | string <date> Start date (YYYY-MM-DD) |
| ed | string <date> End date (YYYY-MM-DD) |
| usercode | string |
| bfilter | string Additional filter fields |
Report generation operations.
Actions: report (POST with JSON body)
JSON Body Fields:
reportwindow - Report window class name (e.g., INEClass, AT2ListRClass)repname - Internal report name (e.g., InvValRn, AT2ListRn)lang - Language code (e.g., EST, ENG)spec - Object with report-specific parameters (dates, filters, etc.)Runs an API report and returns results. Requires a POST request with JSON body.
Example Request:
POST /WebExcellentAPI.hal?action=report
Content-Type: application/json
{
"reportwindow": "INEClass",
"lang": "EST",
"spec": {
"d1": "31.12.2025",
"f2": "PLU"
},
"repname": "InvValRn"
}
| action required | string Value: "report" |
| reportwindow required | string Report window class name |
| repname required | string Internal report name |
| lang | string Language code |
object Report-specific parameters (dates, filters, etc.) |
{- "reportwindow": "INEClass",
- "repname": "InvValRn",
- "lang": "EST",
- "spec": {
- "d1": "31.12.2025",
- "f2": "PLU"
}
}Employee portal specific operations.
Sub-actions (via action=action):
getemployeeinfo - Employee detailsgetvacationbalance - Vacation days balancegetemptimeplan - Work schedulegetemptimeplannewformat - Work schedule (new format)getcontactpersons - Contact persons listgetapprovalpersons - Available approversReturns detailed employee information for portal users.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getemployeeinfo&empcode=EMP001
| action required | string Value: "action" |
| register required | string Value: "getemployeeinfo" |
| empcode required | string |
Returns employee's vacation days balance.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getvacationbalance&empcode=EMP001
| action required | string Value: "action" |
| register required | string Value: "getvacationbalance" |
| empcode required | string |
Document conversion operations for sales workflows (quotation → order → invoice).
Sub-actions (via action=action):
createslinvoicefromorder - Create sales invoice from sales ordercreatesalesorderfromquotation - Create sales order from quotationcreateslinvoicefromquotation - Create sales invoice directly from quotationcopyrecord - Duplicate an existing recordunokrecord - Remove OK status (return to draft)Creates a sales invoice from an existing sales order.
?action=action®ister=createslinvoicefromorder&id={ORVc_SerNr}&usercode=JOHN
Response: <data><res errstr="" newdata="10001"/></data>
The newdata attribute contains the new invoice SerNr.
Creates a sales order from an existing quotation.
?action=action®ister=createsalesorderfromquotation&id={QTVc_SerNr}®name=QTVc&usercode=JOHN
Creates a sales invoice directly from a quotation (skipping order stage).
?action=action®ister=createslinvoicefromquotation&id={QTVc_SerNr}®name=QTVc&usercode=JOHN
Duplicates an existing record. Currently supports IVVc (invoices). New record gets current date and OKFlag=0 (draft).
?action=action®ister=copyrecord®name=IVVc&id=12345
Reverses record confirmation (sets OKFlag from 1 to 0). Requires appropriate access permissions (EXCPortalUnOK action). Supported registers: IVVc, ORVc, PlanAbsenceVc
?action=action®ister=unokrecord®name=IVVc&id=12345&usercode=JOHN
Creates a sales invoice from an existing sales order.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createslinvoicefromorder&id=5001&usercode=JOHN
Example Response:
<data>
<res errstr="" newdata="10001"/>
</data>
The newdata attribute contains the SerNr of the newly created invoice.
| action required | string Value: "action" |
| register required | string Value: "createslinvoicefromorder" |
| id required | string Sales order SerNr (from ORVc) |
| usercode required | string |
Creates a sales order from an existing quotation.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createsalesorderfromquotation&id=3001®name=QTVc&usercode=JOHN
Example Response:
<data>
<res errstr="" newdata="5001"/>
</data>
| action required | string Value: "action" |
| register required | string Value: "createsalesorderfromquotation" |
| id required | string Quotation SerNr (from QTVc) |
| regname required | string Value: "QTVc" |
| usercode required | string |
Creates a sales invoice directly from a quotation (skipping the sales order stage).
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=createslinvoicefromquotation&id=3001®name=QTVc&usercode=JOHN
| action required | string Value: "action" |
| register required | string Value: "createslinvoicefromquotation" |
| id required | string Quotation SerNr (from QTVc) |
| regname required | string Value: "QTVc" |
| usercode required | string |
Creates a copy of an existing record.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=copyrecord®name=IVVc&id=10001
Behavior:
| action required | string Value: "action" |
| register required | string Value: "copyrecord" |
| regname required | string Value: "IVVc" Currently only IVVc supported |
| id required | string |
Reverses record confirmation, returning it to draft state (OKFlag=0).
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=unokrecord®name=IVVc&id=10001&usercode=JOHN
Requirements:
| action required | string Value: "action" |
| register required | string Value: "unokrecord" |
| regname required | string Enum: "IVVc" "ORVc" "PlanAbsenceVc" |
| id required | string |
| usercode required | string |
| portalcc | string Enum: "est" "lat" Country code for country-specific rules |
Utility and meta operations.
Sub-actions (via action=action):
hasusernewapi - Check if user has new API accessgetportalusers - List portal usersgetadminusers - List admin usersgetallusers - List all usersgetnotifications - User notificationsgetdashboardkpi - Dashboard KPIslinktosourcerecord - Create activity link to source recordgetrecordlinks - Get records linked to a recordgetbilinks - Get Business Intelligence portal linksgetactivitytypes - List available activity types with signing inforegisterapi - Register callback URL for webhooksbuildrecidstr - Build standardized record ID stringChecks if the current user has access to new API features.
?action=action®ister=hasusernewapi&usercode=JOHN
Response: <data><res errstr="" hasapi="1"/></data>
Returns list of records linked to the specified record.
?action=action®ister=getrecordlinks®name=IVVc&id=12345
Returns Business Intelligence portal links for FlexBI integration.
?action=action®ister=getbilinks&usercode=JOHN&id={accessId}
Response includes salesanalysis and customeranalysis URLs.
Links only returned if user has EXCPortalShowInvoices permission.
Lists all configured activity types (ActTypVc).
?action=action®ister=getactivitytypes
Registers an external callback URL for webhook notifications.
?action=action®ister=registerapi&UUID={uuid}&url={url}&port={port}&path={path}
Builds a standardized record ID string for cross-system references.
?action=action®ister=buildrecidstr&code={code}&vcname={vcname}&compno={compno}
Some operations have row limits to prevent performance issues:
| Operation | Default Limit | Extended Limit |
|---|---|---|
| Cash flow data | 2,000 rows | 30,000 rows (with limitf=false) |
| List queries | 100 per page | Use pagination |
| Kanban columns | maxsize parameter | Configurable |
Some operations have country-specific implementations. Use the portalcc parameter:
portalcc=est - Estonia-specific (ESTPayroll module)portalcc=lat - Latvia-specific (LATPayroll module)Estonia-specific actions:
Latvia-specific actions:
Example:
?action=action®ister=getvacationbalance&empcode=EMP001&portalcc=est
Returns pending notifications for a user.
Example Request:
GET /WebExcellentAPI.hal?action=action®ister=getnotifications&usercode=JOHN
| action required | string Value: "action" |
| register required | string Value: "getnotifications" |
| usercode required | string |
WebExcellentAPI can be extended with custom actions, registers, and field triggers using HAL extension functions.
These extension points allow partners to add new functionality without modifying the core API code.
Each extension function is a global procedure defined in a HAL file and automatically called by the API when relevant.
| Extension Function | Purpose | Called When |
|---|---|---|
OuterExcellentAPIActions |
Add custom sub-actions | action=action®ister={YourAction} |
OuterExcellentAPIDeleteRecord |
Add custom registers to delete | action=delete®ister={YourRegister} |
OuterExcellentAPIDeleteRow |
Add custom registers to deleterow | action=deleterow |
OuterExcellentAPIInsertRow |
Add custom registers to insertrow | action=insertrow |
OuterExcellentAPIPostText |
Add custom registers to posttext | action=posttext |
OuterExcellentAPIPrint |
Add custom document types | action=document |
OuterExcellentAPIPasteSpecial |
Add custom registers to search | action=pastespecial |
OuterExcellentAPIGetList |
Add custom list types | List queries (no action) |
OuterExcellentAPIWindowActions |
Add custom field triggers | action=windowactions |
Country-specific variants are also supported by appending _EST or _LAT suffix (e.g., OuterExcellentAPIDeleteRecord_EST).
This is the most commonly used extension point. It allows you to add completely new sub-actions to the action=action endpoint.
HAL Signature (6 parameters):
global
procedure OuterExcellentAPIActions(
string type, // Value of register= parameter (the sub-action name)
string empcode, // Employee code from query string
string usercode, // User code from query string
string id, // ID from query string
string err, // Error string
var Boolean outputf // Set to false when you handle the response
)
URL pattern:
POST /WebExcellentAPI.hal?action=action®ister=MyCustomAction&id=12345&usercode=JOHN
Example implementation:
global
procedure OuterExcellentAPIActions(string type, string empcode, string usercode,
string id, string err, var Boolean outputf)
begin
switch (type) begin
case "MyCustomAction":
HandleMyCustomAction(id, usercode);
outputf = false; // false = we handled the output
end;
return;
end;
When outputf is set to false, the extension function is responsible for writing the HTTP response
(e.g., using WebOutString, WebSetContentType, SetHTTPResponseStatus).
Add new registers to the pastespecial action for lookup/search functionality.
URL pattern:
GET /WebExcellentAPI.hal?action=pastespecial®ister=MyRegister&id=searchtext
Add new list types for the list query endpoint (no action parameter).
URL pattern:
GET /WebExcellentAPI.hal?register=MyListType&page=1&perpage=50&search=text
Add custom field trigger logic for registers in the windowactions endpoint.
global procedure (not function)remote updating procedure3-file pattern for database-modifying extensions: