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


Web Services

New function to list user date and time formatting preferences

The new readUserFormatting function lists information about the specified user’s preferences for date and time format, locale, timezone (GMT offset), and time clock (12 or 24). The locale, such as en_US, is also returned.


Global Consolidations

Ability to select dimensions for consolidated books

In previous releases, global consolidations always included all standard and user-defined dimensions, which could adversely affect performance.

You can now select which dimensions you want to use, so your consolidations meet your requirements and run faster.

Any books you consolidated before the current release have all dimensions selected by default. You can update such books to reduce the set using the new DIMENSIONS parameter. When you create a new book, you choose the dimensions you want (or accept the default value, which is location only).

For more information, see the DIMENSIONS parameter on the following functions:

Historical rate calculation

Now, when you consolidate your books, you can choose whether to use the exchange rate date defined on each individual transaction line or the date of the transaction.

For more information, see the HISTORICALRATEDATETYPE parameter on the following functions:


Inventory Control

Item GL group names now available when listing transactions

When listing Order Entry, Purchasing, or Inventory transactions with readByQuery, the responses will include a new ITEMGLGROUPNAME element with the name of the item GL group.


AP Payments

Improved validation for create_paymentrequest

The create_paymentrequest function now validates for correct values for the paymentmethod parameter.


Platform Services

We improved the workflow for editing platform applications. After editing and saving your work in the UI, you are now returned to the page you were working on instead of back to the main page.

Platform applications can now include user-defined dimensions

If you need a unique dimension to support the requirements of your platform application, you can now provide a user-defined dimension (UDD) with your application. Your UDD will be available on reports and transaction entry pages. In previous releases, if you tried to publish an application with UDDs, you got an error.

Before deciding to provide a UDD with your application, be aware of the following:

To make sure that the consumer of the application is aware of these considerations, a full administrator with the appropriate permissions must authorize the installation of an application with UDDs.

Administrators cannot grant themselves permission to authorize the installation of applications with UDDs. Rather, an administrator is granted this permission by another administrator. (If there is only one active administrator in the company, an exception is made to this rule.) An organization might typically designate one administrator and one backup with this permission.

When you attempt to install an application with UDDs from the UI, you can generate an email authorization request to send to the appropriate administrator. In addition, a request for authorization is added in the Requests for authorization section under Platform Services > Applications. When you attempt to install such an application with the installApp function, the email is skipped, but the same request for authorization is added in the UI.

After authorization is granted, you can install the application without interruption.

See the installApp function or refer to Custom applications in the Sage Intacct product help for more information.


Customization Services

You can now include interactive custom reports in package files for easy sharing. See Customization Packages for more information.


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


Web Services

API session management enhancements

You can now initiate a new top-level session from an entity-level session using an existing session ID. To do this, call getAPISession with an empty locationid parameter:

<request>
  <control>
    ...
  <operation>
    <authentication>
      <sessionid>entityPrivateSessionId..</sessionid>
    </authentication>
    <content>
      <function controlid="testControlId">
        <getAPISession>
          <locationid/>
        </getAPISession>
      </function>
    </content>
  </operation>
</request>

You should always isolate getAPISession in a single request—do not mix getAPISession with other functions.

API session timeout information now available

The response for each API call now includes the projected session timeout in the authentication element:

<authentication>
    <status>success</status>
    <userid>myUserID</userid>
    <companyid>myCompanyID</companyid>
    <locationid></locationid>
    <sessiontimestamp>2019-03-28T13:14:34-07:00</sessiontimestamp>
    <sessiontimeout>2019-03-29T13:14:34-07:00</sessiontimeout>
</authentication>

The session timeout is calculated based on the session duration specified for the user or company plus the current time. A timeout occurs if the session timeout is reached before any subsequent API calls are made. If a call occurs before the projected timeout, it is reset to the current time plus the session duration.


Customization Services

Queue and job history for Smart Events

You can now monitor the Smart Event jobs queued in your company and view a history of completed jobs in the UI. For more information, see Smart Event Jobs in the Sage Intacct product help).


Platform Services

Content security policy for generic menu pages

Generic menu pages now use content security policy directives from the owning platform application.


General Ledger

Recurring account allocations

You can set up recurring account allocations to automatically distribute amounts across multiple dimensions according to a schedule you define.

For more information:


Data Delivery Service

DDS provides filtering for GL account balances

You can now specify the reporting periods for which GL account balances are calculated and delivered to cloud storage. Previously, it was all or nothing.

See additional_parameters for the runDdsJobs function.


Contracts

Contract Types

Contract types let you group contracts in meaningful ways to provide additional insight into your business.

For more information:


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


Web Services

List entity details for the current user

A new readEntityDetails API function has been added to aid Web Services integrations running on a user’s behalf. This will list information about the entities that the current user can access. In the UI, this mimics the inter entity navigation drop down at the top of the screen.

For more information:


Customization Services

New injection parameter for API endpoints

A new {!API_ENDPOINT!} injection parameter lets you access the API endpoint in your Smart Events, SmartLink Click/Fetches, and SmartLink dashboard components.

