openapi: 3.0.0 info: title: Core Intacct REST API Services description: | Services available throughout the API. version: '1.0' servers: - url: https://api.intacct.com/ia/api/v1-beta2 description: Open Beta tags: - name: Composite requests description: >- Composite request service for submitting multiple "subrequests" in a single POST request. x-displayName: Composite requests - name: Models description: >- Use the model service to find all of an object's queryable fields, their data types, valid values (for enums) and relationships to other objects. You can use any of those within the select and/or filter elements of a query. The model service works with both standard and custom objects. x-displayName: Models - name: Query description: >- The query service lets you query the data in a Sage Intacct company to return a list of objects that match given conditions. You can specify complex filter expressions and define the list of fields that you want included for each object in the results. x-displayName: Query paths: /services/core/composite: post: summary: Send a composite request description: Sends multiple requests within a single POST request. tags: - Composite requests operationId: post-services-composite requestBody: description: Array of subrequests required: true content: application/json: schema: $ref: '#/components/schemas/core-composite' examples: Multiple independent requests to change employee location: value: - method: PATCH path: /objects/company-config/employee/26 body: location: key: '6' - method: PATCH path: /objects/company-config/employee/33 body: location: key: '6' - method: PATCH path: /objects/company-config/employee/62 body: location: key: '6' Multiple requests using data from previous: value: - method: GET path: /objects/company-config/employee/52 resultReference: employee - method: POST path: /services/core/query body: object: employee fields: - id - jobTitle - department.key - employeeType.name filters: - $eq: department.key: '@{employee.department.key}' - $eq: employeeType.name: '@{employee.employeeType.name}' filterExpression: 1 and 2 orderBy: - id: asc Multi-status example: value: - method: GET path: >- /services/core/async/job-status?jobId=NjQ2NTc2MzAzMVl1Ul9qVmd6M2t4M2pPdEJya2J5Y2dBQUFBQTE - method: GET path: /objects/company-config/contact/2662 responses: '200': description: OK content: application/json: schema: type: object properties: ia::status: type: string description: HTTP status code ia::result: type: array description: Composite response items: type: object properties: ia::result: type: object anyOf: - type: object description: >- Response of GET on a single object or query results - $ref: '#/components/schemas/object-reference' ia::meta: $ref: '#/components/schemas/metadata' ia::meta: $ref: '#/components/schemas/metadata' examples: Multiple independent requests to change employee location: value: ia::result: - ia::result: key: '26' id: '0014' href: /objects/company-config/employee/26 ia::meta: totalCount: 1 ia::status: 200 ia::headers: X-IA-API-ORM-Action: update - ia::result: key: '33' id: '1' href: /objects/company-config/employee/33 ia::meta: totalCount: 1 ia::status: 200 ia::headers: X-IA-API-ORM-Action: update - ia::result: key: '62' id: '2' href: /objects/company-config/employee/62 ia::meta: totalCount: 1 ia::status: 200 ia::headers: X-IA-API-ORM-Action: update ia::meta: totalCount: 3 Multiple Requests using data from previous: value: ia::result: - ia::result: key: '52' id: Emp2 SSN: '100000001' jobTitle: Sr Software Eng location: id: '10' key: '15' name: Indianapolis href: /objects/company-config/location/15 department: id: '10' key: '10' name: QA - II href: /objects/company-config/department/10 manager: key: '11' id: '10' href: /objects/company-config/employee/11 birthDate: '1984-04-14' startDate: '2021-05-01' endDate: '2025-04-02' status: active employeeType: id: Part Time name: Part Time key: '2' href: /objects/company-config/employee-type/2 gender: female terminationType: involuntary primaryContact: id: abc(C02) name: abc(C02) key: '205' href: /objects/company-config/contact/205 defaultCurrency: MXN earningType: key: '2' id: earningType2 name: earningType2 href: /objects/company-config/earning-type/2 class: id: SW-Office name: Office Software key: '9' href: /objects/company-config/class/9 href: /objects/company-config/employee/52 ia::meta: totalCount: 1 ia::status: 200 - ia::result: - id: Emp2 jobTitle: Sr Software Eng department.key: '10' employeeType.name: Part Time - id: Emp10 jobTitle: QA Engineer department.key: '10' employeeType.name: Part Time - id: Emp22 jobTitle: Architect department.key: '10' employeeType.name: Full Time ia::meta: totalCount: 3 start: 1 pageSize: 100 next: null previous: null ia::status: 200 ia::meta: totalCount: 2 '207': description: Multi-Status content: application/json: schema: type: object properties: ia::status: type: string description: HTTP status code ia::result: type: array description: Composite response items: type: object anyOf: - title: success-response description: Success response properties: ia::result: type: object anyOf: - type: object description: >- Response of GET on a single object or query results - $ref: '#/components/schemas/object-reference' - $ref: '#/components/schemas/error-response' ia::meta: $ref: '#/components/schemas/metadata' - $ref: '#/components/schemas/error-response' ia::meta: $ref: '#/components/schemas/metadata' examples: Multi-status example: value: ia::result: - ia::error: code: notFound message: >- Asynchronous job 6465763031YSPy9lgWtJCMGZ6UkUbA6QAAAAY1 status could not be found supportId: tqKR0%7EYsTZeDEdVao0_h01dZFQqgAAAAY ia::status: 404 - ia::error: code: unprocessed message: Operation skipped due to atomic transaction failure ia::status: 422 ia::meta: totalCount: 2 totalSuccess: 0 totalError: 2 '400': $ref: '#/components/responses/400error' security: - OAuth2: [] /services/core/model: get: summary: Get an object model definition description: List all the fields and relationships for an object. operationId: get-services-model tags: - Models parameters: - $ref: '#/components/parameters/name' responses: '200': description: OK content: application/json: schema: type: object title: Definition of the object model properties: ia::result: $ref: '#/components/schemas/object-model' ia::meta: $ref: '#/components/schemas/metadata' examples: Model for department: value: ia::result: fields: id: mutable: false nullable: false type: string readOnly: false writeOnly: false required: false key: readOnly: true type: string writeOnly: false required: false nullable: true mutable: false name: nullable: false type: string readOnly: false writeOnly: false required: false mutable: true reportTitle: nullable: true type: string readOnly: false writeOnly: false required: false mutable: true status: enum: - active - activeNonPosting - inactive type: string readOnly: false writeOnly: false required: false nullable: false mutable: true groups: audit: fields: createdBy: readOnly: true type: string writeOnly: false required: false nullable: true mutable: false createdDateTime: format: date-time readOnly: true type: string writeOnly: false required: false nullable: true mutable: false modifiedBy: readOnly: true type: string writeOnly: false required: false nullable: true mutable: false modifiedDateTime: format: date-time readOnly: true type: string writeOnly: false required: false nullable: true mutable: false httpMethods: OPTIONS,GET,POST,DELETE,PATCH refs: parent: apiObject: company-config/department fields: id: type: string readOnly: false writeOnly: false required: false nullable: true mutable: true key: nullable: true type: string readOnly: false writeOnly: false required: false mutable: true name: readOnly: true type: string writeOnly: false required: false nullable: true mutable: false supervisor: apiObject: company-config/employee fields: id: type: string readOnly: false writeOnly: false required: false nullable: true mutable: true key: nullable: true type: string readOnly: false writeOnly: false required: false mutable: true name: readOnly: true type: string writeOnly: false required: false nullable: true mutable: false lists: [] idempotenceSupported: true ia::meta: totalCount: 1 totalSuccess: 1 totalError: 0 '400': $ref: '#/components/responses/400error' security: - OAuth2: [] /services/core/query: post: summary: Query an object description: Queries an object for filtered data. operationId: post-services-query tags: - Query requestBody: content: application/json: schema: $ref: '#/components/schemas/core-query' examples: Query vendor: value: object: accounts-payable/vendor fields: - id - name - status - href filters: - $eq: status: active - $eq: billingType: openItem filterExpression: 1 and 2 orderBy: - id: asc responses: '200': description: OK content: application/json: schema: type: object title: Query results properties: ia::result: type: array description: Fields requested in query items: type: object description: List of fields and their values additionalProperties: oneOf: - type: string nullable: true - type: integer nullable: true - type: number nullable: true - type: object ia::meta: $ref: '#/components/schemas/metadata-pages' examples: Response - Query vendor: value: ia::result: - id: Vend-00002 name: Test vendor status: active href: /objects/accounts-payable/vendor/85 - id: VEND-00010 name: Design Works status: active href: /objects/accounts-payable/vendor/111 ia::meta: totalCount: 2 start: 1 pageSize: 100 next: null previous: null '400': $ref: '#/components/responses/400error' security: - OAuth2: [] components: schemas: core-composite: description: >- Schema for describing a single request that will be included as part of a POST body sent to the composite request service. type: object properties: method: type: string description: Operation for request. nullable: false example: POST enum: - GET - POST - PATCH - DELETE path: type: string description: Path to the request endpoint in the Intacct REST API. nullable: false pattern: ^\/(objects|services)\/[a-z_][a-z_0-9.\-:]+(.*)?$ example: /objects/accounts-payable/vendor headers: type: object description: Headers needed for this request. example: Idempotency-Key: e9606bb2-6be1-4c9e-a2a7-134cd644a5ee body: type: object description: Request body for POST or PATCH operations. example: lastName: Doe firstName: John id: Doe, John resultReference: type: string description: >- Reference identifier for success results, used by other requests as input data. nullable: false example: contactRef required: - method - path object-reference: type: object description: Reference to created or updated object properties: key: type: string example: '12345' id: type: string example: ID123 href: type: string readOnly: true example: /objects///12345 metadata: description: Metadata for response type: object properties: totalCount: type: integer description: Total count readOnly: true example: 3 totalSuccess: type: integer description: Total success readOnly: true example: 2 totalError: type: integer description: Total errors readOnly: true example: 1 error-response: type: object description: Error response properties: ia::result: type: object properties: ia::error: type: object properties: code: type: string example: invalidRequest message: type: string example: Payload contains errors supportId: type: string example: sQrM9%7EYdh5oDEWVb80mrn9xuHjoAAAABBQ errorId: type: string example: REST-1064 additionalInfo: type: object properties: messageId: type: string example: IA.PAYLOAD_CONTAINS_ERRORS placeholders: type: string propertySet: type: string details: type: array items: type: object properties: code: type: string example: invalidRequest message: type: string example: /testDate is not a valid field errorId: type: string example: REST-1043 target: type: string example: /testDate additionalInfo: type: object properties: messageId: type: string example: IA.NOT_A_VALID_FIELD placeholders: type: string example: FIELD: /testDate propertySet: type: string ia::meta: $ref: '#/components/schemas/metadata' object-model: type: object description: Generic response for object model definition properties: fields: type: object groups: type: object refs: type: object idempotenceSupported: type: boolean example: true default: true httpMethods: type: string example: OPTIONS,GET,DELETE,PATCH,POST core-query: description: Query request type: object properties: object: type: string example: accounts-payable/vendor description: >- Object type to query, in the form `/`. For custom objects use `platform-apps/nsp::`. fields: description: >- List of fields to include in the response. Can be any combination of these: * The name of a field in the object that you are querying, such as `id`. * The name of a field in a related object, using the form `relatedObjectName.fieldName`, such as `vendor.id`. * The result of an aggregate function run against the values in the returned objects. Use the form `function:fieldName`, such as `min:startDate` to return the earliest starting date. Valid function names are: * `count` * `avg` * `sum` * `min` * `max` * The result of an aggregate function run against the values in related objects, using the form `function:relatedObjectName.fieldName`, such as `max:vendor.creditLimit`. The same functions are supported as for object fields. type: array items: type: string example: - key - id - max:vendor.creditLimit filters: description: >- Filter conditions to select the objects to return based on their field values. You use operators and conditions to build your filter, such as `{"$eq":{"status":"active"}}` to select objects in which `status` is equal to "active". example: - $eq: status: active - $gt: totalDue: '1000' - $contains: name: Acme type: array items: anyOf: - title: equal type: object description: >- Field value must be equal to this specified value. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [filterParameters](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. For example, `{"eq":{"postingDate":"priorYear"}}`. properties: $eq: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string nullable: true - type: integer nullable: true - type: number nullable: true - type: boolean example: $eq: status: active - title: not equal type: object description: >- Field value must not be equal to this specified value. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [filterParameters](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $ne: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string nullable: true - type: integer nullable: true - type: number nullable: true - type: boolean example: $ne: status: inactive - title: less than type: object description: >- Field value must be less than this specified value. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [filterParameters](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $lt: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $lt: totalDue: '100' - title: less than or equal type: object description: >- Field value must be less than or equal to this specified value. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [filterParameters](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $lte: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number - type: boolean example: $lte: totalDue: '500' - title: greater than type: object description: >- Field value must be greater than this specified value. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [`filterParameters`](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $gt: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $gt: totalDue: '1000' - title: greater than or equal type: object description: >- Field value must be greater than or equal to this specified value. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [`filterParameters`](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $gte: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number - type: boolean example: $gte: totalDue: '999' - title: in type: object description: >- Field value is one of the specified values. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [`filterParameters`](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $in: type: object description: >- The field name and list of values to be compared with object values. additionalProperties: type: array items: oneOf: - type: string - type: integer - type: number - type: boolean example: $in: firstName: - Tim - Anjali - Gabriel - title: not in type: object description: >- Field value is not one of the specified values. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [`filterParameters`](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $notIn: type: object description: >- The field name and list of values to be compared with object values. additionalProperties: type: array items: oneOf: - type: string - type: integer - type: number - type: boolean example: $notIn: country: - United States - Canada - title: between type: object description: >- Field value is within the given range, inclusive. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [`filterParameters`](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $between: type: object description: >- The field name and the beginning and ending values to be compared with object values. additionalProperties: type: array items: oneOf: - type: string - type: integer - type: number example: $between: totalDue: - '1' - '1000' - title: not between type: object description: >- Field value is not within the given range. For date fields, you can use these macro values that are relative to the current date or the `asOfDate` in [`filterParameters`](#filterParameters), if set:
  • today
  • currentWeek
  • currentMonth
  • currentQuarter
  • currentYear
  • yesterday
  • lastWeek
  • priorMonth
  • priorQuarter
  • priorYear
