Developers

Pando API

Connect your own software to a Pando agency: read and create contacts, send leads into the agency's inbox, create and update properties with their photos, and publish them to the portals. Every request acts for one agency, the one that created the API key.

Base URL
https://www.pando.immo/api/v1
Authentication
Authorization: Bearer pando_sk_...
Format
JSON in, JSON out
Limit
120 requests per minute per key

1. Get a key

  1. Log in to Pando as an owner or admin of the agency.
  2. Go to Instellingen > API and create a key.
  3. Tick only the scopes you need. The key is shown once: store it as a secret, never in a browser or an app.
  4. Lost it, or a colleague left? Revoke it there and create a new one.
  • contacts:readList contacts.
  • contacts:writeCreate contacts.
  • properties:readList properties.
  • properties:writeCreate and change properties, add photos.
  • publications:readRead per portal where a property is published.
  • publications:writePublish to portals and take offline.
  • leads:readList leads.
  • leads:writeSend leads.

2. Make a request

curl https://www.pando.immo/api/v1/properties?status=active \
  -H "Authorization: Bearer pando_sk_..."

Lists return { "data": [...], "pagination": { "limit", "offset", "total" } }. Page with limit (1 to 200, default 50) and offset. Errors return { "error": "code" } with the HTTP status below.

  • 400invalid_jsonThe body is not valid JSON.
  • 401missing_bearer_tokenNo Authorization: Bearer header.
  • 401invalid_tokenUnknown or revoked key, or the agency is suspended.
  • 403insufficient_scopeThe key lacks the scope; the body names it in "required".
  • 422invalid_payloadThe body does not match; "details" says which field.
  • 429rate_limitedMore than 120 requests in a minute with one key.
  • 500query_failed / create_failedSomething went wrong on our side. Retry later.

One more limit sits in front of the API: at most 60 requests per minute from one IP address. Above that, requests from that address are refused for a minute, and that answer is not JSON. A first sync of many listings (each with its photos) should be spread over time.

3. Endpoints

GET/api/v1/contactsscope contacts:read

List contacts

The agency's contacts, newest first.

Query parameters

  • limitintegerdefault 50

    Rows per page.

  • offsetintegerdefault 0

    Rows to skip.

Example

curl "https://www.pando.immo/api/v1/contacts?limit=20" \
  -H "Authorization: Bearer pando_sk_..."
Response 200 - data: list of 18 fields
  • iduuid

    Pando id of the contact.

  • typestring

    Role of the contact.

    seller · buyer · renter · landlord · syndic · notary · notary_buyer · notary_seller · other

  • first_namestring | null

    First name.

  • last_namestring | null

    Last name.

  • company_namestring | null

    Company name, for a company contact.

  • emailemail | null

    E-mail address.

  • phonestring | null

    Phone number.

  • mobilestring | null

    Mobile number.

  • streetstring | null

    Street and number.

  • postal_codestring | null

    Postal code.

  • citystring | null

    City.

  • languagestring

    Language to address the contact in.

    nl · fr · en

  • sourcestring | null

    Where the contact came from.

  • tagsstring[]

    Free tags.

  • gdpr_consent_atdate-time | null

    When the contact agreed to be contacted about their own request. Never set through the API.

  • marketing_consent_atdate-time | null

    When the contact agreed to receive marketing. Never set through the API.

  • created_atdate-time

    When the record was created.

  • updated_atdate-time

    When the record last changed.

POST/api/v1/contactsscope contacts:write

Create a contact

Adds a contact to the agency. Consent is never set through the API: a contact created here is not mailed until the agency records a real opt-in.

Body (JSON)

Send at least one of first_name, last_name, company_name or email.

  • typestringrequired

    Role of the contact.

    seller · buyer · renter · landlord · syndic · notary · notary_buyer · notary_seller · other

  • first_namestring

    First name.

  • last_namestring

    Last name.

  • company_namestring

    Company name, for a company contact.

  • emailemail

    E-mail address.

  • phonestring

    Phone number.

  • mobilestring

    Mobile number.

  • streetstring

    Street and number.

  • postal_codestring

    Postal code.

  • citystring

    City.

  • languagestringdefault nl

    Language to address the contact in.

    nl · fr · en

  • sourcestringdefault api

    Where the contact came from.

  • notesstring

    Free notes.

  • tagsstring[]

    Free tags.

