Overview
Jonas provides the ability to import and export data to external third-party applications (such as Salesforce or QuickBooks) through a SOAP web service. The service exchanges data for a variety of business objects using JSON payloads that comply with a well-defined schema.
Endpoint
https://websvcazure.jonasportal.com/jonasAPI/japi.asmxWSDL & introspection
The service publishes a WSDL document for client code generation:
https://websvcazure.jonasportal.com/jonasAPI/japi.asmx?WSDL
HTTPS is required for all calls; HTTP is not accepted. The service uses
jonas.jonasportal.com/ as its SOAP/XML namespace — the per-endpoint pages on this
portal use the correct namespace in their request samples.
Web service operations
1. Login
<securityToken>string</securityToken>
<username>string</username>
<password>string</password>Returns a serialized JSON object:
{ "isAuthenticated": true, "isValid": true, "data": "...", "message": "..." }2. JonasAPI
<securityToken>string</securityToken>
<username>string</username>
<password>string</password>
<apiParams>string</apiParams>Returns a serialized JSON object:
{ "isAuthenticated": true, "isValid": true, "data": "...", "message": "..." }
Login and JonasAPI are independent — every JonasAPI call
re-authenticates from the supplied credentials, so calling Login first is optional
and does not establish a session. See Authentication & tenancy below.
Parameters
| Parameter | Description |
|---|---|
securityToken | Security hash key provided by Jonas. |
username | A valid customer's Jonas system user name. |
password | A valid customer's Jonas system password. |
apiParams | Valid JSON string compliant with a Jonas API schema. For all support inquiries this must be provided (in a text file). |
The apiParams JSON may optionally include clientid,
username, and password keys; if absent, the service auto-fills them from
the SOAP envelope values. Tenant routing is determined by securityToken only —
including clientid in the body does not change which tenant a call reaches.
Authentication & tenancy
Every call carries three credentials in the SOAP envelope: securityToken,
username, and password.
- The
securityTokenidentifies the tenant — one token maps to exactly one Jonas customer environment, and the service routes requests to that tenant's on-premise Jonas engine. Tokens are issued by Jonas and rotation requires contacting Jonas support; clients cannot rotate tokens themselves. usernameandpasswordare the user's Jonas system credentials. They are forwarded to the tenant's engine and validated on every call; there is no session, token, or cookie that persists between requests.- HTTPS is required for every call. The internal hop from the public service to the tenant's engine runs over a separate mutual-TLS channel pinned to a per-tenant client certificate.
Functions
| Function Name | Function Code | Purpose |
|---|---|---|
| Customers | GJZJ6J | Create, update, and export A/R customer records |
| Work Orders | GJZJ18J | Create, update, and export work order records |
| Job Master | GJZJ28J | Create, update, and export job master records |
| Reading Data | GJZJ82J | Export or read data using paginated datamart templates |
| Purchase Orders | GJM10J | Upload and manage purchase order records |
| AP Invoice Batch | GJZJ4J | Import accounts payable invoice batches |
| Parts Invoices | GJR01J | Upload and process parts invoice transactions |
| Inventory Upload | GJZJ7J | Import and update inventory item records |
| Subcontract Change Orders | GJZJ40J | Upload subcontractor change orders to job contracts |
| Upload Estimates | GJJ22CTJ | Import job cost estimates by cost code |
| Upload Forecast Final | GJJ36CTJ | Submit final forecast values for job cost items |
| Revision to Estimate / Change Orders | GJJC1J | Post revisions to job estimates and change orders |
| Internal Estimate Changes | GJJC5J | Record internal budget adjustments to job estimates |
| Record Job Unit Qty's | GJJ31J | Record unit quantities completed for job cost items |
| Takeoff | GJJ72J | Import quantity takeoff data for job estimating |
| Payment Certificate Progress to Date | GJZJ41J | Submit progress billing payment certificate amounts |
| Job Invoices | GJRU22J | Generate and upload invoices for job contracts |
| Charge Parts to Jobs & Work Orders | GJRP88J | Post parts and material charges to jobs or work orders |
| Customer Service Items | GJZJ9J | Upload and manage customer service item records |
| Equipment Usage | GJES5J | Record equipment usage and hours against jobs |
Options
Each call object supports the following options; each returns a different result set:
| Option | Result |
|---|---|
Template | Returns the JSON template containing the data fields with no data. |
Download | Returns the JSON template populated with data. |
Scan | Error scan only — does not upload data. |
Update | Submits records to be scanned for errors and uploaded into the system. |
Response shape
Both Login and JonasAPI return a SOAP body whose
JonasAPIResult element contains a serialized JSON object:
{
"isAuthenticated": true,
"isValid": true,
"data": "{\"WebMethod\":\"GJZJ6J\",\"Option\":\"scan\",...,\"ErrorsFound\":\"0\"}",
"message": "Login Successful : UserID GJSYSTEM ..."
}| Field | Meaning |
|---|---|
isAuthenticated | The user's credentials were accepted by the Jonas engine. |
isValid | The requested operation completed successfully. For Login, this equals isAuthenticated. For JonasAPI, it reflects whether the underlying business method ran without error — gate "did the call succeed?" checks on this field. |
data | A JSON-encoded JSON string — parse it a second time to read the result. For scan / update options, the parsed payload includes RecordsProcessed, ErrorsFound, and an errors[] array when validation fails. Empty string when no business payload is returned (e.g. Login). |
message | Diagnostic text emitted by the Jonas engine. Useful for support tickets; not safe to parse — content and format are not contractual. |
Decode the body in two steps: parse the outer object, then if isValid is
true and data is non-empty, parse data as JSON to read the
business result.
Errors
Errors arrive in two layers, both delivered inside a normal HTTP 200 SOAP response — there are no SOAP faults under regular operation.
Envelope-level errors
Returned with isAuthenticated=false and/or isValid=false, with a short
fixed string in message. These cover misconfigured calls and transport-level
failures before the request reaches the Jonas engine.
| Message | Cause / action |
|---|---|
Security token is required | The securityToken SOAP element was empty. |
User name is required | The username SOAP element was empty. |
Password is required | The password SOAP element was empty. |
Account not found | The securityToken doesn't match any registered tenant. Verify the token with Jonas support. |
Communication info not found | The tenant exists but has no communication endpoint configured. Contact Jonas support. |
Failed to create communication client | The service could not open a channel to the tenant's engine — typically a certificate issue. Contact Jonas support. |
No response from PVX API | The tenant's engine accepted the call but returned an empty response. Retry once; if persistent, contact Jonas support. |
Web service error | An unhandled error inside the service. Treat as opaque, retry once, escalate to Jonas support if persistent. |
Invalid Password or UserName <userId> | The Jonas engine rejected the credentials. Verify username and password. |
Business-rule errors
When isAuthenticated is true but the engine rejects the payload — for
example, an unknown CompanyCode, a missing required field, or a duplicate primary
key — the failure surfaces inside the parsed data JSON:
{
"WebMethod": "GJZJ6J",
"Option": "scan",
"CompanyCode": "TT",
"ARSubledgerCode": "AR",
"errors": ["Invalid CompanyCode"],
"ErrorsFound": "1",
"RecordsProcessed": "0"
}
Always send an Option: scan request first to surface validation errors without
committing data, then resend with Option: update once ErrorsFound is
0.
Limits, timeouts & concurrency
| Aspect | Value |
|---|---|
| Maximum request size | 50 MB (after SOAP envelope & JSON encoding) |
| Maximum response size | 10 MB |
| Single-call latency | Up to ~10 minutes for large scan / update operations |
| Recommended HTTP client timeout | ≥ 12 minutes |
| Per-tenant concurrency | 5 simultaneous calls; additional requests queue for up to 2 minutes |
For datasets that exceed the size limits, prefer GJZJ82J datamart reads with
PageSize pagination, and chunk large upload arrays
(AR_CustomerMaster_tbl, WO_Headers_tbl, etc.) into multiple
update calls of a few hundred rows each. The service does not support resuming a
partially-applied update; if a chunk fails, resend the same chunk after correcting
the errors reported in errors[].
Sample method calls
Each endpoint page in the sidebar documents the available SOAP request/response
samples for that function's Schema, Template,
Download, Scan, and Update options. A
typical SOAP call wraps the JSON apiParams payload inside the
standard authentication envelope, for example:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<JonasAPI xmlns="jonas.jonasportal.com/">
<securityToken>...</securityToken>
<username>...</username>
<password>...</password>
<apiParams>
{ "WebMethod": "GJZJ6J", "Option": "Schema", "CompanyCode": "JC" }
</apiParams>
</JonasAPI>
</soap:Body>
</soap:Envelope>Next steps
- Reading Data — simple datamart queries.
- Customers — full schema + scan / update samples.
- Work Orders — schema + import request / response pairs.
- Job Master — create and export jobs.