Ellipse Gradient for Header
NetSuite OpenAir logo

NetSuite OpenAir Integration Guide

NetSuite OpenAir integrates with enterprise systems through REST APIs, XML or SOAP-style interfaces, scheduled synchronization, and selected account-specific notifications.

NetSuite OpenAir integration options at a glance

NetSuite OpenAir provides REST APIs for supported customers, projects, users, resources, time, expenses, invoices, and related operations. XML or SOAP-style interfaces may remain relevant for legacy integrations or capabilities not available through REST, but the specific endpoint and operations should be verified. OpenAir does not provide a universal event stream; selected account or module notifications may be available, while scheduled incremental retrieval is the more predictable synchronization pattern. Martini can consume these APIs, manage OAuth 2.0 or API-specific credentials, transform JSON or XML, orchestrate dependencies, expose controlled APIs, and implement pagination, batching, checkpointing, retries, and reconciliation.

Integration pointSupported by NetSuite OpenAir?Common use casesHow Martini supports it
REST APIsYesRequest/response access to supported Customers, Projects, Tasks, Users, Resources, time, expenses, invoices, and other OpenAir operations. REST is the preferred starting point for new integrations when the required operation is available.Martini can consume the OpenAir REST API, transform payloads, apply business rules, orchestrate dependent calls, and expose a separate Martini API for downstream consumers.
SOAP/XML APIsLimitedExisting enterprise integrations or operations that remain available through OpenAir XML or SOAP-style interfaces. The exact protocol, endpoint, and supported operations must be verified.Martini can consume documented SOAP services and XML-based interfaces, manage API-specific credentials, map XML payloads, and handle protocol-specific errors.
Webhooks / outbound callbacksLimitedSelected account- or module-specific notifications may provide event-driven processing, but OpenAir should not be assumed to expose notifications for every object or lifecycle event.Martini can receive a confirmed callback, validate and deduplicate the notification, retrieve the current OpenAir resource, and invoke the downstream workflow.
Bulk, asynchronous, or batch operationsLimitedSelected APIs may support batch or multi-object behavior for larger transfers. Object coverage, transaction limits, and semantics require account-specific verification.Martini can control page and batch sizes, sequence dependent operations, checkpoint progress, and retry only failed or retryable work.
File and attachment APIsLimitedDocument and attachment operations may be available for objects such as Expense Reports or project documents, subject to API version, file type, limits, and account configuration.Martini can retrieve or submit supported files, transform metadata, route binary content through workflows, and record the related OpenAir object and correlation identifier.
Scheduled synchronizationYesPolling is appropriate when universal change events are unavailable. Modified-date, timestamp, status, or identifier filters can support incremental retrieval where exposed by the selected API.Martini scheduler-triggered workflows can maintain watermarks, paginate results, apply approval-state filters, and reconcile completed batches.
AuthenticationYesREST integrations can use OAuth 2.0 bearer tokens where enabled. XML or SOAP-style integrations may use OpenAir API credentials and account-specific permissions.Martini can reference secrets and environment configuration for tokens, credentials, account context, and endpoint settings without embedding them in workflows or payloads.
Direct database accessNoDirect access to the OpenAir production database is not a standard integration method. Supported APIs and vendor-provided export or reporting mechanisms should be used instead.Martini should consume supported OpenAir endpoints or files rather than attempting a direct connection to the SaaS database.

How NetSuite OpenAir exposes data and business events

NetSuite OpenAir REST APIs

OpenAir REST APIs provide programmatic request/response access to supported business objects and operations. Availability varies by account enablement, API version, permissions, and object coverage.

Martini implementation pattern

Martini implementation pattern: a workflow authenticates with the configured OpenAir REST credentials, retrieves or submits the required resource, maps JSON data into a canonical model, applies validation and business rules, and writes the result to the target system. Scheduled workflows are used when incremental polling is more reliable than event notifications.

Implementation sequence

Authenticate with the configured OpenAir REST credentials
Retrieve or submit the supported OpenAir resource
Apply pagination or incremental filters where available
Validate dependencies and business rules
Map the response to the target data model
Write the result and store the checkpoint

NetSuite OpenAir SOAP/XML APIs

OpenAir has historically provided XML-based interfaces, including SOAP-style APIs. These may remain relevant for existing integrations or operations unavailable through REST, but the protocol and endpoint must be verified for the account.

Martini implementation pattern

Martini implementation pattern: a workflow consumes the confirmed SOAP or XML endpoint, supplies account-specific credentials, parses the response, maps XML elements to the canonical model, and classifies transport, authentication, validation, and vendor business errors.

