---
title: "Convert listing to sale"
method: POST
path: "/api/files/listings/{listingGuid}/convert-to-sale"
tags: ["Listings"]
---

# Convert listing to sale

`POST /api/files/listings/{listingGuid}/convert-to-sale`

Converts an active listing to a sale transaction. The listing must be in Active status (not expired, archived, or already converted). Creates a new sale linked to the listing, copies contacts, shared contacts, and commission tiers from the listing. The listing status is updated to Transaction (converted). saleChecklistTypeId is required and must belong to the listing's office. Optional fields default to listing data: salePrice defaults to listingPrice, mlsNumber defaults to listing's MLS number, sourceId defaults to listing's source.

### Validation & Requirements
#### Required Parameters
- `listingGuid` (path, string, format=guid)
- `form` (body, object)

#### Required JSON Body Fields
- None

#### Validations
- Invalid GUID values in `*Guid`/`*Guids` fields return `422 Unprocessable Entity`.
- Invalid date values in `*date*` fields return `422 Unprocessable Entity`.
- Missing required request body returns `422 Unprocessable Entity` with `Missing request body.`.
- Additional business-rule validation may return `422` with details in the `errors` array.

#### Integration Requirement
- Retrieve the corresponding `...Form` endpoint immediately before write operations to get current dynamic required fields and allowed values.

## Path parameters

- `listingGuid` string, guid, required

## Request body

- ConvertListingToSaleForm
  - `saleChecklistTypeId` integer — The checklist type ID for the new sale. Must belong to the listing's office.
  - `contractAcceptanceDate` string, date-time, nullable — Contract acceptance date for the sale. Optional; if not provided, it remains unset.
  - `salePrice` number, nullable — Sale price. Defaults to listing price if not provided.
  - `escrowNumber` string, nullable — Escrow/closing number.
  - `escrowClosingDate` string, date-time, nullable — Escrow closing date.
  - `actualClosingDate` string, date-time, nullable — Actual closing date.
  - `sourceId` integer, nullable — SourceId can be retrieved from the AllowableSelections list.
  - `otherSource` string, nullable — Required only for certain SourceId fields.
  - `mlsNumber` string, nullable — MLS number. Defaults to listing's MLS number if not provided.
  - `isOfficeLead` boolean, nullable
  - `fileId` string, nullable
  - `apn` string, nullable
  - `customFields` CreateSaleCustomFieldsDTO
    - `isConcierge` string, nullable
    - `conciergeProjectNumber` string, nullable
    - `serviceType` string, nullable
  - `commercialLease` CommercialLeaseDTO4
    - `commencementDate` string, date-time, nullable
    - `endingDate` string, date-time, nullable
    - `renewalOption` boolean, nullable
    - `purchaseOption` boolean, nullable
    - `size` number, nullable
    - `sizeType` string, nullable

## Response `200`

- LinkedResponseOfConvertListingToSaleResponse
  - `value` ConvertListingToSaleResponse
    - `saleGuid` string, guid
  - `warnings` string[], nullable
  - `links` Link[], nullable
    - `href` string, nullable
    - `rel` string, nullable
    - `method` string, nullable

## Other responses

- `404`
- `422`

---

[API](https://skmtc.net/skyslope/apis/skyslope-api.md) · [All operations](https://skmtc.net/skyslope/apis/skyslope-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/skyslope/skyslope-api/revisions/bad0d2db9b7a/schema)
