Skip to main content
The NarrativeApi class exposes multiple API modules through a mixin pattern. This reference documents all available methods.

NQL API

Execute, validate, and compile NQL queries.

executeNql

Execute an NQL query and return results.
const result = await api.executeNql({
  nql: 'SELECT * FROM company_data."my_dataset" LIMIT 10',
  data_plane_id: null,
  execution_cluster: { type: 'shared' },  // optional
  create_as_view: false,                   // optional
});
ParameterTypeRequiredDescription
nqlstringYesThe NQL query to execute
data_plane_idstring | nullYesTarget data plane ID
execution_cluster{ type: 'shared' | 'dedicated' }NoExecution cluster type
create_as_viewbooleanNoCreate result as a view
Returns: Promise<NqlResult>

compileNql

Compile an NQL query and return the transpiled SQL.
const compiled = await api.compileNql({
  nql: 'SELECT * FROM company_data."my_dataset" LIMIT 10',
  data_plane_id: null,
});

console.log(compiled.sql);
Returns: Promise<NqlCompileResult>

validateNql

Validate an NQL query’s syntax.
const ast = await api.validateNql({
  nql: 'SELECT * FROM company_data."my_dataset" LIMIT 10',
  data_plane_id: null,
});
Returns: Promise<NqlAst>

parseNql

Parse an NQL query into an abstract syntax tree.
const ast = await api.parseNql({
  nql: 'SELECT * FROM company_data."my_dataset" LIMIT 10',
  data_plane_id: null,
});
Returns: Promise<NqlAst>

getNqlByJobId

Retrieve results from a previous query by job ID.
const result = await api.getNqlByJobId('job-id-here');
Returns: Promise<NqlResult>

Datasets API

Manage datasets and their metadata.

getDatasets

List all accessible datasets.
const response = await api.getDatasets();
console.log(response.records);
Returns: Promise<ApiRecords<Dataset>>

getDataset

Get a specific dataset by ID.
const dataset = await api.getDataset(12345);
ParameterTypeRequiredDescription
datasetIdnumberYesDataset ID
Returns: Promise<Dataset>

createDataset

Create a new dataset.
const dataset = await api.createDataset({
  name: 'my_dataset',
  display_name: 'My Dataset',
  description: 'Description here',
  schema: { properties: { ... } },
  tags: ['tag1', 'tag2'],
});
Returns: Promise<Dataset>

updateDataset

Update dataset metadata.
const dataset = await api.updateDataset({
  dataset_id: 12345,
  display_name: 'Updated Name',
  description: 'Updated description',
});
Returns: Promise<Dataset>

deleteDataset

Delete a dataset permanently.
await api.deleteDataset(12345);
Returns: Promise<void>

addTags

Add tags to a dataset.
const dataset = await api.addTags(12345, ['production', 'verified']);
Returns: Promise<Dataset>

removeTags

Remove tags from a dataset.
const dataset = await api.removeTags(12345, ['deprecated']);
Returns: Promise<Dataset>

getStatistics

Get dataset statistics.
const stats = await api.getStatistics(12345, 0, 1000);
ParameterTypeRequiredDescription
datasetIdnumberYesDataset ID
offsetnumberNoPagination offset (default: 0)
sizenumberNoPage size (default: 1000)
Returns: Promise<ApiRecords<DatasetTableSummary>>

getColumnStats

Get column-level statistics.
const columnStats = await api.getColumnStats(12345);
Returns: Promise<ColumnStatistics>

getDatasetSample

Get a sample of dataset records.
const sample = await api.getDatasetSample(12345, 1000);
Returns: Promise<ApiRecords<Record<string, string>>>

requestDatasetSample

Request a new sample (async operation).
const { job_id } = await api.requestDatasetSample(12345);
Returns: Promise<{ job_id: string }>

getDatasetFiles

List files in a dataset.
const files = await api.getDatasetFiles(
  12345,           // datasetId
  100,             // size
  0,               // offset
  '2024-01-01',    // afterTimestamp (optional)
  67890            // fromSnapshotId (optional)
);
Returns: Promise<FilePerSnapshotResponse>

