This release is scheduled to go live on the evening of November 16, 2018 Pacific Time.


Enhanced API session management

You can now initiate a new entity-level session from a top-level session using an existing session ID. You can also use this approach to create a new entity-level session from the current entity-level.

To allow for this, the getAPISession function has been enhanced to accept a locationid parameter that lets you specify the entity ID. The following example shows a request that uses an existing session ID for authentication and gets a new session for the entity whose locationid is Arizona:

<request>
  <control>
    ...
  <operation>
    <authentication>
      <sessionid>AxznKZR1HwDAal-uCVLbHV7AMFoKQ..</sessionid>
    </authentication>
    <content>
      <function controlid="testControlId">
        <getAPISession>
          <locationid>Arizona</locationid>
        </getAPISession>
      </function>
    </content>
  </operation>
</request>

You can also provide the locationid when getting a new session using your company login credentials.

You cannot currently get a top level session ID from an entity level session.

Entity ID now returned in all responses

All API functions now provide a location ID in the authentication element of the response so that you always know whether you are interacting at the top level of a company or at an entity level. An empty locationid element means you are at the top level.

<authentication>
    <status>success</status>
    <userid>myUserId</userid>
    <companyid>myCompanyId</companyid>
    <locationid>California</locationid>
    <sessiontimestamp>2018-10-12T09:50:40-07:00</sessiontimestamp>
</authentication>

General Ledger

Return the dimension information of a company

You can now return the dimension information of a company using the new getDimensions function. This is especially useful for integrators needing to dynamically load a company’s dimensions.

Return financial information of a company

You can now return financial information of a company using the new getFinancialSetup function.


Inventory Control

Replenishment

The replenishment process lets you automate reordering and fulfillment for cost-effective inventory management. With this release, you can use the API to set up warehouses, vendors, and items to include varying levels of replenishment settings so that you are ready to run snapshots and replenishments in the Sage Intacct UI.

You can enable replenishment on warehouses. See the ENABLE_REPLENISHMENT parameter on these functions:

You can specify a default lead time on vendors. See the DEFAULT_LEAD_TIME parameter on these functions:

You can enable replenishment on an item and set up replenishment parameters for the item across vendors, for specific vendors, and for specific warehouse/vendor combinations. See the various replenishment parameters on these item functions:

The following correlates the replenishment parameters for items on the UI page (blue text) to their location in API calls (orange text):

Replenishment parameters

Learn more about setting up replenishment in the Sage Intacct product help.

Landed cost for inventory items

You can now create inventory items with landed costs.

See the information about the LANDEDCOSTINFO parameter on these functions:

Cost of goods sold adjustments for closed periods

Landed costs and other inventory operations, such as changing an item’s standard cost, can affect the cost of goods sold (COGS) in closed periods. Consider the following examples:

In both scenarios, the inventory subledger is correctly updated, but the general ledger is not. Starting with this release, you can use the API to clear such variances. With the new COGSCLOSEDJE object, you can view the variances and then selectively apply adjustments to the general ledger in an open period.

This means you no longer need to make manual GL adjustments for each item, warehouse, and entity as you did in previous releases.


Customization and Platform Services

Interactive Custom Reports

The new Interactive Custom Report Writer in the Sage Intacct UI provides powerful features for creating even the most complex reports. After creating your report definitions, you can use API functions to view these new reports and run them.

For more information:

Customizations for multiple transaction definitions

Previously, if you wanted the same customization to apply to different transaction definitions, you had to recreate the customization for each definition. In both Customization and Platform Services, you can now create a single customization that applies to multiple definitions in the UI. Simply choose Inventory Control Transaction Detail, Purchase Order Transaction Detail, or Order Entry Transaction Detail in the Object field when creating the customization, then add as many transaction definitions as you want in the Document Type field. Usage information for Customization and Platform Services is available in the Sage Intacct product help.

Customization packages

You can use the <documentTypes> tag in packages to create a single customization that points to multiple transaction definitions. This excerpt from a package file shows how to do this:

<customFields>
    <customField>
        <customFieldID>CUSTOMER_HEALTH</customFieldID>
        <documentTypes>
            <documentType>Purchase Order</documentType>
            <documentType>PO Receiver</documentType>
        </documentTypes>
    </customField>
