Visibility

An integration is a member of the organisation, not an administrator of it. It sees what that membership allows, and nothing more.

Every meeting carries a visibility. Leave the field out when creating one and it takes the integration's own default, which is organisation.

A personal key follows its owner instead: it sees exactly what that user sees, including their own private meetings and the meetings shared with them, and everything it creates is authored by the user with the user's own default visibility. Everything below about invisibility answering as absent applies to personal keys unchanged.

organisation

Everyone in the organisation can see the meeting. This is the default an integration creates with.

private

Only the author. An integration is the author of what it creates, so it keeps seeing its own private meetings.

shared

The author plus the members named in shared_with.

Invisible is answered as absent

A meeting an integration may not see answers 404 NOT_FOUND, never 403, and it does not appear in any list. That is deliberate: a 403 would confirm that the meeting exists, which is exactly what a private meeting is not supposed to reveal. Changing one and deleting one answer the same way.

A private meeting belonging to a colleague is therefore indistinguishable from a meeting that was never created. There is no scope that changes this.

Visibility is the whole of the bound, in both directions. A meeting an integration can see, it can also change and delete, given the scope for it. There is no extra rule that reserves a meeting for whoever created it, so a meeting a colleague made in the app is yours to correct.

Who can be shared with

shared_with takes member ids, and only of people who can actually sign in and open the meeting. Members without an account and other integrations are refused with 400 INVALID_SHARED_WITH, with the offending ids in details.invalid. The member list gives you each member's status, which is what to filter on.

Integrations are not colleagues

They never appear in the member list, active or not. A member id you get from this API always belongs to a person, so there is nothing to filter out.