Listing
Advert for a property that is for sale or for rent, the listing actually refers to the listing agreement that is made between a principal and an agent, regarding marketing of a property.
To use EverReal playground is required to provide the Bearer token, read more in Master Data page

Query

To understand what is necessary and how to use graphql, in Master Data page we explain what is necessary to do
type Query {
listings(input: ListingFilterListPaging): [Listing]
avgListingActivity(input: AvgActivityFilter): AvgListingActivity
listingCounts(input: ListingCountsFilter): ListingCounts
}
type AvgListingActivity {
activeListings: Int
}
type ListingCounts {
listingsMissingViewings: Int
listingsMissingContracts: Int
activeAndPublished: Int
olderThan30Days: Int
listingsInContracting: Int
listingsContractingCompleted: Int
listingsMoveinCompleted: Int
}
type Listing {
id: String
title: String
type: String
isArchived: Boolean
isActive: Boolean
companyId: String
listingResponsible: User
contractDetails: ListingContractDetails
coverPicture: IFile
pictures: [IFile]
documents: [IFile]
floorplans: [IFile]
company: Company
property: Property
unit: Unit
createdAt: DateTime
updatedAt: DateTime
}
type ListingContractDetails {
currency: String
rent: Float
totalMonthlyRent: Float
parkingRent: Float
deposit: Float
heatingCostsIncluded: Boolean
utilityCosts: Float
heatingCosts: Float
petsAllowed: String
displayAmount: Float
hasCommission: Boolean
commission: String
commissionNote: String
commissionType: String
}
enum UNIT_TYPE {
APARTMENT
HOUSE
PARKING
OFFICE
STORE
GASTRONOMY
INDUSTRY
SPECIAL_PURPOSE
LAN
}
enum LISTING_TYPE {
RENT_APARTMENT
SELL_APARTMENT
RENT_SHORT_TERM_APARTMENT
RENT_HOUSE
SELL_HOUSE
RENT_PARKING
SELL_PARKING
RENT_RESIDENTIAL_LAND
SELL_RESIDENTIAL_LAND
RENT_OFFICE
SELL_OFFICE
RENT_STORE
SELL_STORE
RENT_GASTRONOMY
SELL_GASTRONOMY
RENT_INDUSTRY
SELL_INDUSTRY
RENT_SPECIAL_PURPOSE
SELL_SPECIAL_PURPOSE
RENT_COMMERCIAL_LAND
SELL_COMMERCIAL_LAND
}
enum LISTING_STATUS {
OPEN_FOR_CANDIDATES
OPEN_FOR_APPLICANTS
CONTRACTING_STARTED
CONTRACTING_COMPLETED
MOVE_IN_COMPLETED
IS_INACTIVE
IS_ARCHIVED
}
enum CANDIDATE_SOURCE {
APPLIED_EVERREAL
MANUAL_EVERREAL_CANDIDATE
MANUAL_EVERREAL_SCHEDULED
MANUAL_EVERREAL_APPLICANT
IMMOSCOUT24
WG_GESUCHT
IMMOWELT
IMMONET
IVD24
NWZ
OPENIMMO_GENERIC
EBAY
OFFLINE_CONTRACT
}
input ListingFilter {
from: Date
to: Date
candidateSources: [CANDIDATE_SOURCE]
companyId: String
propertyGroupId: String
propertyId: String
ownerId: String
listingId: String
external: Boolean
fullSearch: String
isArchived: Boolean
isActive: Boolean
internalAdvertiseId: String
availableFrom: Date
externalPropertyId: String
scoringTemplateId: String
propertyCity: String
propertyName: String
propertyStreet: String
listingType: LISTING_TYPE
status: LISTING_STATUS
responsibleFullName: String
unitName: String
unitId: String
externalUnitId: String
unitType: UNIT_TYPE
priceMin: Float
priceMax: Float
roomsMin: Int
roomsMax: Int
surfaceMin: Int
surfaceMax: Int
livingSurfaceMin: Int
livingSurfaceMax: Int
heightMax: Int
heightMin: Int
listingResponsibleUserId: String
projectId: String
candidateEmail: String
candidateIsWinner: Boolean
}
input ListingFilterListPaging {
filter: ListingFilter
paging: GraphPaging
sort: GraphSorting
}
input ListingCountsFilter {
userId: String
companyId: String
}
Usage:
GraphQL
CURL
Javascript
Query:
query listingsQuery(
$from: Date
$to: Date
$companyId: String
$propertyId: String
$propertyGroupId: String
$ownerId: String
$listingId: String
$isArchived: Boolean
$isActive: Boolean
$fullSearch: String
) {
listings(
input: {
paging: { take: 100, skip: 0 }
filter: {
from: $from
to: $to
companyId: $companyId
propertyGroupId: $propertyGroupId
propertyId: $propertyId
ownerId: $ownerId
listingId: $listingId
isArchived: $isArchived
isActive: $isActive
fullSearch: $fullSearch
}
}
) {
id
title
type
isArchived
isActive
companyId
coverPicture {
name
resourceId
resourcePath
size
type
order
isCoverPicture
}
pictures {
name
resourceId
resourcePath
size
type
order
isCoverPicture
}
documents {
name
resourceId
resourcePath
size
type
order
isCoverPicture
}
floorplans {
name
resourceId
resourcePath
size
type
order
isCoverPicture
}
property {
objectId
name
category
subtype
type
ownershipType
fullAddress
}
unit {
id
objectId
name
category
type
subtype
leasingStatusEnum
leasingStatusesEnum
statusesEnum
floorNumber
surface
livingSurface
netFloorSurface
hasMainStorage
}
contractDetails {
currency
rent
totalMonthlyRent
parkingRent
deposit
heatingCostsIncluded
utilityCosts
heatingCosts
petsAllowed
displayAmount
hasCommission
commission
commissionNote
commissionType
}
}
}
Variables:
You can used any variable in ListingFilter to
{
"listingId": "fce90f3a-b8e4-4bc6-b6c0-2539acef5cdc",
"propertyId": "e7cde0a1-9708-4fce-b36e-d8b8bcaa695f",
"isActive": true,
"isArchived": false,
"fullSearch": "Hermannstrasse"
}
Should l be something like this.
curl --location --request POST 'https://acme.everreal.co/api/reporting/graphql' \
--header 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZTdhZmRlOC0xODFjLTQyNzUtYjY1NC1lNmJmZTZiMTZhZWIiLCJzdWIiOiI0MTQ2OWVjMS0yMjkzLTRjMjMtYWVmNy1lZjA4YzBkZTU0ZjEiLCJleHAiOjE2NTU3Mjc2NDEsImlhdCI6MTY1NTcyNDA0MX0.VbA7zl36QrIxRdFVKPluKC0PGrvS_4IFcWUajVQQLfDR6fsXArD8Q83btZ6Fz1UUjloRjFMmfugtIvDIRF1TvQBnDJFyx5568tpDg-H5nSRQ0iQ0fv8mRIGQWdigkXozo2FjHYO1alzU44GVcRx4JxABclexeDjKqeRklr5Gbb-z4fa_jbnMfB4z9mCK0nmy08igMzAB6Zgy0-yHuMpj6aXU-GNL1ti50sDVgNiQRDXUEZN2vor1S9c3sUYA521vBkszvWEXRgM_2ndV8sR8L-Tsma331ojL3PvEm1UNGjVj_yE6RhHIqdwxF7KsqhiUHjFKzgESLSOl3yIUTE10uw' \
--header 'Content-Type: application/json' \
--header 'Cookie: accept-language=en-US' \
--data-raw '{"query":" query listingsQuery(\n $from: Date\n $to: Date\n $companyId: String\n $propertyId: String\n $propertyGroupId: String\n $ownerId: String\n $listingId: String\n $isArchived: Boolean\n $isActive: Boolean\n $fullSearch: String\n ) {\n listings(\n input: {\n paging: { take: 100, skip: 0 }\n filter: {\n from: $from\n to: $to\n companyId: $companyId\n propertyGroupId: $propertyGroupId\n propertyId: $propertyId\n ownerId: $ownerId\n listingId: $listingId\n isArchived: $isArchived\n isActive: $isActive\n fullSearch: $fullSearch\n }\n }\n ) {\n id\n title\n type\n isArchived\n isActive\n companyId\n coverPicture {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n pictures {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n documents {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n floorplans {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n property {\n id\n objectId\n name\n category\n subtype\n type\n ownershipType\n fullAddress\n }\n unit {\n id\n objectId\n name\n category\n type\n subtype\n leasingStatusEnum\n leasingStatusesEnum\n statusesEnum\n floorNumber\n surface\n livingSurface\n netFloorSurface\n hasMainStorage\n }\n contractDetails {\n currency\n rent\n totalMonthlyRent\n parkingRent\n deposit\n heatingCostsIncluded\n utilityCosts\n heatingCosts\n petsAllowed\n displayAmount\n hasCommission\n commission\n commissionNote\n commissionType\n }\n }\n }","variables":{"listingId":"fce90f3a-b8e4-4bc6-b6c0-2539acef5cdc","propertyId":"e7cde0a1-9708-4fce-b36e-d8b8bcaa695f","isActive":true,"isArchived":false,"fullSearch":"Hermannstrasse"}}'
var myHeaders = new Headers();
myHeaders.append("authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2ZTdhZmRlOC0xODFjLTQyNzUtYjY1NC1lNmJmZTZiMTZhZWIiLCJzdWIiOiI0MTQ2OWVjMS0yMjkzLTRjMjMtYWVmNy1lZjA4YzBkZTU0ZjEiLCJleHAiOjE2NTU3Mjc2NDEsImlhdCI6MTY1NTcyNDA0MX0.VbA7zl36QrIxRdFVKPluKC0PGrvS_4IFcWUajVQQLfDR6fsXArD8Q83btZ6Fz1UUjloRjFMmfugtIvDIRF1TvQBnDJFyx5568tpDg-H5nSRQ0iQ0fv8mRIGQWdigkXozo2FjHYO1alzU44GVcRx4JxABclexeDjKqeRklr5Gbb-z4fa_jbnMfB4z9mCK0nmy08igMzAB6Zgy0-yHuMpj6aXU-GNL1ti50sDVgNiQRDXUEZN2vor1S9c3sUYA521vBkszvWEXRgM_2ndV8sR8L-Tsma331ojL3PvEm1UNGjVj_yE6RhHIqdwxF7KsqhiUHjFKzgESLSOl3yIUTE10uw");
myHeaders.append("Content-Type", "application/json");
var graphql = JSON.stringify({
query: " query listingsQuery(\n $from: Date\n $to: Date\n $companyId: String\n $propertyId: String\n $propertyGroupId: String\n $ownerId: String\n $listingId: String\n $isArchived: Boolean\n $isActive: Boolean\n $fullSearch: String\n ) {\n listings(\n input: {\n paging: { take: 100, skip: 0 }\n filter: {\n from: $from\n to: $to\n companyId: $companyId\n propertyGroupId: $propertyGroupId\n propertyId: $propertyId\n ownerId: $ownerId\n listingId: $listingId\n isArchived: $isArchived\n isActive: $isActive\n fullSearch: $fullSearch\n }\n }\n ) {\n id\n title\n type\n isArchived\n isActive\n companyId\n coverPicture {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n pictures {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n documents {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n floorplans {\n name\n resourceId\n resourcePath\n size\n type\n order\n isCoverPicture\n }\n property {\n id\n objectId\n name\n category\n subtype\n type\n ownershipType\n fullAddress\n }\n unit {\n id\n objectId\n name\n category\n type\n subtype\n leasingStatusEnum\n leasingStatusesEnum\n statusesEnum\n floorNumber\n surface\n livingSurface\n netFloorSurface\n hasMainStorage\n }\n contractDetails {\n currency\n rent\n totalMonthlyRent\n parkingRent\n deposit\n heatingCostsIncluded\n utilityCosts\n heatingCosts\n petsAllowed\n displayAmount\n hasCommission\n commission\n commissionNote\n commissionType\n }\n }\n }",
variables: {"listingId":"fce90f3a-b8e4-4bc6-b6c0-2539acef5cdc","propertyId":"e7cde0a1-9708-4fce-b36e-d8b8bcaa695f","isActive":true,"isArchived":false,"fullSearch":"Hermannstrasse"}
})
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: graphql,
redirect: 'follow'
};
fetch("https://acme.everreal.co/api/reporting/graphql", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));