</customFields>

Custom applications

When a custom application with multiple transaction definitions for a customization is exported, it does not include multiple document types in the XML, but rather provides separate customizations that use the same ID for each transaction definition. When your custom application is installed, these customizations are merged into one customization record in the UI.

The XML file for a custom application should not be edited directly.

Synchronous API Smart Events

You can now ensure that a group of events, including the triggering action, are executed in order as a set using synchronous API Smart Events. With synchronous API Smart Events, the triggering action and the chain of synchronous API Smart Events succeed or fail as a group (think in terms of a larger task that includes multiple actions). On failure, the system provides direct feedback through an error message.

Previously, all Smart Events were asynchronous, which meant that these events were executed in parallel and could occur out of order. For instance, you could have written an API Smart Event to create a sales invoice when a vendor was updated, and then written another event to update that same sales invoice. Since Smart Events were all asynchronous, the update event could have occurred before the create event, rendering both events invalid.

When creating API Smart Events in the Sage Intacct UI, there is a new checkbox for choosing synchronous execution:

Diagram for merge field entry points

In addition to grouping a set of events and the trigger into a single set that succeed or fail as a group, this feature also eliminates the possibility of collision, concurrency, and overwriting between events since they are executed one after another.

About execution triggering and rollback

When an action triggers a synchronous API Smart Event, the system attempts to execute all synchronous events that are part of the resulting chain of actions in alphabetical order according to Smart Link IDs. This happens before the triggering action is committed. If the chain executes successfully, the triggering action is saved and any asynchronous Smart Events are then executed.

If the chain of synchronous events cannot be executed successfully, the transaction or record is rolled back and the originating trigger action is prevented. Additionally, an error message is emitted. No synchronized API Smart Events or asynchronous Smart Events (of any type) are executed that would have been part of the chain.

You can see if your asynchronous Smart Events were executed or failed in your offline job history.

Best practices

Though powerful, synchronous API Smart Events add a level of complexity, so you should be thoughtful in your approach. For this reason, we recommend the following:


Contracts

Automatically reallocate revenue and expense schedules

You can now automatically reallocate daily rate or straight line revenue or expense schedules based on different start and/or end dates. Previously if you needed to reallocate a revenue or expense schedule, you had to manually edit the schedule.

For more information:

More control over hold and resume for contract lines

You can now track the hold and resume dates for billing, revenue, and expense schedules and capture comments related to the hold or resume. You can also specify the type of revenue adjustment to make when resuming a revenue schedule from hold.

See the MEMO and REVENUEADJUSTMENT parameters for these functions:

In addition, a hold date (ASOFDATE) is no longer required when holding a contract line. If you leave the Hold date field blank, the hold date will default to the last posted schedule entry date + 1.

List Contract lines by line type

A new query parameter lets you search for contract lines by line type (LINETYPE).


This release is scheduled to go live on the evening of August 17, 2018 Pacific Time.


Customization Services and Platform Services

You can now select injections from the Sage Intacct UI instead of adding them manually. Creating Smart Events, Smart Rules, and Smartlinks just got a lot easier. For example, the following shows how to use the field lookup when writing a condition for a Smart Rule:

Screenshot of merge field selection window

You can use the field lookup to help you write conditions for Smart Rules, Smart Events, and Smartlinks. You can also use this capability when creating the building blocks that comprise these. For example, you can use field lookup for creating Smart Event email addresses, Smart Rule error messages, Smartlink targets, and so forth. The following diagram shows all the places you can use the lookup:

Diagram for merge field entry points

Note that the field lookup lets you access fields for related objects as well as any custom fields.


New SDK for Node.js

Version 1 of the Sage Intacct SDK for Node.js is now available. You can interact with the Web Services gateway using Node.js objects—you no longer need to work directly with the underlying XML API.

You can easily get started with the SDK, then use the reference documentation to go deeper.


Company

Queue administration for offline jobs

Queue administration for offline jobs is now available in the API. You can list your offline job queue and offline job history. You can even take control of your queue and prioritize or cancel jobs if you have the right subscription (Premium Level of Service subscription at Silver level or higher).