Example

curl -X POST "https://www.pando.immo/api/v1/contacts" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "type": "seller",
    "first_name": "An",
    "last_name": "Peeters",
    "email": "an.peeters@example.com",
    "language": "nl"
  }'
Response 201 - data: 18 fields
  • iduuid

    Pando id of the contact.

  • typestring

    Role of the contact.

    seller · buyer · renter · landlord · syndic · notary · notary_buyer · notary_seller · other

  • first_namestring | null

    First name.

  • last_namestring | null

    Last name.

  • company_namestring | null

    Company name, for a company contact.

  • emailemail | null

    E-mail address.

  • phonestring | null

    Phone number.

  • mobilestring | null

    Mobile number.

  • streetstring | null

    Street and number.

  • postal_codestring | null

    Postal code.

  • citystring | null

    City.

  • languagestring

    Language to address the contact in.

    nl · fr · en

  • sourcestring | null

    Where the contact came from.

  • tagsstring[]

    Free tags.

  • gdpr_consent_atdate-time | null

    When the contact agreed to be contacted about their own request. Never set through the API.

  • marketing_consent_atdate-time | null

    When the contact agreed to receive marketing. Never set through the API.

  • created_atdate-time

    When the record was created.

  • updated_atdate-time

    When the record last changed.

GET/api/v1/propertiesscope properties:read

List properties

The agency's properties, newest first. Fees and commission are never part of this API.

Query parameters

  • limitintegerdefault 50

    Rows per page.

  • offsetintegerdefault 0

    Rows to skip.

  • statusstring

    Only properties with this status.

    draft · active · under_offer · sold · rented · withdrawn

Example

curl "https://www.pando.immo/api/v1/properties?status=active" \
  -H "Authorization: Bearer pando_sk_..."
Response 200 - data: list of 18 fields
  • iduuid

    Pando id of the property.

  • referencestring | null

    The agency's own reference, e.g. CI-2026-004. Pando fills it in.

  • external_refstring | null

    Your own id for this listing, as you sent it. Null for properties made in Pando.

  • typestring

    Kind of property.

    apartment · studio · house · terraced_house · semi_detached · detached_villa · mansion · building_land · land · commercial · garage · other

  • transaction_typestring

    For sale or for rent.

    sale · rent

  • statusstring

    Where the property is in its life cycle.

    draft · active · under_offer · sold · rented · withdrawn

  • streetstring

    Street.

  • numberstring | null

    House number (and box).

  • postal_codestring

    Postal code.

  • citystring

    City.

  • pricenumber | null

    Asking price in EUR, or the monthly rent for a rental.

  • bedroomsinteger | null

    Number of bedrooms.

  • bathroomsinteger | null

    Number of bathrooms.

  • surface_livingnumber | null

    Living area in m².

  • epc_labelstring | null

    EPC label.

    A+ · A · B · C · D · E · F · G

  • featured_image_urlstring | null

    URL of the main photo.

  • created_atdate-time

    When the record was created.

  • updated_atdate-time

    When the record last changed.

GET/api/v1/leadsscope leads:read

List leads

The agency's Leads inbox, newest first. To poll for new leads (for example from Zapier or Make), pass the time of your last check as `since` and skip ids you already have.

Query parameters

  • limitintegerdefault 50

    Rows per page.

  • offsetintegerdefault 0

    Rows to skip.

  • sincedate-time

    Only leads created at or after this moment (ISO 8601).

  • lead_typestring

    Only sellers or only buyers.

    seller · buyer

Example

curl "https://www.pando.immo/api/v1/leads?since=2026-09-29T08:00:00Z&lead_type=seller" \
  -H "Authorization: Bearer pando_sk_..."
