Skip to content
Insights · Engineering

Which role did that invite grant?

Name the role that invite granted: the role, the email, and the teams. A different invite can name another role, and another organization does not list it.

Scroll
EngineeringOct 30, 202612 min readBy Salman Naqvi, Founder & CEO
Which role did that invite grant?

A client says the subcontractor was made an owner, or says the invite never arrived. Tonight, three proofs, in a repository the agency or the client can open. Name the role that invite granted: the invitation id, the role, and the email or the user id the request sent. If the organization stored no invitation, write that, and do not invent a role to fill the hole. Show a different invitation whose role is not this one. Show another client's organization that does not list this invitation. If any of the three needs the person who clicked invite, you have not named the role. You have a screenshot and a guess.

This is the role on one invitation. It is not the comment. Which comment did that review leave? is a comment id, a line, and a commit. A line number is not a role. It is not the branch. Which branch did that pull target? is a base ref and a head ref. A ref is not an invitation. It is not the role already on an account. Name the role that account holds is the role a member has after they are inside. An invite can name a role the account does not hold yet, and a member's role is not this invitation id. It is not the trial a customer started, and it is not the chunk a search returned. Those are different objects, and they are not this id.

None of what follows is a permission on this client's organization, and none of it is legal advice. The request below is one host's current example of an organization invitation, and the repository invitation beside it is a different endpoint. The counts below that are a 2014 paper about public events on other people's repositories. A percentage of public repositories is not the role on the invite you sent this afternoon. A paper that could not see private repositories cannot name the invitation on the organization you opened tonight. They do tell you which numbers people mix up when they try to sound precise about a role they have not opened.

GitHub's create-an-organization-invitation example sends a role and does not print an invitation id. The email is octocat@github.com. 18 characters. The role is direct_member. 13 characters. team_ids are 12 and 26. Two integers. 12 is not 26. 12 plus 26 is 38, which the page does not print. The role parameter can be one of four names: admin, direct_member, billing_manager, and reinstate. admin is 5 characters. billing_manager is 15. reinstate is 9. The default is direct_member. The sample uses the default. A default is not a response. The page says reinstate means the previous role, and that it only works if the person was already in the organization. Sending reinstate is not the same as reading a role named reinstate back. The example response is a schema. It says id is a required integer. It does not print a number. Do not invent 1 because a schema says the field exists. The documented API version on the page is 2026-03-10. 10 characters. A version string is not an invitation id (GitHub, Create an organization invitation).

The repository invitation is a second object, and its permission list is not the organization role list. Listing repository invitations defaults to 30 per page and allows at most 100. 30 is not 2, which is how many team ids the organization example sent, and 100 is not an invitation id. The response schema names six permission values: read, write, admin, triage, triage_plus, and maintain. The update endpoint's body can be one of five: read, write, maintain, triage, and admin. triage_plus is in the response schema and not in the update list. 6 is not 5. The update example sends permissions write. write is 5 characters, the same length as admin, and not the same string. direct_member is not in either repository list. An organization role is not a repository permission, and a schema value you are not shown how to set is not the role this invite stored. pull_request_creation_policy on the same schema is one of two names, all or collaborators_only. Two policy names are not four organization roles (GitHub, REST API endpoints for repository invitations).

The study people reach for when they want a count of collaborators is a different document, and its abstract and its body do not print the same event total. Antonio Lima, Luca Rossi, and Mirco Musolesi analyze public GitHub events from 11 March 2012 to 11 September 2013. The abstract says 183.54 million events, 2.19 million users, and 5.68 million repositories. The body prints 183,540,210 events. 183.54 times 1,000,000 is 183,540,000. The difference is 210. The page does not print 210. 183.54 million is not 183,540,210. They say the events fall into 18 categories, and the window is 18 months. The two eighteens are the same integer and they are not the same fact. 345,625 users have a non-empty location field. 345,625 is not 2.19 million. A location count is not an invitation id (Lima, Rossi, and Musolesi, Coding Together at Scale: GitHub as a Collaborative Social Network).

The same paper's collaboration rates are three different percentages that a slide will collapse into one. Only 62.90% of the repositories they have information for have at least one commit in the window. Only 74.22% of those have at least two contributors. They then say one active repository out of four is the work of a single person. 100 minus 74.22 is 25.78. One out of four is 25. 25.78 is not 25, and the page does not print 25.78. Only 9.61% of repositories have at least two collaborators, which they distinguish from contributors. On the followers graph, 9.6% of pairs are reciprocal and 90.4% are one-way. 9.6 plus 90.4 is 100. 9.6 is not 9.61. A followers percentage is not a collaborator percentage, and neither is direct_member. They compare reciprocity with 22.1% on Twitter, 68% on Flickr, and 84% on Yahoo 360. 22.1 is not 9.6. 68 is not 84. None of those networks is the organization you invited into this afternoon.