An offline job refers to any sort of data action that you choose to process offline in the background while you continue working in Sage Intacct. Offline jobs might include CSV imports, reports, contract invoices, check runs, Data Delivery Service jobs, and more. (Smart Events are not currently supported.)

For more information, see Queue Administration.

Prevent user deletion for improved audit trails

In previous releases, it was possible to delete a user who had been active in the system. In the current release, any user who has been active at least once cannot be deleted. This is needed to preserve the correlation between users and existing logs.

In addition, it is no longer possible to create inactive users.


Web Services

Deactivate Web Services authorizations

Previously, you had to delete a sender ID from your Web Services authorizations list to block the sender ID from making Web Services requests to your company. With the new Status field, you can simply activate or deactivate sender IDs as needed.

Warnings no longer block API calls

In previous releases, an API call that generated a warning message in the system was blocked. Now such warnings will be ignored and the calls will go through.

For example, an API call that would result in a warning due to a future GL posting date will no longer fail and return the warning in the XML response. From now on, only true errors will prevent XML API calls, not warnings due to business logic or other factors.


Contracts and Revenue Management

MEA allocations

You can now create MEA allocations using the API. You can also override system-calculated allocation amounts.

Uncancel contract lines

If you incorrectly or inadvertently canceled a contract line, you can use the new uncancel function to undo that action:

Use contract renewal billing templates on contract lines

A new RENEWALBILLINGTEMPLATENAME parameter lets you specify a billing template on a contract line to associate with the contract line renewal. As an example, if you have a three-year contract but do not want a given contract line to use the billing template for the three-year period, you can use RENEWALBILLINGTEMPLATENAME to specify a template with a shorter term for that line.

For more information about this feature, including default behaviors, see the RENEWALBILLINGTEMPLATENAME parameter on:


Cash Management

Update and delete other receipts

You can now update and delete other receipts using new legacy functions:


Improved documentation for dimension restrictions

The dimensions API documentation has been enhanced to provide more usage information and examples.


This release is scheduled to go live on the evening of May 18, 2018 Pacific Time.


Web Services enhancements

Introducing Web Services authorizations

With this release, company administrators can use Web Services authorizations to control who makes Web Services requests to a given company. Previously, anyone with a Web Services sender ID could send requests to any Sage Intacct company for which they had company login credentials. Now, sender IDs must be included in a company’s Web Services authorizations list first.

Web Services authorization list

Sage Intacct will perform a onetime update to automatically add sender IDs that made Web Services requests to a company within the last six months to the company’s Web Services authorizations list. Despite this, it’s possible that integrations or other Web Services activity might fail with the following error:

<response>
    <control>
        <status>success</status>
        <senderid>test_sender_id</senderid>
        <controlid>hello_world</controlid>
        <uniqueid>false</uniqueid>
        <dtdversion>3.0</dtdversion>
    </control>
    <operation>
        <authentication>
            <status>failure</status>
            <userid>test_user_id</userid>
            <companyid>test_company_id</companyid>
        </authentication>
        <errormessage>
            <error>
                <errorno>XL03000006</errorno>
                <description>Invalid Web Services Authorization</description>
                <description2>The sender ID &#039;test_sender_id&#039; is not authorized to make Web Services requests to company ID &#039;test_company_id&#039;.</description2>
                <correction>Contact the company administrator to grant Web Services authorization to this sender ID.</correction>
            </error>
        </errormessage>
    </operation>
</response>

If this happens, ask the company administrator to review the Web Services authorizations list on the Company Configuration Security tab, and add your sender ID if it’s not present. For more information, see Web Services authorizations in the Sage Intacct product help.

The ajax sender ID must be included in the authorizations list when the Platform Services AJAX gateway is used from page scripts.


User changes

Improved Web Services user management for company administrators

The purpose of a Web Services user has not changed—it still provides company login credentials that allow for Web Services access, but not UI access. However, with this release, company administrators can create a separate Web Services user in the Sage Intacct UI directly. They no longer need to create a standard user and check the Web Services only checkbox. The underlying functionality is the same.

Partners should consider updating any documentation they provide explaining how to create a Web Services user.

New warehouse user type

A new warehouse user type on the USERINFO object provides access to select features in the Order Entry, Purchasing, and Inventory Control applications.

For more, see the information about the USERTYPE parameter on these functions:


Advanced Audit Trail

You can now get information about personal data access in the system. With a subscription to Advanced Audit Trail, you can track access to all records that contain personal data stored in contact, vendor, and customer records. You can return information about who made changes to the data as well who simply read it, which can be important for regulatory purposes.

Information about read access covers using listers in the UI, accessing objects that reference other objects with personal data, viewing reports, using Smart Events, and making read, readByQuery, readMore, and readByName API calls. Returned elements have an ACCESSMODE of Personal data access, for example:

<advaudithistory>
    <OBJECTTYPE>customer</OBJECTTYPE>
    <OBJECTKEY>C-0018</OBJECTKEY>
    <USERID>jjr</USERID>
    <ACCESSTIME>05/07/2018 20:11:49</ACCESSTIME>
    <ACCESSMODE>Personal data access</ACCESSMODE>
    <WORKFLOWACTION>Create</WORKFLOWACTION>
    <IPADDRESS>xxx.xxx.xx.xx</IPADDRESS>
    <SOURCE>ui</SOURCE>
    <ID>sessionidxxx</ID>
</advaudithistory>

Information about write access corresponds with information that is returned by the existing audit trails functions, with the difference that all returned elements have an ACCESSMODE of System audit.

For more information:


Platform Services and Customization Services enhancements

Change in requirements for Smart Event API calls and Smart Event emails

In previous releases, you could create a Smart Event API in the UI without providing any content for the API body. You could also create a Smart Event email without supplying a subject for the email message. Both of these error cases are now prevented, and you will be prompted if you forget to supply this information when creating new Smart Events. If you edit an existing Smart Event that does not meet these requirements, you will need to correct the problem before saving your changes.

If your Customization Services package or Platform Services application has Smart Events that do not meet these requirements, it will not be installable. You can either fix the Smart Events or remove them, then republish the package or application.

Change in requirements for conditions

In previous releases, a condition for a Smart Rule, Smart Event, Smartlink Click, or Smartlink Fetch could include an expression that resulted in a divide-by-zero or a modulo-by-zero operation. For example, a condition that divided the value of one field by the value of a second field was allowed even though the value of the second field (INVOICE.QTY in our example) might be zero:

( {!INVOICE.PRICE!} / {!INVOICE.QTY!} ) > 5000

The current release provides better error checking and prevents any such conditions from being saved in the UI. You can easily correct the problem by providing logic to test for the error case. For example, the following ensures that INVOICE.QTY is not zero before performing the division:

{!INVOICE.QTY!} != 0 && ( {!INVOICE.PRICE!} / {!INVOICE.QTY!} ) > 500

If you edit an existing Smart Rule, Smart Event, Smartlink Click, or Smartlink Fetch with one of the problematic conditions, you will need to correct the problem before saving your changes.

If your Customization Services package or Platform Services application includes one of the conditions, it will not be installable. Also, if you notice incorrect behavior in your company that might be related to a Smart Rule, Smart Event, Smartlink Click, or Smartlink Fetch, it’s possible you are using an existing Customization Services package or Platform Services application that has not been updated to address the new requirements. In either case, the solution is to fix the condition or remove the Smart “item” altogether, then republish the package or application.

Improved error message in AJAX SDK for JavaScript

UI error messages thrown by the Platform Services AJAX SDK for JavaScript have been improved for clarity and completeness. Instead of printing only the first description line of an error, the second description and any correction is also printed.


Enhancements to Contracts

Modify the GL posting date for contract lines with unbilled accounting entries

You can now specify the dates that Unbilled AR and Unbilled deferred revenue will post for contract lines.

For more, see the information about the GLPOSINGDATE parameter on these functions:

New deliver function for contract lines

A new deliver function for contract lines lets you set the delivery status and date for contract lines as part of an event-driven revenue recognition flow.

For more information:

Support for bill in advance for renewals

The API now supports bill-in-advance for contract renewals.

For more information, see the RENEWALADVBILLBY and RENEWALADVBILLBYTYPE parameters on:


Simple tax rate at the line level for Purchasing and Order Entry transactions

Previously, Simple Tax automatically applied the same tax (amounts or percentages) across all the items in a transaction for Order Entry or Purchasing. With this release, you can apply different tax rates at the line level, which lets you reduce the number of transaction definitions and streamline transaction entry.