Response 200 - data: list of 18 fields
  • iduuid

    Pando id of the lead.

  • sourcestring

    Where the lead came from.

  • lead_typestring

    seller = someone who wants to sell or rent out; buyer = someone looking to buy or rent.

    seller · buyer

  • statusstring | null

    Stage in the agency's Leads inbox.

    new · contacted · appointment · converted · rejected

  • namestring | null

    Name of the person.

  • emailemail | null

    E-mail address.

  • phonestring | null

    Phone number.

  • intereststring | null

    What the person asked for.

  • property_iduuid | null

    The agency's property this lead is about, when it could be linked.

  • property_addressstring | null

    Address the lead is about.

  • postal_codestring | null

    Postal code.

  • notesstring | null

    Free notes.

  • external_refstring | null

    Your own id for this lead, as you sent it.

  • contact_iduuid | null

    The contact this lead became, once the agent converted it.

  • convertedboolean

    True once the lead is linked to a contact.

  • received_atdate-time | null

    When the lead arrived.

  • created_atdate-time

    When the record was created.

  • updated_atdate-time

    When the record last changed.

POST/api/v1/leadsscope leads:write

Send a lead

Puts a lead in the agency's Leads inbox (status new), from any source: a website form, Zapier or Make, your own software. Send your own id as `external_ref`: sending the same external_ref again from the same source updates that lead instead of creating a second one. Empty strings count as "not filled in". An invalid e-mail address does not reject the lead: it is dropped and kept in the notes.

Body (JSON)

Send at least one of name, email or phone.

  • lead_typestringdefault buyer

    seller = wants to sell or rent out; buyer = looking to buy or rent.

    seller · buyer

  • sourcestringdefault api

    Name of your channel, shown to the agent.

  • external_refstring

    Your own id for this lead. Makes re-sending safe.

  • namestring

    Name of the person.

  • emailstring

    E-mail address.

  • phonestring

    Phone number.

  • property_iduuid

    Id of one of the agency's properties (from GET /properties). A property of another agency is never linked; the lead still arrives.

  • property_addressstring

    Address the lead is about. Filled in by Pando when property_id is linked.

  • postal_codestring

    Postal code.

  • intereststring

    What the person asked for.

  • notesstring

    Free notes.

Example

curl -X POST "https://www.pando.immo/api/v1/leads" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "lead_type": "seller",
    "source": "my-website",
    "external_ref": "form-8841",
    "name": "Jan Janssens",
    "email": "jan.janssens@example.com",
    "phone": "+32 470 00 00 00",
    "property_address": "Kerkstraat 12, 9000 Gent",
    "interest": "Wants a valuation"
  }'
Response 201: 3 fields
  • okboolean

    Always true on success.

  • iduuid

    Pando id of the lead.

  • createdboolean

    false when an existing lead with the same source and external_ref was updated.

POST/api/v1/propertiesscope properties:write

Create or update a property

Adds a property to the agency. Send your own id as `external_ref`: sending the same external_ref again UPDATES that property with the fields you send (fields you leave out stay as they are), so re-sending is safe. Answers 201 with created:true for a new property, 200 with created:false for an update. Empty strings count as "not filled in". Unknown fields are refused (422) so a typo never goes unnoticed. The property belongs to the colleague who made the API key. Publishing is a separate call.

