Platform Strengths
- Open API Philosophy: Robust REST API available
- Partner Ecosystem: 30+ integration partners
- Mid-Market Focus: Built for 50-1000 employees
- Modern Architecture: Cloud-native platform
Namely is an all-in-one HR platform designed specifically for mid-market companies (50-1000 employees). They combine HRIS, payroll, benefits, and talent management in a single platform, with a strong focus on open API architecture and third-party integrations.
Platform Strengths
Developer Access
Becoming a Namely partner provides:
Requirements:
Existing Namely customers can:
Getting Started:
# Contact Namely supporthello@namely.com
# Request API credentials# Provide use case documentation
Access Namely through unified API providers:
Merge API
const merge = require('@mergeapi/merge-node-client');
const client = new merge.MergeClient({ apiKey: 'YOUR_API_KEY'});
// Access Namely data through unified interfaceconst employees = await client.hris.employees.list({ integrationSlug: 'namely'});
Benefits:
Register Your Application
POST https://api.namely.com/oauth/applications{ "name": "Tallyfy Integration", "redirect_uri": "https://app.tallyfy.com/oauth/namely/callback"}
Implement OAuth 2.0
// Authorization URLconst authUrl = `https://[company].namely.com/api/v1/oauth/authorize? response_type=code& client_id=${CLIENT_ID}& redirect_uri=${REDIRECT_URI}& state=${STATE}`;
// Exchange code for tokenconst tokenResponse = await fetch('https://[company].namely.com/api/v1/oauth/token', { method: 'POST', body: JSON.stringify({ grant_type: 'authorization_code', code: authCode, client_id: CLIENT_ID, client_secret: CLIENT_SECRET, redirect_uri: REDIRECT_URI })});
Make API Calls
const employees = await fetch('https://[company].namely.com/api/v1/employees', { headers: { 'Authorization': `Bearer ${accessToken}`, 'Accept': 'application/json' }});
Employee Management
GET /api/v1/employeesGET /api/v1/employees/{id}POST /api/v1/employeesPUT /api/v1/employees/{id}
Time & Attendance
GET /api/v1/time_off_requestsPOST /api/v1/time_off_requestsGET /api/v1/timesheetsPOST /api/v1/timesheets
Payroll Data
GET /api/v1/payrollsGET /api/v1/pay_periodsGET /api/v1/earningsGET /api/v1/deductions
Benefits
GET /api/v1/benefit_plansGET /api/v1/enrollmentsPOST /api/v1/enrollmentsPUT /api/v1/enrollments/{id}
Namely supports webhooks for real-time event notifications:
// Register webhook endpointconst webhook = { url: 'https://app.tallyfy.com/webhooks/namely', events: [ 'employee.created', 'employee.updated', 'employee.terminated', 'time_off_request.submitted', 'time_off_request.approved' ], secret: 'webhook_secret'};
// Webhook handlerapp.post('/webhooks/namely', (req, res) => { const signature = req.headers['x-namely-signature']; const payload = req.body;
if (verifySignature(payload, signature, webhook.secret)) { switch(payload.event) { case 'employee.created': createOnboardingProcess(payload.data); break; case 'employee.terminated': createOffboardingProcess(payload.data); break; } }
res.sendStatus(200);});
Webhook Trigger
employee.created
eventCreate Tallyfy Process
async function createOnboardingProcess(employee) { const process = await tallyfy.processes.create({ template: 'employee-onboarding', data: { employeeId: employee.id, name: employee.full_name, email: employee.email, department: employee.department, manager: employee.reports_to, startDate: employee.start_date } });
// Store Namely ID for updates await tallyfy.metadata.set(process.id, 'namely_id', employee.id);}
Sync Progress Back
// Update Namely custom field with onboarding statusawait namely.employees.update(employee.id, { custom_fields: { onboarding_status: 'In Progress', onboarding_completion: '60%' }});
// Listen for time-off requestsnamely.webhooks.on('time_off_request.submitted', async (request) => { // Create approval process in Tallyfy const approval = await tallyfy.processes.create({ template: 'time-off-approval', data: { employee: request.employee_name, type: request.time_off_type, startDate: request.start_date, endDate: request.end_date, days: request.days_requested, manager: request.approver } });
// When approved in Tallyfy tallyfy.on('process.completed', async (process) => { if (process.template === 'time-off-approval') { await namely.timeOffRequests.approve(request.id); } });});
class NamelyIntegration { async syncWithRetry(operation, maxRetries = 3) { let lastError;
for (let i = 0; i < maxRetries; i++) { try { return await operation(); } catch (error) { lastError = error;
if (error.status === 429) { // Rate limit - exponential backoff await sleep(Math.pow(2, i) * 1000); } else if (error.status === 401) { // Token expired - refresh await this.refreshToken(); } else if (error.status >= 500) { // Server error - retry with delay await sleep(5000); } else { // Client error - don't retry throw error; } } }
throw lastError; }}
Namely implements standard rate limiting:
X-RateLimit-Remaining
// Rate limit handlerconst rateLimiter = { remaining: 1000, resetTime: null,
async executeWithLimit(fn) { if (this.remaining <= 10) { const waitTime = this.resetTime - Date.now(); if (waitTime > 0) { await sleep(waitTime); } }
const response = await fn();
// Update limits from headers this.remaining = parseInt(response.headers['x-ratelimit-remaining']); this.resetTime = parseInt(response.headers['x-ratelimit-reset']) * 1000;
return response; }};
Namely Connect allows clients to set up integrations directly:
Submit Integration
Marketplace Listing
Client Activation
// Simple Namely-to-Tallyfy middlewareconst express = require('express');const app = express();
class NamelyTallyfyBridge { constructor(namelyConfig, tallyfyConfig) { this.namely = new NamelyClient(namelyConfig); this.tallyfy = new TallyfyClient(tallyfyConfig); }
async syncEmployees() { const employees = await this.namely.employees.list();
for (const emp of employees) { await this.tallyfy.users.upsert({ externalId: emp.id, email: emp.email, name: emp.full_name, department: emp.department }); } }
startScheduledSync() { // Real-time webhooks this.setupWebhooks();
// Daily full sync schedule.daily(() => this.syncEmployees());
// Hourly incremental sync schedule.hourly(() => this.syncRecentChanges()); }}
Namely offers solid API capabilities for mid-market HR integration. While partner access provides the best experience, alternatives like unified APIs offer quick paths to integration. Their open ecosystem philosophy and growing partner network make Namely a good choice for companies seeking HR automation through Tallyfy.