Mutation

Mutations are responsible to update a specific operations like activating, deactivating listing or archiving or unarchiving listing.
type Mutation {
updateListing(listing: ListingInput): Listing
}
Here are details on the capabilities of different mutations
  • updateListing: Is used to perform update on an listing with the help of a listing Id, this will help is performing some basic operations listed below

Schema Definition

input ListingInput {
id: String!
action: LISTING_ACTIONS!
}
enum LISTING_ACTIONS {
ACTIVATE_LISTING
DEACTIVATE_LISTING
ARCHIVE_LISTING
UNARCHIVE_LISTING
}
Below we are providing a full example how to update listing, all this information is not required, only the ones that was using ! notation previously.
graphQL
cURL
JavaScript
mutation {
updateListing(
listing: {
id: "42b751a6-3eb6-4e48-a0d1-8e9959151672"
action: ACTIVATE_LISTING
}
) {
id
}
}
curl --location --request POST 'http://<subdomain>.everreal.co/api/reporting/graphql' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9....' \
--header 'Content-Type: application/json' \
--header 'Cookie: accept-language=de-DE' \
--data-raw '{"query":"\r\nmutation {\r\n updateListing(\r\n listing: {\r\n id: \"42b751a6-3eb6-4e48-a0d1-8e9959151672\"\r\n action: ACTIVATE_LISTING\r\n }\r\n ) {\r\n id\r\n }\r\n}","variables":{}}'
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9....");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Cookie", "accept-language=de-DE");
var graphql = JSON.stringify({
query: "\r\nmutation {\r\n updateListing(\r\n listing: {\r\n id: \"42b751a6-3eb6-4e48-a0d1-8e9959151670\"\r\n action: ACTIVATE_LISTING\r\n }\r\n ) {\r\n id\r\n }\r\n}",
variables: {}
})
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: graphql,
redirect: 'follow'
};
fetch("http://<subdomain>.everreal.co/api/reporting/graphql", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));