n8n_client 0.2.0 copy "n8n_client: ^0.2.0" to clipboard
n8n_client: ^0.2.0 copied to clipboard

A Dart client for interacting with the n8n Public API, built by Spinex IO.

n8n Dart Client #

A comprehensive Dart client package for interacting with the n8n Public API.

Built and maintained by Spinex IO.


Features #

  • Full coverage of n8n Public API endpoints
  • Type-safe models with JSON serialization
  • Pagination support
  • Comprehensive error handling
  • Easy-to-use client interface

Supported APIs #

API Methods
Workflows Create, Get, Update, Delete, Activate, Deactivate, Transfer, Tags, Versions
Executions List, Get, Delete, Retry
Users List, Create, Get, Delete, Change Role
Credentials Create, Update, Delete, Get Schema, Transfer
Tags Create, List, Get, Update, Delete
Variables Create, List, Update, Delete
Projects Create, List, Update, Delete, Manage Users
Audit Generate Security Audit
Source Control Pull Changes

Installation #

Add this to your pubspec.yaml:

dependencies:
  n8n_client:
    git:
      url: https://github.com/spinex-io/n8n_client.git

Then run:

dart pub get

Quick Start #

import 'package:n8n_client/n8n_client.dart';

void main() async {
  final client = N8NClient(
    baseUrl: 'https://your-n8n-instance.com/api/v1',
    apiKey: 'your-api-key-here',
  );

  // Get all workflows
  final response = await client.workflows.getWorkflows(limit: 10);
  print('Workflows: ${response.data}');
}

Usage Examples #

Workflows #

// List workflows
final workflows = await client.workflows.getWorkflows(
  active: true,
  limit: 20,
  tags: 'production',
);

// Get a single workflow
final workflow = await client.workflows.getWorkflow('workflow-id');

// Create a workflow
final newWorkflow = await client.workflows.createWorkflow({
  'name': 'My Workflow',
  'nodes': [],
  'connections': {},
  'settings': {},
});

// Activate/Deactivate workflow
await client.workflows.activateWorkflow('workflow-id');
await client.workflows.deactivateWorkflow('workflow-id');

// Get workflow version
final version = await client.workflows.getWorkflowVersion('workflow-id', 'version-id');

// Transfer workflow to another project
await client.workflows.transferWorkflow('workflow-id', 'destination-project-id');

Executions #

// List executions
final executions = await client.executions.getExecutions(
  status: 'success',
  workflowId: 'workflow-id',
  limit: 50,
);

// Get a single execution
final execution = await client.executions.getExecution('execution-id', includeData: true);

// Retry a failed execution
await client.executions.retryExecution('execution-id', loadWorkflow: true);

// Delete an execution
await client.executions.deleteExecution('execution-id');

Users #

// List users
final users = await client.users.getUsers(limit: 10, includeRole: true);

// Get a user by ID or email
final user = await client.users.getUser('user@example.com');

// Create users (invite)
final newUsers = await client.users.createUsers([
  {'email': 'newuser@example.com', 'role': 'global:member'},
]);

// Change user role
await client.users.changeRole('user-id', 'global:admin');

Credentials #

// Create a credential
final credential = await client.credentials.createCredential({
  'name': 'My API Key',
  'type': 'httpHeaderAuth',
  'data': {'name': 'Authorization', 'value': 'Bearer xxx'},
});

// Update a credential
await client.credentials.updateCredential('credential-id',
  name: 'Updated Name',
  data: {'key': 'new-value'},
);

// Get credential schema
final schema = await client.credentials.getCredentialType('httpHeaderAuth');

// Transfer credential to another project
await client.credentials.transferCredential('credential-id', 'project-id');

Tags #

// Create a tag
final tag = await client.tags.createTag({'name': 'production'});

// List all tags
final tags = await client.tags.getTags(limit: 50);

// Update a tag
await client.tags.updateTag('tag-id', {'name': 'staging'});

// Delete a tag
await client.tags.deleteTag('tag-id');

Variables #

// Create a variable
final variable = await client.variables.createVariable({
  'key': 'API_URL',
  'value': 'https://api.example.com',
});

// List variables
final variables = await client.variables.getVariables(limit: 100);

// Update a variable
await client.variables.updateVariable('variable-id',
  key: 'API_URL',
  value: 'https://new-api.example.com',
);

// Delete a variable
await client.variables.deleteVariable('variable-id');

Projects #

// Create a project
final project = await client.projects.createProject({'name': 'My Project'});

// List projects
final projects = await client.projects.getProjects(limit: 20);

// Update a project
await client.projects.updateProject('project-id', {'name': 'Renamed Project'});

// Add users to a project
await client.projects.addUsersToProject('project-id', [
  {'userId': 'user-id', 'role': 'project:editor'},
]);

// Change user role in project
await client.projects.changeUserRoleInProject('project-id', 'user-id', 'project:admin');

// Remove user from project
await client.projects.removeUserFromProject('project-id', 'user-id');

Audit #

// Generate a security audit
final audit = await client.audit.generateAudit({
  'daysAbandonedWorkflow': 90,
  'categories': ['credentials', 'nodes'],
});

Source Control #

// Pull changes from remote repository
final result = await client.sourceControl.pullChanges({
  'force': false,
  'variables': {'ENV': 'production'},
});

Models #

The SDK includes type-safe models for all API responses:

// Parse workflow response into model
final response = await client.workflows.getWorkflow('workflow-id');
final workflow = Workflow.fromJson(response.data);

print('Name: ${workflow.name}');
print('Active: ${workflow.active}');
print('Nodes: ${workflow.nodes.length}');

// Parse execution response
final execResponse = await client.executions.getExecution('exec-id');
final execution = Execution.fromJson(execResponse.data);

print('Status: ${execution.status}'); // ExecutionStatus.success
print('Mode: ${execution.mode}');

Available Models #

  • Workflow, Node, WorkflowSettings, WorkflowShare, ActiveVersion
  • Execution, ExecutionStatus, ExecutionMode
  • User
  • Credential, CredentialSchema, CredentialProperty
  • Tag
  • Variable
  • Project, ProjectRelation
  • AuditReport, RiskReport, RiskSection, RiskLocation
  • ImportResult, PullOptions
  • PaginatedList<T> and typed list responses

Error Handling #

try {
  final workflow = await client.workflows.getWorkflow('invalid-id');
} catch (e) {
  print('Error: $e');
  // Output: Exception: Failed to retrieve workflow: ...
}

API Reference #

For detailed API documentation, see the n8n API Reference.


License #

MIT License - see LICENSE file for details.


Contributing #

Contributions are welcome! Please feel free to submit a Pull Request.


Support #

For issues and feature requests, please use the GitHub Issues page.


Built with ❤️ by Spinex IO

2
likes
150
points
91
downloads

Publisher

unverified uploader

Weekly Downloads

A Dart client for interacting with the n8n Public API, built by Spinex IO.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

dio

More

Packages that depend on n8n_client