Body (JSON)

  • typestringrequired

    Kind of property.

    apartment · studio · house · terraced_house · semi_detached · detached_villa · mansion · building_land · land · commercial · garage · other

  • transaction_typestringrequired

    For sale or for rent.

    sale · rent

  • statusstringdefault draft

    Starting status of a NEW property: draft (not public) or active (for sale or rent). Ignored when the external_ref already exists: change a status with PATCH.

    draft · active

  • streetstringrequired

    Street.

  • postal_codestringrequired

    Postal code.

  • citystringrequired

    City.

  • external_refstring | null

    Your own id for this listing. Sending a property with an external_ref this agency already has UPDATES that property instead of creating a second one.

  • numberstring | null

    House number. Put a box number in `bus`, not here.

  • busstring | null

    Box number (bus / boîte).

  • latitudenumber | null

    WGS84 latitude. Several portals need coordinates.

  • longitudenumber | null

    WGS84 longitude.

  • pricenumber | null

    Asking price in EUR, or the monthly rent for a rental.

  • price_on_requestboolean

    Hide the price where a portal allows it. The price itself is still sent.

  • hide_addressboolean

    Hide the street and number where a portal allows it.

  • sale_methodstring

    How it is sold. With online or public_auction, `price` is the starting price. Ignored for a rental.

    private · online · public_auction

  • titlestring | null

    Short advert title.

  • description_nlstring | null

    Advert text in Dutch.

  • description_frstring | null

    Advert text in French.

  • description_enstring | null

    Advert text in English.

  • surface_livinginteger | null

    Living area in m².

  • surface_plotinteger | null

    Plot area in m².

  • garden_surfacenumber | null

    Garden area in m².

  • terrace_surfacenumber | null

    Terrace area in m².

  • bedroomsinteger | null

    Number of bedrooms.

  • bathroomsinteger | null

    Number of bathrooms.

  • toilet_countinteger | null

    Number of toilets.

  • parkinginteger | null

    Number of parking spaces.

  • floorinteger | null

    Floor of an apartment (0 = ground floor). Immoweb needs it for an apartment.

  • floor_countinteger | null

    Number of floors of the building.

  • facade_countinteger | null

    Number of facades (2, 3 or 4).

  • construction_yearinteger | null

    Year of construction.

  • building_conditionstring | null

    State of the building.

    new · as_new · renovated · good · to_refresh · to_renovate

  • epc_labelstring | null

    EPC label.

    A+ · A · B · C · D · E · F · G

  • epc_valueinteger | null

    EPC score in kWh/m² per year.

  • epc_codestring | null

    EPC certificate number.

  • available_from_typestring | null

    When it is free: immediately (onmiddellijk), at the deed (bij_akte), to be agreed (overeen_te_komen) or on a date (specifieke_datum).

    onmiddellijk · bij_akte · overeen_te_komen · specifieke_datum

  • available_from_datedate | null

    The date, with available_from_type specifieke_datum (YYYY-MM-DD).

  • virtual_tour_urluri | null

    https link to a virtual tour (Matterport and the like).

  • video_urluri | null

    https link to a YouTube or Vimeo video.

Example

curl -X POST "https://www.pando.immo/api/v1/properties" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "external_ref": "zwv-10482",
    "type": "house",
    "transaction_type": "sale",
    "status": "active",
    "street": "Kerkstraat",
    "number": "12",
    "postal_code": "8400",
    "city": "Oostende",
    "latitude": 51.2273,
    "longitude": 2.9199,
    "price": 349000,
    "bedrooms": 3,
    "surface_living": 165,
    "epc_label": "C",
    "description_nl": "Instapklare gezinswoning met tuin, vlak bij het centrum."
  }'
Response 201 (200 when it already existed) - created, data: 18 fields
  • iduuid

    Pando id of the property.

  • referencestring | null

    The agency's own reference, e.g. CI-2026-004. Pando fills it in.

  • external_refstring | null

    Your own id for this listing, as you sent it. Null for properties made in Pando.

  • typestring

    Kind of property.

    apartment · studio · house · terraced_house · semi_detached · detached_villa · mansion · building_land · land · commercial · garage · other

  • transaction_typestring

    For sale or for rent.

    sale · rent

  • statusstring

    Where the property is in its life cycle.

    draft · active · under_offer · sold · rented · withdrawn

  • streetstring

    Street.

  • numberstring | null

    House number (and box).

  • postal_codestring

    Postal code.

  • citystring

    City.

  • pricenumber | null

    Asking price in EUR, or the monthly rent for a rental.

  • bedroomsinteger | null

    Number of bedrooms.

  • bathroomsinteger | null

    Number of bathrooms.

  • surface_livingnumber | null

    Living area in m².

  • epc_labelstring | null

    EPC label.

    A+ · A · B · C · D · E · F · G

  • featured_image_urlstring | null

    URL of the main photo.

  • created_atdate-time

    When the record was created.

  • updated_atdate-time

    When the record last changed.

