Concepts

External ID

Use your CRM IDs instead of Rentix internal IDs

External ID is the recommended approach for integration. You don't need to store Rentix IDs in your database. Use object IDs from your CRM — the API will find the corresponding records automatically.

The Problem Without External ID

A typical integration without external ID requires an additional mapping table:

Your CRM                    Mapping Table             Rentix
┌─────────────┐             ┌──────────────────┐      ┌─────────────┐
│ ID: APT-001 │ ──────────► │ APT-001 → 42     │ ───► │ ID: 42      │
│ ID: APT-002 │             │ APT-002 → 43     │      │ ID: 43      │
└─────────────┘             └──────────────────┘      └─────────────┘

For each update you need to:

  1. Find the mapping in your database
  2. Get the Rentix ID
  3. Send the request with that ID

The Solution With External ID

With external ID, no mapping is needed — the API handles it:

Your CRM                                              Rentix
┌─────────────┐                                       ┌─────────────────────┐
│ ID: APT-001 │ ───── externalId: "APT-001" ────────► │ ID: 42              │
│ ID: APT-002 │                                       │ externalId: APT-001 │
└─────────────┘                                       └─────────────────────┘

When updating:

  1. Send a request with externalId: "APT-001"
  2. The API finds listing #42 automatically

How to Use

On Creation

Pass externalId — your ID from the CRM:

{
  "externalId": "APT-001",
  "announcementType": "rent",
  "propertyType": "residential",
  "propertySecondaryType": "apartment",
  "announcementValue": 500
}

On Update

Same externalId — the API finds the existing listing:

{
  "externalId": "APT-001",
  "announcementValue": 600
}

On Retrieval

Use the endpoint with /external/:

// By external ID
const response = await fetch(
  'https://crm.rentix.md/api/v1/listings/external/APT-001',
  { headers: { 'Authorization': 'ApiKey YOUR_API_KEY' } }
);

const listing = await response.json();
console.log(listing.id);         // 42 (internal ID)
console.log(listing.externalId); // "APT-001" (your ID)

Usage Rules

RuleDescription
Maximum length255 characters
Allowed charactersLetters, numbers, hyphens, underscores
UniquenessWithin agency and resource type
One externalId can belong to a listing, and the same ID can belong to a media file. There won't be a conflict because they're different resource types.

Supported Resources

External ID works for all main resources:

ResourceExample Endpoint
ListingsGET /listings/external/{externalId}
UsersGET /users/external/{externalId}
MediaGET /media/external/{externalId}

Linking to Existing Objects

If an object was created without externalId, you can link it later:

// Link external ID to listing #42
await fetch('https://crm.rentix.md/api/v1/listings/42/link', {
  method: 'POST',
  headers: {
    'Authorization': 'ApiKey YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ externalId: 'APT-001' })
});

To unlink an external ID:

curl -X DELETE https://crm.rentix.md/api/v1/listings/42/link \
  -H "Authorization: ApiKey YOUR_API_KEY"

Common Errors

ErrorCauseSolution
External ID already linkedID is already used by another objectUse a unique ID
Cannot provide both id and externalIdBoth parameters were passedUse only one
Copyright © 2026