List PMS and channel connections

Connect Widget · GET /v1/connect

List PMS and channel connections

GET/v1/connect

Note

Every connection in the workspace with its status. A connection that needs the host to act carries action ({ required, reason, message }) and fixUrl, a durable link to the hosted fix screen — e.g. a Smoobu connection still on a legacy single API key (reason reauth_required; Smoobu stops accepting those on October 31, 2026). Use id as X-Account-Id to scope requests to one connection. Each connection also carries import: its latest import run (status running, completed or failed, with stages and counts), or null when none was recorded. A newly connected account is ready once its import is completed; the account.import.completed webhook announces the same moment. History: GET /v1/connections/{id}/imports. Guide: /docs/imports

Request

curl https://api.repull.dev/v1/connect \
  -H "Authorization: Bearer $REPULL_API_KEY"

Response

{
  "data": [
    {
      "id": "126", "provider": "hostaway", "status": "active", "externalAccountId": "61234", "createdAt": "2026-08-01T10:00:00Z",
      "import": {
        "id": "7f0c2a9e-3b1d-4c55-9a8e-2d6f1b0c4e71", "status": "completed", "trigger": "connect", "outcome": "complete", "reason": null,
        "startedAt": "2026-08-01T10:00:05Z", "lastActivityAt": "2026-08-01T10:06:41Z", "completedAt": "2026-08-01T10:06:41Z",
        "stages": [{ "name": "listings", "expected": 1, "done": 1, "failed": 0 }, { "name": "reservations", "expected": 1, "done": 1, "failed": 0 }],
        "counts": { "listings": 12, "reservations": 340 }
      }
    },
    {
      "id": "131",
      "provider": "smoobu",
      "status": "active",
      "action": { "required": true, "reason": "reauth_required", "message": "Smoobu stops accepting single API keys on October 31, 2026. Reconnect with an API key and secret." },
      "fixUrl": "https://connect.repull.dev/..."
    }
  ]
}
AI