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

# Invite a customer

> Invite a customer to connect your agents

Invite a customer for your agents to move money for them. You send the ask, the customer chooses what to allow and which wallet the agent can use, with nothing moving until they accept.

<Snippet file="shared/prerequisites.mdx" />

<Snippet file="shared/cents-note.mdx" />

## Send the invitation

Invite your customer over email with [`POST /customers/invitations`](/api-reference/customers/invite-customers). Natural handles the customer communication.

<CodeGroup>
  ```python Python theme={null}
  from naturalpay import Natural

  client = Natural()
  invitations = client.customers.create_invitations(
      recipients=[{"type": "email", "value": "customer@example.com"}],
      agents=[
          {
              "agentId": "agt_019cd1798d637a4da75dce386343931d",
              "permissions": [
                  "payments.read",
                  "payments.create",
                  "external_accounts.create",
                  "wallets.read",
                  "wallets.update",
                  "party.read",
                  "party.update",
              ],
              "limits": {"perTransaction": 100_000},
          }
      ],
  )

  for invitation in invitations.data:
      print(invitation.id, invitation.attributes.url)
  ```

  ```typescript TypeScript theme={null}
  import Natural from "@naturalpay/sdk";

  const client = new Natural();
  const invitations = await client.customers.createInvitations({
    recipients: [{ type: "email", value: "customer@example.com" }],
    agents: [
      {
        agentId: "agt_019cd1798d637a4da75dce386343931d",
        permissions: [
          "payments.read",
          "payments.create",
          "external_accounts.create",
          "wallets.read",
          "wallets.update",
          "party.read",
          "party.update",
        ],
        limits: { perTransaction: 100_000 },
      },
    ],
  });

  for (const invitation of invitations.data) {
    console.log(invitation.id, invitation.attributes.url);
  }
  ```

  ```bash CLI theme={null}
  natural customers createInvitations --json '{
    "recipients": [{ "type": "email", "value": "customer@example.com" }],
    "agents": [{
      "agentId": "agt_019cd1798d637a4da75dce386343931d",
      "permissions": ["payments.read", "payments.create", "external_accounts.create", "wallets.read", "wallets.update", "party.read", "party.update"],
      "limits": { "perTransaction": 100000 }
    }]
  }'
  ```

  ```text MCP theme={null}
  Invite customer@example.com to connect my Procurement Agent.
  Let it run money end to end for them, limited to $1,000 per transaction.
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.natural.com/customers/invitations \
    -H "Authorization: Bearer $NATURAL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "data": {
        "attributes": {
          "recipients": [{ "type": "email", "value": "customer@example.com" }],
          "agents": [{
            "agentId": "agt_019cd1798d637a4da75dce386343931d",
            "permissions": ["payments.read", "payments.create", "external_accounts.create", "wallets.read", "wallets.update", "party.read", "party.update"],
            "limits": { "perTransaction": 100000 }
          }]
        }
      }
    }'
  ```
</CodeGroup>

## What the customer does

<Steps>
  <Step title="Opens the link">They see who is requesting and which agents will act.</Step>

  <Step title="Onboards if new">
    A customer new to Natural creates an account and verifies as part of accepting. Natural handles
    the compliance.
  </Step>

  <Step title="Picks a wallet and accepts">They choose which wallet the agent may use.</Step>
</Steps>

The invitation flips to `ACCEPTED` and the customer shows up in [your customers](/api-reference/customers/list-customers). Their `id` is the party ID you pass to act as them. From there the agent moves money for them within the permissions and limit they granted.

<Snippet file="shared/webhook-connect-invitation.mdx" />
