openapi: 3.1.3
info:
x-logo:
url: https://s3.amazonaws.com/cdn.skyslope.com/forms/forms-logo-w-top-padding.png
href: https://skyslope.com/
altText: SkySlope
title: SkySlope Partnership API Reference
version: 1.0.0
description: "# Introduction\n The SkySlope Forms API is organized around [REST](https://en.wikipedia.org/wiki/Representational_state_transfer).\n\
\ Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded\
\ responses,\n and uses standard HTTP response codes, authentication, and verbs.<br/><br/>\n NOTE:\
\ Endpoints marked with an asterisk (*) will be available to our partners in the near future.\n #\
\ Authentication\n This API uses [OAuth 2.0 authorization code flow](https://www.oauth.com/oauth2-servers/server-side-apps/authorization-code/)\n\
\ to obtain an access token that can be used to authenticate subsequent API requests.\n ## Access\
\ Tokens\n ### Request\n To obtain an access token, first redirect the user to the authorization\
\ endpoint:\n ```\n https://accounts.skyslope.com/oauth2/authorize?\n response_type=code\n \
\ &client_id={YOUR_CLIENT_ID}\n &redirect_uri={YOUR_REDIRECT_URI}\n &scope=forms.files\n \
\ &state={RANDOM_STATE_VALUE}\n &code_challenge={CODE_CHALLENGE}\n &code_challenge_method=S256\n\
\ ```\n After the user authorizes your application, they'll be redirected back to your redirect\
\ URI with an authorization code.\n Exchange this code for an access token by making a POST request\
\ to the token endpoint:\n ```\n POST /oauth2/token HTTP/1.1\n Host: accounts.skyslope.com\n Content-Type:\
\ application/x-www-form-urlencoded\n \n grant_type=authorization_code\n &client_id={YOUR_CLIENT_ID}\n\
\ &client_secret={YOUR_CLIENT_SECRET}\n &code={AUTHORIZATION_CODE}\n &redirect_uri={YOUR_REDIRECT_URI}\n\
\ &code_verifier={CODE_VERIFIER}\n ```\n ### Usage\n Authentication to the API is performed by\
\ including your access token in the **Authorization** header of your\n API requests with the Bearer\
\ authentication scheme:\n ```\n GET /partner/api/files HTTP/1.1\n Host: forms.skyslope.com\n \
\ Authorization: Bearer {YOUR_ACCESS_TOKEN}\n ```\n All API requests must be made over [HTTPS](https://en.wikipedia.org/wiki/HTTPS).\
\ Calls made over plain HTTP will fail.\n API requests without authentication will also fail.\n \
\ ## Refresh Tokens\n Refresh tokens allow you to obtain new access tokens without requiring the\
\ user to re-authenticate. When you first\n complete the OAuth flow, you'll receive both an access\
\ token and a refresh token.\n ### Request\n To receive a refresh token, include the `offline_access`\
\ scope in your initial authorization request:\n ```\n https://accounts.skyslope.com/oauth2/authorize?\n\
\ response_type=code\n &client_id={YOUR_CLIENT_ID}\n &scope=forms.files offline_access\n\
\ &redirect_uri={YOUR_REDIRECT_URI}\n ```\n ### Usage\n When your access token expires, make\
\ a POST request to the token endpoint:\n ```\n POST /oauth2/token HTTP/1.1\n Host: accounts.skyslope.com\n\
\ Content-Type: application/x-www-form-urlencoded\n \n grant_type=refresh_token\n &client_id={YOUR_CLIENT_ID}\n\
\ &client_secret={YOUR_CLIENT_SECRET}\n &refresh_token={YOUR_REFRESH_TOKEN}\n ```\n This will\
\ return a new access token and refresh token pair.\n ### Security Best Practices\n - Store refresh\
\ tokens securely on your backend server, never on client side\n - Encrypt refresh tokens at rest\
\ using strong encryption\n - Rotate refresh token on each use\n - Set up monitoring for unusual\
\ refresh token usage patterns\n - If a refresh token is compromised, revoke it immediately using\
\ the token revocation endpoint\n - Implement automatic cleanup of unused refresh tokens"
termsOfService: https://skyslope.com/terms-conditions/
contact:
name: Support
url: https://support.skyslope.com/hc/en-us
email: support@skyslope.com
components:
schemas: {}
paths:
/files:
post:
summary: Create Listing or Transaction File
tags:
- Files
description: 'Creates a listing or a transaction file and returns the file id.<div style="color:
rgba(38, 50, 56, 0.5); border-bottom: 1px solid rgba(38, 50, 56, 0.3); padding-bottom: 1px;">REQUIRED
SCOPES:</div><div style="display: inline-flex; gap: 5px; padding: 5px;"><div style="border-radius:
2px; border: 1px solid rgba(128,128,255,0.5); background-color: rgba(64,64,255,0.25); padding:
0px 5px;">forms.files</div></div>'
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
name:
type: string
description: The name of the file.
representationType:
type: string
enum:
- Buyer
- Seller
- Tenant
- Landlord
description: The representation type of the file.
property:
type: object
description: The property that the file is associated with.
additionalProperties: false
properties:
streetNumber:
type: string
description: The street number of the property.
streetName:
type: string
description: The street name of the property.
unitNumber:
type: string
description: The unit number of the property.
city:
type: string
description: The city of the property.
state:
type: string
description: The abbreviation for the state/province of the property.
minLength: 2
maxLength: 2
postalCode:
type: string
description: The postal code of the property.
county:
type: string
description: The county of the property.
required:
- streetNumber
- streetName
- city
- state
- postalCode
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
fileId:
type: number
description: The id of the file that was created.
example:
fileId: 477309
default:
description: An object containing the error that occurred.
content:
application/json:
schema:
type: object
description: An object containing the error that occurred.
properties:
code:
type: string
description: A code that represents the error that occurred.
message:
type: string
description: A description of the error that occurred.
errors:
type: array
description: An array of the errors that occurred.
items:
type: string
traceId:
type: string
description: A request correlation ID.
get:
summary: Get Files
tags:
- Files
description: 'Retrieve the files that the user has access to.<div style="color: rgba(38, 50, 56,
0.5); border-bottom: 1px solid rgba(38, 50, 56, 0.3); padding-bottom: 1px;">REQUIRED SCOPES:</div><div
style="display: inline-flex; gap: 5px; padding: 5px;"><div style="border-radius: 2px; border:
1px solid rgba(128,128,255,0.5); background-color: rgba(64,64,255,0.25); padding: 0px 5px;">forms.files</div><div
style="border-radius: 2px; border: 1px solid rgba(128,128,255,0.5); background-color: rgba(64,64,255,0.25);
padding: 0px 5px;">forms.files.read</div></div>'
parameters:
- schema:
type: integer
minimum: 1
default: 1
in: query
name: page
required: false
description: The page number to retrieve.
- schema:
type: integer
minimum: 1
maximum: 500
default: 10
in: query
name: pageSize
required: false
description: The number of files returned per page.
- schema:
type: string
in: query
name: filters
required: false
description: 'A comma separated sieve filter to that will be applied to the results. Ex: filters=representationtype==Buyer,(createddate)>=2024-01-01,(createddate)<=2024-01-31'
- schema:
type: string
in: query
name: sorts
required: false
description: A sieve list of sort fields to sort the results by.
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
totalRecords:
type: number
description: The total number of files found for the authenticated user.
files:
type: array
description: An array containing the files found for the authenticated user.
items:
type: object
properties:
id:
type: number
description: The id of the file.
ownedBy:
type: string
description: The id of the user who owns the file.
createdDate:
type: string
description: The date and time the file was created.
createdBy:
type: string
description: The id of the user who created the file.
lastUpdated:
type: string
description: The date and time the file was last updated.
updatedBy:
type: string
description: The id of the user who last updated the file.
name:
type: string
description: The name of the file.
address:
type: string
description: The address of the file combined into a single string.
contactInfo:
type: string
description: A semicolon seperated list of all of the contacts in the file.
type:
type: string
enum:
- File
- Template
- BrokerTemplate
description: The type of the file.
representationType:
type: string
enum:
- Buyer
- Seller
- Tenant
- Landlord
description: The representation type of the file.
templateCategory:
type: string
enum:
- Buyer
- Seller
- Tenant
- Landlord
- Other
description: The category of the template of the file.
documentCount:
type: number
description: The number of documents in the file.
envelopeCount:
type: number
description: The number of envelopes in the file.
isArchived:
type: boolean
description: Evaluates to true if the file has been archived.
meta:
type:
- 'null'
- object
description: The meta data of the file.
properties:
externalId:
type: string
description: The external id of the file.
regions:
type: array
description: An array of regions for the file.
items:
type: object
properties:
country:
type: string
description: The country of the account group.
region:
type: string
description: The region of the account group.
brokerTemplateStatus:
type: string
enum:
- Draft
- Published
description: The status of the broker template for the file.
brokerTemplateStatusUpdatedOn:
type: string
description: The date and time the broker template status was last updated.
accountGroups:
type: array
description: An array of account groups for the file.
items:
type: object
properties:
groupId:
type: string
description: The id of the account group.
mlsNumber:
type: string
description: The mls number of the file.
mlsMarketName:
type: string
description: The mls market name of the file.
photoUrl:
type: string
description: The url of the photo for the file.
transactionMeta:
type:
- 'null'
- object
description: The transaction meta data of the file.
additionalProperties: true
example:
totalRecords: 1
files:
- id: 1
name: File Name
address: 111 One Drive Sacramento, CA 95826
contactInfo: Contact info
type: File
representationType: Buyer
templateCategory: Landlord
documentCount: 1
envelopeCount: 0
isArchived: false
createdDate: '2023-12-31T12:12:12.123Z'
createdBy: iajv98j498j98vasj4h
lastUpdated: '2023-12-31T12:12:12.123Z'
updatedBy: iajv98j498j98vasj4h
ownedBy: iajv98j498j98vasj4h
meta:
status: pre-contract
mlsNumber: '1589519'
mlsMarketName: treb
photoUrl: http://image-source.com/image.png
transactionMeta:
status: pre-contract
default:
description: An object containing the error that occurred.
content:
application/json:
schema:
type: object
description: An object containing the error that occurred.
properties:
code:
type: string
description: A code that represents the error that occurred.
message:
type: string
description: A description of the error that occurred.
errors:
type: array
description: An array of the errors that occurred.
items:
type: string
traceId:
type: string
description: A request correlation ID.
/files/{fileId}:
patch:
summary: Update File Details
tags:
- Files
description: 'Update the file details of a listing or transaction file.<div style="color: rgba(38,
50, 56, 0.5); border-bottom: 1px solid rgba(38, 50, 56, 0.3); padding-bottom: 1px;">REQUIRED SCOPES:</div><div
style="display: inline-flex; gap: 5px; padding: 5px;"><div style="border-radius: 2px; border:
1px solid rgba(128,128,255,0.5); background-color: rgba(64,64,255,0.25); padding: 0px 5px;">forms.files</div></div>'
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: false
properties:
name:
type: string
description: The name of the file.
fileData:
type: object
description: File data that can be updated.
additionalProperties: true
properties:
mlsNumber:
type: string
description: The mls number of the file.
purchasePrice:
type: number
description: The purchase price of the property.
closingDate:
type: string
description: The closing date of the file in the format of YYYY-MM-DDTHH:MM:SSZ.
acceptanceDate:
type: string
description: The acceptanced date of the file in the format of YYYY-MM-DDTHH:MM:SSZ.
premisesAddress:
type: object
description: The property that the file is associated with.
additionalProperties: false
properties:
streetNumber:
type: string
description: The street number of the property.
streetName:
type: string
description: The street name of the property.
unitNumber:
type: string
description: The unit number of the property.
city:
type: string
description: The city of the property.
state:
type: string
description: The abbreviation for the state/province of the property.
minLength: 2
maxLength: 2
postalCode:
type: string
description: The postal code of the property.
county:
type: string
description: The county of the property.
required:
- streetNumber
- streetName
- city
- state
- postalCode
parameters:
- schema:
type: integer
in: path
name: fileId
required: true
description: The id of the file to update.
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
fileId:
type: number
description: The id of the file that was updated.
didAddendumsChange:
type: boolean
description: Evaluates to true if addendums were changed.
example:
fileId: 477309
didAddendumsChange: false
default:
description: An object containing the error that occurred.
content:
application/json:
schema:
type: object
description: An object containing the error that occurred.
properties:
code:
type: string
description: A code that represents the error that occurred.
message:
type: string
description: A description of the error that occurred.
errors:
type: array
description: An array of the errors that occurred.
items:
type: string
traceId:
type: string
description: A request correlation ID.
put:
summary: Update File
tags:
- Files
description: 'Update the file of a listing or transaction file.<div style="color: rgba(38, 50, 56,
0.5); border-bottom: 1px solid rgba(38, 50, 56, 0.3); padding-bottom: 1px;">REQUIRED SCOPES:</div><div
style="display: inline-flex; gap: 5px; padding: 5px;"><div style="border-radius: 2px; border:
1px solid rgba(128,128,255,0.5); background-color: rgba(64,64,255,0.25); padding: 0px 5px;">forms.files</div></div>'
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- property
- commissions
- contacts
properties:
mlsNumber:
type: string
description: The mls number of the file.
purchasePrice:
type: number
description: The purchase price of the property.
closingDateTime:
type: string
description: The closing date of the file in the format of YYYY-MM-DDTHH:MM:SSZ.
acceptanceDateTime:
type: string
description: The acceptanced date of the file in the format of YYYY-MM-DDTHH:MM:SSZ.
property:
type: object
description: The property that the file is associated with.
additionalProperties: false
properties:
streetNumber:
type: string
description: The street number of the property.
streetName:
type: string
description: The street name of the property.
unitNumber:
type: string
description: The unit number of the property.
city:
type: string
description: The city of the property.
state:
type: string
description: The abbreviation for the state/province of the property.
minLength: 2
maxLength: 2
postalCode:
type: string
description: The postal code of the property.
county:
type: string
description: The county of the property.
required:
- streetNumber
- streetName
- city
- state
- postalCode
commissions:
type: array
description: An array of the commissions for the file.
items:
type: object
properties:
id:
type: string
description: The id of the commission.
type:
type: string
enum:
- Listing
- Referral
- Sale
description: The type of the commission.
calculationType:
type: string
enum:
- Flat
- Percent
description: The calculation type of the commission.
amount:
type: number
description: The amount of the commission.
createdBy:
type: string
description: The id of the user who created the commission.
updatedBy:
type: string
description: The id of the user who last updated the commission.
createdOn:
type: string
description: The date and time the commission was created.
updatedOn:
type: string
description: The date and time the commission was last updated.
ownedBy:
type: string
description: The id of the user who owns the commission.
contacts:
type: array
description: An array of contacts for the file.
items:
type: object
additionalProperties: false
properties:
id:
type: string
description: The id of the contact.
type:
type: string
description: The role that a contact has been assigned.
enum:
- Broker
- Buyer
- BuyerAgent
- BuyersLawyer
- EscrowOfficer
- LoanOfficer
- Other
- Seller
- SellerAgent
- SellersLawyer
- TitleOfficer
actionAttribute:
type: string
description: Actions for contact to participate in.
enum:
- Empty
- NeedsToSign
- CanView
- ReceivesCopy
- NoAction
firstName:
type: string
description: The first name of the contact.
middleName:
type: string
description: The middle name of the contact.
lastName:
type: string
description: The last name of the contact.
suffix:
type: string
description: The suffix of the contact.
email:
type: string
description: The email of the contact.
primaryPhoneNumber:
type: string
description: The primary phone number of the contact.
brokeragePhoneNumber:
type: string
description: The brokerage phone number of the contact.
faxPhoneNumber:
type: string
description: The fax phone number of the contact.
companyName:
type: string
description: The company name that the contact belongs to.
isEntity:
type: boolean
description: Evaluates to true if the contact is an entity.
isUser:
type: boolean
description: Evaluates to true if the contact is the also the agent (self).
isFileOwner:
type: boolean
description: Evaluates to true if the contact is the file owner.
lenderLicenseNumber:
type: string
description: The lender license number of the contact.
agentLicenseNumber:
type: string
description: The agent license number of the contact.
agentMLSCode:
type: string
description: The agent mls code of the contact.
brokerLicenseNumber:
type: string
description: The broker license number of the contact.
brokerMLSCode:
type: string
description: The broker mls code of the contact.
brokerageLicenseNumber:
type: string
description: The brokerage license number of the contact.
brokerageMLSCode:
type: string
description: The brokerage mls code of the contact.
primaryAddress:
type: object
description: The primary address of the contact.
additionalProperties: false
properties:
streetNumber:
type: string
description: The street number of the property.
streetName:
type: string
description: The street name of the property.
unitNumber:
type: string
description: The unit number of the property.
city:
type: string
description: The city of the property.
state:
type: string
description: The abbreviation for the state/province of the property.
minLength: 2
maxLength: 2
postalCode:
type: string
description: The postal code of the property.
county:
type: string
description: The county of the property.
required:
- streetNumber
- streetName
- city
- state
- postalCode
contactInformation:
type: object
description
# --- truncated at 32 KB (188 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/skyslope/refs/heads/main/openapi/skyslope-forms-partnership-openapi.yml