The paper's other shape numbers are a different scale from a team id. Followers assortativity is -0.0386. The projected collaborators graph is -0.0518. The difference is 0.0132, which the page does not print. Clustering is 0.395 on the collaborators projection and 0.012 on the followers graph. 0.395 minus 0.012 is 0.383, which the page does not print. The contributor exponent is 2.34, the stargazer exponent is 1.77, and the collaborator exponent is 3.39. 2.34 is not 1.77, and 3.39 is not 9.61. Average fork depth is 3.0695, the mode is 0, and the maximum they discuss is 12. 3.0695 is not 0. Average width is 1.0653, the maximum width they name is 10,256, and 93.91% of repositories have width 1. 1.0653 is not 1. 10,256 is not team id 26, and 12 on a depth is not team id 12. A graph of public forks is not the role on this invite.

Do the three proofs on one real invitation, in the organization that actually holds it. First, the binding. Copy the invitation id, the role, and the email or the user id. If the example you are looking at is a schema with no id, you are not looking at your invite. Write the id the API returned, or write that the list was empty. Do not infer direct_member because a sample request sends it, and do not infer octocat@github.com because a sample email prints it. If the request sent reinstate, write that, and write the role you can read back. The two strings may differ. Second, the other invitation. A different id, with a different role, is not this one. A chart of 5.68 million public repositories is not that second invite. If you cannot show an invitation that is not this role, you have a counter, not a record. Third, the other organization. A list that belongs to another client does not contain this invitation id. If the only organization is a shared one and you cannot say whose invite it is, write that. A client you cannot name is the finding. It is not a reason to tell them the role was admin.

Three moves feel like the proof and are a second problem. Sending a new invitation because the role was embarrassing, before you have copied the id. The new row is a new fact. It does not tell you what the previous role was if you did not copy it. Quoting 9.61% or 74.22% because one of them looks precise, while the invite you were asked about is one row, and the public events that produced those phrases had not opened this organization. Asking a model which role the invite granted. The model will pick a plausible name, including admin. It will not open the invitation. A comment you have not kept, while the client is arguing about a review, is which comment did that review leave?. Opening that screen does not name the role.

The path is ordinary when an operator can open one agency workspace without opening the next agency's workspace as the way to prove it. Gigbase is a multi-tenant agency workspace: projects, teams, clients, and role-based access for agencies, admins, and team members, in one subscription workspace. The shape that matters here is one agency you can point at, in an account the agency or the client can open, distinct from the next agency. That case is not an invitation ledger. Nothing in the description is a headcount, a duration, or a result figure. If the only control on the screen shows a team list and will not name an invitation id, you do not have this proof. You have a chart.

There is a version of this afternoon where taking the work is the wrong purchase. The work is not sold under the agency's name. The client asked to meet the builders. The room only has a slide. The buyer only wants a template. Or the buyer wants a legal opinion about whether a role is a contract. A percentage of public repositories will not answer that. 9.61 is not this invite, and 18 on a sample email's length is not this invite, and direct_member on a sample request is not this invite.

When the invitation is real and the organization cannot name the role, the missing object is specific. An action, in an organization the agency or the client can open, that shows one invitation id and one role or an explicit empty list, shows a different invitation that is not that role, and shows another client's organization without it. A white label software development partner that expects this will have put that action next to the rest of the access screen, before a client's question is the way you discover the vendor owns the invite. One that needs a call in order for you to see which role is stored is telling you who holds the permission. If the first slice is a fixed capability, an AI integration sprint is the shape where the acceptance sentence can include the three proofs. If you do not yet know which organization stores the invite, a two-week AI readiness assessment maps the systems. The findings are yours. They are not a promise that a paper's 74.22% applies, and they are not direct_member.

The trial a customer started, and the chunk a search returned, are different objects: which trial did that customer start? and which chunk did that search return?. Do not record either on this page. A trial end is not a role. A file id is not an invitation id.

Before you tell the client the invite granted that role, do the three proofs and write the id. Name the invitation, the role, and the email or the user, or write that the organization stored no invitation. Show a different invitation that is not that role. Show another organization that does not hold it. Do not paste a sample role onto an empty list, and do not ask a model which of the four names it was. A paper can tell you what it counted on public repositories, including the 9.6 that is not 9.61. The binding is the role you can defend.

Questions

Three records, in an organization the agency or the client can open. The invitation id, the role, and the email or the user id, or a written line that the list was empty. A different invitation whose role is not this one. Another client's organization that does not list this invitation. If the request sent one role and the record shows another, write both.

No. A percentage of other people's public repositories is not the role on this invitation. A role you can defend is the invitation id, the role, and the email or the user, or a written line that no invitation was stored. 9.61 on one study is not direct_member, and 18 on a sample email is not an invitation id.

When the work is not sold under the agency's name, when the client asked to meet the builders, when the room only has a slide, when the buyer only wants a template, or when the buyer wants a legal opinion.

Find this useful? Tell Google to show you more of it.

Let's put AI to work in your business.

A 30-minute call. You bring the workflow or the roadmap — we'll tell you what's feasible, what it costs, and what we'd build first.

Book a call→