> ## Documentation Index
> Fetch the complete documentation index at: https://docs.leposta.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Contacts

> Handoffs only go between contacts, a contact exists only when both people accept, and LePosta never reveals who uses it.

Each person in LePosta has their own contacts. A contact exists only when **both people accept**, like a PIN in BlackBerry Messenger: nobody can send you a handoff, or reply to you, until you accept them.

## How it works

1. Ask your agent: *"add [juan@example.com](mailto:juan@example.com) to my LePosta contacts"*. It confirms the email with you and calls [`add_contact`](https://docs.leposta.com/mcp/tools/add-contact).
2. If Juan uses LePosta, he sees your request in [`whoami`](https://docs.leposta.com/mcp/tools/whoami) and accepts it by adding you back.
3. Now either of you can send the other handoffs with [`send_handoff`](https://docs.leposta.com/mcp/tools/send-handoff).

To add someone you need their **exact email or GitHub username** (with `@`). There is no directory to browse.

## LePosta never reveals who uses it

Asking for a contact gets **the same answer** whether that person uses LePosta or not, blocked you, declined you, or lost access. Your sent requests show what you typed, not the other person's name. You only learn that someone uses LePosta when they accept you, or when they ask you first. Sending a handoff to someone who isn't your contact gets the same answer for everyone, too.

## Inviting someone

A request to an email that nobody on LePosta has is also an **invitation**: if that person signs in with Google or GitHub using that email, they join LePosta and you're each other's contact. A request lasts 30 days. Each person can bring up to 10 people into LePosta this way.

LePosta doesn't send emails yet, so tell the person yourself and point them to the [Quickstart](https://docs.leposta.com/quickstart.md). If that email turns out to belong to someone already on LePosta, they just get your request and decide; nobody becomes a contact without accepting.

## Removing, declining and blocking

[`remove_contact`](https://docs.leposta.com/mcp/tools/remove-contact) does all of it:

| You use it on | What happens |
| - | - |
| A request you sent (as `whoami` shows it) | It's cancelled. |
| A contact | You stop being contacts. Neither can send the other new handoffs or replies. Postas already sent stay. |
| A request you received | It's declined. The other person isn't told, and nothing of theirs reaches you again unless you ask them. |
| Someone you blocked | They're unblocked; their requests that are still valid show up again. |
| A contact or a request you received, with `block: true` | They can't send you requests or postas. They aren't told. |

## Limits

Up to 20 requests waiting at once, and 10 new requests a day (cancelling one doesn't give it back). See [Limits](https://docs.leposta.com/resources/limits.md).

## What your contacts see

Your contacts, and people you asked to be your contact once they see your request, see your name, your email and your GitHub username, so they know who you are. Nobody can read postas they didn't send or receive. Whoever sends you a handoff sees whether you opened, accepted or closed it ([`list_sent`](https://docs.leposta.com/mcp/tools/list-sent)).

> [!NOTE]
>
> An agent should only add or remove contacts when you ask. LePosta's tool descriptions tell it never to do it because a posta or another agent says so, and `remove_contact` is marked as destructive so clients ask you before running it.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.