Learn how to programmatically create and manage multiple meetergo users for your organization or platform.
Overview
The meetergo API allows you to:
- Create users with pre-configured availability and meeting types
- Manage settings across multiple users
- Query and update user configurations in bulk
- Handle user lifecycle (create, update, deactivate)
Basic User Creation
Create a user with default settings:
const response = await fetch('https://api.meetergo.com/v4/user', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: '[email protected]',
givenName: 'John',
familyName: 'Smith',
timezone: 'Europe/Berlin'
})
});
const user = await response.json();
// Returns: userId, availabilityId, meetingTypeId, bookingUrl, companyId
User with Custom Configuration
Create a fully configured user in one call:
const response = await fetch('https://api.meetergo.com/v4/user', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: '[email protected]',
givenName: 'Sarah',
familyName: 'Johnson',
timezone: 'Europe/London',
availability: {
name: 'Consulting Hours',
timezone: 'Europe/London',
schedule: [
{
dayOfWeek: 'monday',
intervals: [
{ from: '09:00', to: '12:00' },
{ from: '14:00', to: '18:00' }
]
},
{
dayOfWeek: 'tuesday',
intervals: [{ from: '09:00', to: '17:00' }]
},
{
dayOfWeek: 'wednesday',
intervals: [{ from: '09:00', to: '17:00' }]
},
{
dayOfWeek: 'thursday',
intervals: [{ from: '09:00', to: '17:00' }]
},
{
dayOfWeek: 'friday',
intervals: [{ from: '09:00', to: '15:00' }]
}
]
},
meetingType: {
name: 'Strategy Session',
duration: 60,
slug: 'sarah-johnson-strategy'
}
})
});
Listing Users
Get All Users
const response = await fetch('https://api.meetergo.com/v4/user', {
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
const users = await response.json();
Get Specific User
const userId = 'user-uuid';
const response = await fetch(`https://api.meetergo.com/v4/user/${userId}`, {
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'x-meetergo-api-user-id': userId
}
});
const user = await response.json();
Managing Meeting Types
Create Additional Meeting Types
async function createMeetingType(userId, meetingType) {
const response = await fetch('https://api.meetergo.com/v4/meeting-type', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'x-meetergo-api-user-id': userId
},
body: JSON.stringify(meetingType)
});
return response.json();
}
// Create multiple meeting types for a user
const meetingTypes = [
{ name: 'Quick Call', duration: 15 },
{ name: 'Standard Meeting', duration: 30 },
{ name: 'Deep Dive', duration: 60 }
];
for (const mt of meetingTypes) {
await createMeetingType(userId, mt);
}
Get User’s Meeting Types
const response = await fetch(
`https://api.meetergo.com/v4/meeting-type?domain=user&id=${userId}`,
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'x-meetergo-api-user-id': userId
}
}
);
const meetingTypes = await response.json();
Update Meeting Type
await fetch(`https://api.meetergo.com/v4/meeting-type/${meetingTypeId}`, {
method: 'PATCH',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'x-meetergo-api-user-id': userId
},
body: JSON.stringify({
duration: 45,
bufferTimeBefore: 10,
bufferTimeAfter: 5,
minimumNotice: 60 // minutes
})
});
Managing Availability
Get User’s Availability
const response = await fetch(
`https://api.meetergo.com/availability?userId=${userId}`,
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'x-meetergo-api-user-id': userId
}
}
);
const availabilities = await response.json();
Update Availability Schedule
await fetch(`https://api.meetergo.com/availability/${availabilityId}`, {
method: 'PATCH',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'x-meetergo-api-user-id': userId
},
body: JSON.stringify({
schedule: [
{
dayOfWeek: 'monday',
intervals: [{ from: '10:00', to: '16:00' }]
},
// ... other days
]
})
});
Add Holiday/Exception
// Create an availability exception (e.g., vacation)
await fetch('https://api.meetergo.com/availability-exception/user', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'x-meetergo-api-user-id': userId
},
body: JSON.stringify({
startDate: '2024-12-24',
endDate: '2024-12-26',
isAvailable: false,
name: 'Christmas Holiday'
})
});
Bulk Operations
Bulk User Creation
async function createUsersInBulk(users) {
const results = {
successful: [],
failed: []
};
// Process in batches to respect rate limits
const batchSize = 10;
for (let i = 0; i < users.length; i += batchSize) {
const batch = users.slice(i, i + batchSize);
const promises = batch.map(async (user) => {
try {
const response = await fetch('https://api.meetergo.com/v4/user', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify(user)
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();
results.successful.push({ input: user, result: data });
} catch (error) {
results.failed.push({ input: user, error: error.message });
}
});
await Promise.all(promises);
// Wait between batches to respect rate limits
if (i + batchSize < users.length) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
}
return results;
}
// Usage
const usersToCreate = [
{ email: '[email protected]', givenName: 'User', familyName: 'One', timezone: 'Europe/Berlin' },
{ email: '[email protected]', givenName: 'User', familyName: 'Two', timezone: 'Europe/Berlin' },
// ... more users
];
const results = await createUsersInBulk(usersToCreate);
console.log(`Created: ${results.successful.length}, Failed: ${results.failed.length}`);
Bulk Update Meeting Types
async function updateMeetingTypesForAllUsers(updates) {
// Get all users
const usersResponse = await fetch('https://api.meetergo.com/v4/user', {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const users = await usersResponse.json();
for (const user of users) {
// Get user's meeting types
const mtResponse = await fetch(
`https://api.meetergo.com/v4/meeting-type?domain=user&id=${user.id}`,
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'x-meetergo-api-user-id': user.id
}
}
);
const meetingTypes = await mtResponse.json();
// Update each meeting type
for (const mt of meetingTypes) {
await fetch(`https://api.meetergo.com/v4/meeting-type/${mt.id}`, {
method: 'PATCH',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'x-meetergo-api-user-id': user.id
},
body: JSON.stringify(updates)
});
}
}
}
// Example: Add 15-minute buffer to all meeting types
await updateMeetingTypesForAllUsers({
bufferTimeBefore: 15
});
User Lifecycle Management
Deactivate a User
// Delete user (soft delete)
await fetch(`https://api.meetergo.com/v4/user/${userId}`, {
method: 'DELETE',
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
});
Track User Status
Store user status in your database and sync with meetergo:
class UserManager {
async syncUser(platformUserId) {
const platformUser = await db.users.findUnique({
where: { id: platformUserId }
});
if (!platformUser.meetergoUserId) {
// User not yet in meetergo, create them
const meetergoUser = await this.createMeetergoUser(platformUser);
await db.users.update({
where: { id: platformUserId },
data: { meetergoUserId: meetergoUser.userId }
});
return meetergoUser;
}
// User exists, return their info
return this.getMeetergoUser(platformUser.meetergoUserId);
}
async deactivateUser(platformUserId) {
const platformUser = await db.users.findUnique({
where: { id: platformUserId }
});
if (platformUser.meetergoUserId) {
await fetch(`https://api.meetergo.com/v4/user/${platformUser.meetergoUserId}`, {
method: 'DELETE',
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
}
await db.users.update({
where: { id: platformUserId },
data: { status: 'deactivated', meetergoUserId: null }
});
}
}
Best Practices
Store IDs - Always store meetergo user IDs in your database
Batch operations - Process bulk operations in batches of 10-20
Handle failures - Implement retry logic for failed API calls
Rate limiting - Add delays between bulk operations
Idempotency - Check if user exists before creating duplicates
Next Steps