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

# Add a member by email

> Invites a person to the node by email (a `cinv_...` id) and sends the invite email.
This is an invitation even when the email already belongs to a customer: they join
by accepting the emailed token, which proves they own the address and agree to join.
The response is the same either way, so it does not reveal whether the email has an
account.




## OpenAPI

````yaml /api-reference/store.yaml post /api/v3/store/companies/{company_id}/members
openapi: 3.0.3
info:
  title: Store API
  contact:
    name: Spree Commerce
    url: https://spreecommerce.org
    email: hello@spreecommerce.org
  description: >
    Spree Store API v3 - Customer-facing storefront API for building headless
    commerce experiences.


    ## Authentication


    The Store API uses two authentication methods:


    ### API Key (Required)

    All requests must include a publishable API key in the `x-spree-api-key`
    header.


    ### JWT Bearer Token (For authenticated customers)

    After login, include the JWT token in the `Authorization: Bearer <token>`
    header.


    ### Order Token (For guest checkout)

    When creating an order, a `token` is returned. Include this in the
    `x-spree-token` header

    for guest access to that specific order.


    ## Response Format


    All responses are JSON. List endpoints return paginated responses with
    `data` and `meta` keys.


    ## Error Handling


    Errors return a consistent format:

    ```json

    {
      "error": {
        "code": "record_not_found",
        "message": "Product not found"
      }
    }

    ```
  version: v3
servers:
  - url: http://{defaultHost}
    variables:
      defaultHost:
        default: localhost:3000
security: []
tags:
  - name: Authentication
    description: Customer authentication (login, logout, token refresh)
  - name: Product Catalog
    description: Products and categories
  - name: Carts
    description: Shopping cart management
  - name: Orders
    description: Order lookup
  - name: Customers
    description: Customer account, addresses, saved payment methods, and order history
  - name: Markets
    description: Markets, countries, currencies, and locales
  - name: Wishlists
    description: Customer wishlists
  - name: Newsletter Subscribers
    description: Guest and customer newsletter subscriptions (double opt-in)
  - name: Policies
    description: Store policies (return policy, privacy policy, terms of service)
  - name: Digitals
    description: Digital product downloads
paths:
  /api/v3/store/companies/{company_id}/members:
    parameters:
      - name: company_id
        in: path
        required: true
        description: Company node ID (comp_...)
        schema:
          type: string
    post:
      tags:
        - Companies
      summary: Add a member by email
      description: >
        Invites a person to the node by email (a `cinv_...` id) and sends the
        invite email.

        This is an invitation even when the email already belongs to a customer:
        they join

        by accepting the emailed token, which proves they own the address and
        agree to join.

        The response is the same either way, so it does not reveal whether the
        email has an

        account.
      parameters:
        - name: x-spree-api-key
          in: header
          required: true
          schema:
            type: string
        - name: Authorization
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                customer_email:
                  type: string
                  example: colleague@acme.test
              required:
                - customer_email
      responses:
        '201':
          description: invitation sent
          content:
            application/json:
              example:
                id: cinv_UkLWZg9DAJ
                email: colleague@acme.test
                expires_at: '2026-02-14T12:00:00.000Z'
                company_id: comp_UkLWZg9DAJ
                status: pending
      security:
        - api_key: []
          bearer_auth: []
      x-codeSamples:
        - lang: javascript
          label: Spree SDK
          source: >-
            import { createClient } from '@spree/sdk'


            const client = createClient({
              baseUrl: 'https://your-store.com',
              publishableKey: '<api-key>',
            })


            // Always an emailed invitation (cinv_…), even for an existing
            customer.

            const invitation = await client.companies.members.create(
              'comp_86Rf07xd4z',
              { customer_email: 'colleague@acme.test' },
              { token: '<token>' },
            )
components:
  securitySchemes:
    api_key:
      type: apiKey
      name: x-spree-api-key
      in: header
      description: Publishable API key for store access
    bearer_auth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: JWT token for authenticated customers

````

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