VRPlatformVRPlatform
Teams

/teams

Create team. Partner and property-manager teams have their own subscription created with the team, even while onboarding. The forwarding gateway requires an explicit ap, eu, hostaway, or us dataRegion for General Ledger creation. A strict regional worker may omit dataRegion to use its own cell; an explicit region must match that cell. Crunchy placement is rejected. Hostaway property-manager teams must use the hostaway region. Non-General Ledger teams default to crunchy when dataRegion is omitted; other explicit regions are rejected. A regional worker returns 421 when the resolved region does not match its cell. Partner provisioning requires a uniqueRef. An exact repeat of a completed provision fails with 409 and context.existingTeamId identifies the existing team; changed retry payloads fail without it. Fetch that team with GET /me/teams or GET /partner/teams instead of creating it again. Retrying a provisioning request that failed before completing is safe. migratedFromTenantId atomically links a new GL team to a non-GL VRI source managed by the same partner in any data region; it is rejected for non-GL targets, GL sources, and sources managed by another partner. Generated and explicit slugs are checked against the global tenant registry and target region before either identity is published. Incomplete provisions are omitted from partner discovery. defaultCurrency must exist in the target region currency catalog; unsupported values return 400 before creation. An explicit General Ledger copyFromTeamId must use the target data region; a mismatch returns 400 before either tenant registry is written. New General Ledger teams without a copy source, or copying from the VRPlatform team, bootstrap every included part from the published Control Plane template; creation fails before the team exists when no template is published.

Required scope: teams:provision

POST
/teams
X-API-Key<token>

API key provided in dashboard

In: header

Request Body

application/json

uniqueRef?string|null

The managing partner's stable identifier for the team, unique per partner. Set it with POST /teams or PUT /team.

dataRegion?string
Value in"ap" | "crunchy" | "eu" | "hostaway" | "us"
defaultCurrency?string|null
longTermStayNights?number|null
defaultRevenueRecognition?string|null
name*string
slug?string
statementAddress?|null
billingAddress?|null
phone?string|null
taxId?string|null
companyName?string|null
type?string
Value in"partner" | "admin" | "propertyManager"
status?string

Lifecycle status derived from the team and billing-partner subscription states

Value in"active" | "inactive"
billingSubscriptionStatus?string|null
billingPlan?string|null
cancelledAt?string|null
isOnboarding?boolean

Whether onboarding is in progress. Defaults to false when creating a team.

isOpex?boolean
booksClosedAt?string|null
logo?string|null
statementStartAt?string|null
effectiveStatementStartAt?string|null
ownerPortalShowDraftStatements?boolean
generalLedger?|boolean
migratedFromTenantId?string

VRI source team replaced by this new GL team. The source must be a non-GL team managed by the same partner.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
partnerId?string|null
billingPartnerId?string|null
addMembers?|null

Members to add to the new team. A listed member of the managing partner with selected-team reach also gets the new team added to that reach.

