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

# Registration

> Self-serve entry point: create your Business and its first owner.

**Registration** is the one public endpoint that needs no credential. It creates your
Business and its first owner, and returns their two identifiers. It is rate-limited per
client IP.

Registration does **not** return an API key; issuance is gated on email verification.
After registering, verify the email address you signed up with, then sign in to the
Cleff dashboard to create your first key. See [Authentication](/authentication) for the
key format and how it scopes every other call in this reference.


## OpenAPI

````yaml POST /v1/registration
openapi: 3.0.0
info:
  title: Cleff API
  description: >-
    Payout orchestration platform. All endpoints under /v1/ require an API key
    in the Authorization header (Bearer ck_<env>_<id>_<secret>).
  version: 0.0.1
  contact: {}
servers: []
security: []
tags: []
paths:
  /v1/registration:
    post:
      tags:
        - Registration
      summary: Self-serve business registration
      description: >-
        Public. Atomically creates your Business and its first owner. No API key
        is issued — issuance is gated on verifying the registered email address.
        Rate-limited per client IP.
      operationId: RegistrationController_register
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistrationResponseDto'
        '429':
          description: Too many registrations from this IP; retry later.
components:
  schemas:
    RegisterDto:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/RegistrationAccountDto'
        organization:
          $ref: '#/components/schemas/RegistrationOrganizationDto'
        accepted_terms:
          type: boolean
          description: >-
            Must be true. The registrant ticked the Terms & Conditions + Privacy
            Policy acceptance on the signup form.
      required:
        - account
        - organization
        - accepted_terms
    RegistrationResponseDto:
      type: object
      properties:
        business_id:
          type: string
          description: The new Business id
        membership_id:
          type: string
          description: The id of the new Business's first owner
      required:
        - business_id
        - membership_id
    RegistrationAccountDto:
      type: object
      properties:
        email:
          type: string
          format: email
          description: The registrant's email — also the login + primary-contact email
        password:
          type: string
          minLength: 12
          description: Plaintext password — hashed and never persisted in the clear
        first_name:
          type: string
        last_name:
          type: string
      required:
        - email
        - password
        - first_name
        - last_name
    RegistrationOrganizationDto:
      type: object
      properties:
        legal_name:
          type: string
          example: Acme Capital LLC
        display_name:
          type: string
          example: Acme
        business_type:
          type: string
          enum:
            - llc
            - corporation
            - partnership
            - sole_proprietorship
        country:
          type: string
          description: ISO 3166-1 alpha-2
          example: US
      required:
        - legal_name
        - business_type
        - country

````