---
title: "Join a team matched by your email domain"
method: POST
path: "/v2/teams/join-by-domain"
tags: ["Teams"]
---

# Join a team matched by your email domain

`POST /v2/teams/join-by-domain`

## Request

- Base URL: `https://api.village.ai`
- URL: `https://api.village.ai/v2/teams/join-by-domain`
- Auth: HTTP bearer

Join the team that has claimed your email domain. A free team adds you immediately. A paid team gives you an available seat; if none is free, a Core or Business team adds a $1 seat to its plan when Google has verified your email. Otherwise, or if that seat can't be bought (for example the team's card is declined), your request is queued for admin approval. The server re-verifies that the team's domain matches your email domain.

## Request body

- JoinTeamByDomainRequest: Request body for joining a team matched by your email domain
  - `team_id` string, required

## Response `200`

Joined immediately or queued for approval

- object
  - `data` JoinTeamByDomainResponse, required: Result of joining a domain-matched team (joined immediately or pending approval)
    - `status` 'joined' | 'pending', required
    - `message` string, required
    - `requires_new_seat` boolean, required
  - `metadata` object, required
    - `request_id` string, required

## Other responses

- `400`: Bad request - invalid parameters
- `401`: Unauthorized - missing or invalid authentication
- `403`: Team does not match your email domain
- `409`: Conflict - user already in team

---

[API](https://skmtc.dev/village/apis/village-v2-api.md) - [All operations](https://skmtc.dev/village/apis/village-v2-api/llms.txt) - [OpenAPI document](https://skmtc.dev/village/apis/village-v2-api/revisions/aebe21a1a544?raw)
