data.team_id and data.providers. Each provider has source: "stored_configuration". A stored completed: true does not prove that its credentials still work or its latest synchronization succeeded. web_actions describes dashboard capabilities; use api_actions to determine which actions this API currently exposes.
Change only the selected settings
For an already connected Stripe account, turn off automatic invoicing without changing its credentials or other settings:success: true and data.settings.automatic_invoicing: false. Read the provider again with GET /teams/{id}/integrations/stripe if the connection closes before the response arrives. Omitted fields remain unchanged. Nullable text accepts null to clear a value; boolean settings accept true or false, never null.
The selected provider determines the accepted fields. Sending Stripe fields to a different provider, provider secrets, arbitrary storage paths, or a completed flag fails validation. Most settings require an existing connection. Bank instructions have their own validation and can establish a new stored configuration; they require a country and account holder, plus a valid CLABE when country is MEX. This does not verify bank account ownership.
Account scope and permissions
Current authorized members can read. A personal user credential must still belong to a current team or owning-account administrator to change settings. Team API credentials act within their current team authority and do not impersonate their creator. Membership and authority are checked again in the write transaction. These settings are shared team configuration. A test credential does not isolate them from live use. Readmode_scope and the provider-specific operation before making a change. For example, disabling automatic invoicing can affect future live payments.
installation reports the existing dashboard plan rules. Existing connected providers remain manageable after reaching an installation limit; first-time bank configuration applies that limit. A catalog listing is not evidence that OAuth connection, provider synchronization, disconnect, or credential replacement is implemented. Use each dedicated operation when available.
Common responses
400: unsupported field, empty patch, invalid bank instructions, or a provider that requires its dedicated settings workflow.403: current authority or installation entitlement is missing.404: the target team or provider is outside the authorized scope or does not exist.409 integration_not_configured: complete the provider’s connection workflow before changing these settings.
NetSuite item mapping
NetSuite mappings are shared by the team. Preview and save use a live provider lookup even when the credential is in test mode. Readeffect_scope before proceeding.
- Read
GET /teams/{id}/integrations/netsuite/itemsfor the current mapping andcanEdit. - Preview the intended rule:
- Inspect the returned
data.data.rows,totals,requiresConfirmationandpreviewToken. - Submit the same rule/window to
POST /teams/{id}/integrations/netsuite/items/ruleswith thatpreviewToken. If existing lines change, explicitly includeconfirmChanges: trueafter reviewing those changes. - Read the mapping again. A
409 state_changedrequires a fresh preview; do not reuse stale consent against a changed configuration.
data.data: the outer data identifies the provider, operation, credential mode and effect scope. Item IDs are numeric strings; matchType is exact or contains. Optional scope is domestic or foreign.
Synchronization and disconnect
For NetSuite, useGET /teams/{id}/integrations/netsuite/invoices/{invoiceId}/sync to inspect an individual invoice. A sync enqueue response is not completed accounting work. The invoice must belong to the selected team and credential mode. A paid-invoice resync can delete and recreate its applied NetSuite customer payment for the current total. Inspect state and obtain explicit intent before that operation; do not automatically replay it after a timeout.
GET /teams/{id}/integrations/netsuite/syncs returns a bounded attention view. Preserve truncated and pass nextBefore as before for another page. The view scans at most 1,000 rows per source query and returns 50-item pages; it does not establish complete history. General NetSuite status includes both modes and caps recent syncs at 20.
For PayPal POS, POST /teams/{id}/integrations/zettle/sync with {} returns HTTP 202 and queued: true when work is durably queued. Test imports still read real merchant purchases. Settings and sync must match the stored connection mode; an active sync lease can temporarily refuse settings changes.
Disconnect outcomes differ:
- NetSuite disables the selected connection mode and returns
credentials_retained: true. It does not erase stored encrypted credentials. - PayPal POS fences local work and removes local credentials, then attempts remote subscription removal. Preserve
partial_cleanup: truewhen that removal fails.remote_removed: nullmeans no remote attempt was made.
outcome_unknown; read current state before deciding whether a new attempt is appropriate.