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

# Create a draft deal

> Creates a draft deal at one address and fills the sections the body carries.



## OpenAPI

````yaml POST /sell/drafts
openapi: 3.1.0
info:
  title: Investorlift Marketplace API
  version: '2026-09-18'
  summary: List, publish and trade wholesale real estate deals on Investorlift.
  description: >-
    The Marketplace API gives a seller organization and a buyer account the same
    actions the Investorlift application gives them. A seller creates a draft,
    publishes a deal, reads its leads and answers offers. A buyer searches
    deals, asks for an address, makes an offer and keeps a buy box. Every answer
    carries a request id, and every refusal carries a problem code with one
    recovery sentence.
  contact:
    name: Investorlift support
    email: support@investorlift.com
servers:
  - url: https://api.investorlift.com/marketplace/v1
    description: Production
security:
  - oauth2: []
tags:
  - name: sell
    description: What a seller organization does with its drafts and deals.
  - name: buy
    description: What a buyer account does with deals, offers and buy boxes.
  - name: me
    description: What this token can do right now.
  - name: events
    description: >-
      What Investorlift sends to a webhook endpoint, one entry for each event
      type.
paths:
  /sell/drafts:
    post:
      tags:
        - sell
      summary: Create a draft deal
      description: >-
        Creates a draft deal at one address and fills the sections the body
        carries. The address check is advisory: a draft holds no slot, and the
        lock applies at publish. An address another organization holds answers
        409 and names no owner.
      operationId: createSellDraft
      parameters:
        - name: Idempotency-Key
          in: header
          required: true
          description: >-
            A key of your own that names this attempt. The same key with the
            same body replays the stored answer.
          schema:
            type: string
            minLength: 1
            maxLength: 255
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                address:
                  type: object
                  properties:
                    street:
                      type: string
                      minLength: 1
                      maxLength: 200
                      description: The house number and the street.
                    city:
                      type: string
                      minLength: 1
                      maxLength: 100
                    state:
                      type: string
                      minLength: 2
                      maxLength: 2
                      description: The two-letter state code.
                    zip:
                      type: string
                      minLength: 5
                      maxLength: 10
                    county:
                      anyOf:
                        - type: string
                          maxLength: 100
                        - type: 'null'
                    place_id:
                      description: The Google Places id of the address.
                      type: string
                      maxLength: 200
                    formatted_address:
                      type: string
                      maxLength: 400
                    latitude:
                      type: number
                      minimum: -90
                      maximum: 90
                    longitude:
                      type: number
                      minimum: -180
                      maximum: 180
                  required:
                    - street
                    - city
                    - state
                    - zip
                  additionalProperties: false
                basics:
                  type: object
                  properties:
                    property_type:
                      type: string
                      enum:
                        - single_family
                        - duplexes
                        - multifamily
                        - condo
                        - townhouse
                        - manufactured
                        - land
                        - commercial
                    beds:
                      type: integer
                      minimum: 0
                      maximum: 100
                    baths:
                      type: number
                      minimum: 0
                      maximum: 100
                    half_baths:
                      type: integer
                      minimum: 0
                      maximum: 100
                    sq_footage:
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    year_built:
                      type: integer
                      minimum: 1600
                      maximum: 2200
                    parking_type:
                      type: string
                      enum:
                        - attached_garage
                        - detached_garage
                        - carport
                        - driveway
                        - street
                    lot_size:
                      type: number
                      minimum: 0
                    lot_size_unit:
                      type: string
                      enum:
                        - sqft
                        - acres
                  required:
                    - property_type
                  additionalProperties: false
                price:
                  type: object
                  properties:
                    asking_price:
                      type: integer
                      minimum: 1
                      maximum: 9007199254740991
                    entry_fee:
                      type: integer
                      minimum: 1
                      maximum: 9007199254740991
                    purchase_price:
                      type: integer
                      minimum: 1
                      maximum: 9007199254740991
                      description: Private. The contract price the seller pays.
                    min_emd:
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                      description: The smallest earnest money deposit the seller takes.
                  required:
                    - purchase_price
                    - min_emd
                  additionalProperties: false
                value:
                  type: object
                  properties:
                    arv_estimate:
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    arv_is_override:
                      type: boolean
                    condition:
                      type: string
                      enum:
                        - FULL_GUT
                        - LIGHT_REHAB
                        - MAJOR_REHAB
                        - TEAR_DOWN
                        - TURN_KEY
                    repair_estimate_min:
                      description: Private.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    repair_estimate_max:
                      description: Private.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    repairs_stated_by_seller:
                      description: Private.
                      type: boolean
                    repair_scope_description:
                      type: string
                      maxLength: 2000
                    repair_scope_public:
                      type: boolean
                  additionalProperties: false
                description:
                  type: string
                  minLength: 8
                  maxLength: 300000
                disposition_manager_id:
                  description: >-
                    A member of the organization, as mbr_<member id>. The caller
                    by default.
                  type: string
                  minLength: 1
              required:
                - address
              additionalProperties: false
      responses:
        '201':
          description: Created
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Draft'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
                additionalProperties: false
        '400':
          description: >-
            Body unusable, Identifier malformed, Parameter unusable, Parameter
            unknown
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Problem.invalid_body'
                  - $ref: '#/components/schemas/Problem.invalid_id'
                  - $ref: '#/components/schemas/Problem.invalid_parameter'
                  - $ref: '#/components/schemas/Problem.unknown_parameter'
        '401':
          description: Not authenticated
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem.unauthorized'
        '403':
          description: >-
            Designation missing, Refused, Scope missing, No organization, Not a
            member, Terms not accepted
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Problem.designation_required'
                  - $ref: '#/components/schemas/Problem.forbidden'
                  - $ref: '#/components/schemas/Problem.insufficient_scope'
                  - $ref: '#/components/schemas/Problem.no_organization'
                  - $ref: '#/components/schemas/Problem.not_a_member'
                  - $ref: '#/components/schemas/Problem.terms_required'
        '405':
          description: Method not allowed
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem.method_not_allowed'
        '409':
          description: Address taken, Key reused with a different body, Key in progress
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Problem.address_unavailable'
                  - $ref: '#/components/schemas/Problem.idempotency_conflict'
                  - $ref: '#/components/schemas/Problem.idempotency_in_progress'
        '422':
          description: Body failed validation
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem.validation_failed'
        '429':
          description: Cap reached, Daily cap reached
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Problem.cap_reached'
                  - $ref: '#/components/schemas/Problem.daily_cap_reached'
        '503':
          description: Service unavailable
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem.origin_error'
      security:
        - oauth2:
            - deals:write
