JavaScript SDK
The Staqr JavaScript SDK provides type-safe API access for both browser and Node.js environments using Axios, the most popular HTTP client.
Installation
NPM
# Staqr Platform API
npm install file:./sdks/staqr-javascript
# Commerce APIs
npm install file:./sdks/commerce-v1-javascript # Recommended - structured APIs
npm install file:./sdks/commerce-v2-javascript # Generic CRUD
npm install file:./sdks/commerce-v0-javascript # Legacy (if needed)
Yarn
yarn add file:./sdks/staqr-javascript
Quick Start
import { Configuration, FlowsApi } from '@staqr/api-client-js';
// Configure the client
const config = new Configuration({
basePath: 'https://my.staqr.com/api/v1',
accessToken: process.env.STAQR_API_KEY,
headers: {
'x-seller-id': 'YOUR_SELLER_ID'
}
});
// Create API instance
const flowsApi = new FlowsApi(config);
// List flows
const flows = await flowsApi.listFlows();
console.log('Flows:', flows.data);
Authentication
API Key Authentication
import { Configuration } from '@staqr/api-client-js';
const config = new Configuration({
basePath: 'https://my.staqr.com/api/v1',
accessToken: process.env.STAQR_API_KEY, // From environment
headers: {
'x-seller-id': process.env.STAQR_SELLER_ID
}
});
OAuth2 (Commerce APIs)
import { Configuration } from '@staqr/commerce-api-v1-js';
// For Commerce Direct access (Keycloak OAuth2)
const config = new Configuration({
basePath: 'https://commerce.staqr.com/api',
accessToken: commerceOAuthToken, // From Keycloak
headers: {
'X-Tenant': 'YOUR_TENANT_CODE'
}
});
Available Packages
| Package | API | Install Command |
|---|---|---|
@staqr/api-client-js | Staqr Platform | npm install file:./sdks/staqr-javascript |
@staqr/commerce-api-v1-js | Commerce v1 (Structured) | npm install file:./sdks/commerce-v1-javascript |
@staqr/commerce-api-v2-js | Commerce v2 (Generic CRUD) | npm install file:./sdks/commerce-v2-javascript |
@staqr/commerce-api-v0-js | Commerce v0 (Legacy) | npm install file:./sdks/commerce-v0-javascript |
Common Operations
Working with Flows
import { FlowsApi, CreateFlowRequest } from '@staqr/api-client-js';
const flowsApi = new FlowsApi(config);
// Create a new flow
const newFlow: CreateFlowRequest = {
displayName: 'Customer Onboarding',
folderId: 'folder-id'
};
const created = await flowsApi.createFlow(newFlow);
// Get flow details
const flow = await flowsApi.getFlow(created.data.id);
// List all flows
const allFlows = await flowsApi.listFlows({ limit: 50 });
Working with Connections
import { ConnectionsApi } from '@staqr/api-client-js';
const connectionsApi = new ConnectionsApi(config);
// List connections
const connections = await connectionsApi.listConnections();
// Test a connection
const testResult = await connectionsApi.testConnection(connectionId);
Error Handling
import { ApiError } from '@staqr/api-client-js';
try {
const result = await flowsApi.getFlow('invalid-id');
} catch (error) {
if (error instanceof ApiError) {
console.error('API Error:', error.status, error.message);
console.error('Details:', error.body);
} else {
throw error;
}
}
Browser Usage
The SDK works in browsers with bundlers like Webpack, Vite, or Rollup:
// vite.config.ts
export default {
define: {
'process.env.STAQR_API_KEY': JSON.stringify(import.meta.env.VITE_STAQR_API_KEY)
}
}
Security Note
Never expose API keys in browser-side code for production applications. Use a backend proxy to securely forward API requests.
TypeScript Support
The SDK includes full TypeScript definitions. All models and API responses are fully typed:
import { Flow, FlowRun, Connection } from '@staqr/api-client-js';
// Types are automatically inferred
const flow: Flow = await flowsApi.getFlow(id);
const runs: FlowRun[] = flow.recentRuns || [];
Examples
See the examples directory for complete usage examples:
- Basic API calls
- Authentication patterns
- Error handling
- Pagination handling
- Webhook integration
API Reference
For complete API documentation, see:
Troubleshooting
CORS Errors in Browser
If you encounter CORS errors, ensure:
- Your API key has browser permissions enabled
- Your domain is whitelisted in the Staqr dashboard
- Consider using a backend proxy for production
Module Resolution
If TypeScript can't find types, add to your tsconfig.json:
{
"compilerOptions": {
"moduleResolution": "node",
"esModuleInterop": true
}
}