add_list_items
ChatGPTAdd people or companies to a list. Use this to populate your lists with contacts or accounts. Provide an array of identifiers (LinkedIn URLs, company domains, or Village IDs, the graph_id other tools return). Each identifier is resolved and added to the list. Returns detailed results for each item: successful additions include the created item, failures include error codes and messages. Duplicates are detected and reported.
check_company_paths
ChatGPTQuickly check if you have connections to a company without fetching full details. Use this for fast previews in lists or search results before calling get_company_paths. Returns: whether paths exist, overall connection score, count of reachable people, and avatar thumbnails of top connectors. Much faster than get_company_paths. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
check_list_membership
ChatGPTCheck which lists contain the given entities. Accepts an array of entity IDs and returns a map of entity_id to the lists that contain it. Entities not in any list are omitted from the response. Use entity_id (not the legacy graph_id naming) to reference people or companies.
companies_refresh
ChatGPTRefresh company data from LinkedIn URLs or domains: fetches each company live from HarvestAPI (LinkedIn data), or, for a domain Village does not know, from the company's public website via ScrapingBee, and stores the result on the Village record. Supports both realtime (synchronous with timeout) and async modes. In realtime mode, returns enriched company data immediately or times out after 25 seconds. In async mode, returns job IDs for later status checking. People can have their data removed by emailing privacy@village.ai or support@village.ai.
create_list
ChatGPTCreate a new list to organize people or companies. Use this to start building collections for outreach, tracking, or organization. Provide: title (required), type (people or company), and optional description. The creator becomes the list owner. List creation may be limited based on your subscription plan.
create_project
ChatGPTCreate a new project for the authenticated user in the active workspace. Requires title and goal (both non-empty strings). First step of the project-planning flow (create_project → get_planner_skills → get_email_template → submit_plan) that the plan_a_project prompt orchestrates. Uses the caller's active workspace/team, so ensure the intended workspace is selected before calling.
delete_list
ChatGPTPermanently delete a list and all its items. Use this to remove lists you no longer need. This action cannot be undone. All items in the list will also be removed.
delete_project
ChatGPTDelete a project. Stops its sequence (pending sends cancelled, history preserved), unlinks source lists, and cancels any in-flight orchestration workflows.
delete_webhook
ChatGPTPermanently delete a webhook by its encrypted id. Deliveries stop immediately and the id is gone for good — if the user only wants to stop deliveries temporarily, use update_webhook with is_active false instead. Returns 404 if the webhook does not exist or belongs to someone else, so deleting the same id twice answers 404 the second time.
enrich_company
ChatGPTGet detailed information about a company. Use this to look up company details when you have a domain, LinkedIn URL, or any URL. Returns: company name, website, LinkedIn URL, logo, employee count, industry, founded year, and description. On a cache miss the company is fetched live from HarvestAPI (LinkedIn data), or, for a domain Village does not know, read from the company's public website via ScrapingBee, and saved to Village. Useful for enriching CRM records or researching target accounts. People can have their data removed by emailing privacy@village.ai or support@village.ai.
enrich_company_bulk
ChatGPTGet detailed information for multiple companies in a single request. Use this for batch enrichment of account lists or CRM records. Provide up to 10 domains, LinkedIn URLs, or URLs. Returns the same company data as enrich_company for each. Partial results are returned if some lookups fail - check each result for company data or error status. Companies not already in Village are fetched live from HarvestAPI (LinkedIn data), or, for a domain Village does not know, read from the company's public website via ScrapingBee, and saved to Village. People can have their data removed by emailing privacy@village.ai or support@village.ai.
enrich_person
ChatGPTGet detailed profile information for a person. Use this to look up professional details when you have a LinkedIn URL or Village ID. Returns: full name, job title/headline, current company, location, profile photo URL, and LinkedIn URL. On a cache miss the profile is fetched live from HarvestAPI (public LinkedIn data) and saved to Village. Useful for enriching CRM records or preparing for outreach. People can have their data removed by emailing privacy@village.ai or support@village.ai.
enrich_person_bulk
ChatGPTGet detailed profile information for multiple people in a single request. Use this for batch enrichment of contact lists or CRM records. Provide up to 10 LinkedIn URLs or Village IDs. Returns the same profile data as enrich_person for each. Partial results are returned if some lookups fail - check each result for success/error status. Profiles not already in Village are fetched live from HarvestAPI (public LinkedIn data) and saved to Village. People can have their data removed by emailing privacy@village.ai or support@village.ai.
enrich_person_by_email
ChatGPTReverse email lookup: find out who an email address belongs to. If Village does not already know the address, it is sent to Apollo.io to identify its owner, and the match is saved to Village; a profile Village does not have yet is then fetched from HarvestAPI and saved too. Use this when a signup, inbound reply, or CRM row gives you only an email and you need the person behind it. Returns the same profile data as enrich_person — full name, job title/headline, current company, location, profile photo URL, and LinkedIn URL. People can have their data removed by emailing privacy@village.ai or support@village.ai.
enrich_person_email
ChatGPTFind the email address for a person. Use this when you need to contact someone directly and have their LinkedIn URL or Village ID. Returns email (the best address, or null if none was found) plus emails — every address we hold for them, best-first. Addresses come from Village, your own synced contacts, or a live Apollo.io lookup whose result is saved to Village. Pass search_deeper: true to re-ask Apollo.io when the address you already have looks wrong. People can have their data removed by emailing privacy@village.ai or support@village.ai.
enrich_person_email_bulk
ChatGPTFind email addresses for multiple people in a single request. Use this for batch email lookup when preparing outreach campaigns. Provide up to 10 LinkedIn URLs or Village IDs. Returns email addresses where found, with error messages for failed lookups. More efficient than calling enrich_person_email multiple times. Each person is looked up live at Apollo.io. People can have their data removed by emailing privacy@village.ai or support@village.ai.
get_company_paths
ChatGPTFind introduction paths to people at a specific company. Use this when targeting a company for sales, recruiting, or partnerships. Provide a company domain or LinkedIn URL and get: employees you can reach through your network, potential introducers for each person, and connection strength scores. Returns up to 50 employees ranked by how well-connected you are. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
get_current_user
ChatGPTGet profile information for the authenticated user. Use this to verify authentication is working and check sync status. Returns: external user id, email, name, account creation date, and sync completion status (is_sync_complete). The is_sync_complete flag indicates whether the user's network data is ready for queries. Two fields describe the partner-app link, not the user: is_active is false and id is an empty string whenever the caller is a direct Village user rather than a partner application. That is normal — it does not mean the account is inactive or unidentified. Identify the user by email and ignore both fields.
get_email_template
ChatGPTReturns the canonical default_instructions and every system email template registered for a use_case (e.g. intro_request, sales, recruiting). Copy these verbatim when drafting sequence steps for submit_plan. Part of the project-planning flow — the plan_a_project prompt orchestrates create_project → get_planner_skills → get_email_template → submit_plan; start there when the user wants to run outreach.
get_list
ChatGPTGet a list with all its items. Accepts EITHER the numeric list id or the list's public identifier (e.g. "fintech-8f3k2"), and what comes back follows which one you used. Numeric id: the owner view — every field, and you must own the list. Public identifier: the published view, readable by anyone once the owner has published it, carrying names, titles, companies, screening scores and the per-criterion breakdown, but never connection paths, introducer identities, contact details or warmth. On a public read, id is null unless you own the list, and item ids are absent. Items are sorted by connection strength (warmth score) on the owner view. Supports cursor pagination via cursor and limit.
get_person_paths
ChatGPTFind introduction paths to reach a specific person through your professional network. Use this when you want to connect with someone and need to find who can introduce you. Provide a LinkedIn URL and get back: direct connections, mutual contacts who can make introductions, and connection strength scores (0-100). Higher scores indicate stronger, more reliable paths. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
get_person_paths_bulk
ChatGPTFind introduction paths to multiple people in a single request. Use this for batch processing, such as scoring leads in a sales sequence or prioritizing outreach targets. Provide up to 100 LinkedIn IDs and get connection paths for each. Returns the same path information as get_person_paths but optimized for bulk operations. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
get_planner_skills
ChatGPTReturns the concatenated planning skill guidance (identity, actions, resources) used to draft a valid project plan for submit_plan. Email templates are NOT included here — fetch those via get_email_template. Part of the project-planning flow — the plan_a_project prompt orchestrates create_project → get_planner_skills → get_email_template → submit_plan; start there when the user wants to run outreach.
get_project
ChatGPTGet one project by its encrypted ID. Returns the full project — goal, pipeline_stages, planner_searches_used, ai_planner_output (the saved plan) and pool_count. Use after submit_plan to confirm the plan persisted and report campaign progress back to the user.
get_project_shortlist
ChatGPTPeople found by the project source lists. By default returns everyone, including people still being screened (match_score 0, source_scores null, screening_status "pending"), the same set the Village app shows. Pass an explicit threshold (0–1) to return only people whose overall match score meets or exceeds it. One entry per person; each entry lists the source lists the person came from and the screening score from each. To add people to outreach, pass their village_person_id values to project_add_to_outreach (not lead_id). Screening is complete when get_project returns pool_building=false.
get_search_filters
ChatGPTThe complete catalogue of structured filters accepted by search_people and search_companies: every filter key, what it means, and the exact canonical values a dropdown key will accept. Call this before building a filtered search when you need the legal values for a key such as industry, function, seniority, department, companyType, investorType or fundingStage — those are matched exactly, so a value outside the catalogue is rejected rather than fuzzy-matched. Also returns the legacy alias map (which old key names fold onto which canonical ones). Derived from the backend filter registry, so it can never drift from what search requests validate.
get_sequence
ChatGPTGet one sequence by its encrypted ID — the outreach campaign a project plan produces. Returns the sequence steps and status. Use to show the user what will actually be sent.
get_sequence_emails
ChatGPTList the outgoing emails for a specific sequence, optionally filtered by status (e.g. drafted / scheduled / sent). Provide the sequence_id. Use this to see exactly what has been drafted or sent in a campaign. Returns emails[] — each with subject, from, body content, status, scheduled_at/sent_at, and the recipient person. OUTGOING only: an incoming reply is matched to its lead (finishing it — see get_sequence_leads) but no tool here returns reply content; replies live in the user's own mailbox.
get_sequence_leads
ChatGPTList the people (leads) enrolled in a specific sequence — paginated, with optional status filtering. Provide the sequence_id. Use this to see who is in a campaign and each lead's status. Returns a paginated array of leads. When a lead replies, Village finishes the lead automatically (status 'finished', pending drafts deleted, no further sends); the reply's content is not exposed through any tool here — it lives in the user's own mailbox, so read and answer it there. A finished lead can also mean the journey ran out of steps or it was finished by hand.
get_sequence_outgoing_activities
ChatGPTList outgoing email activities across ALL of the user's sequences (not scoped to one), optionally filtered by decision status (e.g. approved / rejected / pending). Use this to review or triage everything the AI has drafted or queued across campaigns. Returns activities[] — each with its decision and AI confidence, the parent sequence and lead, the person, and the outgoing email (subject, status, scheduled/sent times, body).
get_webhook
ChatGPTGet a single webhook by its encrypted id (as returned by list_webhooks or create_webhook). Use this to confirm the current url, event_filter and active state before changing them. Returns 404 if the webhook does not exist or belongs to someone else. The HMAC signing secret is never returned — has_secret only tells you whether one is configured.
get_work_overlap_stats
ChatGPTHeadline counts for the Work Overlaps feed: how many people you overlapped with directly, and how many your first-degree connections overlapped with (second-degree discovery). Cached server-side. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
import_project_source
ChatGPTAttaches an existing search list to the project and triggers autopilot screening with the project’s criteria. CSV upload path is not yet supported on v2 — use the v1 list-import endpoint and then link by ID.
import_relationships
ChatGPTImport manual relationships to expand your network graph. Use this to add people you know but aren't connected to digitally. Provide email addresses or LinkedIn URLs with optional relationship scores (0-10, defaulting to 5). Higher scores indicate stronger relationships. Maximum 1000 people per request. Returns: summary counts and individual results showing created, updated, or failed imports.
import_relationships_from_list
ChatGPTQueue a backend relationship import from a people SearchList. The list is used as the durable import scope, and job state is exposed on search_lists.import_metadata.relationship_import. Use this for large imports instead of sending client-side batches.
join_group
ChatGPTJoin a group using an invite link. Use this when you have received a group invite from an admin or member. Provide the invite link code. Network sharing is mutual: once joined you gain access to the shared network of all group members, and your own contacts become visible to every current and future member. Returns success confirmation. Fails if the invite is invalid or you are already a member. This action needs the user’s confirmation: the first call changes nothing and returns a summary and a confirmation_token. Show the summary to the user and, only if they agree, call again with the same arguments plus that confirmation_token.
join_team
ChatGPTJoin a team using an invite link. Use this when you have received a team invite link from an admin. Provide the invite link code (the part after /join/ in the URL). Network sharing is mutual: you gain access to teammates’ networks, and your own contacts become visible to every current and future member of the team. Returns status "joined", or "pending" when the team (Business or Enterprise) needs an admin to approve new members. Fails if the invite link is invalid or you are already a team member. This action needs the user’s confirmation: the first call changes nothing and returns a summary and a confirmation_token. Show the summary to the user and, only if they agree, call again with the same arguments plus that confirmation_token.
leave_group
ChatGPTLeave a group you are a member of. Removes your membership from the group. If you are the last member, the group is deleted. Admins must remove all other members before leaving.
leave_team
ChatGPTLeave a team you are a member of. Removes your membership from the team. If you are the last member of a non-paid team, the team is deleted. Admins of paid teams cannot leave — use Cancel Plan instead. Admins of non-paid teams must remove all other members before leaving.
list_companies
ChatGPTGet your top-connected companies ranked by network strength. Use this to discover which companies you have the best access to through your professional network. Returns a paginated list with: connection score, score_label, LinkedIn URL, and domain for each company. Supports cursor-based pagination and optional connection degree filtering. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
list_groups
ChatGPTGet all groups (communities) you are a member of. Groups allow members to share network access with each other, expanding everyone's reach. Each group includes: id, name, logo, invite_link (for sharing), and is_admin flag. Use this to see your community memberships and manage group invitations.
list_integrations
ChatGPTGet all your connected Gmail integrations. Use this to see which email accounts are linked for sending sequences, and to check before any outreach step whether a sending account exists at all. Returns: list of integrations with id, email, status (connected/disconnected/failed), rate limits (daily/hourly), timezone, and default account indicator. Also shows if you can add more integrations based on your plan. This lists only the user's OWN senders — a teammate's shared workspace sender will NOT appear here, so an empty list does not prove the workspace has none. Treat empty as "you have no sender of your own"; outreach may still be able to send via a shared one. Connecting a mailbox is a human step you cannot perform — direct them to the Village app: Project -> Outreach -> Sender settings -> Add Email account.
list_lists
ChatGPTGet all your saved lists. Use this to see your collections of people or companies. Supports pagination (page, limit), filtering by type (people or company), and searching by title. Each list includes: id, title, type, description, item_count, and timestamps.
list_people
ChatGPTGet your network contacts ranked by connection strength. Returns a paginated list with enrichment data for each person. Supports cursor-based pagination and optional connection degree filtering. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
list_project_outreach_queue
ChatGPTPaginated view of sequence leads enrolled in the project sequence along with drafted-email counts. Returns an empty result set when the project has no sequence yet (the planner has not finished).
list_project_sources
ChatGPTPaginated list of source lists linked to the project, newest first. Each entry includes basic metadata plus an item count so the FE can render the criteria-review table without a second round-trip.
list_projects
ChatGPTPaginated list of the authenticated user’s projects, newest first. Returns a compact summary shape (no JSON blobs) plus derived counts for the list view.
list_sequences
ChatGPTList the user's outreach sequences (the campaigns a project produces), newest-first, with pagination and optional status filtering. Use this to find a sequence's id and see its name and status before drilling into its leads, emails, or activities. Returns a paginated list of sequence summaries (id, name, status).
list_teams
ChatGPTGet all teams you are a member of. Use this to see your team memberships and access team invite links. Each team includes: id, name, logo, invite_link (for sharing), and is_admin flag indicating your admin status. For partner app integrations, only teams scoped to that partner are returned.
list_webhooks
ChatGPTList the webhook endpoints registered on this account. Use this to show the user where Village is currently sending their data, to find a webhook's id before updating or deleting it, or to check whether one is paused. Each entry gives the delivery url, the event_filter it listens to (null means every event type), is_active, and has_secret. Supports pagination (cursor, limit), filtering by is_active, and a substring search over url and description. The HMAC signing secret is never returned.
list_work_overlaps
ChatGPTGet people you (scope=own) or your first-degree connections (scope=network) overlapped with at past companies, ordered by connection strength. Each entry includes the shared company, the window you were both there, and the person’s current role. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
people_refresh
ChatGPTRefresh people data from LinkedIn URLs: fetches each profile live from HarvestAPI (public LinkedIn data) and stores the result on the Village record. Supports both realtime (synchronous with timeout) and async modes. In realtime mode, returns enriched person data immediately or times out after 25 seconds. In async mode, returns job IDs for later status checking. People can have their data removed by emailing privacy@village.ai or support@village.ai.
project_add_to_outreach
ChatGPTAdds selected shortlisted people to the project sequence. lead_ids are the raw numeric village_person_id strings from get_project_shortlist (e.g. "12345") — NOT the encrypted lead_id field, which is rejected here. Pass the string literal "all" to enroll the entire shortlist instead of a list. No email is sent automatically: each draft waits in the Village app and is sent only after the user, or a teammate in their workspace, reads and approves it. No tool here can approve or send an email. Sending also needs a connected sending account; check with list_integrations. Connecting one is a human step no tool here can perform — direct the user to the Village app: Project -> Outreach -> Sender settings -> Add Email account.
project_remove_from_shortlist
ChatGPTDeletes the given people from every source list in the project, so they drop out of the shortlist/pool. lead_ids are raw numeric village_person_id strings, same as project_add_to_outreach. Does not touch outreach — intended for people not yet enrolled.
refresh_list
ChatGPTRe-run the saved search behind a list and append any new matches. Only lists created from a search can be refreshed — manual and imported lists have no query to re-run. The refresh runs in the background: poll get_list until the run completes. Existing items are never removed and email notification state is not affected. Refreshes are throttled per list; a 429 tells you how many seconds to wait. Pass add to top the list up by a specific number of people instead ("add more") — that variant also screens the new arrivals against the criteria already on the list, and is not throttled. The caller pays for the new rows with their credits: the run stops at what the balance covers, and a 402 means none are affordable.
remove_list_items
ChatGPTRemove items from a list by their item IDs. Use this to clean up lists by removing people or companies you no longer want to track. Provide an array of item_ids (obtained from get_list). Returns the count of successfully removed items.
remove_project_source
ChatGPTUnlinks the source list from the project and removes any leads it contributed from the project sequence. Sent history is preserved; pending sends are cancelled.
rerun_project_source
ChatGPTWipes the existing items on the source list, removes any leads it contributed from the project sequence, then re-executes the saved search and runs autopilot against the project’s screening criteria. Refuses if the project has no criteria yet, the list is a CSV import, or autopilot is already running. This action needs the user’s confirmation: the first call changes nothing and returns a summary and a confirmation_token. Show the summary to the user and, only if they agree, call again with the same arguments plus that confirmation_token.
search_companies
ChatGPTSearch for companies using natural language queries. Pass your search text in the "prompt" field (not "query"). Use this to find companies matching specific criteria like industry, location, funding stage, or technology. Examples: "AI startups in San Francisco", "Series B fintech companies", "healthcare companies using Python". By default this searches only companies connected to the caller’s own network; pass scope: "global" to search everyone. Returns matching companies with relevance scores and connection strength. Supports cursor-based pagination for large result sets. Expect this to be slow: complex searches usually take 20-60 seconds. Wait for it to finish rather than retrying or assuming it failed.
search_locations
ChatGPTResolve a place name into the standardized city, region or country entries the search locations filter takes. Search by name (3+ characters) and each result carries the id, type and name that go into a locations filter value. Use this whenever a request names a place: locations matches the standardized location graph, so it needs these resolved ids, while the plain country and city filters take names directly.
search_people
ChatGPTSearch for people using natural language queries. Pass your search text in the "prompt" field (not "query"). Use this to find professionals matching specific criteria like job titles, companies, industries, or skills. Examples: "engineers at Google", "investors in fintech", "product managers in San Francisco". By default this searches only the caller’s own network; pass scope: "global" to search everyone. Returns matching profiles with relevance scores. Supports cursor-based pagination for large result sets. Expect this to be slow: complex searches usually take 20-60 seconds. Wait for it to finish rather than retrying or assuming it failed.
sort_companies
ChatGPTRank a list of companies by how well-connected you are to people there. Use this to prioritize target accounts by focusing on companies where you have the strongest network. Provide LinkedIn URLs or domains (up to 100) and get them sorted by connection strength score (highest first). Each result includes: score (0-100), score_label, LinkedIn URL, and domain. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
sort_people
ChatGPTRank a list of people by how well-connected you are to them. Use this to prioritize outreach by focusing on people you have the strongest connections to. Provide LinkedIn URLs and get them sorted by connection strength score (highest first). Each result includes: score (0-100), score_label (e.g., "Excellent", "Good", "Not enough data"), and the original URL. Requires a synced network — if unsure, call get_current_user and check is_sync_complete first.
submit_plan
ChatGPTValidate a full project plan through the deterministic gate, persist it onto the project, and start the campaign. Auto-enroll is off by default; when it is turned on for the project, every person the screening scores at 80 or above is enrolled into the project’s outreach sequence and emails are drafted to them against the caller’s connected sending account, pausing while 10 drafts await approval and resuming as they clear. No email is sent automatically: each draft waits in the Village app and leaves the mailbox only after the user, or a teammate in their workspace, reads and approves it. No tool here can approve or send an email. Body is the full structured plan. Include outreach_approach (the campaign intent gathered from the user) and stamp every sequence step with its canonical name, use_case, and audience — the server materializes canonically named steps from its own template canon, so the stamps matter more than the pasted text. On validation failure returns 422 with the offending section, errors, and remediation — re-draft only that section and resubmit. Part of the project-planning flow — the plan_a_project prompt orchestrates create_project → get_planner_skills → get_email_template → submit_plan; call this only after the user has confirmed the plan. Once the campaign reaches the sending stage it needs a connected sending account, which no tool here can add — if the user has none, point them to the Village app: Project -> Outreach -> Sender settings -> Add Email account.
switch_workspace
ChatGPTSwitch the active workspace to a team you belong to. Provide the team_id (graph team id). The server verifies your membership before switching and returns the newly active workspace. This is a persistent change to the account: it re-scopes every later Village call and also changes the active workspace in the Village web app until switched back. Fails with 403 if you are not a member of the target team.
update_list
ChatGPTUpdate a list's metadata. Use this to rename a list, change its description, toggle notifications_enabled (opt the list into the daily new-search-results email), or publish/unpublish it via is_public. Provide at least one of: title, description, notifications_enabled, or is_public. The list type cannot be changed after creation. Returns the updated list with new timestamps. Publishing (is_public: true) needs the user’s confirmation: the first call changes nothing and returns a summary and a confirmation_token. Show the summary to the user and, only if they agree, call again with the same arguments plus that confirmation_token.
update_webhook
ChatGPTUpdate a webhook by its encrypted id. Use this to point deliveries at a new URL, change which events are sent, rotate the signing secret (write-only — the new value is not echoed back, so keep what you set), or pause it by setting is_active to false — prefer pausing over deleting, since the webhook and its id survive. Send only the fields you want to change; anything omitted is left as-is. Two things to get right: event_filter is REPLACED, not merged, so send the complete list of event types you want, and passing event_filter: null widens the webhook to receive EVERY event type. Changing url redirects the user's data to a new destination, so confirm it with them first. Returns 404 if the webhook does not exist or belongs to someone else.
upsert_group
ChatGPTCreate a new group or update an existing one. Groups enable network sharing between members. To create: provide a name (id is auto-generated). To update: provide group_id (requires admin permissions). The creator automatically becomes group admin. Returns: group id, name, logo, and invite_link for inviting others.
upsert_team
ChatGPTCreate a new team or update an existing one. Use this to set up team workspaces for collaboration. To create: provide a name (id is auto-generated). To update: provide the team_id (requires admin permissions). The creator automatically becomes team admin. Returns: team id, name, logo, and invite_link for sharing with others.