PATCH/api/v1/properties/{id}scope properties:write

Change a property

Changes only the fields you send. null clears a field. A status change works as in Pando: sold or rented records the sale date and tells the portals the property is no longer available; draft or withdrawn takes it offline on the portals it is on. Other changes are NOT sent to the portals on their own: call publish again to update the adverts.

Path parameters

  • iduuidrequired

    Pando id of the property (from POST /properties or GET /properties).

Body (JSON)

Send at least one field.

  • typestring

    Kind of property.

    apartment · studio · house · terraced_house · semi_detached · detached_villa · mansion · building_land · land · commercial · garage · other

  • transaction_typestring

    For sale or for rent.

    sale · rent

  • statusstring

    New status. sold or rented records the sale date and tells the portals it is no longer available; draft or withdrawn takes it offline on the portals it is on.

    draft · active · under_offer · sold · rented · withdrawn

  • streetstring

    Street.

  • postal_codestring

    Postal code.

  • citystring

    City.

  • external_refstring | null

    Your own id for this listing. Sending a property with an external_ref this agency already has UPDATES that property instead of creating a second one.

  • numberstring | null

    House number. Put a box number in `bus`, not here.

  • busstring | null

    Box number (bus / boîte).

  • latitudenumber | null

    WGS84 latitude. Several portals need coordinates.

  • longitudenumber | null

    WGS84 longitude.

  • pricenumber | null

    Asking price in EUR, or the monthly rent for a rental.

  • price_on_requestboolean

    Hide the price where a portal allows it. The price itself is still sent.

  • hide_addressboolean

    Hide the street and number where a portal allows it.

  • sale_methodstring

    How it is sold. With online or public_auction, `price` is the starting price. Ignored for a rental.

    private · online · public_auction

  • titlestring | null

    Short advert title.

  • description_nlstring | null

    Advert text in Dutch.

  • description_frstring | null

    Advert text in French.

  • description_enstring | null

    Advert text in English.

  • surface_livinginteger | null

    Living area in m².

  • surface_plotinteger | null

    Plot area in m².

  • garden_surfacenumber | null

    Garden area in m².

  • terrace_surfacenumber | null

    Terrace area in m².

  • bedroomsinteger | null

    Number of bedrooms.

  • bathroomsinteger | null

    Number of bathrooms.

  • toilet_countinteger | null

    Number of toilets.

  • parkinginteger | null

    Number of parking spaces.

  • floorinteger | null

    Floor of an apartment (0 = ground floor). Immoweb needs it for an apartment.

  • floor_countinteger | null

    Number of floors of the building.

  • facade_countinteger | null

    Number of facades (2, 3 or 4).

  • construction_yearinteger | null

    Year of construction.

  • building_conditionstring | null

    State of the building.

    new · as_new · renovated · good · to_refresh · to_renovate

  • epc_labelstring | null

    EPC label.

    A+ · A · B · C · D · E · F · G

  • epc_valueinteger | null

    EPC score in kWh/m² per year.

  • epc_codestring | null

    EPC certificate number.

  • available_from_typestring | null

    When it is free: immediately (onmiddellijk), at the deed (bij_akte), to be agreed (overeen_te_komen) or on a date (specifieke_datum).

    onmiddellijk · bij_akte · overeen_te_komen · specifieke_datum

  • available_from_datedate | null

    The date, with available_from_type specifieke_datum (YYYY-MM-DD).

  • virtual_tour_urluri | null

    https link to a virtual tour (Matterport and the like).

  • video_urluri | null

    https link to a YouTube or Vimeo video.

Example

curl -X PATCH "https://www.pando.immo/api/v1/properties/{id}" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "price": 339000,
    "status": "under_offer"
  }'