components:
  headers:
    XRequestId:
      description: The id this answer shares with the Investorlift request log.
      schema:
        type: string
  schemas:
    Draft:
      type: object
      properties:
        id:
          type: string
          description: The draft id, drf_<id>.
        status:
          type: string
          const: draft
        asset_type:
          anyOf:
            - type: string
            - type: 'null'
        address:
          anyOf:
            - type: object
              properties:
                street:
                  type: string
                  minLength: 1
                  maxLength: 200
                  description: The house number and the street.
                city:
                  type: string
                  minLength: 1
                  maxLength: 100
                state:
                  type: string
                  minLength: 2
                  maxLength: 2
                  description: The two-letter state code.
                zip:
                  type: string
                  minLength: 5
                  maxLength: 10
                county:
                  anyOf:
                    - type: string
                      maxLength: 100
                    - type: 'null'
                place_id:
                  description: The Google Places id of the address.
                  type: string
                  maxLength: 200
                formatted_address:
                  type: string
                  maxLength: 400
                latitude:
                  type: number
                  minimum: -90
                  maximum: 90
                longitude:
                  type: number
                  minimum: -180
                  maximum: 180
              additionalProperties: false
            - type: 'null'
        basics:
          anyOf:
            - type: object
              properties:
                property_type:
                  type: string
                  enum:
                    - single_family
                    - duplexes
                    - multifamily
                    - condo
                    - townhouse
                    - manufactured
                    - land
                    - commercial
                beds:
                  type: integer
                  minimum: 0
                  maximum: 100
                baths:
                  type: number
                  minimum: 0
                  maximum: 100
                half_baths:
                  type: integer
                  minimum: 0
                  maximum: 100
                sq_footage:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                year_built:
                  type: integer
                  minimum: 1600
                  maximum: 2200
                parking_type:
                  type: string
                  enum:
                    - attached_garage
                    - detached_garage
                    - carport
                    - driveway
                    - street
                lot_size:
                  type: number
                  minimum: 0
                lot_size_unit:
                  type: string
                  enum:
                    - sqft
                    - acres
              additionalProperties: false
            - type: 'null'
        price:
          anyOf:
            - type: object
              properties:
                asking_price:
                  type: integer
                  minimum: 1
                  maximum: 9007199254740991
                entry_fee:
                  type: integer
                  minimum: 1
                  maximum: 9007199254740991
                purchase_price:
                  type: integer
                  minimum: 1
                  maximum: 9007199254740991
                  description: Private. The contract price the seller pays.
                min_emd:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                  description: The smallest earnest money deposit the seller takes.
              additionalProperties: false
            - type: 'null'
        value:
          anyOf:
            - type: object
              properties:
                arv_estimate:
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                arv_is_override:
                  type: boolean
                condition:
                  type: string
                  enum:
                    - FULL_GUT
                    - LIGHT_REHAB
                    - MAJOR_REHAB
                    - TEAR_DOWN
                    - TURN_KEY
                repair_estimate_min:
                  description: Private.
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                repair_estimate_max:
                  description: Private.
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                repairs_stated_by_seller:
                  description: Private.
                  type: boolean
                repair_scope_description:
                  type: string
                  maxLength: 2000
                repair_scope_public:
                  type: boolean
              additionalProperties: false
            - type: 'null'
        description:
          anyOf:
            - type: string
            - type: 'null'
        media:
          type: array
          items:
            $ref: '#/components/schemas/DraftMediaItem'
        documents:
          type: array
          items:
            $ref: '#/components/schemas/DraftDocument'
        contract:
          anyOf:
            - type: object
              properties:
                filename:
                  type: string
                content_type:
                  type: string
                size_bytes:
                  type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                  description: The size of the file in bytes.
                uploaded_at:
                  type: string
                  format: date-time
                  pattern: >-
                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                extraction_confidence:
                  anyOf:
                    - type: string
                    - type: 'null'
                property_address:
                  anyOf:
                    - type: string
                    - type: 'null'
                purchase_price:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Private. The price the contract states.
              required:
                - filename
                - content_type
                - size_bytes
                - uploaded_at
                - extraction_confidence
                - property_address
                - purchase_price
              additionalProperties: false
            - type: 'null'
        disposition_manager_id:
          anyOf:
            - type: string
            - type: 'null'
          description: The member who takes the deal at publish, as mbr_<member id>.
        ready_to_publish:
          type: boolean
          description: True when the draft passes the publish check.
        incomplete_reason:
          anyOf:
            - type: string
            - type: 'null'
          description: What the draft still needs, or null.
        created_at:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        updated_at:
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
      required:
        - id
        - status
        - asset_type
        - address
        - basics
        - price
        - value
        - description
        - media
        - documents
        - contract
        - disposition_manager_id
        - ready_to_publish
        - incomplete_reason
        - created_at
        - updated_at
      additionalProperties: false
    Meta:
      type: object
      properties:
        request_id:
          type: string
          description: The id this answer shares with the log.
        api_version:
          type: string
          description: The contract version the body is rendered at.
      required:
        - request_id
        - api_version
      additionalProperties: false
    Problem.invalid_body:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: Body unusable. Send a JSON body with the content type application/json.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#invalid_body
        title:
          const: Body unusable
        status:
          const: 400
        code:
          const: invalid_body
        recovery:
          const: Send a JSON body with the content type application/json.
    Problem.invalid_id:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Identifier malformed. Send the public id with its type prefix, for
        example mdl_a1b2c3d4e5f6.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#invalid_id
        title:
          const: Identifier malformed
        status:
          const: 400
        code:
          const: invalid_id
        recovery:
          const: >-
            Send the public id with its type prefix, for example
            mdl_a1b2c3d4e5f6.
    Problem.invalid_parameter:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Parameter unusable. Correct the query parameter the detail names, then
        repeat the call.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#invalid_parameter
        title:
          const: Parameter unusable
        status:
          const: 400
        code:
          const: invalid_parameter
        recovery:
          const: Correct the query parameter the detail names, then repeat the call.
    Problem.unknown_parameter:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Parameter unknown. Remove the parameter the detail names, because this
        operation reads no such field.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#unknown_parameter
        title:
          const: Parameter unknown
        status:
          const: 400
        code:
          const: unknown_parameter
        recovery:
          const: >-
            Remove the parameter the detail names, because this operation reads
            no such field.
        unknown_parameters:
          type: array
          items:
            type: string
          description: Every field of the request this operation does not read.
      required:
        - unknown_parameters
    Problem.unauthorized:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Not authenticated. Send a current access token for this API, and start a
        new authorization when the token is expired.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#unauthorized
        title:
          const: Not authenticated
        status:
          const: 401
        code:
          const: unauthorized
        recovery:
          const: >-
            Send a current access token for this API, and start a new
            authorization when the token is expired.
    Problem.designation_required:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Designation missing. Finish the onboarding of the side you call, then
        repeat the call.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#designation_required
        title:
          const: Designation missing
        status:
          const: 403
        code:
          const: designation_required
        recovery:
          const: Finish the onboarding of the side you call, then repeat the call.
        designation:
          description: The designation the side of this operation needs.
          type: string
          enum:
            - seller
            - buyer
    Problem.forbidden:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Refused. Ask Investorlift support why the account, the client or the
        organization is stopped.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#forbidden
        title:
          const: Refused
        status:
          const: 403
        code:
          const: forbidden
        recovery:
          const: >-
            Ask Investorlift support why the account, the client or the
            organization is stopped.
    Problem.insufficient_scope:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Scope missing. Start a new authorization that asks for the scope named
        in the detail.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#insufficient_scope
        title:
          const: Scope missing
        status:
          const: 403
        code:
          const: insufficient_scope
        recovery:
          const: >-
            Start a new authorization that asks for the scope named in the
            detail.
        scope:
          type: string
          enum:
            - marketplace:profile
            - deals:read
            - deals:write
            - offers:read
            - offers:write
            - inquiries:read
            - inquiries:write
            - leads:read
            - leads:write
            - contacts:read
            - reviews:read
            - buy_boxes:manage
            - webhooks:manage
            - events:read
          description: The scope this operation needs.
      required:
        - scope
    Problem.no_organization:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        No organization. Create an organization on Investorlift, then repeat the
        call.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#no_organization
        title:
          const: No organization
        status:
          const: 403
        code:
          const: no_organization
        recovery:
          const: Create an organization on Investorlift, then repeat the call.
    Problem.not_a_member:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Not a member. Name a user who is a member of the organization, then
        repeat the call.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#not_a_member
        title:
          const: Not a member
        status:
          const: 403
        code:
          const: not_a_member
        recovery:
          const: >-
            Name a user who is a member of the organization, then repeat the
            call.
    Problem.terms_required:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Terms not accepted. Accept the Marketplace API Terms on the consent
        page, then start a new authorization.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#terms_required
        title:
          const: Terms not accepted
        status:
          const: 403
        code:
          const: terms_required
        recovery:
          const: >-
            Accept the Marketplace API Terms on the consent page, then start a
            new authorization.
        agreement_id:
          type: string
          description: The version of the Marketplace API Terms to accept.
      required:
        - agreement_id
    Problem.method_not_allowed:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Method not allowed. Use one of the methods the documentation lists for
        this path.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#method_not_allowed
        title:
          const: Method not allowed
        status:
          const: 405
        code:
          const: method_not_allowed
        recovery:
          const: Use one of the methods the documentation lists for this path.
    Problem.address_unavailable:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Address taken. Wait for the other deal on this address to close, or
        publish a different property.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#address_unavailable
        title:
          const: Address taken
        status:
          const: 409
        code:
          const: address_unavailable
        recovery:
          const: >-
            Wait for the other deal on this address to close, or publish a
            different property.
    Problem.idempotency_conflict:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Key reused with a different body. Send a new Idempotency-Key for this
        body, because the stored key holds another one.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#idempotency_conflict
        title:
          const: Key reused with a different body
        status:
          const: 409
        code:
          const: idempotency_conflict
        recovery:
          const: >-
            Send a new Idempotency-Key for this body, because the stored key
            holds another one.
    Problem.idempotency_in_progress:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Key in progress. Wait one second, then repeat the call with the same
        Idempotency-Key.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#idempotency_in_progress
        title:
          const: Key in progress
        status:
          const: 409
        code:
          const: idempotency_in_progress
        recovery:
          const: Wait one second, then repeat the call with the same Idempotency-Key.
    Problem.validation_failed:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Body failed validation. Correct each field the detail names, then repeat
        the call.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#validation_failed
        title:
          const: Body failed validation
        status:
          const: 422
        code:
          const: validation_failed
        recovery:
          const: Correct each field the detail names, then repeat the call.
    Problem.cap_reached:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Cap reached. Wait for the time in Retry-After, or raise your trust tier
        with the step in GET /me.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#cap_reached
        title:
          const: Cap reached
        status:
          const: 429
        code:
          const: cap_reached
        recovery:
          const: >-
            Wait for the time in Retry-After, or raise your trust tier with the
            step in GET /me.
    Problem.daily_cap_reached:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Daily cap reached. Wait for the next day in UTC, or raise your trust
        tier with the step in GET /me.
      properties:
        type:
          const: >-
            https://developers.investorlift.com/marketplace/errors#daily_cap_reached
        title:
          const: Daily cap reached
        status:
          const: 429
        code:
          const: daily_cap_reached
        recovery:
          const: >-
            Wait for the next day in UTC, or raise your trust tier with the step
            in GET /me.
    Problem.origin_error:
      allOf:
        - $ref: '#/components/schemas/Problem'
      description: >-
        Service unavailable. Repeat the call in a minute, and tell Investorlift
        support when the answer stays the same.
      properties:
        type:
          const: https://developers.investorlift.com/marketplace/errors#origin_error
        title:
          const: Service unavailable
        status:
          const: 503
        code:
          const: origin_error
        recovery:
          const: >-
            Repeat the call in a minute, and tell Investorlift support when the
            answer stays the same.
    DraftMediaItem:
      type: object
      properties:
        id:
          type: string
        kind:
          type: string
          enum:
            - image
            - video
        url:
          anyOf:
            - type: string
            - type: 'null'
          description: The public URL of the file, or null for a video.
        filename:
          type: string
        size_bytes:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The size of the file in bytes.
        content_type:
          type: string
        order:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The position of the item, lowest first.
        is_default:
          type: boolean
          description: True for the cover photo of the deal.
      required:
        - id
        - kind
        - url
        - filename
        - size_bytes
        - content_type
        - order
        - is_default
      additionalProperties: false
    DraftDocument:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
          description: The document type, for example inspection_report.
        filename:
          type: string
        size_bytes:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The size of the file in bytes.
        content_type:
          type: string
      required:
        - id
        - type
        - filename
        - size_bytes
        - content_type
      additionalProperties: false
    Problem:
      type: object
      description: >-
        One refusal, as RFC 9457 application/problem+json. The code picks the
        status, the title and the recovery sentence.
      properties:
        type:
          type: string
          format: uri
          description: The errors page anchor of the code.
        title:
          type: string
          description: The short title of the code.
        status:
          type: integer
          description: The HTTP status of this answer.
        code:
          type: string
          enum:
            - address_unavailable
            - agreement_required
            - api_offers_disabled
            - below_floor
            - cap_reached
            - client_limit
            - daily_cap_reached
            - deal_changed
            - deal_closed
            - deal_incomplete
            - designation_required
            - draft_under_review
            - duplicate_inquiry
            - forbidden
            - idempotency_conflict
            - idempotency_in_progress
            - idv_required
            - insufficient_balance
            - insufficient_role
            - insufficient_scope
            - invalid_body
            - invalid_id
            - invalid_parameter
            - invalid_transition
            - lead_locked
            - method_not_allowed
            - no_organization
            - not_a_member
            - not_found
            - offer_exists
            - offer_required
            - offer_superseded
            - organization_required
            - origin_error
            - person_exists
            - preview_expired
            - preview_mismatch
            - proof_of_funds_expired
            - proof_of_funds_missing
            - rate_limited
            - requirement_unmet
            - resource_exists
            - resource_limit
            - strike_exists
            - strike_window_closed
            - terms_required
            - unauthorized
            - unknown_parameter
            - validation_failed
            - webhook_limit
            - webhook_url_refused
            - wrong_side
          description: The problem code. Read this, never the title.
        detail:
          type: string
          description: What happened for this one request.
        recovery:
          type: string
          description: One sentence that says what to do next.
        request_id:
          type: string
          description: The id this answer shares with the log.
      required:
        - type
        - title
        - status
        - code
        - detail
        - recovery
        - request_id
  securitySchemes:
    oauth2:
      type: oauth2
      description: >-
        Authorization code with PKCE. The person grants the scopes on the
        Investorlift consent page and accepts the Marketplace API Terms there.
      flows:
        authorizationCode:
          authorizationUrl: https://mogul.investorlift.com/api/auth/oauth2/authorize
          tokenUrl: https://mogul.investorlift.com/api/auth/oauth2/token
          refreshUrl: https://mogul.investorlift.com/api/auth/oauth2/token
          scopes:
            marketplace:profile: Read your account, your organization and your trust tier.
            deals:read: Read your deals as a seller, and the deals you see as a buyer.
            deals:write: >-
              Create drafts, add media and documents, publish deals and change
              their status.
            offers:read: >-
              Read the offers on your deals as a seller, and your own offers as
              a buyer.
            offers:write: Make, counter, accept, decline and withdraw offers.
            inquiries:read: >-
              Read the inquiries and address requests on your deals, and your
              own.
            inquiries:write: Send inquiries and address requests, and answer address requests.
            leads:read: Read the leads on your deals with their history.
            leads:write: Set a lead status, add a lead and file a strike.
            contacts:read: >-
              Read the email address and the phone number of a buyer on your
              deals.
            reviews:read: Read a seller public profile and the reviews of that seller.
            buy_boxes:manage: Read and change your buy boxes and their alerts.
            webhooks:manage: Create, read and delete the webhook endpoints of your side.
            events:read: Read the event feed of your side.

````

## Related topics

- [Create a draft deal](/api-reference/sell/create-a-draft-deal.md)
- [Quickstart for sellers](/marketplace/quickstart-seller.md)
- [Publish a draft as a deal](/marketplace/reference/publish-sell-draft.md)
- [Create a buy box](/api-reference/buy/create-a-buy-box.md)
