> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NetSuite

> Resources, examples, configuration and evidence for NetSuite.

Use the `@bijection/connectors/netsuite` entrypoint to declare NetSuite resources.

## Availability

This page describes the pinned source package. Published availability is unestablished for this artifact. [Source build and package availability](https://docs.bijection.com/client/sdk-distribution.md).

## Resources and modes

| Resource | Mode | Description |
| - | - | - |
| Captured REST record | `captured` | Account-specific metadata, discovery and exact detail observations |
| SuiteQL table | `observed` | Keyset walk by last modification with deleted records |

Declare a resource in application code, then bind deployment-specific settings and credentials. See [typed resources](https://docs.bijection.com/integrations/resources.md), [connections](https://docs.bijection.com/integrations/connections.md) and [source inspection](https://docs.bijection.com/integrations/cli.md).

## Captured REST record

### captured: Account-specific metadata, discovery and exact detail observations

The following example matches configuration `customer`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { netsuite } from "@bijection/connectors/netsuite";
import { v } from "bijection/values";
import { makeFunctionReference } from "bijection/server";

export const customers = netsuite.record.captured({
  recordType: "customer",
  schema: {
    id: v.string(),
    companyName: v.string(),
    balance: v.optional(v.string()),
    currency: v.optional(v.union(v.string(), v.null())),
  },
  metadata: {
    provider: { kind: "netsuite" },
    object: "customer",
    schema: {
      acquisition_profile: "netsuite_discovery_detail_v1",
      native_type: "customer",
      keys: ["id"],
      fields: {
        id: {
          native_type: "string",
          encoding: "json_string",
          representation: "string",
          nullable: false,
          optional: false,
          length: null,
          length_facet: null,
          precision: null,
          scale: null,
          reference_to: [],
          picklist_values: [],
          readable: true,
          createable: false,
          updateable: false,
          external_id: false,
          unique: true,
        },
        companyName: {
          native_type: "string",
          encoding: "json_string",
          representation: "string",
          nullable: false,
          optional: false,
          length: null,
          length_facet: null,
          precision: null,
          scale: null,
          reference_to: [],
          picklist_values: [],
          readable: true,
          createable: true,
          updateable: true,
          external_id: false,
          unique: false,
        },
        balance: {
          native_type: "number",
          encoding: "netsuite_decimal",
          representation: "decimal_text",
          nullable: false,
          optional: true,
          length: null,
          length_facet: null,
          precision: null,
          scale: null,
          reference_to: [],
          picklist_values: [],
          readable: true,
          createable: false,
          updateable: false,
          external_id: false,
          unique: false,
        },
        currency: {
          native_type: "reference",
          encoding: "netsuite_reference",
          representation: "string",
          nullable: true,
          optional: true,
          length: null,
          length_facet: null,
          precision: null,
          scale: null,
          reference_to: ["currency"],
          picklist_values: [],
          readable: true,
          createable: true,
          updateable: true,
          external_id: false,
          unique: false,
        },
      },
      relationships: [],
      queryable: true,
      retrieveable: true,
      semantics: {
        fields: {},
        joins: {},
        lookups: {},
        unsupported: [],
        actions: {
          create: {
            parameters: {
              companyName: {
                native_type: "string",
                encoding: "json_string",
                representation: "string",
                nullable: false,
                optional: false,
                length: null,
                length_facet: null,
                precision: null,
                scale: null,
                reference_to: [],
                picklist_values: [],
                readable: true,
                createable: true,
                updateable: true,
                external_id: false,
                unique: false,
              },
              email: {
                native_type: "string",
                encoding: "json_string",
                representation: "string",
                nullable: false,
                optional: false,
                length: null,
                length_facet: null,
                precision: null,
                scale: null,
                reference_to: [],
                picklist_values: [],
                readable: true,
                createable: true,
                updateable: true,
                external_id: false,
                unique: false,
              },
              phone: {
                native_type: "string",
                encoding: "json_string",
                representation: "string",
                nullable: false,
                optional: false,
                length: null,
                length_facet: null,
                precision: null,
                scale: null,
                reference_to: [],
                picklist_values: [],
                readable: true,
                createable: true,
                updateable: true,
                external_id: false,
                unique: false,
              },
            },
            return_type: "customer",
          },
          updateContact: {
            parameters: {
              email: {
                native_type: "string",
                encoding: "json_string",
                representation: "string",
                nullable: false,
                optional: false,
                length: null,
                length_facet: null,
                precision: null,
                scale: null,
                reference_to: [],
                picklist_values: [],
                readable: true,
                createable: true,
                updateable: true,
                external_id: false,
                unique: false,
              },
              phone: {
                native_type: "string",
                encoding: "json_string",
                representation: "string",
                nullable: false,
                optional: false,
                length: null,
                length_facet: null,
                precision: null,
                scale: null,
                reference_to: [],
                picklist_values: [],
                readable: true,
                createable: true,
                updateable: true,
                external_id: false,
                unique: false,
              },
            },
            return_type: null,
          },
        },
      },
    },
    reference_targets: {},
  },
  access: {
    read: makeFunctionReference<"query", any, [null]>("policies:read"),
    reads: [],
  },
  actions: {
    create: {
      operation: "create",
      args: { companyName: v.string(), email: v.string(), phone: v.string() },
      governingRule: makeFunctionReference<"query", any, [null]>(
        "policies:write",
      ),
      maxDeliveryHours: 1,
    },
    updateContact: {
      operation: "updateContact",
      args: { email: v.string(), phone: v.string() },
      governingRule: makeFunctionReference<"query", any, [null]>(
        "policies:write",
      ),
      maxDeliveryHours: 1,
    },
  },
});
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>
> }
> ```

The function references identify application policy queries. Implement those policies in your application; the references alone grant no authority.

#### Configuration: customer

Case: `netsuite/record/captured/customer`.

Connection and resource configuration are declared by this exact case.

Credential kind: `netsuite`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `baseUrl` | string | Yes | Shared connection |
| `accountId` | string | Yes | Shared connection |
| `incarnation` | string | Yes | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {
>       "records": {
>         "read": {
>           "query": "policies:read"
>         },
>         "reads": []
>       }
>     },
>     "defaults": {},
>     "metadata": {
>       "provider": {
>         "kind": "netsuite"
>       },
>       "object": "customer",
>       "schema": {
>         "acquisition_profile": "netsuite_discovery_detail_v1",
>         "native_type": "customer",
>         "keys": [
>           "id"
>         ],
>         "fields": {
>           "id": {
>             "native_type": "string",
>             "encoding": "json_string",
>             "representation": "string",
>             "nullable": false,
>             "optional": false,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [],
>             "picklist_values": [],
>             "readable": true,
>             "createable": false,
>             "updateable": false,
>             "external_id": false,
>             "unique": true
>           },
>           "companyName": {
>             "native_type": "string",
>             "encoding": "json_string",
>             "representation": "string",
>             "nullable": false,
>             "optional": false,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [],
>             "picklist_values": [],
>             "readable": true,
>             "createable": true,
>             "updateable": true,
>             "external_id": false,
>             "unique": false
>           },
>           "balance": {
>             "native_type": "number",
>             "encoding": "netsuite_decimal",
>             "representation": "decimal_text",
>             "nullable": false,
>             "optional": true,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [],
>             "picklist_values": [],
>             "readable": true,
>             "createable": false,
>             "updateable": false,
>             "external_id": false,
>             "unique": false
>           },
>           "currency": {
>             "native_type": "reference",
>             "encoding": "netsuite_reference",
>             "representation": "string",
>             "nullable": true,
>             "optional": true,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [
>               "currency"
>             ],
>             "picklist_values": [],
>             "readable": true,
>             "createable": true,
>             "updateable": true,
>             "external_id": false,
>             "unique": false
>           }
>         },
>         "relationships": [],
>         "queryable": true,
>         "retrieveable": true,
>         "semantics": {
>           "fields": {},
>           "joins": {},
>           "lookups": {},
>           "unsupported": [],
>           "actions": {
>             "create": {
>               "parameters": {
>                 "companyName": {
>                   "native_type": "string",
>                   "encoding": "json_string",
>                   "representation": "string",
>                   "nullable": false,
>                   "optional": false,
>                   "length": null,
>                   "length_facet": null,
>                   "precision": null,
>                   "scale": null,
>                   "reference_to": [],
>                   "picklist_values": [],
>                   "readable": true,
>                   "createable": true,
>                   "updateable": true,
>                   "external_id": false,
>                   "unique": false
>                 },
>                 "email": {
>                   "native_type": "string",
>                   "encoding": "json_string",
>                   "representation": "string",
>                   "nullable": false,
>                   "optional": false,
>                   "length": null,
>                   "length_facet": null,
>                   "precision": null,
>                   "scale": null,
>                   "reference_to": [],
>                   "picklist_values": [],
>                   "readable": true,
>                   "createable": true,
>                   "updateable": true,
>                   "external_id": false,
>                   "unique": false
>                 },
>                 "phone": {
>                   "native_type": "string",
>                   "encoding": "json_string",
>                   "representation": "string",
>                   "nullable": false,
>                   "optional": false,
>                   "length": null,
>                   "length_facet": null,
>                   "precision": null,
>                   "scale": null,
>                   "reference_to": [],
>                   "picklist_values": [],
>                   "readable": true,
>                   "createable": true,
>                   "updateable": true,
>                   "external_id": false,
>                   "unique": false
>                 }
>               },
>               "return_type": "customer"
>             },
>             "updateContact": {
>               "parameters": {
>                 "email": {
>                   "native_type": "string",
>                   "encoding": "json_string",
>                   "representation": "string",
>                   "nullable": false,
>                   "optional": false,
>                   "length": null,
>                   "length_facet": null,
>                   "precision": null,
>                   "scale": null,
>                   "reference_to": [],
>                   "picklist_values": [],
>                   "readable": true,
>                   "createable": true,
>                   "updateable": true,
>                   "external_id": false,
>                   "unique": false
>                 },
>                 "phone": {
>                   "native_type": "string",
>                   "encoding": "json_string",
>                   "representation": "string",
>                   "nullable": false,
>                   "optional": false,
>                   "length": null,
>                   "length_facet": null,
>                   "precision": null,
>                   "scale": null,
>                   "reference_to": [],
>                   "picklist_values": [],
>                   "readable": true,
>                   "createable": true,
>                   "updateable": true,
>                   "external_id": false,
>                   "unique": false
>                 }
>               },
>               "return_type": null
>             }
>           }
>         }
>       },
>       "reference_targets": {}
>     },
>     "connector": "netsuite",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "netsuite",
>     "connection_fields": [
>       "baseUrl",
>       "accountId",
>       "incarnation"
>     ],
>     "address": {
>       "kind": "setup",
>       "field": "baseUrl"
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "baseUrl": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "accountId": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "incarnation": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "detail": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "listing": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange detail",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange listing",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "unsupported",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {
>     "create": {
>       "target": "records",
>       "delivery": "single_attempt",
>       "condition": "unconditional",
>       "replayWindowMs": null,
>       "maxDeliveryHours": "1",
>       "providerEnforcedExpiry": false
>     },
>     "updateContact": {
>       "target": "records",
>       "delivery": "single_attempt",
>       "condition": "unconditional",
>       "replayWindowMs": null,
>       "maxDeliveryHours": "1",
>       "providerEnforcedExpiry": false
>     }
>   }
> }
> ```

**Commands**

| Command | Target | Condition | Delivery |
| - | - | - | - |
| `create` | records | Unconditional | Single dispatch attempt |
| `updateContact` | records | Unconditional | Single dispatch attempt |

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "detail": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "listing": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange detail",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange listing",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "unsupported",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {
>           "create": {
>             "target": "records",
>             "delivery": "single_attempt",
>             "condition": "unconditional",
>             "replayWindowMs": null,
>             "maxDeliveryHours": "1",
>             "providerEnforcedExpiry": false
>           },
>           "updateContact": {
>             "target": "records",
>             "delivery": "single_attempt",
>             "condition": "unconditional",
>             "replayWindowMs": null,
>             "maxDeliveryHours": "1",
>             "providerEnforcedExpiry": false
>           }
>         }
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {
>     "create": {
>       "target": "records",
>       "condition": {
>         "kind": "unconditional"
>       },
>       "delivery": {
>         "kind": "single_attempt",
>         "retention": {
>           "kind": "unknown"
>         },
>         "max_delivery_hours": 1
>       }
>     },
>     "updateContact": {
>       "target": "records",
>       "condition": {
>         "kind": "unconditional"
>       },
>       "delivery": {
>         "kind": "single_attempt",
>         "retention": {
>           "kind": "unknown"
>         },
>         "max_delivery_hours": 1
>       }
>     }
>   }
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | No retained check covers this scoped NetSuite requirement; no NetSuite account has been reached. | Execution result unavailable |
| command-response-lost | \{"kind":"command","name":"create"} | No retained check covers this scoped NetSuite requirement; no NetSuite account has been reached. | Execution result unavailable |
| command-response-lost | \{"kind":"command","name":"updateContact"} | No retained check covers this scoped NetSuite requirement; no NetSuite account has been reached. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Fixture: ./src/connectors/netsuite/fixtures/captured-identity.json | passed (2026-10-24T21:36:12.099Z) |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

#### Configuration: vendor

Case: `netsuite/record/captured/vendor`.

Connection and resource configuration are declared by this exact case.

Credential kind: `netsuite`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `baseUrl` | string | Yes | Shared connection |
| `accountId` | string | Yes | Shared connection |
| `incarnation` | string | Yes | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {
>       "records": {
>         "read": {
>           "query": "policies:read"
>         },
>         "reads": []
>       }
>     },
>     "defaults": {},
>     "metadata": {
>       "provider": {
>         "kind": "netsuite"
>       },
>       "object": "vendor",
>       "reference_targets": {},
>       "schema": {
>         "acquisition_profile": "netsuite_discovery_detail_v1",
>         "native_type": "vendor",
>         "keys": [
>           "id"
>         ],
>         "fields": {
>           "id": {
>             "native_type": "string",
>             "encoding": "json_string",
>             "representation": "string",
>             "nullable": false,
>             "optional": false,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [],
>             "picklist_values": [],
>             "readable": true,
>             "createable": false,
>             "updateable": false,
>             "external_id": false,
>             "unique": true
>           }
>         },
>         "relationships": [],
>         "queryable": true,
>         "retrieveable": true,
>         "semantics": {
>           "fields": {},
>           "actions": {},
>           "lookups": {},
>           "joins": {},
>           "unsupported": []
>         }
>       }
>     },
>     "connector": "netsuite",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "netsuite",
>     "connection_fields": [
>       "baseUrl",
>       "accountId",
>       "incarnation"
>     ],
>     "address": {
>       "kind": "setup",
>       "field": "baseUrl"
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "baseUrl": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "accountId": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "incarnation": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "detail": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "listing": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange detail",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange listing",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "unsupported",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "detail": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "listing": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange detail",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange listing",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "unsupported",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | No retained check covers this scoped NetSuite requirement; no NetSuite account has been reached. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Fixture: ./src/connectors/netsuite/fixtures/captured-identity.json | passed (2026-10-24T21:36:12.099Z) |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

#### Configuration: salesOrder

Case: `netsuite/record/captured/salesOrder`.

Connection and resource configuration are declared by this exact case.

Credential kind: `netsuite`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `baseUrl` | string | Yes | Shared connection |
| `accountId` | string | Yes | Shared connection |
| `incarnation` | string | Yes | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {
>       "records": {
>         "read": {
>           "query": "policies:read"
>         },
>         "reads": []
>       }
>     },
>     "defaults": {},
>     "metadata": {
>       "provider": {
>         "kind": "netsuite"
>       },
>       "object": "salesOrder",
>       "reference_targets": {},
>       "schema": {
>         "acquisition_profile": "netsuite_discovery_detail_v1",
>         "native_type": "salesOrder",
>         "keys": [
>           "id"
>         ],
>         "fields": {
>           "id": {
>             "native_type": "string",
>             "encoding": "json_string",
>             "representation": "string",
>             "nullable": false,
>             "optional": false,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [],
>             "picklist_values": [],
>             "readable": true,
>             "createable": false,
>             "updateable": false,
>             "external_id": false,
>             "unique": true
>           }
>         },
>         "relationships": [],
>         "queryable": true,
>         "retrieveable": true,
>         "semantics": {
>           "fields": {},
>           "actions": {},
>           "lookups": {},
>           "joins": {},
>           "unsupported": []
>         }
>       }
>     },
>     "connector": "netsuite",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "netsuite",
>     "connection_fields": [
>       "baseUrl",
>       "accountId",
>       "incarnation"
>     ],
>     "address": {
>       "kind": "setup",
>       "field": "baseUrl"
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "baseUrl": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "accountId": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "incarnation": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "detail": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "listing": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange detail",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange listing",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "unsupported",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "detail": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "listing": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange detail",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange listing",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "unsupported",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | No retained check covers this scoped NetSuite requirement; no NetSuite account has been reached. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Fixture: ./src/connectors/netsuite/fixtures/captured-identity.json | passed (2026-10-24T21:36:12.100Z) |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

#### Configuration: invoice

Case: `netsuite/record/captured/invoice`.

Connection and resource configuration are declared by this exact case.

Credential kind: `netsuite`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `baseUrl` | string | Yes | Shared connection |
| `accountId` | string | Yes | Shared connection |
| `incarnation` | string | Yes | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {
>       "records": {
>         "read": {
>           "query": "policies:read"
>         },
>         "reads": []
>       }
>     },
>     "defaults": {},
>     "metadata": {
>       "provider": {
>         "kind": "netsuite"
>       },
>       "object": "invoice",
>       "reference_targets": {},
>       "schema": {
>         "acquisition_profile": "netsuite_discovery_detail_v1",
>         "native_type": "invoice",
>         "keys": [
>           "id"
>         ],
>         "fields": {
>           "id": {
>             "native_type": "string",
>             "encoding": "json_string",
>             "representation": "string",
>             "nullable": false,
>             "optional": false,
>             "length": null,
>             "length_facet": null,
>             "precision": null,
>             "scale": null,
>             "reference_to": [],
>             "picklist_values": [],
>             "readable": true,
>             "createable": false,
>             "updateable": false,
>             "external_id": false,
>             "unique": true
>           }
>         },
>         "relationships": [],
>         "queryable": true,
>         "retrieveable": true,
>         "semantics": {
>           "fields": {},
>           "actions": {},
>           "lookups": {},
>           "joins": {},
>           "unsupported": []
>         }
>       }
>     },
>     "connector": "netsuite",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "netsuite",
>     "connection_fields": [
>       "baseUrl",
>       "accountId",
>       "incarnation"
>     ],
>     "address": {
>       "kind": "setup",
>       "field": "baseUrl"
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "baseUrl": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "accountId": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "incarnation": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "detail": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "listing": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": true,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange detail",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange listing",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "unsupported",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "detail": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "listing": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": true,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange detail",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange listing",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "unsupported",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | No retained check covers this scoped NetSuite requirement; no NetSuite account has been reached. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Fixture: ./src/connectors/netsuite/fixtures/captured-identity.json | passed (2026-10-24T21:36:12.100Z) |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## SuiteQL table

### observed: Keyset walk by last modification with deleted records

The following example matches configuration `standard`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { netsuite } from "@bijection/connectors/netsuite";
export const customers = netsuite.table.observed({
  table: "customer",
  columns: ["entityid", "companyname", "email"],
  deletedRecordType: "customer",
});
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>
> }
> ```

#### Configuration: standard

Case: `netsuite/table/observed/standard`.

Connection and resource configuration are declared by this exact case.

Credential kind: `netsuite`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `account` | string | Yes | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "netsuite",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "netsuite",
>     "connection_fields": [
>       "account"
>     ],
>     "address": {
>       "kind": "setup",
>       "field": "account",
>       "prefix": "https://",
>       "suffix": ".suitetalk.api.netsuite.com"
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "account": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Explicit deletion evidence |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "deletions": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "400": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "401": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "records": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "400": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "401": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange deletions",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange records",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "explicit_events",
>   "resume": "none",
>   "retentionMs": null,
>   "gap": "not_applicable",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": false,
>       "reconciliation": false,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "deletions": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "400": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "401": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "records": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "400": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "401": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange deletions",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange records",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "explicit_events",
>         "resume": "none",
>         "retentionMs": null,
>         "gap": "not_applicable",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Fixture: ./src/connectors/netsuite/fixtures/deletions-page-continues.json | passed (2026-10-24T21:36:12.101Z) |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Fixture: ./src/connectors/netsuite/fixtures/deletions-then-records.json | passed (2026-10-24T21:36:12.102Z) |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Fixture: ./src/connectors/netsuite/fixtures/records-final-page.json | passed (2026-10-24T21:36:12.102Z) |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Fixture: ./src/connectors/netsuite/fixtures/carried-pass-overlaps.json | passed (2026-10-24T21:36:12.103Z) |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Native test: integrations/acquisition/acquisition\_windows\_preserve\_sequences\_and\_restart\_fences\_old\_work (shared\_engine) | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Fixture: ./src/connectors/netsuite/fixtures/identity.json | passed (2026-10-24T21:36:12.103Z) |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

#### Configuration: recordsOnly

Case: `netsuite/table/observed/recordsOnly`.

Connection and resource configuration are declared by this exact case.

Credential kind: `netsuite`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `account` | string | Yes | Shared connection |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "netsuite",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "netsuite",
>     "connection_fields": [
>       "account"
>     ],
>     "address": {
>       "kind": "setup",
>       "field": "account",
>       "prefix": "https://",
>       "suffix": ".suitetalk.api.netsuite.com"
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "account": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Deletion detection unsupported |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "records": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "400": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "401": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "403": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "503": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange records",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "unsupported",
>   "resume": "none",
>   "retentionMs": null,
>   "gap": "not_applicable",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": false,
>       "reconciliation": false,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "records": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "400": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "401": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "403": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "503": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange records",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "unsupported",
>         "resume": "none",
>         "retentionMs": null,
>         "gap": "not_applicable",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Fixture: ./src/connectors/netsuite/fixtures/records-only-start.json | passed (2026-10-24T21:36:12.103Z) |
| page-publication-recovery | \{"kind":"collection","name":"records"} | Native test: integrations/acquisition/acquisition\_windows\_preserve\_sequences\_and\_restart\_fences\_old\_work (shared\_engine) | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Fixture: ./src/connectors/netsuite/fixtures/identity.json | passed (2026-10-24T21:36:12.103Z) |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## Provider guidance

## Captured REST records

`source metadata capture netsuite` captures account-specific JSON Schema for
`customer`, `vendor`, `salesOrder` and `invoice`. Generated `capturedObject` factories
select typed custom fields and explicit customer create/updateContact commands.
`netsuite.record.captured` is the underlying recipe. It requires the exact captured
metadata, field validators and application policies. The registered cases are synthetic.

Native discovery pins the provider clock, traverses a modification window ordered
by `(second, internal ID)` and rereads five minutes of overlap on later windows.
Initial and daily repair scans read from the profile floor. Deletion is a separate
phase with its own continuation; a same-query live-record exclusion prevents an old
delete log overriding a visible recreated record. Every query uses bound parameters
and exact-text IDs. Native admission checks the query against retained progress, and
checkpoints commit with publication only after the window finishes without gaps.
Daily known-record verification uses refresh-only point reads; 403/404 stays
unresolved. A native 403 holds source disclosure until the role is checked and the
binding explicitly reconfigured. Configure the integration user in GMT. The 64-row query bound works with
the existing native fanout and byte limits. No pass claims coverage or a snapshot.
A captured resource selects at most sixteen fields including `id`.

REST detail projection retains original decimal tokens as text, distinct business
dates/timestamps, optional presence and scalar reference IDs. Metadata retains
reference targets and reviewed monetary currency dependencies; application
relationships are explicit. Read-side 429/503 is transient.

Creation sends POST with the occurrence ID as `externalId` and confirms only a GET
by that marker returning the same marker and native customer ID. Contact updates
send asynchronous PATCH, retain the same-origin job Location and sole task ID, then
read that task's `/result` endpoint. Successful task result responses settle delivery;
job/task status alone does not. A documented `400 IDEMPOTENCY_ERROR` with a confined
Location retains the original job as pending. Failed results, ambiguous work and lost
send replies remain unknown. Commands are unconditional and single-attempt, with no
automatic resend. Source observations establish resulting record state.

Binding setup requires `baseUrl`, `accountId` and an explicit `incarnation`. All
captured resources can use the same connection returned by metadata connect. Within a deployment, two
native in-flight slots are shared by account origin, with one available to commands
while acquisition occupies the other. Requests have a 30-second transport bound and
60-second capacity leases. This does not constrain other clients of the account.

Metadata responses assert neither account identity nor the certificate's mapped role.
The incarnation is an operator attestation, not a fabricated provider assertion.
Sandbox credential replacement requires a new incarnation. Native admission refuses
changing it while old sources remain; explicitly withdraw them before binding the
replacement. These observed profiles cannot support complete-population rebaseline.

Use a private `oauth_client_credentials` envelope with
`protocol: { authentication: "private_key_jwt", body: "form" }`,
`client_assertion: { key_id, private_key, algorithm: "ps256" | "es256", claims: { scope: ["rest_webservices"] } }`,
the account-specific OAuth token endpoint and exact
`allowed_resource_origins`. Keys must be PKCS#8 PEM. Native custody signs and exchanges
the assertion and coordinates cached token renewal. Authorization-code refresh
credentials use the existing owner. Role visibility, deletion history, task-result retention and custom validation remain provider contracts; live qualification is separate.

## SuiteQL tables

`netsuite.table.observed({ table, columns, deletedRecordType? })` reads one
SuiteQL table through `POST /services/rest/query/v1/suiteql` on the account
named by the binding's `account` setup, written as it appears in the REST host
(`https://<account>.suitetalk.api.netsuite.com`, such as `1234567` or
`1234567-sb1`). Every request sends `Prefer: transient`. SuiteQL returns values
as text and omits null columns, so each selected column is `string | null`.

Each acquisition pass is two keyset walks ordered by `(second, internal id)`:

1. With `deletedRecordType`, the `deletedrecord` rows whose `recordtype` equals
   it, by `deleteddate`, published as explicit deletions of `recordid`.
2. The table's rows by `lastmodifieddate`.

Each page asks for rows strictly after the last `(TO_CHAR(time), id)` it read
and continues while NetSuite states `hasMore`; no offset is followed. The
rendered modification second (`bijection_modified`) is the row's opaque version.
The first pass walks both tables from the floor. Each finished pass carries the
highest `(second, id)` each walk read (`sync.carry`), and the next pass walks
from five minutes before each of them, so a row committed late with an earlier
modification second is still read within that lag. Re-read rows deduplicate by
version; two changes inside one second are indistinguishable. A pass that fails
or leaves a gap hands nothing on. No pass claims coverage, and a row missing
from a listing is never a deletion.

Requirements and limits:

* `TO_CHAR` renders in the integration user's time zone. Give that user a zone
  without daylight saving (GMT): a repeated autumn hour renders out of order and
  a walk could step over rows inside it.
* The `deletedrecord` column names and `recordtype` vocabulary are taken from
  NetSuite's records catalog and have not been probed against an account.
* A 429 (account concurrency exhausted) or 503 is a transient failure. Requests
  of one acquisition are sequential; concurrency shared with other integrations
  of the account is not coordinated.
* This table mode declares no write.

Bind a `netsuite` credential whose `allowed_resource_origins` names the REST
host: an `oauth_client_credentials` envelope with a `client_assertion` and `private_key_jwt` protocol
(OAuth 2.0 machine-to-machine: a PS256 or ES256 key whose certificate is
registered on the integration, its certificate id as `kid`, and the
`rest_webservices` scope as a claim), or an `oauth_refresh` grant from the
authorization-code flow.

## Provider references

Provider references and prerequisites are maintained in the connector guidance above. No separate provider-documentation review date is recorded.

## Source and evidence

[Canonical connector source](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/src/connectors/netsuite/README.md), [native analysis](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/contract-analysis.json) and [check receipts](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/evidence.json).

Connector artifact: `905888ea276a2a28e36981a79e8142b2547ea451c3e63162cb6915ad4a7d1305`.

The resource declaration examples above are compiled and compared with exact catalog declarations. Recorded checks apply only to their source, declaration and runtime identities. Configure a connection and inspect its status to establish deployment-specific readiness.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.