Response 200 - data: 18 fields
  • iduuid

    Pando id of the property.

  • referencestring | null

    The agency's own reference, e.g. CI-2026-004. Pando fills it in.

  • external_refstring | null

    Your own id for this listing, as you sent it. Null for properties made in Pando.

  • typestring

    Kind of property.

    apartment · studio · house · terraced_house · semi_detached · detached_villa · mansion · building_land · land · commercial · garage · other

  • transaction_typestring

    For sale or for rent.

    sale · rent

  • statusstring

    Where the property is in its life cycle.

    draft · active · under_offer · sold · rented · withdrawn

  • streetstring

    Street.

  • numberstring | null

    House number (and box).

  • postal_codestring

    Postal code.

  • citystring

    City.

  • pricenumber | null

    Asking price in EUR, or the monthly rent for a rental.

  • bedroomsinteger | null

    Number of bedrooms.

  • bathroomsinteger | null

    Number of bathrooms.

  • surface_livingnumber | null

    Living area in m².

  • epc_labelstring | null

    EPC label.

    A+ · A · B · C · D · E · F · G

  • featured_image_urlstring | null

    URL of the main photo.

  • created_atdate-time

    When the record was created.

  • updated_atdate-time

    When the record last changed.

POST/api/v1/properties/{id}/photosscope properties:write

Add a photo by URL

Pando downloads the photo, keeps its own copy and adds it at the end of the gallery. The URL must be https, on a public address, and answer directly (no redirects) with a JPEG, PNG or WebP of at most 12 MB; the type is checked on the file itself. The first photo becomes the cover, or send featured:true. Sending the same url again for the same property returns the existing photo (200, created:false). At most 60 photos per property.

Path parameters

  • iduuidrequired

    Pando id of the property (from POST /properties or GET /properties).

Body (JSON)

  • urlurirequired

    https URL of the photo.

  • captionstring | null

    Caption.

  • featuredboolean

    Make this the cover photo.

Example

curl -X POST "https://www.pando.immo/api/v1/properties/{id}/photos" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://images.example.com/listings/10482/front.jpg"
  }'
Response 201 (200 when it already existed) - created, data: 7 fields
  • iduuid

    Pando id of the photo.

  • urluri

    Pando's own copy of the photo. Public and stable.

  • source_urluri | null

    The URL you sent.

  • captionstring | null

    Caption.

  • order_indexinteger | null

    Position in the gallery, 0 first.

  • is_featuredboolean | null

    True for the cover photo.

  • created_atdate-time | null

    When the photo was added.

POST/api/v1/properties/{id}/publishscope publications:write

Publish to portals

Publishes the property to the portals you list, through the agency's own portal accounts. One result per portal. A portal refuses up front when the listing misses something it needs (`error`, nothing sent), also in the sandbox. A portal the agency has NOT connected is simulated: nothing is sent and the result says simulated:true. That is the sandbox: build and test against it with no risk. Pull portals (immomaps, luxevastgoed, myfuturehome, tweedehands) must be activated by the agency first. Going live on a portal needs the agency's own contract with that portal. Publishing again updates the advert.

Path parameters

  • iduuidrequired

    Pando id of the property (from POST /properties or GET /properties).

Body (JSON)

  • portalsstring[]required

    One or more of: immoweb, immovlan, immoscoop, spotto, immomaps, luxevastgoed, myfuturehome, tweedehands.

Example

curl -X POST "https://www.pando.immo/api/v1/properties/{id}/publish" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "portals": [
      "immoweb",
      "immovlan"
    ]
  }'
Response 200 - data: list of 10 fields
  • portalstring

    The portal.

    immoweb · immovlan · immoscoop · spotto · immomaps · luxevastgoed · myfuturehome · tweedehands

  • acceptedboolean

    True when the publication started. False when it was refused before anything was sent; `error` says why.

  • errorstring | null

    Why it was refused: portal_not_connected (a pull portal the agency has not activated), a portal rule such as missing_price, missing_description, missing_coordinates, immoweb_missing_floor or immoscoop_missing_house_number, or start_failed.

  • statusstring | null

    Where the publication stands.

    pending · published · failed · unpublished

  • simulatedboolean | null

    True when the agency has not connected this portal: nothing was sent. This is the sandbox.

  • external_idstring | null

    The portal's own id for the advert, or a SIM id for a simulated publication.

  • portal_urlstring | null

    Link to the live advert, when the portal gives one. Never for a simulated publication or a pull portal.

  • published_atdate-time | null

    When the last publication succeeded.

  • unpublished_atdate-time | null

    When it was taken offline.

  • error_messagestring | null

    Why the last attempt failed (a code).