getDatasetFileDownloadUrl

Get a download URL for a specific file.
const { download_url } = await api.getDatasetFileDownloadUrl(
  12345,           // datasetId
  67890,           // snapshotId
  'file-id-here'   // fileId
);
Returns: Promise<{ download_url: string }>

refreshMaterializedView

Refresh a materialized view.
const job = await api.refreshMaterializedView(12345);
console.log('Job ID:', job.id);
Returns: Promise<UnknownJob>

updateRetentionPolicy

Update the retention policy.
const dataset = await api.updateRetentionPolicy(12345, {
  type: 'time_based',
  retention_days: 365,
});
Returns: Promise<Dataset>

activateDataset

Activate a pending dataset.
await api.activateDataset(12345);
Returns: Promise<void>

Jobs API

Track asynchronous job status.

getJobs

List all jobs.
const response = await api.getJobs({
  page: 1,
  per_page: 50,
});
Returns: Promise<ApiRecordsV2<Job>>

getJob

Get a specific job by ID.
const job = await api.getJob('job-id-here');
Returns: Promise<Job>

Access Rules API

Manage access permissions.

getAccessRules

List access rules.
const rules = await api.getAccessRules();
Returns: Promise<ApiRecords<AccessRule>>

createAccessRule

Create a new access rule.
const rule = await api.createAccessRule({
  // rule configuration
});
Returns: Promise<AccessRule>

updateAccessRule

Update an existing access rule.
const rule = await api.updateAccessRule({
  // updated configuration
});
Returns: Promise<AccessRule>

deleteAccessRule

Delete an access rule.
await api.deleteAccessRule(ruleId);
Returns: Promise<void>

Access Tokens API

Manage API tokens.

getAccessTokens

List all access tokens.
const tokens = await api.getAccessTokens();
Returns: Promise<ApiRecords<AccessToken>>

getAccessToken

Get a specific token.
const token = await api.getAccessToken(tokenId);
Returns: Promise<AccessToken>

createAccessToken

Create a new access token.
const token = await api.createAccessToken({
  name: 'My Token',
  permissions: ['datasets:read'],
  expires_at: '2025-12-31T23:59:59Z',
});
Returns: Promise<AccessToken>

updateAccessToken

Update an existing token.
const token = await api.updateAccessToken({
  id: tokenId,
  name: 'Updated Name',
});
Returns: Promise<AccessToken>

deleteAccessToken

Delete an access token.
await api.deleteAccessToken(tokenId);
Returns: Promise<void>

Mappings API

Work with Rosetta Stone mappings.

getMappings

List mappings for a company.
const mappings = await api.getMappings(companyId);
Returns: Promise<ApiRecords<Mapping>>

createPrivateMapping

Create a private mapping.
const mapping = await api.createPrivateMapping(companyId, {
  // mapping configuration
});
Returns: Promise<Mapping>

testMapping

Test a mapping configuration.
const result = await api.testMapping({
  // test configuration
});
Returns: Promise<MappingTestResult>

previewMapping

Preview mapping results.
const preview = await api.previewMapping({
  // preview configuration
});
Returns: Promise<MappingPreview>

Subscriptions API

Manage data subscriptions.

getSubscriptions

List all subscriptions.
const subscriptions = await api.getSubscriptions();
Returns: Promise<ApiRecords<Subscription>>

Health API

Check API health status.

getHealthCheck

Check if the API is healthy.
const health = await api.getHealthCheck();
console.log('Status:', health.status);
Returns: Promise<HealthCheckResponse>

TypeScript types

The SDK exports all type definitions:
import type {
  // Core types
  NarrativeApi,
  Config,
  Environment,

  // Dataset types
  Dataset,
  DatasetStatus,
  DatasetWriteMode,
  Schema,
  SchemaProperty,

  // NQL types
  NqlQueryInput,
  NqlResult,
  NqlCompileResult,

  // Job types
  Job,

  // Access types
  AccessRule,
  AccessToken,

  // Pagination
  ApiRecords,
  ApiRecordsV2,
  PaginationOptions,
} from '@narrative.io/data-collaboration-sdk-ts';