Documentation Index
Fetch the complete documentation index at: https://developer.meetergo.com/llms.txt
Use this file to discover all available pages before exploring further.
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: 'user@example.com',
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: 'consultant@example.com',
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: 'user1@example.com', givenName: 'User', familyName: 'One', timezone: 'Europe/Berlin' },
{ email: 'user2@example.com', 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
Edit User Profile
Correct a user’s name or change their public booking slug. All fields are optional — omitted fields stay unchanged.
await fetch(`https://api.meetergo.com/v4/user/${userId}`, {
method: 'PATCH',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
givenName: 'Jonathan',
familyName: 'Smith',
slug: 'jonathan-smith'
})
});
Editable fields: givenName, familyName, slug. Slugs must be at least 5 characters and unique across the platform. Email is not editable here.
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
White-Label Integration
Build scheduling into your platform
Users API
Full user API documentation
Availability
Configure user availability
Rate Limiting
Handle API rate limits