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

> ## Agent Instructions
> Sapiom Pay is for platforms whose agent shops for many users. Each user has their own Sapiom user key and saved cards.
> Use the user's key for every call made on that user's behalf. Never use one user's key for another user, and never give the agent the platform key.
> Backends call the REST API at https://api.sapiom.ai/v1. Agents can also call the hosted MCP tools at https://api.sapiom.ai/v1/mcp/pay. Both take the key in an x-api-key header.
> Keys that start with sk_test_ reach the sandbox, a separate environment with its own users and cards, at the same addresses. Use test card numbers only there.
> Never ask a user for a card number, expiry date or CVV in chat. Users enter card details only on Sapiom's hosted pages.
> Check the merchant before buying. Use purchase.type ucp_checkout only when the merchant check returns supported. Otherwise use browser_checkout.
> Follow the nextAction in each transaction result. Action links are secrets. Send each one only to the person `nextAction.actor` names.
> Use one idempotency key per transaction. Resume an unanswered create with the same request and key. If a UCP update or cancellation is uncertain, stop and hand off to a person. If a browser cancellation is uncertain, read the transaction and resend the same cancellation, with the same key, only if it is not closed. Never start a new transaction to escape an uncertain outcome.
> For a ucp_checkout purchase, report an order as placed only when order.outcome is confirmed; if it is unknown, stop and hand off to a person. A browser_checkout purchase has no order confirmation (order is null): confirm the order on the merchant's page.

# Create a user

> Creates a Sapiom user (a tenant) for one of your users. Use your own user ID as `externalId`. Returns `409` when a user with that `externalId` already exists. Requires your [platform key](/api-reference/overview#authentication).



## OpenAPI

````yaml /api-reference/openapi.json post /v1/tenants
openapi: 3.0.0
info:
  title: Sapiom Pay API
  version: '1.0'
  description: >-
    Create users, save their cards and authorize transactions. Send your
    platform key or a user key in the `x-api-key` header.
servers:
  - url: https://api.sapiom.ai
    description: Production
security:
  - api-key: []
tags:
  - name: Users
    description: One Sapiom user for each of your users. Called tenants in the API.
  - name: Cards
    description: Hosted setup links and the user's saved cards.
  - name: Spending limits
    description: Limits on what each card can spend.
  - name: Merchants
    description: Check whether Sapiom can buy from a merchant.
  - name: Transactions
    description: Create, read and cancel a transaction, and drive its UCP checkout.
  - name: Browser Pay relay
    description: The relay Browser Pay uses to send the card, for either purchase type.
paths:
  /v1/tenants:
    post:
      tags:
        - Users
      summary: Create a user
      description: >-
        Creates a Sapiom user (a tenant) for one of your users. Use your own
        user ID as `externalId`. Returns `409` when a user with that
        `externalId` already exists. Requires your [platform
        key](/api-reference/overview#authentication).
      operationId: TenantController_create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTenantDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tenant'
      security:
        - api-key: []
components:
  schemas:
    CreateTenantDto:
      type: object
      properties:
        name:
          type: string
          maxLength: 255
        externalId:
          type: string
          description: >-
            Optional user-supplied identifier for correlating this tenant with
            your own system.

            Must be unique per organization when provided.
          maxLength: 255
      required:
        - name
    Tenant:
      type: object
      properties: {}
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your platform key for user management, or a user key for everything
        else.

````

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