Implementation sequence

Confirm the OpenAir XML or SOAP endpoint and operation
Authenticate with account-specific API credentials
Submit the XML or SOAP request
Parse the response and classify errors
Map the result to the target model
Record the correlation ID and processing outcome

Selected OpenAir callbacks

OpenAir should not be treated as a universal webhook provider. Selected account or module notifications may be available, while event coverage and lifecycle support must be confirmed before implementation.

Martini implementation pattern

Martini implementation pattern: Martini receives a confirmed callback, authenticates and validates the request, deduplicates the notification, retrieves the current OpenAir object when necessary, and invokes the downstream workflow. Scheduled reconciliation remains important for missed or unsupported events.

Implementation sequence

Receive the confirmed OpenAir notification
Validate the callback and identify the source object
Check for duplicate or previously processed notifications
Retrieve the current OpenAir resource if required
Map and route the event to downstream systems
Store the event outcome for reconciliation

Scheduled OpenAir synchronization

Scheduled retrieval is the dependable pattern when OpenAir does not expose the required event. Modified-date, timestamp, status, or identifier filters can reduce repeated full loads where supported.

Martini implementation pattern

Martini implementation pattern: a scheduler starts a workflow that loads the last successful watermark, retrieves paginated OpenAir data, filters by approval or lifecycle state, transforms each object, and persists a new checkpoint only after successful processing.

Implementation sequence

Start the scheduled Martini workflow
Load the last successful OpenAir watermark
Retrieve filtered pages of changed objects
Validate and transform each object
Write successful results and isolate failures
Commit the new checkpoint after reconciliation

OpenAir batch and attachment operations

Batch, multi-object, file, and attachment operations may be available for selected APIs and objects. Transaction limits, file types, encoding, and supported operations must be confirmed before use.

Martini implementation pattern

Martini implementation pattern: a workflow divides work into bounded batches, sequences object dependencies, transfers supported attachment content, records per-item outcomes, and retries only transient failures. The workflow can fall back to individual operations when batch behavior is unavailable.

Implementation sequence

Confirm batch or attachment support for the selected object
Partition work within vendor transaction limits
Process dependent objects in controlled order
Transfer the supported file or object payload
Record per-item success and failure details
Retry transient failures and reconcile the batch

Common NetSuite OpenAir integration patterns

Pattern 1: Create OpenAir projects from CRM opportunities

When to use this pattern

Use this pattern when a closed-won opportunity in Salesforce or another CRM should create a Customer and Project in OpenAir. It is useful when project initiation depends on validated customer ownership, project templates, billing rules, and duplicate prevention.

Integration direction
Salesforce
Martini
NetSuite OpenAir
Example Mapping
NetSuite OpenAir FieldCanonical FieldTarget Field
Opportunity.accountIdcustomer.externalIdCustomer.externalId
Opportunity.nameproject.nameProject.name
Opportunity.closeDateproject.startDateProject.startDate
Opportunity.amountproject.billingAmountProject.billingAmount
Martini implementation pattern

Martini receives the opportunity through an API or scheduled retrieval, validates required customer and project fields, matches or creates the OpenAir Customer, and then creates the Project. Business rules determine project template, billing attributes, and ownership. The workflow stores returned identifiers and routes duplicate or validation failures to exception handling without creating a second project.

Martini capabilities used
  • API consumption
  • API exposure
  • workflows
  • data mapping
  • business rules
  • error handling

Pattern 2: Synchronize approved OpenAir time and expenses

When to use this pattern

Use this pattern when approved Timesheets, time entries, or Expense Reports must be sent to payroll, ERP, or financial applications. Approval state and corrected-entry reprocessing are central to this design.

Integration direction
NetSuite OpenAir
Martini
Workday
Example Mapping
NetSuite OpenAir FieldCanonical FieldTarget Field
timeEntry.userIdworker.externalIdWorker.id
timeEntry.projectIdproject.externalIdProjectReference.id
timeEntry.hourstime.quantityTimeEntry.hours
expenseReport.totalexpense.amountExpense.amount
Martini implementation pattern

A scheduled workflow retrieves recently modified approved data using an OpenAir filter where available. Martini validates employee, project, task, currency, and accounting references, maps time and expense structures, and submits them to the target application. Stable source identifiers make retries idempotent, while rejected or corrected entries remain available for replay and reconciliation.

Martini capabilities used
  • scheduled workflows
  • API consumption
  • incremental synchronization
  • data mapping
  • validation
  • retry handling