For more, see the information about the linelevelsimpletaxtype parameter on these functions:


Reallocate previously posted revenue recognition schedule entries in Order Entry

You can now reallocate the entire revenue recognition schedule, including entries that already posted. The new unpostall parameter on reallocate_revrecschedule unposts any previously posted entries and reallocates all entries in the given time period.

See the information about the unpostall parameter:


Deliver to contact for Purchasing transactions

You can now provide a Deliver to contact for purchasing transactions to help with tax calculations. You can configure at the header level, then override for the individual line items if need be.

For more, see the information about the deliverto parameter on these functions:


This release is scheduled to go live on the evening of February 9, 2018 Pacific Time.


Get information about user restrictions

A new, read-only object called USERRESTRICTION allows admins to access information about which users are restricted to given entities or departments.

For more information:


Smart Events and Smart Rules

In previous releases, the body length of Smart Event API actions was limited to 500 characters or less. This has been increased to 5000 characters.

In addition, new IN and NOTIN operators for Smart Event and Smart Rule conditions are available. For example, the following condition checks whether the currency for an AP Bill is specified in USD or INR:

IN({!APBILL.CURRENCY!},['USD','INR'])

For more, see the information about writing conditions in the Sage Intacct product help.


SDKs

Version 2 of the Sage Intacct SDK for .NET is now available. The SDK now targets .NET Standard 1.6 in order to support both .NET Framework and .NET Core. Make sure you check out the updated overview and guides that accompany this.


Contracts

Support for bill in advance

The API now supports bill-in-advance for contracts. You can set bill-in-advance options for specific customers, then optionally override those settings in your contracts. You can also set the options directly for each contract.

For more information, see the ADVBILLBY and ADVBILLBYTYPE parameters on:

Behavior change when posting multiple revenue and/or expense schedule entries

When posting multiple revenue or expense schedule entries, Sage Intacct will now skip any contract with scheduled entries that have errors, then post all other scheduled entries. Previously, when the system encountered an error during post, the process would terminate without posting any of the requested scheduled entries.

Force the Renewal of Contracts

You can now force the renewal of a contract that failed to renew at the scheduled time. For example, this can be useful if you uploaded multiple contracts as part of an integration and want to avoid manually renewing them in the Sage Intacct UI.

For more information:


On March 16, 2018, Sage Intacct will begin to disable support for older versions of the TLS protocol, which encrypts data that is communicated across networks. To enhance security and meet compliance requirements, we are requiring the use of TLS 1.2 and higher for all browser and Web Services (API) access to our cloud software.

Note: Previous communications stated that TLS 1.1 would be supported, but this is no longer correct.

How will users/developers be impacted?

Once Sage Intacct disables support for TLS 1.0 and 1.1, any browser or API access originating from a resource that does not support TLS 1.2 or higher will fail.

What do users/developers need to do?

Users

Ensure that your browser supports TLS 1.2 or higher (most modern browsers do). You can use the following third-party resource to test your browser’s compatibility:

Developers

Ensure your application is configured to negotiate connections using TLS 1.2 or higher. Depending on the programming language and OS, the requirements will vary. Some helpful information is provided below, but you should not rely solely on this information and must fully test your code.

Language Info
PHP Ensure your PHP version supports cURL version 7.34.0 or higher
Java Java 8: No action required
Java 7: Explicitly enable support for TLS 1.2 and higher
Java 6: Explicitly enable support for TLS 1.2 and higher
Java 5 or earlier versions: Upgrade to Java 6 or higher and explicitly enable support for TLS 1.2
.NET .NET 4.6: No action required
Earlier versions: Research required changes

Developers who want to test API clients can use the following resource:

API - How’s My SSL? https://www.howsmyssl.com/s/api.html

Support

The changes required to address the TLS 1.0/1.1 disablement may require help from your IT resources or other resources familiar with your environment. If you are unsure of what is required and would like Sage Intacct to provide additional advice or guidance, we are happy to help. Contact Sage Intacct Customer and Partner Support or your Account Manager. We can put you in touch with Sage Intacct Professional Services who can assist with performing the necessary changes on a fee based engagement