Skip to main content
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)

Creating Platform Users

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