Skip to main content

Node.js SDK for MONCRENEAU

The official Node.js SDK to integrate MONCRENEAU into your Express, NestJS, or standard Node.js applications.

Installation

npm install moncreneau
# or
yarn add moncreneau
# or
pnpm add moncreneau

Configuration

ES6 Import

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

CommonJS Require

const { MoncreneauClient } = require('moncreneau');

const client = new MoncreneauClient('YOUR_API_KEY');

With Environment Variables

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient(process.env.MONCRENEAU_API_KEY);

.env file:

MONCRENEAU_API_KEY=YOUR_API_KEY
MONCRENEAU_BASE_URL=https://mc-prd.duckdns.org/api/v1

Usage Examples

List Departments

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function listDepartments() {
try {
const departments = await client.departments.list();

departments.forEach(dept => {
console.log(`ID: ${dept.id} - ${dept.name} (${dept.address})`);
});
} catch (error) {
console.error('Error:', error.message);
}
}

listDepartments();

Create an Appointment

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function createAppointment() {
try {
const appointment = await client.appointments.create({
departmentId: 5,
dateTime: '2026-02-15T10:00:00',
name: 'Amadou Diallo'
});

console.log('✅ Appointment created!');
console.log('ID:', appointment.id);
console.log('QR Code:', appointment.qrCode);
console.log('Status:', appointment.status);

} catch (error) {
if (error.code === 'INSUFFICIENT_CREDITS') {
console.error('❌ Insufficient credits:', error.message);
} else {
console.error('❌ Error:', error.message);
}
}
}

createAppointment();

Check Availability

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function checkAvailability() {
try {
const availability = await client.departments.checkAvailability(
5,
'2026-02-15T10:00:00'
);

if (availability.available) {
console.log('✅ Slot available!');
console.log('Remaining slots:', availability.remainingSlots);
} else {
console.log('❌ Slot unavailable');
console.log('Reason:', availability.unavailabilityReason);
}
} catch (error) {
console.error('Error:', error.message);
}
}

checkAvailability();

Cancel an Appointment

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function cancelAppointment(appointmentId) {
try {
const cancelled = await client.appointments.cancel(appointmentId);

console.log('✅ Appointment cancelled');
console.log('Status:', cancelled.status);
console.log('1 credit refunded');

} catch (error) {
console.error('❌ Error:', error.message);
}
}

cancelAppointment(123);

Express Integration

import express from 'express';
import { MoncreneauClient } from 'moncreneau';

const app = express();
app.use(express.json());

const client = new MoncreneauClient(process.env.MONCRENEAU_API_KEY);

// Endpoint to create an appointment
app.post('/appointments', async (req, res) => {
try {
const { departmentId, dateTime, name } = req.body;

const appointment = await client.appointments.create({
departmentId,
dateTime,
name
});

res.status(201).json(appointment);
} catch (error) {
if (error.code === 'INSUFFICIENT_CREDITS') {
return res.status(402).json({ error: error.message });
}
res.status(500).json({ error: error.message });
}
});

// Endpoint to check availability
app.get('/departments/:id/availability', async (req, res) => {
try {
const { id } = req.params;
const { dateTime } = req.query;

const availability = await client.departments.checkAvailability(
parseInt(id),
dateTime
);

res.json(availability);
} catch (error) {
res.status(500).json({ error: error.message });
}
});

app.listen(3000, () => {
console.log('Server running on port 3000');
});

Error Handling

The SDK uses typed errors:

import { 
MoncreneauClient,
InsufficientCreditsError,
ValidationError,
NotFoundError,
UnauthorizedError
} from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

try {
const appointment = await client.appointments.create(data);
} catch (error) {
if (error instanceof InsufficientCreditsError) {
// Not enough credits
console.error('Insufficient credits:', error.message);
} else if (error instanceof ValidationError) {
// Validation failed
console.error('Validation:', error.errors);
} else if (error instanceof NotFoundError) {
// Resource not found
console.error('Not found:', error.message);
} else if (error instanceof UnauthorizedError) {
// Invalid API Key
console.error('Invalid API Key');
} else {
// Generic error
console.error('Error:', error.message);
}
}

Advanced Configuration

Timeout and Retry

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient({
apiKey: 'YOUR_API_KEY',
baseUrl: 'https://mc-prd.duckdns.org/api/v1',
timeout: 30000, // 30 seconds
maxRetries: 3,
retryDelay: 1000 // 1 second
});

Webhooks

Verify webhook signatures:

import { MoncreneauClient } from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

app.post('/webhooks/moncreneau', (req, res) => {
const signature = req.headers['x-moncreneau-signature'];
const payload = JSON.stringify(req.body);

const isValid = client.webhooks.verifySignature(
payload,
signature,
process.env.WEBHOOK_SECRET
);

if (!isValid) {
return res.status(401).send('Invalid signature');
}

// Process the event
const event = req.body;
console.log('Event:', event.type, event.data);

res.json({ received: true });
});

TypeScript Support

The SDK is fully typed:

import { 
MoncreneauClient,
Department,
Appointment,
CreateAppointmentRequest,
SlotAvailability
} from 'moncreneau';

const client = new MoncreneauClient('YOUR_API_KEY');

async function example(): Promise<void> {
const departments: Department[] = await client.departments.list();

const request: CreateAppointmentRequest = {
departmentId: 5,
dateTime: '2026-02-15T10:00:00',
name: 'Amadou Diallo'
};

const appointment: Appointment = await client.appointments.create(request);
}

Resources

The MONCRENEAU Node.js SDK is available on npm. For integration examples, see the Examples section.