Conector REST de NetSuite
Documentación de la API
Sección titulada «Documentación de la API»El REST API Browser de NetSuite documenta los puntos de conexión de registros, y la referencia de SuiteQL documenta el lenguaje de consulta que este conector utiliza para extraer datos tabulares.
Cómo funciona la autenticación
Sección titulada «Cómo funciona la autenticación»El conector inicia sesión con credenciales de cliente de OAuth 2.0 mediante una aserción de cliente JWT PS256: no hay inicio de sesión interactivo ni token de actualización. Usted genera un par de claves RSA, carga el certificado público en NetSuite y le entrega a PlaidCloud la clave privada correspondiente más tres ID. En cada extracción, PlaidCloud construye y firma una aserción de corta duración, la intercambia por un token de acceso y llama a la API REST.
Configuración del lado de NetSuite
Sección titulada «Configuración del lado de NetSuite»Haga esto en NetSuite antes de crear la conexión de PlaidCloud. Requiere un administrador y está en la ruta crítica.
1. Habilitar la función
Sección titulada «1. Habilitar la función»Habilite OAuth 2.0 y SuiteTalk (SOAP and REST Web Services) en Setup > Company > Enable Features > SuiteCloud.
2. Crear el par de claves RSA
Sección titulada «2. Crear el par de claves RSA»Genere un par de claves RSA de 2048 bits (o más) con un algoritmo de resumen compatible con PS256. Por ejemplo, con OpenSSL:
openssl genrsa -out plaidcloud_netsuite.pem 2048openssl rsa -in plaidcloud_netsuite.pem -pubout -out plaidcloud_netsuite_public.pemMantenga en secreto la clave privada (plaidcloud_netsuite.pem): se introduce en PlaidCloud y nunca en NetSuite.
3. Cargar el certificado público → ID de certificado
Sección titulada «3. Cargar el certificado público → ID de certificado»En Setup > Integration > OAuth 2.0 Client Credentials (M2M) Setup, asigne el certificado público a una integración, una entidad y un rol. NetSuite devuelve un ID de certificado para la clave pública cargada; es el kid del JWT y no es un secreto. Anótelo.
4. Crear el registro de integración → ID de cliente
Sección titulada «4. Crear el registro de integración → ID de cliente»En Setup > Integration > Manage Integrations > New, cree una integración con OAuth 2.0 habilitado y la concesión Client Credentials seleccionada. NetSuite emite un ID de cliente (clave de consumidor). Anótelo. En el flujo de credenciales de cliente con aserción no hay secreto de cliente.
5. Rol y permisos
Sección titulada «5. Rol y permisos»Asigne al rol utilizado en la asignación M2M un conjunto de permisos que cubra lo que va a leer:
- REST Web Services (Setup) — obligatorio para cualquier llamada REST.
- SuiteAnalytics Workbook — obligatorio si su SuiteQL accede a datos de análisis o de workbook.
- Log in using OAuth 2.0 Access Tokens — obligatorio para el intercambio de tokens.
- Permisos de visualización a nivel de registro en cada tipo de registro que lean sus consultas (transacciones, cuentas, entidades, etc.).
6. ID de cuenta
Sección titulada «6. ID de cuenta»Encuentre su ID de cuenta en Setup > Company > Company Information (el campo Account ID). Determina el host de la API:
| Entorno | Formato del ID de cuenta | Host de la API |
|---|---|---|
| Producción | 1234567 |
1234567.suitetalk.api.netsuite.com |
| Entorno de pruebas | 1234567_SB1 |
1234567-sb1.suitetalk.api.netsuite.com |
PlaidCloud deriva el host del ID de cuenta automáticamente (pasa a minúsculas y convierte _ en -). Introduzca el ID de cuenta exactamente como lo muestra NetSuite, incluido el sufijo _SB1 en un entorno de pruebas.
Configuración
Sección titulada «Configuración»Cree la conexión con el tipo de conexión NetSuite (no con el tipo REST genérico: solo el tipo NetSuite deriva el host e incorpora el comportamiento de paginación de SuiteQL). Estos campos aparecen en el formulario:
Identificación
Sección titulada «Identificación»| Campo | Tipo | Descripción |
|---|---|---|
| Nombre | Texto | Nombre para mostrar de esta conexión. |
| Alias | Texto (varias líneas) | Alias o notas opcionales sobre la conexión. |
| Está activa | Interruptor | Indica si la conexión está habilitada. Deshabilítela para pausarla sin eliminarla. |
| Solo lectura de BD | Interruptor | Restringe la conexión a operaciones de solo lectura. |
| Tipo de acceso | Selección | Nivel de acceso de solo lectura, solo escritura o lectura y escritura para esta conexión. |
Credenciales de NetSuite
Sección titulada «Credenciales de NetSuite»| Campo | Tipo | Descripción |
|---|---|---|
| ID de cliente | Texto | El ID de cliente del registro de integración (paso 4). |
| ID de certificado | Texto | El ID de certificado (kid del JWT) devuelto al cargar el certificado público (paso 3). No es un secreto. |
| ID de cuenta de NetSuite | Texto | El ID de cuenta (paso 6), por ejemplo 1234567 o 1234567_SB1. |
| Certificado privado de NetSuite | Texto (PEM) | La clave privada (paso 2), pegada como un bloque PEM completo de varias líneas. Se almacena cifrada y nunca se devuelve en texto sin cifrar. |
Extracción de datos con SuiteQL
Sección titulada «Extracción de datos con SuiteQL»La API de registros de NetSuite solo devuelve {id, links} por fila, por lo que PlaidCloud extrae los datos tabulares con SuiteQL mediante el paso Solicitud REST. Configure el paso con la conexión de NetSuite:
- Método —
POST - Punto de conexión —
/services/rest/query/v1/suiteql(la ruta literal; el host proviene de la conexión) - Cuerpo — la consulta como JSON:
{"q": "SELECT ... FROM ... ORDER BY internalid"}
No configure la paginación ni los encabezados a mano
Sección titulada «No configure la paginación ni los encabezados a mano»En una conexión de NetSuite, el paso incorpora automáticamente los detalles de SuiteQL:
- Los encabezados
Prefer: transientyContent-Type: application/json. - Paginación por desplazamiento según los campos
items/hasMorede la respuesta, con el tamaño de página fijo del servicio.
No modifique los controles de Paginación y análisis ni estos encabezados: los establece la conexión. Configure únicamente el Punto de conexión, el Cuerpo y las Columnas (a continuación).
Asigne tipo a las columnas de importe y de fecha
Sección titulada «Asigne tipo a las columnas de importe y de fecha»SuiteQL devuelve todos los valores como cadenas JSON ("1234.56", "2026-01-15", "T"). Defina manualmente las columnas de salida con sus tipos reales (Currency/Decimal para importes, Date/Datetime para fechas, Boolean para los indicadores "T"/"F") y PlaidCloud convierte las cadenas en columnas con tipo al cargarlas en la tabla. Las cadenas vacías se asignan a null. (La detección automática del esquema no aplica la configuración de servicio de la conexión, por lo que no puede hacerlo por usted: defina usted mismo las columnas.)
Limitaciones conocidas
Sección titulada «Limitaciones conocidas»| Limitación | Qué significa |
|---|---|
| Se requieren columnas manuales | La detección automática del esquema no aplica la configuración de servicio de NetSuite, así que defina a mano las columnas de importe, fecha y booleanas y sus tipos. |
| La paginación está fijada por el servicio | El modo de paginación, las rutas y el tamaño de página los establece la conexión y no se pueden ajustar en el paso. |
| Solo reemplazo de la tabla completa | Cada extracción vuelve a extraer todo el resultado: no hay ruta incremental ni de deltas. Una extracción programada vuelve a leer la tabla completa en cada ejecución, así que limite su cláusula WHERE al segmento que necesita. |
| Multimoneda / subsidiaria | En transaction/transactionline, amount está en la moneda propia de la transacción. Un SUM(amount) simple entre subsidiarias es incorrecto a efectos de consolidación: seleccione campos consolidados o convertidos con el tipo de cambio al totalizar entre subsidiarias. |
| Límite de ~100 000 filas en SuiteQL | NetSuite limita una sola consulta a unas 100 000 filas sin SuiteAnalytics Connect. Una consulta escrita a mano que lo supere falla de forma explícita con un mensaje que solicita un rango de fechas más estrecho u otros filtros, en lugar de truncarse sin avisar. Los pasos predefinidos NetSuite: importar saldos / detalle del libro mayor dividen automáticamente un rango de fechas en ventanas para mantenerse por debajo de ese límite. |
| Contabilidad multilibro | En una cuenta con Multi-Book Accounting, TransactionAccountingLine contiene una fila por libro y por línea de transacción: un SUM sin filtrar entre libros cuenta dos (o N) veces. Los pasos de importación predefinidos usan de forma predeterminada el libro principal; una consulta escrita a mano debe filtrar explícitamente accountingbook = 1 (o el libro que elija), salvo que lo que realmente quiera sea un total entre libros. |
| Envoltorio de la respuesta | El envoltorio exacto de la respuesta y el ámbito o rol aceptados se confirman en la puesta en producción real; el conector se ha creado según la estructura documentada de NetSuite. |
Consultas de ejemplo
Sección titulada «Consultas de ejemplo»Financiera: líneas de transacciones del libro mayor de un período, con tipos y ordenadas:
SELECT tl.transaction AS transaction_id, t.trandate AS tran_date, a.acctnumber AS account_number, tl.subsidiary AS subsidiary_id, tl.foreignamount AS amountFROM transactionline tlJOIN transaction t ON t.id = tl.transactionJOIN account a ON a.id = tl.expenseaccountWHERE t.trandate BETWEEN TO_DATE('2026-01-01', 'YYYY-MM-DD') AND TO_DATE('2026-01-31', 'YYYY-MM-DD')ORDER BY tl.transaction, tl.idOperativa: pedidos de venta abiertos por cliente:
SELECT so.tranid AS order_number, so.entity AS customer_id, so.trandate AS order_date, so.status AS order_statusFROM transaction soWHERE so.type = 'SalesOrd' AND so.status = 'SalesOrd:B'ORDER BY so.id