Pattern 3: Synchronize OpenAir project accounting with NetSuite ERP

When to use this pattern

Use this pattern when OpenAir and NetSuite ERP share responsibility for Customers, Projects, invoices, expenses, or project financial data. It requires clear ownership, accounting-period rules, and identifier mappings.

Integration direction
NetSuite OpenAir
Martini
NetSuite ERP
Example Mapping
NetSuite OpenAir FieldCanonical FieldTarget Field
Project.customerIdcustomer.externalIdCustomer.internalId
Project.idproject.externalIdProject.externalId
Invoice.statusinvoice.lifecycleStatusInvoice.status
ExpenseReport.currencyexpense.currencyExpense.currency
Martini implementation pattern

Martini runs object-specific workflows in either direction according to system-of-record rules. It validates accounting periods and subsidiaries, transforms currencies and identifiers, applies upsert or update rules where supported, and checkpoints successful pages. Transient API failures are retried with backoff, while accounting or validation conflicts are retained for review.

Martini capabilities used
  • workflows
  • API orchestration
  • data transformation
  • business rules
  • checkpointing
  • error handling

Pattern 4: Publish OpenAir project and resource status

When to use this pattern

Use this pattern when planning, reporting, service-management, or collaboration applications need selected OpenAir Projects, Tasks, Resources, or status data. It is appropriate when downstream consumers need a controlled model rather than direct OpenAir access.

Integration direction
NetSuite OpenAir
Martini
ServiceNow
Example Mapping
NetSuite OpenAir FieldCanonical FieldTarget Field
Project.statusengagement.statusServiceNow.status
Task.nameworkItem.nameServiceNow.taskName
Resource.idresource.externalIdServiceNow.resourceReference
Project.modifiedDatesource.modifiedAtServiceNow.sourceModifiedAt
Martini implementation pattern

Martini retrieves changed OpenAir objects on a schedule or processes a confirmed notification, filters sensitive resource fields, normalizes status values, and exposes or submits a downstream API payload. Correlation identifiers, incremental watermarks, and reconciliation protect against duplicate or missed updates.

Martini capabilities used
  • scheduled workflows
  • API exposure
  • API consumption
  • field filtering
  • mapping and transformation
  • monitoring

Applications commonly integrated with NetSuite OpenAir

NetSuite OpenAir can be integrated with adjacent business applications when project, resource, time, expense, billing, or reporting data must cross system boundaries. The exact direction and ownership of each object should be defined for the customer account and enabled OpenAir APIs.

Application Scenario Direction Martini Pattern
NetSuite ERP Synchronize customers, projects, invoices, expenses, and project accounting information across OpenAir and the broader NetSuite environment. NetSuite OpenAir → Martini → NetSuite ERP Use REST APIs where available, with controlled bidirectional workflows for objects owned by each system. Martini validates dependencies, maps identifiers and accounting attributes, applies idempotency keys, and routes failures for retry or reconciliation.
Salesforce Create OpenAir Customers and Projects from won Opportunities and return project, delivery, or billing status to the CRM. Salesforce → Martini → NetSuite OpenAir Expose or consume a Salesforce API, validate the customer and opportunity payload, map it to OpenAir Customers and Projects, and return vendor identifiers. Use duplicate checks, dependency sequencing, and exception handling for rejected project creation.
Workday Exchange worker, organization, payroll, or approved time information between HR operations and professional-services delivery. Workday → Martini → NetSuite OpenAir Retrieve or receive approved worker and time data, normalize employee and organization identifiers, validate project and task references, and write only records meeting the configured approval and accounting rules.
SAP S/4HANA Synchronize project financials, customers, invoices, expenses, and accounting data between OpenAir and an enterprise finance platform. NetSuite OpenAir → Martini → SAP S/4HANA Implement object-specific workflows with explicit system-of-record rules, currency and subsidiary mappings, incremental retrieval, idempotent updates, and retry handling for transient finance-system failures.
ServiceNow Connect project delivery information with service engagements, requests, and operational workflows. NetSuite OpenAir → Martini → ServiceNow Retrieve selected Projects, Tasks, or status data from OpenAir, normalize lifecycle values, and submit controlled updates to ServiceNow through its APIs. Apply filtering and privacy rules before publishing resource or customer information.
Jira Align OpenAir project or task status with engineering and delivery work items. NetSuite OpenAir → Martini → Jira Use scheduled incremental retrieval or a confirmed callback, map project and task identifiers to Jira work items, apply status translation rules, and record correlation identifiers to prevent duplicate updates.
Expensify Move expense data into OpenAir for project allocation, approval, or billing processes. Expensify → Martini → NetSuite OpenAir Consume the available expense export or API, validate employee, project, task, currency, and category references, then submit supported OpenAir expense operations with stable source identifiers and replay handling.
Microsoft Power BI Publish OpenAir project, time, expense, and financial data for utilization and delivery reporting. NetSuite OpenAir → Martini → Microsoft Power BI Retrieve approved or recently modified OpenAir data, transform it into a reporting model, apply privacy and status filters, and deliver it through the selected Power BI ingestion method with checkpointed batches.