You should add this new injection parameter to any existing or new components that include a session ID. Then adjust your server-side code to use this endpoint when calling back to Sage Intacct Web Services (instead of using one hard-coded to https://api.intacct.com/ia/xml/xmlgw.phtml). This is a best practice the ensures you are using the correct/most efficient endpoint.

Danger: Do not blindly trust parameters that your code receives over the internet. Always validate the endpoint URL is https and a *.intacct.com domain before using it.

Warning: Components may be copied to sandbox or preview environments when you opt in to these. You need to take additional steps to validate the source of these requests to avoid mixing data across environments.

For example, a dashboard Smart Link Fetch component can pass the session ID and API endpoint URL as follows:

https://www.example.com/dash.php?sessionId={!USERPROFILE.SESSIONID!}&endpoint={!API_ENDPOINT!}

The dash.php code receiving this request should:


General Ledger

General Ledger balances by dimensions

A new get_accountbalancesbydimensions API function has been added. With it you can now more efficiently list account balances grouped by any dimension (standard or user-defined). Developers using the readByQuery API function on the GLACCOUNTBALANCE object should consider using this new function instead.

For more information:

Dynamic allocations

As your business scales, an after-the-fact allocation tool can save time and effort at period end and help provide an understanding of fully loaded costs for departments, projects and more. Sage Intacct now offers a native account allocation solution that allows you to automate the allocation calculation tasks for shifting costs or sharing revenues on a periodic basis.

For more information:

Account allocation groups

Account allocation groups support bulk processing for account allocations, which is useful for organizations with many allocations that must run on the same time period. You can also use account allocation groups to set up the order for sequential processing, where one allocation is dependent on the results of a prior one.

For more information:


Tools and Libraries

Sage Intacct API collection for Postman now handles special characters in passwords

The API collection provides an updated Generate API Session call that escapes problematic special characters, such as the ampersand (&), in passwords for Web Services or login credentials.

Download

The Postman collection for the Web Services tutorial also includes the new Generate API Session call.

SDK Entity ID enhancements

After the entity ID enhancements from last release, all the Sage Intacct SDKs have been enhanced to better support entity slide in:

The latest SDK versions including these changes are:


Project and Resource Management

Unique ID for tasks

The TASK object has a new TASKID parameter for assigning a readable unique ID. A task ID must be unique in the context of a project, and once a task has been created, its ID cannot be changed.

When creating timesheet entries or contract lines, you can now specify a given task by its task ID. In previous releases, tasks were specified with the TASKKEY parameter, which was the record number for the task—now the more readable task ID can be used instead.

See the TASKID parameter on the following functions:


Contracts

Percent complete billing for projects and tasks

Two new parameters on CONTRACTBILLINGTEMPLATE let you create billing templates for the percent complete on tasks or projects. You can specify whether to base the percentages on estimated hours, observed percent completed, or planned hours. Budgeted hours is also available for projects.

For more information:


Consolidations

Ability to set up Global Consolidation books

You can now use the API to create consolidation books that automatically convert different currencies into a single reporting currency, thus providing an integrated view of financial and operational results.

Creating and setting up a new consolidation book is done in several phases:

In 2018 Release 2, an improved version of Global Consolidations was introduced and old functionality was deprecated. Any consolidation book now has a LEGACY parameter that indicates whether it is a new consolidation book (LEGACY=’F’) or a deprecated one. The API only supports creating and updating new consolidation books.


Platform Services

Changes to standard object pages now installed as part of your application

Platform Applications can include standard objects. In previous releases, custom fields, Smart Events, Smart Rules, and changes to pages for standard objects were included when you published your application’s XML file. However, on installing the application, everything was installed except the standard object page changes. So, if you had added sections or tabs to a standard object page, users would not get these when they installed.

The current release fixes this. Applications published with the current release or later now include a version tag set to 2, which tells the installer to include any standard object page changes along with other components.

<Version>2</Version>

If this version element is not present, the installer in the UI will issue a warning message. This message is bypassed when using the installer via the API—the application is still installed but the standard page changes are not.

If the application is undeployed or deleted from a company, the page customizations for the standard object remain unless they are manually deleted. A company can install multiple applications with changes on the same standard object pages, but newer installations of applications cannot change what was installed by previous applications.

Use the lookup field name when working with relationships in formulas

In previous releases, you could only access relationships in your formulas using the integration name of the relationship. For example, you would loop through a Lead object’s related Opportunities to calculate the total revenue value of those opportunities using the relationship’s integration name (R11002):

var total = 0;
{!#LOOP_BEGIN.R11002!}
    total += {!R11002.revenue_value!};
{!#LOOP_END.R11002!}
return total;

Assuming the lookup field name on the Lead object is opportunities, you can now use this name preceded by a caret (^opportunities) as an alternative to the integration name of the relationship:

var total = 0;
{!#LOOP_BEGIN.^opportunities!}
    total += {!^opportunities.revenue_value!};
...


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 prior periods

Landed costs and other inventory operations, such as changing an item’s standard cost, can affect the cost of goods sold (COGS) in prior 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.