# Resales import

> Copy your agency's own Resales Online listings into Fondaro as your listings, with a dry run first.

The Resales import copies your agency's own Resales Online listings into Fondaro, where they become your listings: on your website, in brochures, on portal feeds and on the Fondaro network. It runs when you ask for it, previews first, and never deletes anything.

## Set it up

1. [Connect Resales Online](https://www.fondaro.com/docs/api/resales-online.md#set-it-up).
2. In Resales Online, set up a spare API filter that returns only your own properties (Properties › Feed Out › API Filters, **Only own properties**, no location or price limits), and save it with medium images.
3. In Fondaro, enter that filter's alias as the **Own-listings filter alias** (`p_own_filterid`). It must differ from the browse filter.
4. Run a dry run, check the counts, then import.

The routes below take a signed-in session with an active organization (`Authorization: Bearer <session token>`); a property API key is refused. Importing needs an admin.

## Check the import

### `GET /resales-online/import/own-listings/status`

```bash
curl https://api.fondaro.com/resales-online/import/own-listings/status \
  -H "Authorization: Bearer $SESSION_TOKEN"
```

```json
{
  "configured": true,
  "lastRun": {
    "completedAt": "2026-10-01T16:15:42.000Z",
    "counts": { "total": 12, "created": 2, "updated": 7, "skipped": 3, "errors": 0 }
  },
  "counts": { "imported": 12, "active": 10, "inactive": 1 }
}
```

| Field | Meaning |
|---|---|
| `configured` | The Contact ID, API key and own-listings filter are all saved |
| `lastRun` | The last real import (dry runs never replace it); `null` before the first |
| `counts.imported` | Your listings that came from Resales Online, in any status |
| `counts.active`, `counts.inactive` | Of those, how many are active and inactive |

## Run an import

### `POST /resales-online/import/own-listings`

| Field | Type | Meaning |
|---|---|---|
| `dryRun` | boolean | `true` to preview without writing. Defaults to `false`, so send `true` explicitly for a preview |

```bash
curl -X POST https://api.fondaro.com/resales-online/import/own-listings \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"dryRun": true}'
```

```json
{
  "dryRun": true,
  "counts": { "total": 12, "created": 2, "updated": 7, "skipped": 3, "errors": 0 },
  "errors": []
}
```

`created` are new listings, `updated` are listings with at least one changed field, and `skipped` are unchanged listings or repeated references. Each problem adds an item to `errors`, for example `{ "externalRef": "VIVI-1042", "message": "Resales reference exceeds 64 characters" }`. A run with errors is a partial success: the other listings are still written.

A real run (`"dryRun": false`) returns the same shape and:

- creates new listings as `active` sale listings with automatic renewal on;
- updates the imported fields of listings it created before, matched by their Resales reference;
- never changes the assigned agent, your commission, the lead group, or a status you changed in Fondaro;
- never deactivates or deletes a listing that is missing from Resales Online;
- records an `imported` event in each listing's history.

There is no scheduled run. Run it again whenever you want Fondaro to catch up.

## Errors

Every check happens before any listing is written.

| Status | When |
|---|---|
| `400` | The own-listings filter is not set up, or it returned more than 50 properties (it is probably the shared feed, not your own listings) |
| `403` | Not an admin |
| `502` | Resales Online did not return the complete list; nothing was written |

The own-listings filter alias cannot be saved with the same value as the browse filter alias.

Source: https://www.fondaro.com/docs/api/resales-own-listings-import
