Developer CenterGetting Started

    Getting Started with the Metro 2 API

    This quick start reflects the routes and auth models currently implemented in the codebase.

    Base URL

    Use the same host for both live and test traffic:

    https://metro2.switchlabs.dev

    The public contract lives under /api/v1. Test and live behavior is determined by the API key's environment, not by a separate hostname.

    Authentication

    • Public ingest endpoints accept Authorization: Bearer YOUR_API_KEY or x-api-key: YOUR_API_KEY.
    • POST /api/v1/data-deletion currently requires the x-api-key header.
    • /api/v1/api-keys uses authenticated admin dashboard sessions, not API-key auth.

    Public Endpoints

    • POST /api/v1/submit-metro2-data submits record batches.
    • GET /api/v1/batch-status/{id} retrieves ingest results.
    • POST /api/v1/files/upload-url starts file-based ingest.
    • POST /api/v1/files/{id}/process processes an uploaded file.
    • GET /api/v1/files/{id}/status polls file processing state.
    • /api/v1/webhooks/*, /api/v1/disputes/*, /api/v1/cra-responses/*, /api/v1/schedules/*, /api/v1/records/{id}/history, and /api/v1/audit/export cover the operational API surface.
    • POST /api/v1/data-deletion deletes records by account number for the authenticated company.
    • POST /api/v1/integrations/rentvine/sync and /ingest support the RentVine connector.

    Test vs Live

    • API keys have an environment of live or test.
    • Test keys create records tagged with environment = test.
    • Test-mode integrations still use the public `/api/v1` contract, including webhook test delivery, scheduling, and audit access.

    Current Rate Limits

    • POST /api/v1/submit-metro2-data: 300 requests / 60 seconds
    • POST /api/v1/files/upload-url: 60 requests / 60 seconds
    • POST /api/v1/files/{id}/process: 120 requests / 60 seconds
    • POST /api/v1/integrations/rentvine/sync: 10 requests / 60 seconds
    • POST /api/v1/api-keys: 30 requests / 60 seconds

    Next Steps