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.devThe 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_KEYorx-api-key: YOUR_API_KEY. POST /api/v1/data-deletioncurrently requires thex-api-keyheader./api/v1/api-keysuses authenticated admin dashboard sessions, not API-key auth.
Public Endpoints
POST /api/v1/submit-metro2-datasubmits record batches.GET /api/v1/batch-status/{id}retrieves ingest results.POST /api/v1/files/upload-urlstarts file-based ingest.POST /api/v1/files/{id}/processprocesses an uploaded file.GET /api/v1/files/{id}/statuspolls 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/exportcover the operational API surface.POST /api/v1/data-deletiondeletes records by account number for the authenticated company.POST /api/v1/integrations/rentvine/syncand/ingestsupport the RentVine connector.
Test vs Live
- API keys have an
environmentofliveortest. - 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 secondsPOST /api/v1/files/upload-url: 60 requests / 60 secondsPOST /api/v1/files/{id}/process: 120 requests / 60 secondsPOST /api/v1/integrations/rentvine/sync: 10 requests / 60 secondsPOST /api/v1/api-keys: 30 requests / 60 seconds