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

# Add organization member

> Adds a member to a business organization, by `email` or `customerId`.

- **By `email`**: invite or add by email address. If the email matches a user who has already signed in through your JWT, they become a member immediately; otherwise a pending invite is created and accepted automatically the first time that email signs in via your `kyb` JWT. Pass `emailInviteLink` to have Etherfuse email them an invite URL you control, or omit it to create the invite silently and notify them yourself. Use this when you don't have the person's `customerId` yet, or when you want Etherfuse to send the invite.
- **By `customerId`**: add an existing customer directly by their `sub`; no email is sent. The `customerId` only exists once that person has exchanged a JWT via [POST /auth/token](/api-reference/authentication/exchange-a-partner-jwt) (or been launched) at least once: an unknown `sub` returns 404, and a business org id (service account) is rejected.

Re-adding someone who was previously removed revives them. The target org must be a business org you own (your own org or a direct child).

The response has the same shape as [List organization members](/api-reference/organizations/list-organization-members): a person added immediately appears under `members`; an emailed invite appears under `invited`.



## OpenAPI

````yaml /openapi.json post /ramp/organization/{id}/member
openapi: 3.1.0
info:
  title: Etherfuse FX API
  description: Partner-facing ramp API for onramps, offramps, swaps, and KYC.
  license:
    name: Proprietary
  version: 1.0.0
servers:
  - url: https://api.sand.etherfuse.com
    description: Sandbox
security:
  - ApiKeyAuth: []
tags:
  - name: Authentication
    description: >-
      Partner JWT authentication — exchange a JWT for an access token, or launch
      a user into the app.
  - name: Lookup
    description: >-
      Public reference data: exchange rates, stablebonds, bond costs, country
      codes.
  - name: Assets
    description: Rampable stablecoins and stablebonds available per blockchain.
  - name: Onboarding
    description: Hosted and programmatic customer onboarding.
  - name: Bank Accounts
    description: Register and retrieve customer bank accounts.
  - name: Quotes
    description: Price quotes for onramps, offramps, and swaps.
  - name: Orders
    description: Create, track, and manage ramp orders.
  - name: Swaps
    description: Crypto-to-crypto swaps.
  - name: Sponsored
    description: Token approvals for sponsored (gasless) offramps.
  - name: Customers
    description: Customer (child-organization) records.
  - name: Wallets
    description: Register and manage customer wallets.
  - name: KYC
    description: Submit and check customer KYC status.
  - name: Webhooks
    description: Event notification subscriptions.
  - name: Organizations
    description: Organization identity, child orgs, and partner fees.
paths:
  /ramp/organization/{id}/member:
    post:
      tags:
        - Organizations
      summary: Add organization member
      description: >-
        Adds a member to a business organization, by `email` or `customerId`.


        - **By `email`**: invite or add by email address. If the email matches a
        user who has already signed in through your JWT, they become a member
        immediately; otherwise a pending invite is created and accepted
        automatically the first time that email signs in via your `kyb` JWT.
        Pass `emailInviteLink` to have Etherfuse email them an invite URL you
        control, or omit it to create the invite silently and notify them
        yourself. Use this when you don't have the person's `customerId` yet, or
        when you want Etherfuse to send the invite.

        - **By `customerId`**: add an existing customer directly by their `sub`;
        no email is sent. The `customerId` only exists once that person has
        exchanged a JWT via [POST
        /auth/token](/api-reference/authentication/exchange-a-partner-jwt) (or
        been launched) at least once: an unknown `sub` returns 404, and a
        business org id (service account) is rejected.


        Re-adding someone who was previously removed revives them. The target
        org must be a business org you own (your own org or a direct child).


        The response has the same shape as [List organization
        members](/api-reference/organizations/list-organization-members): a
        person added immediately appears under `members`; an emailed invite
        appears under `invited`.
      operationId: partner_add_member
      parameters:
        - name: id
          in: path
          description: >-
            The business organization to add the member to (your own org or a
            direct child).
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddMemberRequest'
        required: true
      responses:
        '200':
          description: The added member or pending invite
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembersResponse'
        '400':
          description: >-
            Invalid request: missing or both of `email`/`customerId`, missing
            `role`, the org is not a business org, or `customerId` refers to a
            service account
        '403':
          description: Not permitted to manage this organization
        '404':
          description: >-
            Organization not found, or no customer exists for the given
            `customerId`
        '409':
          description: The customer is already an active member
components:
  schemas:
    AddMemberRequest:
      type: object
      required:
        - role
      properties:
        email:
          type:
            - string
            - 'null'
          description: >-
            Invite or add a member by email address. If the email matches a user
            who has already signed in through your JWT, they're added as a
            member immediately; otherwise a pending invite is created and
            accepted automatically the first time that email signs in via your
            `kyb` JWT. Use `email` when you don't have the person's `customerId`
            yet, or when you want Etherfuse to email them an invite (see
            `emailInviteLink`). Provide exactly one of `email` or `customerId`.
        customerId:
          type:
            - string
            - 'null'
          description: >-
            Add an existing customer directly by their `sub` (the value you put
            in the JWT `sub` when they sign in); no email is sent. The customer
            must already exist, which happens the first time they exchange a JWT
            via [POST
            /auth/token](/api-reference/authentication/exchange-a-partner-jwt)
            (or are launched); an unknown `sub` returns 404. A business org id
            (service account) is rejected. Provide exactly one of `email` or
            `customerId`.
        role:
          type: string
          enum:
            - admin
            - member
          description: The member's role in the organization.
        emailInviteLink:
          type:
            - string
            - 'null'
          description: >-
            Optional. When adding by `email` and a pending invite is created
            (the email isn't already a member), Etherfuse emails them this URL
            **as-is** (you control the full link, including any query params) as
            the call to action. Omit it to create the invite silently and notify
            the user yourself. Ignored when the email already matches a member
            who is added immediately.
      example:
        email: alice@acme.com
        role: admin
        emailInviteLink: >-
          https://partner.example.com/kyb-invite?org=a1b2c3d4-e5f6-7890-abcd-ef1234567890
    MembersResponse:
      type: object
      required:
        - members
        - invited
      properties:
        members:
          type: array
          description: Active members. The org's own service account is never listed.
          items:
            $ref: '#/components/schemas/MemberRecord'
        invited:
          type: array
          description: Pending invites that have not been accepted yet.
          items:
            $ref: '#/components/schemas/InvitedRecord'
      example:
        members:
          - customerId: 9f1c4b2a-7d3e-4c5f-8a6b-1e2d3c4b5a6f
            email: alice@acme.com
            role: admin
            joinedAt: '2026-06-17T00:00:00Z'
        invited:
          - email: bob@acme.com
            role: member
            invitedAt: '2026-06-17T00:00:00Z'
    MemberRecord:
      type: object
      required:
        - customerId
        - role
        - joinedAt
      properties:
        customerId:
          type: string
          description: >-
            The member's `sub`. Empty if the member does not yet have a `sub` in
            your namespace.
        email:
          type:
            - string
            - 'null'
          description: The member's email, if known.
        role:
          type: string
          enum:
            - admin
            - member
        joinedAt:
          type: string
          format: date-time
    InvitedRecord:
      type: object
      required:
        - email
        - role
        - invitedAt
      properties:
        email:
          type: string
        role:
          type: string
          enum:
            - admin
            - member
        invitedAt:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: API key sent in the Authorization header.

````