Skip to main content

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)

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: '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