POST/api/v1/properties/{id}/unpublishscope publications:write

Take offline on one portal

Takes the property offline on one portal. It stays in Pando and on the other portals; publishing again brings the same advert back. A simulated publication is just marked offline. Some portals accept the request and finish it later: then pending is true.

Path parameters

  • iduuidrequired

    Pando id of the property (from POST /properties or GET /properties).

Body (JSON)

  • portalstringrequired

    The portal.

    immoweb · immovlan · immoscoop · spotto · immomaps · luxevastgoed · myfuturehome · tweedehands

Example

curl -X POST "https://www.pando.immo/api/v1/properties/{id}/unpublish" \
  -H "Authorization: Bearer pando_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "portal": "immoweb"
  }'
Response 200 - data: 9 fields
  • portalstring

    The portal.

    immoweb · immovlan · immoscoop · spotto · immomaps · luxevastgoed · myfuturehome · tweedehands

  • statusstring | null

    Where the publication stands.

    pending · published · failed · unpublished

  • simulatedboolean | null

    True when the agency has not connected this portal: nothing was sent. This is the sandbox.

  • external_idstring | null

    The portal's own id for the advert, or a SIM id for a simulated publication.

  • portal_urlstring | null

    Link to the live advert, when the portal gives one. Never for a simulated publication or a pull portal.

  • published_atdate-time | null

    When the last publication succeeded.

  • unpublished_atdate-time | null

    When it was taken offline.

  • error_messagestring | null

    Why the last attempt failed (a code).

  • pendingboolean

    True when the portal accepted the request but finishes it later (Immovlan, Spotto, sometimes Immoweb).

GET/api/v1/properties/{id}/publicationsscope publications:read

Publication status

Per portal where the property stands, whether it was only simulated, and the link to the advert when the portal gave one.

Path parameters

  • iduuidrequired

    Pando id of the property (from POST /properties or GET /properties).

Example

curl "https://www.pando.immo/api/v1/properties/{id}/publications" \
  -H "Authorization: Bearer pando_sk_..."
Response 200 - data: list of 8 fields
  • portalstring

    The portal.

    immoweb · immovlan · immoscoop · spotto · immomaps · luxevastgoed · myfuturehome · tweedehands

  • statusstring | null

    Where the publication stands.

    pending · published · failed · unpublished

  • simulatedboolean | null

    True when the agency has not connected this portal: nothing was sent. This is the sandbox.

  • external_idstring | null

    The portal's own id for the advert, or a SIM id for a simulated publication.

  • portal_urlstring | null

    Link to the live advert, when the portal gives one. Never for a simulated publication or a pull portal.

  • published_atdate-time | null

    When the last publication succeeded.

  • unpublished_atdate-time | null

    When it was taken offline.

  • error_messagestring | null

    Why the last attempt failed (a code).

Publishing and the sandbox

Pando publishes a listing through the agency's own portal accounts. Each portal (Immoweb, Immovlan, ImmoScoop and others) needs its own contract with the agency; Pando does the technical side, not the contract.

Sandbox. Until the agency connects a portal in Pando, publishing to it is simulated: nothing is sent, and the result says simulated: true. What the portal would refuse is still checked and returned, so you can build and test the whole flow (create, photos, publish, status, take offline) without an advert going live.

A typical flow: POST /properties with your own external_ref, a POST /properties/{id}/photos per photo, POST /properties/{id}/publish, then read GET /properties/{id}/publications. Changed the listing? Send it again and publish again. Sold? PATCH the status. The API does not start Pando's automations (such as mails to matching buyers).

Questions

Mail info@pando.immo.