email*string
Match^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
Formatemail
supportEmail?string|null

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://api.vrplatform.app/teams" \  -H "Content-Type: application/json" \  -d '{    "name": "string",    "email": "user@example.com"  }'
{
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "uniqueRef": "string",
  "dataRegion": "ap",
  "storageRealm": "vrintegration",
  "defaultCurrency": "string",
  "longTermStayNights": 0,
  "defaultRevenueRecognition": "checkIn",
  "migratedFromTenantId": "cc45f885-c973-4e0e-8e0d-b63cf61a5091",
  "historicalStatementsImportedAt": "2024-01-15T12:30:00.000+00:00",
  "name": "string",
  "slug": "string",
  "statementAddress": {
    "full": "string",
    "line1": "string",
    "line2": "string",
    "city": "string",
    "state": "string",
    "postalCode": "string",
    "stateCode": "string",
    "countryCode": "string"
  },
  "billingAddress": {
    "full": "string",
    "line1": "string",
    "line2": "string",
    "city": "string",
    "state": "string",
    "postalCode": "string",
    "stateCode": "string",
    "countryCode": "string"
  },
  "addressCountry": "string",
  "phone": "string",
  "email": "string",
  "supportEmail": "string",
  "taxId": "string",
  "partner": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "name": "string"
  },
  "billingPartner": {
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "name": "string"
  },
  "billingPartnerId": "923c9e6a-7971-4599-a964-4e4ec88578c6",
  "companyName": "string",
  "type": "partner",
  "status": "active",
  "capabilities": {
    "activate": {
      "enabled": true,
      "disabledReasons": [
        "teamBillingSubscriptionInactive"
      ]
    }
  },
  "billingSubscriptionStatus": "string",
  "billingPlan": "string",
  "billingPaymentMethodType": "string",
  "billingCustomerId": "string",
  "billingSubscriptionId": "string",
  "colorPrimary": "string",
  "createdAt": "2024-01-15T12:30:00.000+00:00",
  "updatedAt": "2024-01-15T12:30:00.000+00:00",
  "cancelledAt": "string",
  "isOnboarding": true,
  "isTest": true,
  "issues": [
    {
      "code": "unassignedAccount",
      "severity": "error",
      "context": {
        "accountIds": [
          "string"
        ]
      }
    }
  ],
  "isGeneralLedger": true,
  "isOpex": true,
  "booksClosedAt": "string",
  "logo": "string",
  "statementStartAt": "string",
  "effectiveStatementStartAt": "string",
  "settings": {
    "showVRPilotGuide": true,
    "showReservations": true,
    "showCancelledReservations": true,
    "showReservationTotal": true,
    "showGuestName": true,
    "showOwnerCalendarBlocking": true,
    "showTaxStatements": true,
    "showTwoFactorAuth": true,
    "showOwnerDashboard": true,
    "showOwnerDashboardNetIncome": true,
    "showOwnerDashboardExpenses": true,
    "showOwnerDashboardStats": true,
    "showOwnerDashboardMonthlyPerformance": true,
    "showOwnerDashboardFutureRevenue": true,
    "showOwnerDashboardOccupancy": true,
    "showOwnerDashboardReservations": true,
    "showOwnerDashboardDraftStatements": true
  },
  "ownerPortalShowDraftStatements": true,
  "members": [
    {
      "userId": "string",
      "email": "string",
      "role": "string",
      "name": "string",
      "firstName": "string",
      "lastName": "string"
    }
  ],
  "extractableConnections": {
    "property1": {
      "connections": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "name": "string",
          "appId": "string",
          "urlExample": "string",
          "allowConfirmationCode": true,
          "flowIds": [
            "497f6eca-6276-4993-bfeb-53cbbbba6f08"
          ]
        }
      ]
    },
    "property2": {
      "connections": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "name": "string",
          "appId": "string",
          "urlExample": "string",
          "allowConfirmationCode": true,
          "flowIds": [
            "497f6eca-6276-4993-bfeb-53cbbbba6f08"
          ]
        }
      ]
    }
  },
  "enabledFeatures": [
    {
      "featureId": "317f79d2-08bf-4d22-9731-b2b5e1f0a085",
      "status": "all"
    }
  ],
  "operations": {
    "counts": {
      "total": 9007199254740991,
      "queued": 9007199254740991,
      "running": 9007199254740991,
      "completed": 9007199254740991,
      "failed": 9007199254740991
    },
    "items": [
      {
        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
        "type": "ach-verification",
        "status": "queued",
        "resource": {
          "type": "bank-rule",
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "role": "source",
          "url": "http://example.com"
        },
        "failure": {
          "code": "csvBlankHeader",
          "message": "CSV contains a blank header"
        },
        "initiator": {
          "type": "user",
          "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
        },
        "createdAt": "2024-01-15T12:30:00.000+00:00",
        "startedAt": "2024-01-15T12:30:00.000+00:00",
        "finishedAt": "2024-01-15T12:30:00.000+00:00"
      }
    ]
  },
  "aggregates": {
    "activeListings": 9007199254740991,
    "totalListings": 9007199254740991,
    "members": 9007199254740991,
    "activeConnections": 9007199254740991,
    "connectionIssues": 9007199254740991,
    "childTeams": 9007199254740991
  }
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "MISDIRECTED_REQUEST",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": {
    "teamId": "a4ede8ba-7c0a-4485-8763-cbd9b282fbec",
    "dataRegion": "ap",
    "apiBaseUrl": "http://example.com"
  }
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "LOCKED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "reason": "accountClassificationLocked",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "code": "duplicateLast4",
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}