These are most useful for queries that you want to save and use repeatedly, such as for views or reports. Just change the `asOfDate` each time to retrieve the same data set for different time periods. properties: $notBetween: type: object description: >- The field name and the beginning and ending values to be compared with object values. additionalProperties: type: array items: oneOf: - type: string - type: integer - type: number example: $notBetween: totalDue: - '100' - '1000' - title: contains type: object description: >- Field value contains the given string or number. Cannot be used with date fields. properties: $contains: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $contains: name: Acme - title: does not contain type: object description: >- Field value does not contain the given string or number. Cannot be used with date fields. properties: $notContains: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $notContains: name: llc - title: starts with type: object description: >- Field value starts with this string or number. Cannot be used with date fields. properties: $startsWith: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $startsWith: name: A - title: does not start with type: object description: >- Field value does not start with this string or number. Cannot be used with date fields. properties: $notStartsWith: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $notStartsWith: name: Q - title: ends with type: object description: >- Field value ends with this string or number. Cannot be used with date fields. properties: $endsWith: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $endsWith: name: inc - title: does not end with type: object description: >- Field value does not end with this string or number. Cannot be used with date fields. properties: $notEndsWith: type: object description: >- The field name and value to be compared with object values. additionalProperties: oneOf: - type: string - type: integer - type: number example: $notEndsWith: name: llc filterExpression: description: > Logical operators to apply when there are multiple filter conditions. The conditions in the `filters` array are implicitly numbered starting at 1. Supports `and`, `or`, and grouping with parentheses. Shortcuts: + `and` by itself means that all conditions must be true. + `or` by itself means that at least one condition must be true. type: string example: (1 and 2) or 3 default: and filterParameters: description: |- Pre-defined filter options. type: object properties: asOfDate: type: string format: date description: >- The "as of" date to use with any relative date comparisons in `filters`. For example, if `asOfDate` is set to "2022-04-01" then `priorMonth` will be "03". The current date is used if `asOfDate` is not set. example: '2022-04-01' includeHierarchyFields: description: >- Set to `true` to include hierarchical structure information with each object in the response. type: boolean example: false default: false caseSensitiveComparison: description: >- Queries are case-sensitive by default. Set to `false` to ignore case in a query. type: boolean example: true default: true includePrivate: description: >- By default, in a multi-entity company, queries from the top-level entity do not access data in private entities. Set includePrivate to true if you want to query data in private entities. type: boolean default: false example: false orderBy: description: >- Set the order of the results by specifying field names to sort by and whether they should be in ascending or descending order. type: array items: type: object title: field name and sort order additionalProperties: type: string enum: - asc - desc example: - totalDue: asc - lastPaymentMadeDate: desc start: description: First record of the result set to include in the response. type: integer example: 1 size: description: Number of records to include in the response. type: integer example: 100 metadata-pages: description: Metadata for collection response type: object properties: totalCount: type: integer description: Total count readOnly: true example: 3 start: type: integer description: Start element number readOnly: true example: 1 pageSize: type: integer description: Page size readOnly: true example: 100 next: type: integer description: Next element number readOnly: true nullable: true example: 101 previous: type: integer description: Previous element number readOnly: true nullable: true example: null responses: 400error: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/error-response' securitySchemes: OAuth2: description: Sage Intacct OAuth 2.0 authorization code flow type: oauth2 flows: authorizationCode: authorizationUrl: https://api.intacct.com/ia/api/v1-beta2/oauth2/authorize tokenUrl: https://api.intacct.com/ia/api/v1-beta2/oauth2/token refreshUrl: https://api.intacct.com/ia/api/v1-beta2/oauth2/token scopes: {} parameters: name: name: name description: >- Object name, in the form `/`. For custom objects use `platform-apps/nsp::`. in: query schema: type: string required: true example: accounts-payable/vendor