How to build a NetSuite OpenAir integration in Martini

Objective

Establish the OpenAir account, endpoint, permissions, and authentication configuration for the selected API.

Instructions in Martini

  • Confirm the enabled OpenAir API, account context, endpoint, object coverage, and permissions.
  • Store OAuth tokens or API-specific credentials in Martini secrets and externalize environment-specific values.
  • Use HTTPS and avoid placing credentials in payloads, source code, or logs.

Objective

Select an event, callback, API request, or scheduled trigger based on the actual OpenAir event coverage.

Instructions in Martini

  • Use a confirmed callback only for supported account or module events.
  • Use a scheduler for incremental retrieval when universal event coverage is unavailable.
  • Define the object, lifecycle state, modified-time filter, and expected processing frequency.

Objective

Collect OpenAir data efficiently and safely from REST, XML, SOAP-style, batch, or attachment operations.

Instructions in Martini

  • Retrieve pages using supported pagination and incremental filters.
  • Respect account limits with bounded concurrency and controlled batch sizes.
  • Persist a watermark, source identifier, or cursor only after successful processing.

Objective

Coordinate dependent operations such as Customers before Projects and Projects before Tasks or time entries.

Instructions in Martini

  • Validate parent-object dependencies before writing child objects.
  • Separate retryable transport or throttling failures from non-retryable business errors.
  • Use reusable workflow logic for common authentication, mapping, and exception handling.

Objective

Convert OpenAir JSON or XML structures into canonical and target-system models.

Instructions in Martini

  • Map actual OpenAir Customers, Projects, Tasks, Users, Resources, time, expense, and invoice fields.
  • Normalize statuses, currencies, dates, identifiers, and approval states.
  • Handle optional and account-specific fields without assuming every tenant has the same schema.

Objective

Ensure only valid, approved, and correctly sequenced data is transferred.

Instructions in Martini

  • Require approved status before exporting time or expense data when applicable.
  • Apply duplicate prevention using stable source identifiers or correlation keys.
  • Enforce project, task, customer, employee, currency, and accounting-period rules.

Common NetSuite OpenAir data objects used in integrations

ObjectTypical UseCommon target systemsMartini handling
CustomersOrganizations or clients associated with projects, billing, and customer-facing delivery.NetSuite ERP, Salesforce, SAP S/4HANAMartini matches stable customer identifiers, validates required attributes, sequences customer creation before dependent Projects, and applies duplicate-prevention rules.
ProjectsProfessional-services engagements containing schedule, delivery, financial, and billing information.Salesforce, NetSuite ERP, SAP S/4HANA, Jira, ServiceNowMartini maps project ownership, customer references, status, dates, and billing attributes, then orchestrates dependent Tasks and reconciliation.
TasksWork units associated with Projects and used for planning and time allocation.Jira, ServiceNow, reporting platforms, payroll or finance applicationsMartini validates the parent Project and task identifiers, normalizes status and hierarchy, and prevents updates against missing dependencies.
UsersOpenAir users, employees, consultants, or other personnel participating in delivery and time processes.Workday, NetSuite ERP, SAP S/4HANA, payroll applicationsMartini maps employee and user identifiers, filters permitted attributes, and applies account-specific role and privacy rules.
ResourcesPersonnel or other resources used for project staffing, allocation, and utilization.Workday, planning applications, reporting platforms, ServiceNowMartini transforms resource availability, allocation, and status data, applies privacy controls, and publishes only the fields required by downstream systems.
Timesheets / time entriesSubmitted or approved time recorded against Projects and Tasks.Workday, payroll applications, NetSuite ERP, SAP S/4HANAMartini retrieves approved or recently modified entries, maps employees, projects, tasks, currency, and accounting attributes, and uses stable source IDs for idempotent processing.

Authentication and security considerations

Authentication and account access

