VRPlatformVRPlatform
Teams

/teams

Create team. Partner teams billed directly by VRPlatform and property-manager teams billed directly by VRPlatform or managed by Ximplifi have their 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; 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. useCentralDefaults explicitly opts into the published Control Plane bootstrap and cannot be combined with either copy source.

Required scope: teams:provision

POST
/teams
X-API-Key<token>

API key provided in dashboard

In: header

Request Body

application/json

uniqueRef?string|null
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|null
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
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"
  },
  "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",
  "colorPrimary": "string",
  "createdAt": "2024-01-15T12:30:00.000+00:00",
  "updatedAt": "2024-01-15T12:30:00.000+00:00",
  "cancelledAt": "string",
  "isOnboarding": 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,
    "showOwnerCalendarBlocking": true,
    "showTaxStatements": true,
    "showTwoFactorAuth": 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
        }
      ]
    },
    "property2": {
      "connections": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "name": "string",
          "appId": "string",
          "urlExample": "string",
          "allowConfirmationCode": true
        }
      ]
    }
  },
  "enabledFeatures": [
    {
      "featureId": "317f79d2-08bf-4d22-9731-b2b5e1f0a085",
      "status": "all"
    }
  ],
  "isBillable": true,
  "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,
    "members": 9007199254740991,
    "activeConnections": 9007199254740991,
    "connectionIssues": 9007199254740991,
    "childTeams": 9007199254740991
  }
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "MISDIRECTED_REQUEST",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "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",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "LOCKED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}
{
  "code": "AUDIT_CURSOR_EXPIRED",
  "message": "string",
  "links": {
    "docs": "string",
    "schema": "string"
  },
  "issues": [
    {
      "message": "string",
      "path": [
        "string"
      ],
      "schema": "string"
    }
  ],
  "retryable": true,
  "context": null
}