Developer CenterGuidesRentVine Integration

    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/manager

    Prerequisites

    • 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

    EndpointCurrent Use
    GET /leases/exportBase lease data, balances, unpaid charges, property, unit, and tenant references
    GET /tenants/searchContact 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/searchTransaction-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 FieldCurrent Source / Behavior
    Account NumberRV-{leaseID}-{contactID}
    Date Openedlease.startDate from GET /leases/export
    Date Closedlease.closedDate from GET /leases/{leaseID} when the lease is closed
    Current Balancebalances.unpaidTotalAmount
    Amount Past Duebalances.pastDueTotalAmount
    Scheduled Payment / Highest Creditunit.rent
    Account Type / Terms / ECOACurrent sync transformer uses a fixed rental mapping:portfolio_type = O, account_type = 29, terms_frequency = M, terms_duration = 001, ecoa_code = 1
    Account StatusDerived from primaryLeaseStatusID plus overdue rent aging from unpaid charges
    Payment RatingSet only when the mapped account status allows it under the current Metro 2 validator rules
    Consumer AddressUnit address when available, otherwise property address; forwarding address for closed leases when present
    Payment History ProfileTransaction 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, or actual_payment_amount in 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.

    Related Resources