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

# Create Lead

> Submit a lead for Superior Van to process. A request must include first_name, deal_type, vendor_name, lead_notes, and either email or phone.

Submit a lead to Superior Van for processing. The response returns a `leadId` you can use to query status.

## Required fields

A create lead request must include:

```txt theme={null}
first_name
deal_type
vendor_name
lead_notes
email OR phone
```

`last_name` is optional. A request may include only `email`, only `phone`, or both. Requests with neither `email` nor `phone` return `400`.

## Phone validation

Phone numbers may be formatted with spaces, hyphens, parentheses, or a leading `+1`. The API normalizes phone numbers by removing non-digits.

Accepted phone values:

```txt theme={null}
10 digits
11 digits starting with 1
```

If `phone` is provided and does not meet this rule, the request returns `400`.

## ZIP handling

`zip` is optional. If provided, it is saved on the HubSpot contact only. It is not saved on the deal.

If an existing contact is found and their ZIP is blank, the API updates the contact ZIP. Existing contact ZIP values are not overwritten.

## Deal type

`deal_type` is required and must be one of:

```txt theme={null}
sales
service
rental
lift
commercial
buy-back
other
```

The API does not default `deal_type`. Use `other` when the lead type does not fit another option.


## OpenAPI

````yaml POST /lead
openapi: 3.1.0
info:
  title: Superior Van Partner API
  description: >-
    Endpoints for vendor partners to submit leads and retrieve lead status from
    Superior Van & Mobility.
  license:
    name: Proprietary
  version: 1.0.1
servers:
  - url: https://api.superiorvan.com/v1
    description: Production
  - url: https://sandbox.superiorvan.com/v1
    description: Sandbox
security:
  - apiKeyAuth: []
paths:
  /lead:
    post:
      summary: Create lead
      description: >-
        Submit a lead for Superior Van to process. A request must include
        first_name, deal_type, vendor_name, lead_notes, and either email or
        phone.
      operationId: createLead
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LeadCreateRequest'
            examples:
              fullLead:
                summary: Full lead with email and phone
                value:
                  first_name: John
                  last_name: Doe
                  email: customer@example.com
                  phone: 502-555-1234
                  zip: '40202'
                  deal_type: sales
                  vendor_name: ABC Vendor
                  lead_notes: Customer interested in a new van. Follow up next week.
                  external_lead_id: VENDOR-12345
                  vehicle_year: '2025'
                  vehicle_make: Toyota
                  vehicle_model: Sienna
                  vehicle_miles: '12000'
              emailOnlyLead:
                summary: Lead with email only
                value:
                  first_name: Jane
                  email: jane@example.com
                  deal_type: sales
                  vendor_name: ABC Vendor
                  lead_notes: Email-only lead submitted by vendor.
              phoneOnlyLead:
                summary: Lead with phone only
                value:
                  first_name: Sam
                  phone: 314-555-1234
                  deal_type: sales
                  vendor_name: ABC Vendor
                  lead_notes: Phone-only lead submitted by vendor.
      responses:
        '200':
          description: Lead accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateLeadResponse'
              example:
                statusCode: 200
                body:
                  leadId: '61364584065'
        '400':
          description: >-
            Validation error. Possible causes: invalid JSON, missing first_name,
            missing both email and phone, invalid email, invalid phone, missing
            or invalid deal_type, missing vendor_name, or missing lead_notes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missingContactMethod:
                  summary: Missing email and phone
                  value:
                    statusCode: 400
                    body:
                      error: email or phone is required
                      message: Either email or phone must be provided
                invalidPhone:
                  summary: Invalid phone number
                  value:
                    statusCode: 400
                    body:
                      error: Invalid phone format
                      message: >-
                        Phone must contain 10 digits, or 11 digits starting with
                        1
        '403':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKeyAuth: []
components:
  schemas:
    LeadCreateRequest:
      type: object
      description: >-
        Lead payload. Send as application/json. Must include either email or
        phone.
      required:
        - first_name
        - deal_type
        - vendor_name
        - lead_notes
      anyOf:
        - required:
            - email
        - required:
            - phone
      properties:
        first_name:
          type: string
          minLength: 1
          description: Customer first name. Required.
        last_name:
          type: string
          description: Customer last name. Optional.
        email:
          type: string
          format: email
          description: Customer email address. Required when phone is not provided.
        phone:
          type: string
          description: >-
            Customer phone number. Required when email is not provided. Must
            contain 10 digits, or 11 digits starting with 1. Formatting
            characters such as spaces, hyphens, parentheses, and a leading + are
            allowed.
        zip:
          type: string
          description: >-
            Customer ZIP code. Optional. Saved to the HubSpot contact only, not
            the deal. Existing contact ZIP values are not overwritten.
        deal_type:
          type: string
          enum:
            - sales
            - service
            - rental
            - lift
            - commercial
            - buy-back
            - other
          description: >-
            Type of deal. Required. Allowed values are case-insensitive. The API
            does not default deal_type.
        vendor_name:
          type: string
          minLength: 1
          description: Vendor company name. Required.
        lead_notes:
          type: string
          minLength: 1
          description: >-
            Additional notes about the lead. Required. Supports multi-line text.
            If deal_type is other, the API prepends Needs Deal Type. to the
            notes.
        external_lead_id:
          type: string
          description: Vendor's internal lead ID for reference. Optional.
        external_id:
          type: string
          description: >-
            Legacy vendor internal ID. Optional. If both external_id and
            external_lead_id are provided, external_lead_id takes precedence.
        vehicle_year:
          type: string
          description: Vehicle model year. Optional.
        vehicle_make:
          type: string
          description: Vehicle make. Optional.
        vehicle_model:
          type: string
          description: Vehicle model. Optional.
        vehicle_miles:
          type: string
          description: Vehicle mileage. Optional.
    CreateLeadResponse:
      type: object
      properties:
        statusCode:
          type: integer
          example: 200
        body:
          type: object
          properties:
            leadId:
              type: string
              description: Lead ID to use when checking status
          required:
            - leadId
      required:
        - statusCode
        - body
    ErrorResponse:
      type: object
      properties:
        statusCode:
          type: integer
          description: Response status code
        body:
          type: object
          properties:
            error:
              type: string
            message:
              type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key issued to your vendor account

````