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

# Create Customer

> Creates a new end-customer account under your reseller account.

**Customer ID:** On success, the response includes a `customer_id`. Store it — this is the identifier required for all subsequent operations such as `POST /api/v1/domains/register` and `GET /api/v1/domains/orders`.

**WHOIS contact:** The name, address, phone, and email supplied here are automatically set as the registrant, admin, tech, and billing contact for every domain registered under this account. Ensure the details are accurate and in English — non-ASCII characters may cause upstream validation failures.

**Email uniqueness:** The email address serves as the customer's login username and must be unique across the platform. Submitting a duplicate email returns a `422` error.

**Password requirements:** 9–15 characters, including at least one uppercase letter, one lowercase letter, one digit, and one special character from `~ * ! @ $ # % _ + . ? : , { }`.

**State field:** Use the full state or province name (e.g. `California`, `England`). If the country has no states, pass `Other`.

> For a list of supported Countries & their States use [countries.json](/api-reference/customer/countries-json)


## OpenAPI

````yaml POST /api/v1/customers/signup
openapi: 3.1.0
info:
  title: Namify API
  description: >-
    The Namify API gives resellers and platform builders programmatic access to
    domain search, registration, renewal, customer management, and DNS
    configuration — all through a single authenticated REST interface.


    All requests require a bearer token issued from the Namify dashboard
    (Settings > API Key). The API is scoped to your partner account: TLD
    availability, pricing, and order history are all filtered to your configured
    product catalogue.


    **Base URL:** `https://dev.namify.host`


    **Typical integration flow:**

    1. Create a customer account with `POST /api/v1/customers/signup`.

    2. Check domain availability with `GET /api/v1/domains/availability`.

    3. Register the domain with `POST /api/v1/domains/register`.

    4. Activate DNS with `POST /api/v1/dns/activate` and add records as needed.

    5. Renew the domain before expiry with `POST /api/v1/domains/renew`.
  version: 1.0.0
  license:
    name: MIT
servers:
  - url: https://dev.namify.host
security:
  - bearerAuth: []
paths:
  /api/v1/customers/signup:
    post:
      tags:
        - Customers
      summary: Create a new customer account
      description: >-
        Creates a new end-customer account under your reseller account.


        **Customer ID:** On success, the response includes a `customer_id`.
        Store it — this is the identifier required for all subsequent operations
        such as `POST /api/v1/domains/register` and `GET
        /api/v1/domains/orders`.


        **WHOIS contact:** The name, address, phone, and email supplied here are
        automatically set as the registrant, admin, tech, and billing contact
        for every domain registered under this account. Ensure the details are
        accurate and in English — non-ASCII characters may cause upstream
        validation failures.


        **Email uniqueness:** The email address serves as the customer's login
        username and must be unique across the platform. Submitting a duplicate
        email returns a `422` error.


        **Password requirements:** 9–15 characters, including at least one
        uppercase letter, one lowercase letter, one digit, and one special
        character from `~ * ! @ $ # % _ + . ? : , { }`.


        **State field:** Use the full state or province name (e.g. `California`,
        `England`). If the country has no states, pass `Other`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - country_code
                - phone
                - email
                - password
                - country
                - address
                - state
                - city
                - zipcode
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 255
                  description: >-
                    Full legal name of the customer (first and last name). Used
                    as the registrant contact name for domain WHOIS records.
                  example: John Doe
                company:
                  type: string
                  description: >-
                    Company or organisation name associated with the account.
                    Optional — omit or leave blank for individual (non-business)
                    registrations.
                  example: Acme Corp
                country_code:
                  type: string
                  description: >-
                    International telephone dialling prefix for the customer's
                    country, without the leading '+' (e.g., '1' for US/Canada,
                    '44' for UK, '49' for Germany).
                  example: '1'
                phone:
                  type: string
                  description: >-
                    Customer's phone number, excluding the country dialling code
                    and any leading zeros. Digits only — no spaces, dashes, or
                    parentheses (e.g., '2125551234' for a New York number).
                    Combined with `country_code` to form a full E.164-compliant
                    number.
                  example: '2125551234'
                email:
                  type: string
                  format: email
                  description: >-
                    Customer's primary email address. This also serves as the
                    customer's login username for the account. Used for account
                    notifications, password resets, and as the registrant
                    contact email in domain WHOIS records. Must be unique —
                    re-submitting an existing address returns a 422 error.
                  example: john.doe@example.com
                password:
                  type: string
                  minLength: 9
                  maxLength: 15
                  description: >-
                    Password for the new account. Use 9–15 characters, including
                    at least one uppercase, one lowercase, one number, and one
                    special character from the allowed set: ~ * ! @ $ # % _ + .
                    ? : , { }
                  example: SecureP@ss1
                country:
                  type: string
                  minLength: 2
                  maxLength: 2
                  description: >-
                    Two-letter country code as defined by ISO 3166-1 alpha-2
                    (e.g., 'US' for United States, 'GB' for United Kingdom, 'DE'
                    for Germany). Must be uppercase.
                  example: US
                address:
                  type: string
                  description: >-
                    Primary street address of the customer (house number and
                    street name). Used as the registrant contact address for
                    domain WHOIS records.
                  example: 123 Main Street, Apt 4B
                state:
                  type: string
                  description: >-
                    Full name of the state, province, or region of the
                    customer's address (e.g., 'New York', 'California',
                    'England'). Use the state names listed in the `states` array
                    for the relevant country in `countries.json`. If the
                    customer's country has no states, pass `"Other"`.
                  example: California
                city:
                  type: string
                  description: City or locality of the customer's address.
                  example: Los Angeles
                zipcode:
                  type: string
                  description: >-
                    Postal or ZIP code corresponding to the customer's address.
                    Format varies by country (e.g., '10001' for US, 'EC1A 1BB'
                    for UK).
                  example: '90001'
            example:
              name: John Doe
              company: Acme Corp
              address: 123 Main Street, Apt 4B
              city: Los Angeles
              state: California
              country: US
              zipcode: '90001'
              country_code: '1'
              phone: '3105559876'
              email: john.doe@example.com
              password: SecureP@ss1
      responses:
        '201':
          description: Customer account created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignupResponse'
              example:
                message: Customer created
                customer_id: 85384231
        '422':
          description: >-
            Validation failed or the upstream provider rejected the request.
            Possible causes: a required field is missing or invalid; the
            password does not match the complexity criteria; the ZIP code is
            invalid; the phone number contains non-digit characters or is out of
            range; or the email address is already registered as a customer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUserExists'
        '500':
          description: >-
            Unexpected server-side error. Typically occurs when the upstream
            provider returns an unrecognised response or an internal exception
            is thrown.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUserExists'
              example:
                status: ERROR
                message: >-
                  Signup Failed, please ensure that all the fields are valid and
                  in English
        '502':
          description: >-
            The upstream provider returned an unexpected or unparseable
            response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorUserExists'
              example:
                status: ERROR
                message: Signup failed (unexpected registrar response)
components:
  schemas:
    SignupResponse:
      type: object
      properties:
        message:
          type: string
          example: Customer created
        customer_id:
          type: integer
          description: >-
            Unique ID assigned to the newly created customer. Use this value as
            `customer_id` in subsequent calls (e.g. domain registration, order
            lookup).
          example: 85384231
    ErrorUserExists:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          example: User already exists
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        A personal access token. Obtain one from the dashboard under Settings >
        API Key. Include it in the `Authorization` header as `Bearer <token>`.
        Unauthenticated requests to protected routes return `401 Unauthorized`.

````