REST integrations can use OAuth 2.0 bearer tokens where enabled for the OpenAir account. XML or SOAP-style integrations may use OpenAir API credentials and account-specific access configuration.

  • Store tokens, credentials, endpoints, and account context in Martini secrets or environment configuration.
  • Use HTTPS for API communication and restrict the OpenAir integration identity to required objects and operations.
  • Confirm account enablement, role permissions, API version, and feature availability before implementation.
  • Do not expose credentials in workflow payloads, source code, logs, or downstream error messages.

Operational considerations for NetSuite OpenAir integrations

Reliability and lifecycle controls

OpenAir account configuration, enabled modules, custom fields, permissions, API limits, and object schemas can vary. Integration designs should verify the selected API and test representative Customers, Projects, Tasks, Users, Resources, time, expense, and invoice scenarios.

  • Use pagination, modified-date or status filters, watermarks, and bounded concurrency for large collections.
  • Handle HTTP 429 or equivalent throttling responses with exponential backoff and controlled batch sizes.
  • Use stable source identifiers and correlation keys to make creates and updates idempotent.
  • Respect approval states before exporting Timesheets or Expense Reports.
  • Classify retryable transport errors separately from validation, permission, and accounting errors.
  • Monitor schema changes, reconcile source and target counts, and retain sufficient response details for replay without exposing sensitive data.

Why use Martini instead of scripts or point-to-point integrations?

Maintainable integration orchestration

Direct scripts can become difficult to govern when an OpenAir integration must coordinate Customers, Projects, Tasks, resources, time, expenses, invoices, and dependent financial systems. Martini provides a structured environment for workflows, APIs, mappings, transformations, business rules, and operational handling.

  • Centralize authentication and environment-specific configuration rather than duplicating credentials across scripts.
  • Reuse workflow logic for pagination, checkpoints, validation, retries, and reconciliation.
  • Expose a controlled API façade so downstream systems do not depend directly on OpenAir account details.
  • Separate vendor-specific payloads from canonical enterprise models through explicit mappings.
  • Use workflow logs, error handling, and monitoring to support troubleshooting and controlled replay.

Frequently asked questions

How can NetSuite OpenAir be integrated with enterprise systems?

NetSuite OpenAir can be integrated through its REST APIs, selected XML or SOAP-style interfaces, scheduled incremental retrieval, and limited account- or module-specific callbacks. The appropriate method depends on the OpenAir API version, enabled features, permissions, and required object operations.

Can Martini integrate with NetSuite OpenAir?

Yes. Martini can integrate with NetSuite OpenAir by consuming its REST APIs, supported XML or SOAP-style interfaces, and confirmed callbacks. Martini can orchestrate workflows, map OpenAir objects, expose controlled APIs, and implement scheduled synchronization when event coverage is insufficient.

Do I need a connector to integrate NetSuite OpenAir with Martini?

No. A dedicated NetSuite OpenAir connector is not required. Martini can use OpenAir's confirmed native REST, XML, SOAP-style, callback, and authentication mechanisms through standards-based API consumption and workflow orchestration.

Is there any extra Lonti cost to integrate NetSuite OpenAir with Martini?

Lonti does not charge an additional per-connector or per-vendor fee to integrate NetSuite OpenAir. The integration is subject to the provisioned capacity of the Martini environment. Separate costs may apply from Oracle NetSuite, cloud infrastructure, or other third-party systems depending on subscription, usage, and deployment model.

Which NetSuite OpenAir API should a new integration use?

Use the OpenAir REST API when it supports the required object and operation. Consider an XML or SOAP-style API for an existing implementation or a capability unavailable through REST, after verifying the endpoint, protocol, account enablement, and supported operations.

Does NetSuite OpenAir provide webhooks or event notifications?

OpenAir should not be treated as providing a universal webhook or change-event stream. Selected account or module notifications may be available, but coverage must be confirmed. Otherwise, Martini can use scheduled workflows with modified-time, status, or identifier filters and reconciliation.

How does Martini synchronize NetSuite OpenAir data reliably?

Martini can retrieve paginated and incrementally filtered Customers, Projects, Tasks, Users, Resources, time, expenses, or invoices, transform them into target models, and store checkpoints. Idempotent identifiers, approval-state rules, dependency sequencing, retries, and reconciliation help manage duplicates and corrected data.

Can Martini expose an API façade for NetSuite OpenAir?

Yes. Martini can expose a controlled API that hides OpenAir credentials and account-specific details from downstream consumers. The API can validate requests, invoke OpenAir REST or XML/SOAP operations, apply mappings and business rules, and return a stable enterprise-facing model.