Use the REST Record API when native CRUD is enough. Use a RESTlet when you need custom orchestration, validation, aggregation, or a contract NetSuite’s native endpoints do not give you.
Verdict
Use the REST Record API for straightforward native CRUD. Use a RESTlet when the integration needs business logic, multi-step orchestration, custom payloads, or stronger contract control.
| Criterion | Option A | Option B | Recommendation |
|---|---|---|---|
| Custom contract control | Limited to the native surface. | Strong. You own the API shape. | RESTlet when contract design matters. |
| Maintenance burden | Lower. Fewer custom moving parts. | Higher. You own the endpoint behavior. | REST Record API when native fit is good enough. |
| Business-logic orchestration | Limited. | Strong for integration-specific flows. | RESTlet when the endpoint is more than CRUD. |
| Time to first delivery | Often faster for simple integrations. | More setup but more control. | Choose by long-term fit, not only the first sprint. |
Best when your use case aligns closely with NetSuite’s native record surface.
Best when the integration is really an application boundary, not just a record endpoint.
This decision becomes easy once you stop thinking in NetSuite terms and start thinking in integration-boundary terms. If the external system wants native records in mostly native shapes, the REST Record API is usually enough. If the external system really needs a business workflow, enrichment layer, or translation boundary, you are no longer choosing CRUD. You are choosing whether to build an application surface, which is what RESTlets are for.
Avoid vanity customization
Do not build a RESTlet just to feel in control. Custom endpoints are only worth the maintenance cost when they actually solve a contract or orchestration problem native REST does not solve well.
Governance
A RESTlet lets you centralize expensive operations, but it also makes you responsible for every inefficiency inside the endpoint. Native REST avoids some custom cost because less logic lives in your code.
Performance
Performance problems usually appear when teams fake an application boundary with native CRUD alone or, inversely, build an over-engineered RESTlet that only mirrors standard record actions.