RentVine Integration Guide
Metro2 currently supports a direct RentVine pull connector and a legacy push ingest endpoint. This guide reflects the code that exists today, including what the sync connector already maps and what remains scaffolding.
1. Current Integration Paths
Sync Connector (Recommended)
POST /api/v1/integrations/rentvine/sync
- • Pulls directly from RentVine using stored API credentials
- • Fetches leases, tenant contacts, lease detail, and transaction entries
- • Builds Metro 2 base records from RentVine lease and balance data
- • Supports dry runs and stores raw API snapshots
- • Can attach externally managed SSNs by RentVine contact ID
Legacy Ingest Endpoint
POST /api/v1/integrations/rentvine/ingest
- • Pushes pre-shaped tenant, lease, and payment JSON into Metro2
- • Useful if another service already normalizes RentVine data
- • Supports partial success and optional callbacks
- • Still available, but separate from the sync connector
2. Sync Connector
The current connector authenticates to RentVine with HTTP Basic Auth against an account-specific base URL:
https://{account_code}.rentvine.com/api/managerPrerequisites
- 1. A Metro2 API key
- 2. A RentVine account code, API key, and API secret
- 3. An active `integration_connections` record for `rentvine`
- 4. Optional external consumer identifiers keyed by RentVine `contactID`
Trigger a Sync
curl -X POST https://metro2.switchlabs.dev/api/v1/integrations/rentvine/sync \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_metro2_api_key" \
-d '{ "dry_run": true }'Response Shape
{
"sync_batch_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"total": 42,
"accepted": 40,
"rejected": 2,
"errors": [
{
"leaseID": 9003,
"contactID": 67890,
"message": "surname: Surname is required"
}
],
"dry_run": true
}Current behavior: the sync endpoint is available today as an on-demand pull. This guide documents that current API surface rather than any future scheduling or orchestration around it.
3. RentVine Endpoints Used Today
| Endpoint | Current Use |
|---|---|
| GET /leases/export | Base lease data, balances, unpaid charges, property, unit, and tenant references |
| GET /tenants/search | Contact records including name, phone, and date of birth |
| GET /leases/{leaseID} | Closed-lease detail such as closedDate and forwarding address fields |
| GET /accounting/transactions/entries/search | Transaction-entry snapshots fetched during sync and stored for downstream enrichment |
Public docs checked on March 12, 2026: docs.rentvine.com
4. Current Mapping Behavior
| Metro 2 Field | Current Source / Behavior |
|---|---|
| Account Number | RV-{leaseID}-{contactID} |
| Date Opened | lease.startDate from GET /leases/export |
| Date Closed | lease.closedDate from GET /leases/{leaseID} when the lease is closed |
| Current Balance | balances.unpaidTotalAmount |
| Amount Past Due | balances.pastDueTotalAmount |
| Scheduled Payment / Highest Credit | unit.rent |
| Account Type / Terms / ECOA | Current sync transformer uses a fixed rental mapping:portfolio_type = O, account_type = 29, terms_frequency = M, terms_duration = 001, ecoa_code = 1 |
| Account Status | Derived from primaryLeaseStatusID plus overdue rent aging from unpaid charges |
| Payment Rating | Set only when the mapped account status allows it under the current Metro 2 validator rules |
| Consumer Address | Unit address when available, otherwise property address; forwarding address for closed leases when present |
| Payment History Profile | Transaction entries are fetched today, but the current sync transformer does not yet populate payment_history_profile |
5. Identity Handling
The public RentVine API docs do not expose SSN fields. The sync connector can still attach an externally managed SSN when Metro2 has a matching record in external_consumer_identifiers keyed by RentVine contactID.
When no external SSN is present, the connector uses birthDate from GET /tenants/search when available.
This guide intentionally avoids stronger claims about RentVine data storage outside the public API because the connector only relies on what is documented and what Metro2 stores locally.
6. Legacy Ingest Endpoint
The legacy ingest route is still available for teams that already produce RentVine-shaped JSON outside the connector.
curl -X POST https://metro2.switchlabs.dev/api/v1/integrations/rentvine/ingest \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_metro2_api_key" \
-d '{
"tenants": [
{
"contact_id": 12345,
"first_name": "Jane",
"last_name": "Smith",
"date_of_birth": "1990-03-15",
"lease": {
"lease_id": 9001,
"property_address": "742 Evergreen Terrace",
"city": "Springfield",
"state": "IL",
"zip_code": "62704",
"start_date": "2024-06-01",
"monthly_rent": 1250.00,
"status": "active",
"current_balance": 0.00
}
}
]
}'Important: the legacy ingest path uses its own payload schema and transformer. It should be treated as a separate integration path, not as a description of the current pull connector.
7. Current Limitations
- • Transaction entries are fetched and stored, but they are not yet converted into
payment_history_profile,date_last_payment, oractual_payment_amountin the sync transformer. - • The sync path currently creates one record per lease and tenant pairing rather than associated-consumer segments for shared leases.
- • This guide documents the current connector and legacy ingest endpoint only. It does not claim additional RentVine capabilities that are not present in code or public API docs.