GraphQL Schema

RollerUp GraphQL API schema reference

API Endpoints
https://api.rollerup.tech/graphql

Queries

car

Response

Returns a Car

Arguments
Name Description
id - ID!

Example

Query
query car($id: ID!) {
  car(id: $id) {
    bodyType
    color
    createdAt
    customer {
      ...RollerupCustomerFragment
    }
    customerId
    id
    isMember
    lastVisitedAt
    lastVisitedLocation {
      ...LocationFragment
    }
    make
    membership {
      ...MembershipFragment
    }
    membershipId
    model
    nickname
    plate
    rfidTag
    state
    stripeCustomer {
      ...StripeCustomerFragment
    }
    totalVisits
    updatedAt
    year
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "car": {
      "bodyType": "abc123",
      "color": "xyz789",
      "createdAt": "2007-12-03T10:15:30Z",
      "customer": RollerupCustomer,
      "customerId": "xyz789",
      "id": 4,
      "isMember": false,
      "lastVisitedAt": "2007-12-03T10:15:30Z",
      "lastVisitedLocation": Location,
      "make": "abc123",
      "membership": Membership,
      "membershipId": "abc123",
      "model": "xyz789",
      "nickname": "xyz789",
      "plate": "abc123",
      "rfidTag": "xyz789",
      "state": "xyz789",
      "stripeCustomer": StripeCustomer,
      "totalVisits": 123,
      "updatedAt": "2007-12-03T10:15:30Z",
      "year": "xyz789"
    }
  }
}

cars

Response

Returns a CarPage!

Arguments
Name Description
input - CarsQueryInput

Example

Query
query cars($input: CarsQueryInput) {
  cars(input: $input) {
    nodes {
      ...CarFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": CarsQueryInput}
Response
{
  "data": {
    "cars": {
      "nodes": [Car],
      "pageInfo": PageInfo
    }
  }
}

customer

Description

Get a single Rollerup customer by ID

Response

Returns a RollerupCustomer

Arguments
Name Description
id - ID! Customer ID

Example

Query
query customer($id: ID!) {
  customer(id: $id) {
    city
    country
    createdAt
    email
    id
    isActiveMember
    name
    notes {
      ...NoteFragment
    }
    phone
    state
    street1
    street2
    subscriptions {
      ...RollerupSubscriptionFragment
    }
    updatedAt
    zip
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "customer": {
      "city": "xyz789",
      "country": "xyz789",
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "id": "4",
      "isActiveMember": true,
      "name": "abc123",
      "notes": [Note],
      "phone": "+17895551234",
      "state": "xyz789",
      "street1": "xyz789",
      "street2": "xyz789",
      "subscriptions": [RollerupSubscription],
      "updatedAt": "2007-12-03T10:15:30Z",
      "zip": "abc123"
    }
  }
}

customers

Description

Search for Rollerup customers using flexible filters. Supports searching by name, email, phone, license plate, and last four digits of payment method. Results are paginated using cursor-based pagination.

Response

Returns a CustomersPage!

Arguments
Name Description
input - CustomersInput! Search parameters and pagination options

Example

Query
query customers($input: CustomersInput!) {
  customers(input: $input) {
    nodes {
      ...RollerupCustomerFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": CustomersInput}
Response
{
  "data": {
    "customers": {
      "nodes": [RollerupCustomer],
      "pageInfo": PageInfo
    }
  }
}

discount

Description

Retrieve a single discount by its unique ID

Response

Returns a Discount!

Arguments
Name Description
id - ID!

Example

Query
query discount($id: ID!) {
  discount(id: $id) {
    amountOff
    availabilitySchedule {
      ...ScheduleFragment
    }
    createdAt
    duration
    durationInMonths
    id
    maxRedemptions
    name
    percentOff
    redeemBy
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "discount": {
      "amountOff": 123,
      "availabilitySchedule": Schedule,
      "createdAt": "2007-12-03T10:15:30Z",
      "duration": "FOREVER",
      "durationInMonths": 987,
      "id": 4,
      "maxRedemptions": 987,
      "name": "xyz789",
      "percentOff": 123,
      "redeemBy": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

discounts

Description

Query discounts with pagination support. Returns a paginated list of discounts. Supports optional filtering by name, active status, and expiration date range.

Response

Returns a DiscountPage!

Arguments
Name Description
input - DiscountQueryInput

Example

Query
query discounts($input: DiscountQueryInput) {
  discounts(input: $input) {
    nodes {
      ...DiscountFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": DiscountQueryInput}
Response
{
  "data": {
    "discounts": {
      "nodes": [Discount],
      "pageInfo": PageInfo
    }
  }
}

employee

Description

Get an employee by their unique identifier

Response

Returns an Employee!

Arguments
Name Description
id - ID!

Example

Query
query employee($id: ID!) {
  employee(id: $id) {
    car {
      ...CarFragment
    }
    createdAt
    externalId
    id
    isActive
    name
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "employee": {
      "car": Car,
      "createdAt": "2007-12-03T10:15:30Z",
      "externalId": "abc123",
      "id": "4",
      "isActive": true,
      "name": "abc123",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

employees

Description

Get a list of employees

Response

Returns an EmployeesPage!

Arguments
Name Description
input - EmployeesInput

Example

Query
query employees($input: EmployeesInput) {
  employees(input: $input) {
    nodes {
      ...EmployeeFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": EmployeesInput}
Response
{
  "data": {
    "employees": {
      "nodes": [Employee],
      "pageInfo": PageInfo
    }
  }
}

group

Response

Returns a Group

Arguments
Name Description
id - ID!

Example

Query
query group($id: ID!) {
  group(id: $id) {
    description
    id
    isAdmin
    name
    permissions
    slug
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "group": {
      "description": "abc123",
      "id": "4",
      "isAdmin": false,
      "name": "abc123",
      "permissions": ["abc123"],
      "slug": "abc123"
    }
  }
}

groups

Response

Returns [Group!]!

Example

Query
query groups {
  groups {
    description
    id
    isAdmin
    name
    permissions
    slug
  }
}
Response
{
  "data": {
    "groups": [
      {
        "description": "xyz789",
        "id": 4,
        "isAdmin": true,
        "name": "abc123",
        "permissions": ["abc123"],
        "slug": "xyz789"
      }
    ]
  }
}

isCarActive

Response

Returns a Boolean!

Arguments
Name Description
plate - String!
state - String!

Example

Query
query isCarActive(
  $plate: String!,
  $state: String!
) {
  isCarActive(
    plate: $plate,
    state: $state
  )
}
Variables
{
  "plate": "xyz789",
  "state": "abc123"
}
Response
{"data": {"isCarActive": false}}

listOwnerPlans

Description

Query owner plans with pagination support. Returns a paginated list of simple owner plans without nested relations to avoid N+1 queries.

Response

Returns a SimpleOwnerPlansPage!

Arguments
Name Description
input - ListOwnerPlansInput

Example

Query
query listOwnerPlans($input: ListOwnerPlansInput) {
  listOwnerPlans(input: $input) {
    nodes {
      ...SimpleOwnerPlanFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": ListOwnerPlansInput}
Response
{
  "data": {
    "listOwnerPlans": {
      "nodes": [SimpleOwnerPlan],
      "pageInfo": PageInfo
    }
  }
}

listOwnerVisits

Response

Returns an OwnerVisitsPage!

Arguments
Name Description
input - ListOwnerVisitsInput!

Example

Query
query listOwnerVisits($input: ListOwnerVisitsInput!) {
  listOwnerVisits(input: $input) {
    nodes {
      ...OwnerVisitFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": ListOwnerVisitsInput}
Response
{
  "data": {
    "listOwnerVisits": {
      "nodes": [OwnerVisit],
      "pageInfo": PageInfo
    }
  }
}

location

Description

Get a location by ID. Requires 'locations:view' permission

Response

Returns a Location

Arguments
Name Description
id - ID!

Example

Query
query location($id: ID!) {
  location(id: $id) {
    cashEnabled
    city
    companyId
    createdAt
    externalId
    id
    isVirtual
    name
    shortName
    state
    street
    stripeAccountId
    stripeTerminalLocationId
    taxEnabled
    timezone
    updatedAt
    zip
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "location": {
      "cashEnabled": false,
      "city": "xyz789",
      "companyId": 4,
      "createdAt": "2007-12-03T10:15:30Z",
      "externalId": "xyz789",
      "id": 4,
      "isVirtual": false,
      "name": "abc123",
      "shortName": "xyz789",
      "state": USStateCode,
      "street": "abc123",
      "stripeAccountId": "xyz789",
      "stripeTerminalLocationId": "xyz789",
      "taxEnabled": true,
      "timezone": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z",
      "zip": USPostalCode
    }
  }
}

locations

Description

Query locations with pagination. Requires the 'locations:view' permission

Response

Returns a LocationPage!

Arguments
Name Description
input - LocationQueryInput Pagination parameters for the location query

Example

Query
query locations($input: LocationQueryInput) {
  locations(input: $input) {
    nodes {
      ...LocationFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": LocationQueryInput}
Response
{
  "data": {
    "locations": {
      "nodes": [Location],
      "pageInfo": PageInfo
    }
  }
}

membershipCars

Response

Returns [MembershipCar!]!

Arguments
Name Description
membershipId - ID!

Example

Query
query membershipCars($membershipId: ID!) {
  membershipCars(membershipId: $membershipId) {
    car {
      ...CarFragment
    }
    createdAt
    id
    nickname
    removingAt
  }
}
Variables
{"membershipId": "4"}
Response
{
  "data": {
    "membershipCars": [
      {
        "car": Car,
        "createdAt": "2007-12-03T10:15:30Z",
        "id": 4,
        "nickname": "xyz789",
        "removingAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

ownerPlan

Description

Retrieve a single owner plan by its unique ID. Returns full details including nested relations (wash package, cars, wash history).

Response

Returns an OwnerPlan!

Arguments
Name Description
id - ID!

Example

Query
query ownerPlan($id: ID!) {
  ownerPlan(id: $id) {
    cars {
      ...OwnerCarFragment
    }
    city
    createdAt
    description
    email
    expiresAt
    id
    name
    phone
    state
    street1
    street2
    updatedAt
    washPackage {
      ...WashPackageFragment
    }
    washPackageId
    zip
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "ownerPlan": {
      "cars": [OwnerCar],
      "city": "abc123",
      "createdAt": "2007-12-03T10:15:30Z",
      "description": "xyz789",
      "email": "abc123",
      "expiresAt": "2007-12-03T10:15:30Z",
      "id": "4",
      "name": "abc123",
      "phone": "xyz789",
      "state": "xyz789",
      "street1": "xyz789",
      "street2": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z",
      "washPackage": WashPackage,
      "washPackageId": 4,
      "zip": "abc123"
    }
  }
}

paidInvoice

Description

Get a single paid invoice by its ID

Response

Returns a PaidInvoice!

Arguments
Name Description
id - ID!

Example

Query
query paidInvoice($id: ID!) {
  paidInvoice(id: $id) {
    amountAvailableToRefund
    billingReason
    card {
      ...CardFragment
    }
    createdAt
    customer {
      ...SimpleRollerupCustomerFragment
    }
    employee {
      ...EmployeeFragment
    }
    id
    invoiceUrl
    isRecharge
    isUpdate
    lineItems {
      ...SimplePaidInvoiceLineItemFragment
    }
    location {
      ...SimpleLocationFragment
    }
    stripeChargeId
    stripeInvoiceId
    subscriptionId
    total
    visit {
      ...VisitFragment
    }
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "paidInvoice": {
      "amountAvailableToRefund": 123,
      "billingReason": "xyz789",
      "card": Card,
      "createdAt": "2007-12-03T10:15:30Z",
      "customer": SimpleRollerupCustomer,
      "employee": Employee,
      "id": 4,
      "invoiceUrl": "abc123",
      "isRecharge": true,
      "isUpdate": false,
      "lineItems": [SimplePaidInvoiceLineItem],
      "location": SimpleLocation,
      "stripeChargeId": "abc123",
      "stripeInvoiceId": "abc123",
      "subscriptionId": "abc123",
      "total": 987,
      "visit": Visit
    }
  }
}

paidInvoices

Description

Get a paginated list of paid invoices, sorted in reverse chronological order

Response

Returns a PaidInvoicePage!

Arguments
Name Description
input - PaidInvoicesQueryInput

Example

Query
query paidInvoices($input: PaidInvoicesQueryInput) {
  paidInvoices(input: $input) {
    nodes {
      ...PaidInvoiceFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": PaidInvoicesQueryInput}
Response
{
  "data": {
    "paidInvoices": {
      "nodes": [PaidInvoice],
      "pageInfo": PageInfo
    }
  }
}

plateChangeHistory

Description

Get plate change history for a subscription

Response

Returns [PlateChange!]!

Arguments
Name Description
input - PlateChangeHistoryInput!

Example

Query
query plateChangeHistory($input: PlateChangeHistoryInput!) {
  plateChangeHistory(input: $input) {
    action
    car {
      ...CarFragment
    }
    changedBy {
      ...UserFragment
    }
    createdAt
    exempt
    id
    originalCar {
      ...CarFragment
    }
  }
}
Variables
{"input": PlateChangeHistoryInput}
Response
{
  "data": {
    "plateChangeHistory": [
      {
        "action": "xyz789",
        "car": Car,
        "changedBy": User,
        "createdAt": "2007-12-03T10:15:30Z",
        "exempt": false,
        "id": 4,
        "originalCar": Car
      }
    ]
  }
}

prepaid

Description

Retrieve a single prepaid by its unique ID

Response

Returns a Prepaid!

Arguments
Name Description
id - ID!

Example

Query
query prepaid($id: ID!) {
  prepaid(id: $id) {
    codesPerBook
    companyId
    createdAt
    createdBy {
      ...EmployeeFragment
    }
    createdById
    description
    exportableCodeCount
    exports {
      ...SimplePrepaidExportFragment
    }
    id
    importedFromSitewatch
    maxRedemptionsPerPrepaid
    name
    updatedAt
    washPackage {
      ...WashPackageFragment
    }
    washPackageId
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "prepaid": {
      "codesPerBook": 987,
      "companyId": "4",
      "createdAt": "2007-12-03T10:15:30Z",
      "createdBy": Employee,
      "createdById": "4",
      "description": "abc123",
      "exportableCodeCount": 123,
      "exports": [SimplePrepaidExport],
      "id": "4",
      "importedFromSitewatch": false,
      "maxRedemptionsPerPrepaid": 123,
      "name": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z",
      "washPackage": WashPackage,
      "washPackageId": "4"
    }
  }
}

prepaidBooks

Description

Query prepaid books with pagination support. Returns a paginated list of prepaid books

Response

Returns a PrepaidBookPage!

Arguments
Name Description
input - PrepaidBookQueryInput

Example

Query
query prepaidBooks($input: PrepaidBookQueryInput) {
  prepaidBooks(input: $input) {
    nodes {
      ...PrepaidBookFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": PrepaidBookQueryInput}
Response
{
  "data": {
    "prepaidBooks": {
      "nodes": [PrepaidBook],
      "pageInfo": PageInfo
    }
  }
}

prepaidCodeRedemptions

Description

Query prepaid code redemptions with pagination support. Returns a paginated list of redemptions

Response

Returns a PrepaidCodeRedemptionPage!

Arguments
Name Description
input - PrepaidCodeRedemptionQueryInput

Example

Query
query prepaidCodeRedemptions($input: PrepaidCodeRedemptionQueryInput) {
  prepaidCodeRedemptions(input: $input) {
    nodes {
      ...PrepaidCodeRedemptionFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": PrepaidCodeRedemptionQueryInput}
Response
{
  "data": {
    "prepaidCodeRedemptions": {
      "nodes": [PrepaidCodeRedemption],
      "pageInfo": PageInfo
    }
  }
}

prepaidCodes

Description

Query prepaid codes with pagination support. Returns a paginated list of prepaid codes

Response

Returns a PrepaidCodePage!

Arguments
Name Description
input - PrepaidCodeQueryInput

Example

Query
query prepaidCodes($input: PrepaidCodeQueryInput) {
  prepaidCodes(input: $input) {
    nodes {
      ...PrepaidCodeFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": PrepaidCodeQueryInput}
Response
{
  "data": {
    "prepaidCodes": {
      "nodes": [PrepaidCode],
      "pageInfo": PageInfo
    }
  }
}

prepaidExportDownloadUrl

Description

Returns a signed URL to download a prepaid export file.

Response

Returns a String!

Arguments
Name Description
prepaidExportId - ID!

Example

Query
query prepaidExportDownloadUrl($prepaidExportId: ID!) {
  prepaidExportDownloadUrl(prepaidExportId: $prepaidExportId)
}
Variables
{"prepaidExportId": "4"}
Response
{
  "data": {
    "prepaidExportDownloadUrl": "xyz789"
  }
}

prepaids

Description

Query prepaids with pagination support. Returns a paginated list of prepaids

Response

Returns a PrepaidPage!

Arguments
Name Description
input - PrepaidQueryInput

Example

Query
query prepaids($input: PrepaidQueryInput) {
  prepaids(input: $input) {
    nodes {
      ...PrepaidFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": PrepaidQueryInput}
Response
{
  "data": {
    "prepaids": {
      "nodes": [Prepaid],
      "pageInfo": PageInfo
    }
  }
}

previewMembershipCarChange

Description

Preview the invoice impact of adding, removing, or cancelling the removal of a car on a membership. Does not mutate any state.

Response

Returns a MembershipCarChangePreview!

Arguments
Name Description
input - PreviewMembershipCarChangeInput!

Example

Query
query previewMembershipCarChange($input: PreviewMembershipCarChangeInput!) {
  previewMembershipCarChange(input: $input) {
    changeType
    immediateTotal
    lineItems {
      ...MembershipCarChangePreviewLineItemFragment
    }
    newVehicleQuantity
    nextBillingDate
    nextInvoiceTotal
  }
}
Variables
{"input": PreviewMembershipCarChangeInput}
Response
{
  "data": {
    "previewMembershipCarChange": {
      "changeType": "downgrade",
      "immediateTotal": 123,
      "lineItems": [MembershipCarChangePreviewLineItem],
      "newVehicleQuantity": 987,
      "nextBillingDate": "2007-12-03T10:15:30Z",
      "nextInvoiceTotal": 987
    }
  }
}

stripeAccount

Description

Get a Stripe account by ID. Requires the 'stripe-accounts:view' permission

Response

Returns a StripeAccount

Arguments
Name Description
id - String!

Example

Query
query stripeAccount($id: String!) {
  stripeAccount(id: $id) {
    city
    companyId
    createdAt
    id
    name
    requirements {
      ...StripeAccountRequirementsFragment
    }
    state
    street
    updatedAt
    zip
  }
}
Variables
{"id": "abc123"}
Response
{
  "data": {
    "stripeAccount": {
      "city": "xyz789",
      "companyId": 4,
      "createdAt": "2007-12-03T10:15:30Z",
      "id": "xyz789",
      "name": "abc123",
      "requirements": StripeAccountRequirements,
      "state": USStateCode,
      "street": "abc123",
      "updatedAt": "2007-12-03T10:15:30Z",
      "zip": USPostalCode
    }
  }
}

stripeAccounts

Description

Query Stripe accounts with pagination. Requires the 'stripe-accounts:view' permission

Response

Returns a StripeAccountPage!

Arguments
Name Description
input - StripeAccountQueryInput Pagination parameters for the Stripe accounts query

Example

Query
query stripeAccounts($input: StripeAccountQueryInput) {
  stripeAccounts(input: $input) {
    nodes {
      ...StripeAccountFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": StripeAccountQueryInput}
Response
{
  "data": {
    "stripeAccounts": {
      "nodes": [StripeAccount],
      "pageInfo": PageInfo
    }
  }
}

user

Description

Get a user by ID

Response

Returns a User

Arguments
Name Description
id - ID!

Example

Query
query user($id: ID!) {
  user(id: $id) {
    company {
      ...SimpleCompanyFragment
    }
    createdAt
    email
    externalId
    groups {
      ...GroupFragment
    }
    id
    isActive
    name
    permissions
    phone
    updatedAt
    username
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "user": {
      "company": SimpleCompany,
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "externalId": "abc123",
      "groups": [Group],
      "id": 4,
      "isActive": false,
      "name": "xyz789",
      "permissions": ["xyz789"],
      "phone": "+17895551234",
      "updatedAt": "2007-12-03T10:15:30Z",
      "username": "abc123"
    }
  }
}

users

Description

Query users with pagination. Requires 'users:view' permission

Response

Returns a UserPage!

Arguments
Name Description
input - UserQueryInput Pagination parameters for the user query

Example

Query
query users($input: UserQueryInput) {
  users(input: $input) {
    nodes {
      ...UserFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": UserQueryInput}
Response
{
  "data": {
    "users": {
      "nodes": [User],
      "pageInfo": PageInfo
    }
  }
}

viewer

Description

Get the currently authenticated user

Response

Returns a User

Example

Query
query viewer {
  viewer {
    company {
      ...SimpleCompanyFragment
    }
    createdAt
    email
    externalId
    groups {
      ...GroupFragment
    }
    id
    isActive
    name
    permissions
    phone
    updatedAt
    username
  }
}
Response
{
  "data": {
    "viewer": {
      "company": SimpleCompany,
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "externalId": "abc123",
      "groups": [Group],
      "id": 4,
      "isActive": true,
      "name": "xyz789",
      "permissions": ["xyz789"],
      "phone": "+17895551234",
      "updatedAt": "2007-12-03T10:15:30Z",
      "username": "xyz789"
    }
  }
}

visit

Description

Get a single visit by ID

Response

Returns a Visit!

Arguments
Name Description
id - ID!

Example

Query
query visit($id: ID!) {
  visit(id: $id) {
    createdAt
    employee {
      ...EmployeeFragment
    }
    id
    imageUrl
    isExternalMember
    isSale
    laneId
    lprOverridden
    lprPlate
    lprState
    plate
    plateImageUrl
    rfidTag
    state
    status
    stripeSubscriptionId
    timeTotal
    timeWaitingForAttendant
    timeWaitingForGate
    timeWithAttendant
    updatedAt
    visitType
    washPackage {
      ...WashPackageFragment
    }
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "visit": {
      "createdAt": "2007-12-03T10:15:30Z",
      "employee": Employee,
      "id": 4,
      "imageUrl": "abc123",
      "isExternalMember": false,
      "isSale": true,
      "laneId": "abc123",
      "lprOverridden": false,
      "lprPlate": "xyz789",
      "lprState": "xyz789",
      "plate": "xyz789",
      "plateImageUrl": "abc123",
      "rfidTag": "xyz789",
      "state": "abc123",
      "status": "xyz789",
      "stripeSubscriptionId": "abc123",
      "timeTotal": 123.45,
      "timeWaitingForAttendant": 123.45,
      "timeWaitingForGate": 123.45,
      "timeWithAttendant": 987.65,
      "updatedAt": "2007-12-03T10:15:30Z",
      "visitType": "abc123",
      "washPackage": WashPackage
    }
  }
}

visits

Description

List all visits in reverse chronological order

Response

Returns a VisitsPage!

Arguments
Name Description
input - VisitsInput

Example

Query
query visits($input: VisitsInput) {
  visits(input: $input) {
    nodes {
      ...VisitFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{"input": VisitsInput}
Response
{
  "data": {
    "visits": {
      "nodes": [Visit],
      "pageInfo": PageInfo
    }
  }
}

washPackage

Description

Get a Wash package by ID. Requires the 'wash-packages:view' permission

Response

Returns a WashPackage!

Arguments
Name Description
id - ID!

Example

Query
query washPackage($id: ID!) {
  washPackage(id: $id) {
    createdAt
    description
    externalId
    id
    name
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "washPackage": {
      "createdAt": "2007-12-03T10:15:30Z",
      "description": "abc123",
      "externalId": "abc123",
      "id": 4,
      "name": "abc123",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

washPackages

Description

Query Wash packages with pagination. Requires the 'wash-packages:view' permission

Response

Returns [WashPackage!]!

Example

Query
query washPackages {
  washPackages {
    createdAt
    description
    externalId
    id
    name
    updatedAt
  }
}
Response
{
  "data": {
    "washPackages": [
      {
        "createdAt": "2007-12-03T10:15:30Z",
        "description": "xyz789",
        "externalId": "xyz789",
        "id": 4,
        "name": "xyz789",
        "updatedAt": "2007-12-03T10:15:30Z"
      }
    ]
  }
}

Mutations

addCarToMembership

Response

Returns a MembershipCar!

Arguments
Name Description
input - AddCarToMembershipInput!

Example

Query
mutation addCarToMembership($input: AddCarToMembershipInput!) {
  addCarToMembership(input: $input) {
    car {
      ...CarFragment
    }
    createdAt
    id
    nickname
    removingAt
  }
}
Variables
{"input": AddCarToMembershipInput}
Response
{
  "data": {
    "addCarToMembership": {
      "car": Car,
      "createdAt": "2007-12-03T10:15:30Z",
      "id": "4",
      "nickname": "xyz789",
      "removingAt": "2007-12-03T10:15:30Z"
    }
  }
}

addCarToOwnerPlan

Description

Add a car to an owner plan

Response

Returns an OwnerCar!

Arguments
Name Description
input - AddCarToOwnerPlanInput!

Example

Query
mutation addCarToOwnerPlan($input: AddCarToOwnerPlanInput!) {
  addCarToOwnerPlan(input: $input) {
    createdAt
    id
    nickname
    plate
    state
    updatedAt
  }
}
Variables
{"input": AddCarToOwnerPlanInput}
Response
{
  "data": {
    "addCarToOwnerPlan": {
      "createdAt": "2007-12-03T10:15:30Z",
      "id": 4,
      "nickname": "abc123",
      "plate": "xyz789",
      "state": "abc123",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

archiveNote

Response

Returns a Note!

Arguments
Name Description
id - ID!

Example

Query
mutation archiveNote($id: ID!) {
  archiveNote(id: $id) {
    archivedAt
    archivedBy {
      ...EmployeeFragment
    }
    createdAt
    createdBy {
      ...EmployeeFragment
    }
    customerId
    id
    note
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "archiveNote": {
      "archivedAt": "2007-12-03T10:15:30Z",
      "archivedBy": Employee,
      "createdAt": "2007-12-03T10:15:30Z",
      "createdBy": Employee,
      "customerId": 4,
      "id": "4",
      "note": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

cancelCarRemoval

Response

Returns a MembershipCar!

Arguments
Name Description
input - CancelCarRemovalInput!

Example

Query
mutation cancelCarRemoval($input: CancelCarRemovalInput!) {
  cancelCarRemoval(input: $input) {
    car {
      ...CarFragment
    }
    createdAt
    id
    nickname
    removingAt
  }
}
Variables
{"input": CancelCarRemovalInput}
Response
{
  "data": {
    "cancelCarRemoval": {
      "car": Car,
      "createdAt": "2007-12-03T10:15:30Z",
      "id": 4,
      "nickname": "abc123",
      "removingAt": "2007-12-03T10:15:30Z"
    }
  }
}

createDiscount

Description

Create a new discount. Either amountOff or percentOff must be specified, but not both

Response

Returns a Discount!

Arguments
Name Description
input - CreateDiscountInput!

Example

Query
mutation createDiscount($input: CreateDiscountInput!) {
  createDiscount(input: $input) {
    amountOff
    availabilitySchedule {
      ...ScheduleFragment
    }
    createdAt
    duration
    durationInMonths
    id
    maxRedemptions
    name
    percentOff
    redeemBy
    updatedAt
  }
}
Variables
{"input": CreateDiscountInput}
Response
{
  "data": {
    "createDiscount": {
      "amountOff": 987,
      "availabilitySchedule": Schedule,
      "createdAt": "2007-12-03T10:15:30Z",
      "duration": "FOREVER",
      "durationInMonths": 123,
      "id": "4",
      "maxRedemptions": 123,
      "name": "abc123",
      "percentOff": 987,
      "redeemBy": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

createNote

Response

Returns a Note!

Arguments
Name Description
input - CreateNoteInput!

Example

Query
mutation createNote($input: CreateNoteInput!) {
  createNote(input: $input) {
    archivedAt
    archivedBy {
      ...EmployeeFragment
    }
    createdAt
    createdBy {
      ...EmployeeFragment
    }
    customerId
    id
    note
    updatedAt
  }
}
Variables
{"input": CreateNoteInput}
Response
{
  "data": {
    "createNote": {
      "archivedAt": "2007-12-03T10:15:30Z",
      "archivedBy": Employee,
      "createdAt": "2007-12-03T10:15:30Z",
      "createdBy": Employee,
      "customerId": "4",
      "id": 4,
      "note": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

createOwnerPlan

Description

Create a new owner plan

Response

Returns an OwnerPlan!

Arguments
Name Description
input - CreateOwnerPlanInput!

Example

Query
mutation createOwnerPlan($input: CreateOwnerPlanInput!) {
  createOwnerPlan(input: $input) {
    cars {
      ...OwnerCarFragment
    }
    city
    createdAt
    description
    email
    expiresAt
    id
    name
    phone
    state
    street1
    street2
    updatedAt
    washPackage {
      ...WashPackageFragment
    }
    washPackageId
    zip
  }
}
Variables
{"input": CreateOwnerPlanInput}
Response
{
  "data": {
    "createOwnerPlan": {
      "cars": [OwnerCar],
      "city": "xyz789",
      "createdAt": "2007-12-03T10:15:30Z",
      "description": "xyz789",
      "email": "abc123",
      "expiresAt": "2007-12-03T10:15:30Z",
      "id": "4",
      "name": "abc123",
      "phone": "abc123",
      "state": "xyz789",
      "street1": "xyz789",
      "street2": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z",
      "washPackage": WashPackage,
      "washPackageId": 4,
      "zip": "xyz789"
    }
  }
}

createUser

Description

Create a new user. Requires 'users:manage' permission

Response

Returns a MutateUserResponse!

Arguments
Name Description
input - CreateUserInput! User creation parameters

Example

Query
mutation createUser($input: CreateUserInput!) {
  createUser(input: $input) {
    tempPassword
    user {
      ...UserFragment
    }
  }
}
Variables
{"input": CreateUserInput}
Response
{
  "data": {
    "createUser": {
      "tempPassword": "xyz789",
      "user": User
    }
  }
}

createWashPackage

Description

Create a new Wash package. Requires the 'wash-packages:manage' permission

Response

Returns a WashPackage!

Arguments
Name Description
input - CreateWashPackageInput!

Example

Query
mutation createWashPackage($input: CreateWashPackageInput!) {
  createWashPackage(input: $input) {
    createdAt
    description
    externalId
    id
    name
    updatedAt
  }
}
Variables
{"input": CreateWashPackageInput}
Response
{
  "data": {
    "createWashPackage": {
      "createdAt": "2007-12-03T10:15:30Z",
      "description": "abc123",
      "externalId": "xyz789",
      "id": "4",
      "name": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

deactivateUser

Description

Deactivate a user account, preventing them from logging in. Requires 'users:manage' permission

Response

Returns a User!

Arguments
Name Description
id - ID! The id of the user to deactivate

Example

Query
mutation deactivateUser($id: ID!) {
  deactivateUser(id: $id) {
    company {
      ...SimpleCompanyFragment
    }
    createdAt
    email
    externalId
    groups {
      ...GroupFragment
    }
    id
    isActive
    name
    permissions
    phone
    updatedAt
    username
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "deactivateUser": {
      "company": SimpleCompany,
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "externalId": "xyz789",
      "groups": [Group],
      "id": 4,
      "isActive": true,
      "name": "xyz789",
      "permissions": ["abc123"],
      "phone": "+17895551234",
      "updatedAt": "2007-12-03T10:15:30Z",
      "username": "xyz789"
    }
  }
}

deleteOwnerPlan

Description

Delete an owner plan (soft delete)

Response

Returns an ID!

Arguments
Name Description
id - ID!

Example

Query
mutation deleteOwnerPlan($id: ID!) {
  deleteOwnerPlan(id: $id)
}
Variables
{"id": 4}
Response
{"data": {"deleteOwnerPlan": 4}}

mergeCustomers

Description

Merge one Rollerup customer into another. The source customer's subscriptions, paid invoices, and stripe customers are re-pointed to the target; any null fields on the target are backfilled from the source; the source row is then hard-deleted. A snapshot of the source row is preserved in the customer_merges audit table. Requires the 'customers:manage' permission.

Response

Returns a RollerupCustomer!

Arguments
Name Description
input - MergeCustomersInput!

Example

Query
mutation mergeCustomers($input: MergeCustomersInput!) {
  mergeCustomers(input: $input) {
    city
    country
    createdAt
    email
    id
    isActiveMember
    name
    notes {
      ...NoteFragment
    }
    phone
    state
    street1
    street2
    subscriptions {
      ...RollerupSubscriptionFragment
    }
    updatedAt
    zip
  }
}
Variables
{"input": MergeCustomersInput}
Response
{
  "data": {
    "mergeCustomers": {
      "city": "xyz789",
      "country": "xyz789",
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "id": "4",
      "isActiveMember": false,
      "name": "xyz789",
      "notes": [Note],
      "phone": "+17895551234",
      "state": "xyz789",
      "street1": "xyz789",
      "street2": "xyz789",
      "subscriptions": [RollerupSubscription],
      "updatedAt": "2007-12-03T10:15:30Z",
      "zip": "xyz789"
    }
  }
}

reactivateUser

Description

Reactivate a previously deactivated user account, restoring their ability to log in. Requires 'users:manage' permission

Response

Returns a User!

Arguments
Name Description
id - ID! The id of the user to reactivate

Example

Query
mutation reactivateUser($id: ID!) {
  reactivateUser(id: $id) {
    company {
      ...SimpleCompanyFragment
    }
    createdAt
    email
    externalId
    groups {
      ...GroupFragment
    }
    id
    isActive
    name
    permissions
    phone
    updatedAt
    username
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "reactivateUser": {
      "company": SimpleCompany,
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "externalId": "abc123",
      "groups": [Group],
      "id": "4",
      "isActive": false,
      "name": "xyz789",
      "permissions": ["xyz789"],
      "phone": "+17895551234",
      "updatedAt": "2007-12-03T10:15:30Z",
      "username": "abc123"
    }
  }
}

removeCarFromMembership

Response

Returns a MembershipCar!

Arguments
Name Description
input - RemoveCarFromMembershipInput!

Example

Query
mutation removeCarFromMembership($input: RemoveCarFromMembershipInput!) {
  removeCarFromMembership(input: $input) {
    car {
      ...CarFragment
    }
    createdAt
    id
    nickname
    removingAt
  }
}
Variables
{"input": RemoveCarFromMembershipInput}
Response
{
  "data": {
    "removeCarFromMembership": {
      "car": Car,
      "createdAt": "2007-12-03T10:15:30Z",
      "id": 4,
      "nickname": "abc123",
      "removingAt": "2007-12-03T10:15:30Z"
    }
  }
}

removeCarFromOwnerPlan

Description

Remove a car from an owner plan

Response

Returns an ID!

Arguments
Name Description
id - ID!

Example

Query
mutation removeCarFromOwnerPlan($id: ID!) {
  removeCarFromOwnerPlan(id: $id)
}
Variables
{"id": "4"}
Response
{"data": {"removeCarFromOwnerPlan": 4}}

updateCustomer

Description

Update a Rollerup customer's name, email, or phone. Only fields provided in the input are updated. If the new email matches another customer in the same company, the mutation fails with a CUSTOMER_EMAIL_CONFLICT error whose extensions include the conflicting customer id so the client can offer a merge.

Response

Returns a RollerupCustomer!

Arguments
Name Description
input - UpdateCustomerInput!

Example

Query
mutation updateCustomer($input: UpdateCustomerInput!) {
  updateCustomer(input: $input) {
    city
    country
    createdAt
    email
    id
    isActiveMember
    name
    notes {
      ...NoteFragment
    }
    phone
    state
    street1
    street2
    subscriptions {
      ...RollerupSubscriptionFragment
    }
    updatedAt
    zip
  }
}
Variables
{"input": UpdateCustomerInput}
Response
{
  "data": {
    "updateCustomer": {
      "city": "xyz789",
      "country": "abc123",
      "createdAt": "2007-12-03T10:15:30Z",
      "email": "test@test.com",
      "id": "4",
      "isActiveMember": false,
      "name": "xyz789",
      "notes": [Note],
      "phone": "+17895551234",
      "state": "abc123",
      "street1": "xyz789",
      "street2": "abc123",
      "subscriptions": [RollerupSubscription],
      "updatedAt": "2007-12-03T10:15:30Z",
      "zip": "abc123"
    }
  }
}

updateOwnerPlan

Description

Update an existing owner plan

Response

Returns an OwnerPlan!

Arguments
Name Description
input - UpdateOwnerPlanInput!

Example

Query
mutation updateOwnerPlan($input: UpdateOwnerPlanInput!) {
  updateOwnerPlan(input: $input) {
    cars {
      ...OwnerCarFragment
    }
    city
    createdAt
    description
    email
    expiresAt
    id
    name
    phone
    state
    street1
    street2
    updatedAt
    washPackage {
      ...WashPackageFragment
    }
    washPackageId
    zip
  }
}
Variables
{"input": UpdateOwnerPlanInput}
Response
{
  "data": {
    "updateOwnerPlan": {
      "cars": [OwnerCar],
      "city": "xyz789",
      "createdAt": "2007-12-03T10:15:30Z",
      "description": "xyz789",
      "email": "xyz789",
      "expiresAt": "2007-12-03T10:15:30Z",
      "id": 4,
      "name": "abc123",
      "phone": "xyz789",
      "state": "xyz789",
      "street1": "abc123",
      "street2": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z",
      "washPackage": WashPackage,
      "washPackageId": 4,
      "zip": "abc123"
    }
  }
}

updateOwnerPlanCar

Description

Update a car on an owner plan (e.g., change nickname)

Response

Returns an OwnerCar!

Arguments
Name Description
input - UpdateOwnerPlanCarInput!

Example

Query
mutation updateOwnerPlanCar($input: UpdateOwnerPlanCarInput!) {
  updateOwnerPlanCar(input: $input) {
    createdAt
    id
    nickname
    plate
    state
    updatedAt
  }
}
Variables
{"input": UpdateOwnerPlanCarInput}
Response
{
  "data": {
    "updateOwnerPlanCar": {
      "createdAt": "2007-12-03T10:15:30Z",
      "id": 4,
      "nickname": "abc123",
      "plate": "abc123",
      "state": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

updateUser

Description

Update an existing user. Requires 'users:manage' permission

Response

Returns a MutateUserResponse!

Arguments
Name Description
input - UpdateUserInput! User update parameters

Example

Query
mutation updateUser($input: UpdateUserInput!) {
  updateUser(input: $input) {
    tempPassword
    user {
      ...UserFragment
    }
  }
}
Variables
{"input": UpdateUserInput}
Response
{
  "data": {
    "updateUser": {
      "tempPassword": "xyz789",
      "user": User
    }
  }
}

updateWashPackage

Description

Update an existing Wash package. Requires the 'wash-packages:manage' permission

Response

Returns a WashPackage!

Arguments
Name Description
input - UpdateWashPackageInput!

Example

Query
mutation updateWashPackage($input: UpdateWashPackageInput!) {
  updateWashPackage(input: $input) {
    createdAt
    description
    externalId
    id
    name
    updatedAt
  }
}
Variables
{"input": UpdateWashPackageInput}
Response
{
  "data": {
    "updateWashPackage": {
      "createdAt": "2007-12-03T10:15:30Z",
      "description": "xyz789",
      "externalId": "abc123",
      "id": "4",
      "name": "xyz789",
      "updatedAt": "2007-12-03T10:15:30Z"
    }
  }
}

Types

AddCarToMembershipInput

Fields
Input Field Description
membershipId - ID!
nickname - String
plate - String!
state - String!
Example
{
  "membershipId": 4,
  "nickname": "xyz789",
  "plate": "xyz789",
  "state": "abc123"
}

AddCarToOwnerPlanInput

Description

Input for adding a car to an owner plan

Fields
Input Field Description
nickname - String Optional nickname for this vehicle
ownerPlanId - ID! The ID of the owner plan to add the car to (required)
plate - String! License plate number (required)
state - String! State/region of registration (required)
Example
{
  "nickname": "abc123",
  "ownerPlanId": 4,
  "plate": "abc123",
  "state": "xyz789"
}

ArchivedReason

Description

Why a record was archived. USER means a user explicitly archived it. SYSTEM means it was automatically archived because a newer version replaced it. CASCADE means it was automatically archived alongside a parent record being archived (e.g. a Price cascade-archived when its Product is archived).

Values
Enum Value Description

CASCADE

Archived automatically alongside a parent record (e.g. Price cascade-archived with its Product)

SYSTEM

Archived automatically by the system (e.g. replaced by a newer version)

USER

Archived explicitly by a user
Example
"CASCADE"

BillingFrequency

Description

Billing frequency options for subscription prices

Values
Enum Value Description

MONTHLY

Billed monthly

QUARTERLY

Billed quarterly (every 3 months)

YEARLY

Billed yearly
Example
"MONTHLY"

Boolean

Description

The Boolean scalar type represents true or false.

CancelCarRemovalInput

Fields
Input Field Description
carId - ID!
membershipId - ID!
Example
{
  "carId": "4",
  "membershipId": "4"
}

Car

Fields
Field Name Description
bodyType - String The body type of the car
color - String The color of the car
createdAt - DateTime! Time when this car was created
customer - RollerupCustomer The customer associated with the car
customerId - String The customer ID associated with the car
id - ID!
isMember - Boolean! Whether the car belongs to a member or not
lastVisitedAt - DateTime Timestamp of the vehicle's most recent visit
lastVisitedLocation - Location Location where the vehicle was last seen
make - String The make of the car
membership - Membership The membership associated with the car
membershipId - String The membership ID associated with the car
model - String The model of the car
nickname - String The nickname associated with the car
plate - String! The plate number of the car
rfidTag - String The RFID tag, if there is one, on the car
state - String! The state of the car
stripeCustomer - StripeCustomer The Stripe customer associated with the car Use RollerupCustomer instead
totalVisits - Int! Total number of visits across all locations
updatedAt - DateTime! Time when this car was last updated
year - String The year of the car
Example
{
  "bodyType": "abc123",
  "color": "abc123",
  "createdAt": "2007-12-03T10:15:30Z",
  "customer": RollerupCustomer,
  "customerId": "abc123",
  "id": 4,
  "isMember": true,
  "lastVisitedAt": "2007-12-03T10:15:30Z",
  "lastVisitedLocation": Location,
  "make": "abc123",
  "membership": Membership,
  "membershipId": "xyz789",
  "model": "xyz789",
  "nickname": "xyz789",
  "plate": "abc123",
  "rfidTag": "xyz789",
  "state": "xyz789",
  "stripeCustomer": StripeCustomer,
  "totalVisits": 123,
  "updatedAt": "2007-12-03T10:15:30Z",
  "year": "abc123"
}

CarPage

Description

Paginated result for car queries

Fields
Field Name Description
nodes - [Car!]! List of cars in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [Car],
  "pageInfo": PageInfo
}

Card

Description

Represents a card used to make a payment.

Fields
Field Name Description
brand - String! The brand of the card
expMonth - Int! The expiration month of the card
expYear - Int! The expiration year of the card
id - ID!
last4 - String! The last 4 digits of the card. String to match Stripe's format
Example
{
  "brand": "xyz789",
  "expMonth": 123,
  "expYear": 123,
  "id": 4,
  "last4": "abc123"
}

CarsQueryInput

Description

Pagination input for querying cars. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
customerId - String A customer ID to filter vehicles by
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
search - String A search term to filter vehicles by, typically a plate number
Example
{
  "after": "xyz789",
  "before": "abc123",
  "customerId": "abc123",
  "first": 123,
  "last": 987,
  "search": "xyz789"
}

CreateDiscountInput

Description

Input for creating a new discount. You must specify either amountOff (fixed amount) or percentOff (percentage), but not both. The duration determines how long the discount applies to subscriptions.

Fields
Input Field Description
amountOff - Int Fixed amount to discount in cents (e.g., 500 for $5.00 off). Mutually exclusive with percentOff
availabilitySchedule - ScheduleInput A schedule that describes when this discount is available for redemption (null for always available)
duration - DiscountDuration! How long the discount applies to a subscription
durationInMonths - Int Number of months the discount is applied (required when duration is REPEATING)
maxRedemptions - Int Maximum number of times this discount can be redeemed (null for unlimited)
name - String! Human-readable name for the discount
percentOff - Int Percentage off (e.g., 20 for 20% off). Mutually exclusive with amountOff
redeemBy - DateTime Expiration date for the discount code (null for no expiration)
Example
{
  "amountOff": 987,
  "availabilitySchedule": ScheduleInput,
  "duration": "FOREVER",
  "durationInMonths": 123,
  "maxRedemptions": 123,
  "name": "abc123",
  "percentOff": 123,
  "redeemBy": "2007-12-03T10:15:30Z"
}

CreateNoteInput

Fields
Input Field Description
customerId - ID! The ID of the customer
note - String! The note content
Example
{"customerId": 4, "note": "xyz789"}

CreateOwnerPlanInput

Description

Input for creating a new owner plan

Fields
Input Field Description
city - String City
description - String Description of the owner plan
email - String Email address for the owner
expiresAt - DateTime When this owner plan expires (null for no expiration)
name - String! Name of the owner plan (required)
phone - String Phone number for the owner
state - String State
street1 - String Street address line 1
street2 - String Street address line 2
washPackageId - ID! The wash package ID that this owner plan provides (required)
zip - String ZIP code
Example
{
  "city": "xyz789",
  "description": "abc123",
  "email": "xyz789",
  "expiresAt": "2007-12-03T10:15:30Z",
  "name": "xyz789",
  "phone": "abc123",
  "state": "abc123",
  "street1": "abc123",
  "street2": "abc123",
  "washPackageId": 4,
  "zip": "xyz789"
}

CreateUserInput

Description

Input for creating a new user in the system. Note: If username is provided, either password must be set or issueTempPassword must be true.

Fields
Input Field Description
email - EmailAddress Email address of the user (must be valid email format)
externalId - String Optional external system identifier for the user
groupIds - [String!]! List of group IDs the user should belong to
name - String! Full name of the user
phone - PhoneNumber Phone number of the user (must be valid phone format - example: +12345678901)
username - String Unique username for authentication. If provided, a temporary password will be returned in the response
Example
{
  "email": "test@test.com",
  "externalId": "abc123",
  "groupIds": ["abc123"],
  "name": "xyz789",
  "phone": "+17895551234",
  "username": "xyz789"
}

CreateWashPackageInput

Description

Input for creating a new wash package

Fields
Input Field Description
description - String An optional detailed description of the package
externalId - String An optional reference ID to link this Rollerup package to a system external to Rollerup
name - String! A friendly name for the package
Example
{
  "description": "abc123",
  "externalId": "abc123",
  "name": "xyz789"
}

CustomersInput

Description

Input for searching Rollerup customers with multiple optional filter criteria. Supports cursor-based pagination. Multiple filters are combined using AND logic.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
email - String Filter by customer email address (case-insensitive partial match)
first - Int The number of items to return from the beginning of the list (forward pagination)
isActiveMember - Boolean Filter by active member status. A customer is an active member if they have at least one car assigned to a membership (i.e. a membership_car exists). This is independent of subscription billing status.
last - Int The number of items to return from the end of the list (backward pagination)
lastFour - String Filter by last four digits of payment method (card)
name - String Filter by customer name (case-insensitive partial match)
phone - String Filter by phone number (E.164 exact match if valid, otherwise partial match)
plate - String Filter by vehicle license plate (case-insensitive, normalized)
Example
{
  "after": "abc123",
  "before": "abc123",
  "email": "abc123",
  "first": 987,
  "isActiveMember": false,
  "last": 123,
  "lastFour": "abc123",
  "name": "xyz789",
  "phone": "xyz789",
  "plate": "abc123"
}

CustomersPage

Description

Paginated result for Rollerup customer search queries

Fields
Field Name Description
nodes - [RollerupCustomer!]! List of customers matching the search criteria
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [RollerupCustomer],
  "pageInfo": PageInfo
}

DateTime

Example
"2007-12-03T10:15:30Z"

Discount

Description

Represents a discount that can be applied to subscriptions or purchases. Discounts can be either a fixed amount off or a percentage off the total.

Fields
Field Name Description
amountOff - Int Fixed amount to discount in cents (e.g., 500 for $5.00 off)
availabilitySchedule - Schedule A schedule that describes when this discount is available for redemption (null for always available)
createdAt - DateTime! Timestamp when the discount was created
duration - DiscountDuration! How long the discount applies to a subscription
durationInMonths - Int Number of months the discount is applied (only used when duration is REPEATING)
id - ID! Unique identifier for the discount
maxRedemptions - Int Maximum number of times this discount can be redeemed (null for unlimited)
name - String! Human-readable name for the discount
percentOff - Int Percentage off (e.g., 20 for 20% off)
redeemBy - DateTime Expiration date for the discount code (null for no expiration)
updatedAt - DateTime! Timestamp when the discount was last updated
Example
{
  "amountOff": 123,
  "availabilitySchedule": Schedule,
  "createdAt": "2007-12-03T10:15:30Z",
  "duration": "FOREVER",
  "durationInMonths": 987,
  "id": 4,
  "maxRedemptions": 123,
  "name": "xyz789",
  "percentOff": 123,
  "redeemBy": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z"
}

DiscountDuration

Description

Duration types for how long a discount applies to a subscription

Values
Enum Value Description

FOREVER

Apply discount to all payments indefinitely

ONCE

Apply discount only to the first payment

REPEATING

Apply discount for a specific number of months (requires durationInMonths)
Example
"FOREVER"

DiscountPage

Description

Paginated result for discounts

Fields
Field Name Description
nodes - [Discount!]! List of discounts in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [Discount],
  "pageInfo": PageInfo
}

DiscountQueryInput

Description

Input for querying discounts with optional filter criteria. Supports both forward and backward cursor-based pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
active - Boolean Filter by active status (true for discounts that haven't expired and haven't reached max redemptions)
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
expiresEnd - DateTime Filter for discounts that expire on or before this date
expiresStart - DateTime Filter for discounts that expire on or after this date
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
name - String Filter by discount name (case-insensitive partial match)
Example
{
  "active": false,
  "after": "abc123",
  "before": "xyz789",
  "expiresEnd": "2007-12-03T10:15:30Z",
  "expiresStart": "2007-12-03T10:15:30Z",
  "first": 987,
  "last": 987,
  "name": "xyz789"
}

EmailAddress

Example
"test@test.com"

Employee

Description

Represents an employee. This is backed by the same data as the User model, but with less fields and without the same permission restrictions.

Fields
Field Name Description
car - Car The car assigned to the employee
createdAt - DateTime! Timestamp when the employee was created
externalId - String An id from an system external to Rollerup for reference purposes
id - ID! Unique identifier for the employee
isActive - Boolean! Whether or not the employee is still active in Rollerup
name - String Name of the employee
updatedAt - DateTime! Timestamp when the employee was last updated
Example
{
  "car": Car,
  "createdAt": "2007-12-03T10:15:30Z",
  "externalId": "xyz789",
  "id": "4",
  "isActive": true,
  "name": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z"
}

EmployeesInput

Description

Input for querying employees. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
Example
{
  "after": "abc123",
  "before": "xyz789",
  "first": 987,
  "last": 987
}

EmployeesPage

Description

Paginated result for employee queries

Fields
Field Name Description
nodes - [Employee!]! List of employees in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [Employee],
  "pageInfo": PageInfo
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
987.65

Group

Description

Represents a user group for organizing users and managing permissions

Fields
Field Name Description
description - String Optional description explaining the purpose of the group
id - ID! Unique identifier for the group
isAdmin - Boolean!
name - String! Display name of the group
permissions - [String!]!
slug - String! URL-friendly identifier for the group
Example
{
  "description": "xyz789",
  "id": 4,
  "isAdmin": true,
  "name": "abc123",
  "permissions": ["abc123"],
  "slug": "xyz789"
}

ID

Description

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

Example
"4"

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
123

ListOwnerPlansInput

Description

Pagination input for querying owner plans. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
Example
{
  "after": "xyz789",
  "before": "abc123",
  "first": 987,
  "last": 987
}

ListOwnerVisitsInput

Description

Pagination input for querying owner visits. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
carId - ID if provided filter visits to just those for this particular car
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
ownerPlanId - ID!
Example
{
  "after": "abc123",
  "before": "abc123",
  "carId": "4",
  "first": 123,
  "last": 987,
  "ownerPlanId": "4"
}

LocalDate

Example
"2020-07-19"

Location

Description

Represents a location in the system

Fields
Field Name Description
cashEnabled - Boolean! Whether cash payments are enabled for this location
city - String City
companyId - ID! The company this location belongs to
createdAt - DateTime! Timestamp when the location was created
externalId - String External system identifier for the location
id - ID! Unique identifier for the location
isVirtual - Boolean! Whether this is a virtual location
name - String! Display name of the location
shortName - String Short display name of the location
state - USStateCode State or province
street - String Street address
stripeAccountId - String! The Stripe account ID used by this location
stripeTerminalLocationId - String Stripe terminal location ID
taxEnabled - Boolean! Whether tax calculation is enabled for this location
timezone - String! Location timezone
updatedAt - DateTime! Timestamp when the location was last updated
zip - USPostalCode ZIP or postal code
Example
{
  "cashEnabled": false,
  "city": "abc123",
  "companyId": 4,
  "createdAt": "2007-12-03T10:15:30Z",
  "externalId": "abc123",
  "id": "4",
  "isVirtual": true,
  "name": "xyz789",
  "shortName": "xyz789",
  "state": USStateCode,
  "street": "xyz789",
  "stripeAccountId": "abc123",
  "stripeTerminalLocationId": "abc123",
  "taxEnabled": false,
  "timezone": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z",
  "zip": USPostalCode
}

LocationPage

Description

Paginated result for location queries

Fields
Field Name Description
nodes - [Location!]! List of locations in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [Location],
  "pageInfo": PageInfo
}

LocationQueryInput

Description

Pagination input for querying locations. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
Example
{
  "after": "xyz789",
  "before": "xyz789",
  "first": 123,
  "last": 987
}

Membership

Fields
Field Name Description
active - Boolean! Whether this membership is active
carLimit - Int! Maximum number of cars allowed on this membership
createdAt - DateTime! Timestamp when the membership was created
id - String! Membership ID
isFleet - Boolean! Whether this membership uses fleet-style billing / management
membershipCars - [MembershipCar!]! All cars linked to this membership, including those scheduled for removal
price - Price! Price
priceId - String! Price ID
Example
{
  "active": false,
  "carLimit": 987,
  "createdAt": "2007-12-03T10:15:30Z",
  "id": "abc123",
  "isFleet": true,
  "membershipCars": [MembershipCar],
  "price": Price,
  "priceId": "abc123"
}

MembershipCar

Description

A car linked to a subscription membership, including scheduled end-of-period removal.

Fields
Field Name Description
car - Car! The vehicle
createdAt - DateTime! When this link was created
id - ID!
nickname - String Optional nickname for this vehicle on the membership
removingAt - DateTime When the car is scheduled to be removed (null if not scheduled)
Example
{
  "car": Car,
  "createdAt": "2007-12-03T10:15:30Z",
  "id": 4,
  "nickname": "xyz789",
  "removingAt": "2007-12-03T10:15:30Z"
}

MembershipCarChangeIntent

Description

The kind of change being previewed against a membership's linked cars.

Values
Enum Value Description

add

Adding a new car to the membership

cancel_removal

Cancelling a previously-scheduled removal

remove

Scheduling an existing car for removal at end of period
Example
"add"

MembershipCarChangePreview

Description

Preview of a membership car change. Reflects the upcoming invoice for the proposed change without mutating any state.

Fields
Field Name Description
changeType - SubscriptionChangeType! Whether this change is an upgrade (more cars / charge now) or downgrade
immediateTotal - Int! Amount that would be invoiced immediately, in the smallest currency unit
lineItems - [MembershipCarChangePreviewLineItem!]! Line items for the immediate (proration) preview invoice
newVehicleQuantity - Int! Number of vehicles on the membership after the change is applied
nextBillingDate - DateTime When the next recurring invoice would be billed
nextInvoiceTotal - Int! Total of the next recurring invoice after the change
Example
{
  "changeType": "downgrade",
  "immediateTotal": 123,
  "lineItems": [MembershipCarChangePreviewLineItem],
  "newVehicleQuantity": 987,
  "nextBillingDate": "2007-12-03T10:15:30Z",
  "nextInvoiceTotal": 123
}

MembershipCarChangePreviewLineItem

Description

A line item from the upcoming invoice preview.

Fields
Field Name Description
amount - Int! Amount in the smallest currency unit
description - String Invoice line description (may be null)
proration - Boolean! Whether this line is a proration adjustment
quantity - Int Quantity for this line, when applicable
Example
{
  "amount": 987,
  "description": "xyz789",
  "proration": false,
  "quantity": 123
}

MergeCustomersInput

Description

Input for merging one Rollerup customer into another. The source customer is hard-deleted after dependent records are re-pointed to the target.

Fields
Input Field Description
sourceId - ID! Customer that will be absorbed and hard-deleted
targetId - ID! Customer that will survive and receive the merged data
Example
{
  "sourceId": "4",
  "targetId": "4"
}

MutateUserResponse

Fields
Field Name Description
tempPassword - String A temporary password for the user if username was set
user - User! The newly created user
Example
{
  "tempPassword": "xyz789",
  "user": User
}

Note

Fields
Field Name Description
archivedAt - DateTime The timestamp when the note was archived
archivedBy - Employee The user who archived the note
createdAt - DateTime! The timestamp when the note was created
createdBy - Employee! The user who created the note
customerId - ID! The ID of the customer
id - ID! Unique identifier for the note
note - String! The note content
updatedAt - DateTime! The timestamp when the note was last updated
Example
{
  "archivedAt": "2007-12-03T10:15:30Z",
  "archivedBy": Employee,
  "createdAt": "2007-12-03T10:15:30Z",
  "createdBy": Employee,
  "customerId": 4,
  "id": "4",
  "note": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z"
}

OwnerCar

Description

A vehicle registered to an owner plan

Fields
Field Name Description
createdAt - DateTime! Timestamp when this car was registered to the owner plan
id - ID! Unique identifier for this owner car registration
nickname - String Optional nickname for this vehicle
plate - String the license plate of this vehicle
state - String the state of this vehicle
updatedAt - DateTime! Timestamp when this record was last updated
Example
{
  "createdAt": "2007-12-03T10:15:30Z",
  "id": "4",
  "nickname": "abc123",
  "plate": "abc123",
  "state": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z"
}

OwnerPlan

Description

Full representation of an owner plan with nested relations. Use ownerPlan(id) query to fetch this for detail views.

Fields
Field Name Description
cars - [OwnerCar!]! Vehicles registered to this owner plan
city - String City
createdAt - DateTime! Timestamp when the owner plan was created
description - String Description of the owner plan
email - String Email address for the owner
expiresAt - DateTime When this owner plan expires (null if no expiration)
id - ID! Unique identifier for the owner plan
name - String! Name of the owner plan
phone - String Phone number for the owner
state - String State
street1 - String Street address line 1
street2 - String Street address line 2
updatedAt - DateTime! Timestamp when the owner plan was last updated
washPackage - WashPackage! The wash package that this owner plan provides
washPackageId - ID! The wash package ID that this owner plan provides
zip - String ZIP code
Example
{
  "cars": [OwnerCar],
  "city": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "description": "xyz789",
  "email": "xyz789",
  "expiresAt": "2007-12-03T10:15:30Z",
  "id": "4",
  "name": "abc123",
  "phone": "abc123",
  "state": "xyz789",
  "street1": "xyz789",
  "street2": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z",
  "washPackage": WashPackage,
  "washPackageId": 4,
  "zip": "abc123"
}

OwnerVisit

Description

A wash record for an owner plan

Fields
Field Name Description
car - OwnerCar The car
createdAt - DateTime! Timestamp when the wash occurred
id - ID! Unique identifier for this wash record
visit - Visit! The visit details
Example
{
  "car": OwnerCar,
  "createdAt": "2007-12-03T10:15:30Z",
  "id": "4",
  "visit": Visit
}

OwnerVisitsPage

Fields
Field Name Description
nodes - [OwnerVisit!]! List of owner visits in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [OwnerVisit],
  "pageInfo": PageInfo
}

PageInfo

Fields
Field Name Description
endCursor - String
hasNextPage - Boolean!
hasPreviousPage - Boolean!
startCursor - String
Example
{
  "endCursor": "xyz789",
  "hasNextPage": false,
  "hasPreviousPage": false,
  "startCursor": "abc123"
}

PaidInvoice

Fields
Field Name Description
amountAvailableToRefund - Int! The amount available to refund in cents (total minus already-refunded credit notes)
billingReason - String The billing reason for the paid invoice
card - Card The card used to make the payment, if any
createdAt - DateTime! The date and time the paid invoice was created
customer - SimpleRollerupCustomer The customer who was sold to
employee - Employee The employee who made the sale
id - ID!
invoiceUrl - String The url for the invoice
isRecharge - Boolean! Whether this invoice is a recharge (subscription_cycle billing reason)
isUpdate - Boolean! Whether this invoice is an update (subscription_update billing reason)
lineItems - [SimplePaidInvoiceLineItem!] The line items that were sold in the paid invoice
location - SimpleLocation The location that the paid invoice occurred in
stripeChargeId - String The charge ID associated with the paid invoice
stripeInvoiceId - String The Stripe invoice ID associated with the paid invoice
subscriptionId - String The rollerup subscription ID associated with this paid invoice
total - Int! The total amount of the paid invoice in cents
visit - Visit The visit that the paid invoice occurred in
Example
{
  "amountAvailableToRefund": 123,
  "billingReason": "abc123",
  "card": Card,
  "createdAt": "2007-12-03T10:15:30Z",
  "customer": SimpleRollerupCustomer,
  "employee": Employee,
  "id": 4,
  "invoiceUrl": "xyz789",
  "isRecharge": false,
  "isUpdate": false,
  "lineItems": [SimplePaidInvoiceLineItem],
  "location": SimpleLocation,
  "stripeChargeId": "xyz789",
  "stripeInvoiceId": "abc123",
  "subscriptionId": "xyz789",
  "total": 987,
  "visit": Visit
}

PaidInvoicePage

Fields
Field Name Description
nodes - [PaidInvoice!]!
pageInfo - PageInfo!
Example
{
  "nodes": [PaidInvoice],
  "pageInfo": PageInfo
}

PaidInvoicesQueryInput

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
cardBrand - String If provided, filter by the brand of the card
cardLast4 - String If provided, filter by the last 4 digits of the card
customerId - String If provided, filter to just this customer
employeeId - ID If provided, filter by the ID of the employee
endDate - LocalDate If provided, filter by the end date of the paid invoices
endTime - DateTime If provided, filter by the end time of the paid invoices
first - Int The number of items to return from the beginning of the list (forward pagination)
includeRecharges - Boolean Include recharges (subscription_cycle billing reason)
includeSales - Boolean! Include sales (manual and subscription_create billing reasons). Default = true
includeUpdates - Boolean Include updates (subscription_update billing reason)
last - Int The number of items to return from the end of the list (backward pagination)
locationId - ID If provided, filter by the ID of the location
locationIds - [ID!] If provided, filter to paid invoices at any of these locations. Combined with locationId when both are set.
plate - String If provided, filter by the plate number of the visit
startDate - LocalDate If provided, filter by the start date of the paid invoices
startTime - DateTime If provided, filter by the start time of the paid invoices
total - Int If provided, filter by this total amount in cents
Example
{
  "after": "abc123",
  "before": "xyz789",
  "cardBrand": "abc123",
  "cardLast4": "abc123",
  "customerId": "abc123",
  "employeeId": "4",
  "endDate": "2020-07-19",
  "endTime": "2007-12-03T10:15:30Z",
  "first": 123,
  "includeRecharges": false,
  "includeSales": false,
  "includeUpdates": true,
  "last": 987,
  "locationId": 4,
  "locationIds": ["4"],
  "plate": "xyz789",
  "startDate": "2020-07-19",
  "startTime": "2007-12-03T10:15:30Z",
  "total": 123
}

PaymentMethod

Description

Represents a payment method (source-agnostic)

Fields
Field Name Description
cardBrand - String Card brand (Visa, Mastercard, etc) if applicable
cardLast4 - String Last 4 digits of card if applicable
createdAt - DateTime! Timestamp when the payment method was created
id - ID! Unique identifier
source - PaymentMethodSource! Source of the payment method (stripe, internal, etc)
type - String! Type of payment method (card, cash, other)
Example
{
  "cardBrand": "abc123",
  "cardLast4": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "id": "4",
  "source": "INTERNAL",
  "type": "xyz789"
}

PaymentMethodSource

Description

Source of the payment method (stripe, internal, etc)

Values
Enum Value Description

INTERNAL

STRIPE

Example
"INTERNAL"

PhoneNumber

Description

Phone number scalar that enforces E.164 format (e.g., +1234567890)

Example
"+17895551234"

PlateChange

Description

A record of a plate change (car linked or unlinked from a membership)

Fields
Field Name Description
action - String! Whether the car was linked or unlinked
car - Car! The car that was linked or unlinked
changedBy - User The user who made the change
createdAt - DateTime! Timestamp when the change occurred
exempt - Boolean! Whether this change was exempt from plate change limits
id - ID! Unique identifier
originalCar - Car The original car that was replaced (for swaps)
Example
{
  "action": "abc123",
  "car": Car,
  "changedBy": User,
  "createdAt": "2007-12-03T10:15:30Z",
  "exempt": false,
  "id": 4,
  "originalCar": Car
}

PlateChangeHistoryInput

Description

Input for querying plate change history

Fields
Input Field Description
subscriptionId - String! Subscription ID to get plate change history for
Example
{"subscriptionId": "abc123"}

Prepaid

Description

Represents a prepaid that can be redeemed for wash packages

Fields
Field Name Description
codesPerBook - Int Number of codes per prepaid book (null if not set)
companyId - ID! The company this prepaid belongs to
createdAt - DateTime! Timestamp when the prepaid was created
createdBy - Employee The employee who created this prepaid
createdById - ID The employee who created this prepaid
description - String! Description of what this prepaid provides
exportableCodeCount - Int! Number of codes that can be included in an export (unactivated and not yet exported)
exports - [SimplePrepaidExport!]! List of exports for this prepaid
id - ID! Unique identifier for the prepaid
importedFromSitewatch - Boolean! Whether this prepaid was imported from Sitewatch
maxRedemptionsPerPrepaid - Int Maximum number of times this prepaid can be redeemed per prepaid code
name - String! Human-readable name for the prepaid
updatedAt - DateTime! Timestamp when the prepaid was last updated
washPackage - WashPackage! The wash package that this prepaid provides
washPackageId - ID! The wash package that this prepaid provides
Example
{
  "codesPerBook": 123,
  "companyId": "4",
  "createdAt": "2007-12-03T10:15:30Z",
  "createdBy": Employee,
  "createdById": 4,
  "description": "abc123",
  "exportableCodeCount": 123,
  "exports": [SimplePrepaidExport],
  "id": 4,
  "importedFromSitewatch": true,
  "maxRedemptionsPerPrepaid": 987,
  "name": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z",
  "washPackage": WashPackage,
  "washPackageId": "4"
}

PrepaidBook

Description

Represents a prepaid book that contains prepaid codes

Fields
Field Name Description
activatedAt - DateTime When this book was activated (null if not yet activated)
createdAt - DateTime! Timestamp when the prepaid book was created
id - ID! Unique identifier for the prepaid book
prepaid - Prepaid! The prepaid this book belongs to
prepaidCodes - [PrepaidCode!]! List of prepaid codes in this book
prepaidId - ID! The prepaid this book belongs to
updatedAt - DateTime! Timestamp when the prepaid book was last updated
Example
{
  "activatedAt": "2007-12-03T10:15:30Z",
  "createdAt": "2007-12-03T10:15:30Z",
  "id": 4,
  "prepaid": Prepaid,
  "prepaidCodes": [PrepaidCode],
  "prepaidId": 4,
  "updatedAt": "2007-12-03T10:15:30Z"
}

PrepaidBookPage

Description

Paginated result for prepaid books

Fields
Field Name Description
nodes - [PrepaidBook!]! List of prepaid books in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [PrepaidBook],
  "pageInfo": PageInfo
}

PrepaidBookQueryInput

Description

Pagination input for querying prepaid books. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
code - String Filter by prepaid code string (returns books that contain a matching code)
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
prepaidId - ID Filter by prepaid ID
Example
{
  "after": "abc123",
  "before": "abc123",
  "code": "abc123",
  "first": 123,
  "last": 987,
  "prepaidId": 4
}

PrepaidCode

Description

Represents a prepaid code that can be redeemed for a prepaid

Fields
Field Name Description
activatedAt - DateTime When this code was activated (null if not yet activated)
code - String! The code string that is typically scanned but can also be manually entered
companyId - ID! The company this prepaid code belongs to
createdAt - DateTime! Timestamp when the prepaid code was created
drbBook - Int DRB book number
drbSeries - String DRB series identifier
drbTicket - Int DRB ticket number
id - ID! Unique identifier for the prepaid code
maxRedemptions - Int Maximum number of times this code can be redeemed
prepaid - Prepaid! The prepaid this code applies to
prepaidBookId - ID The prepaid book ID this code belongs to (null if not part of a book)
prepaidExport - SimplePrepaidExport The export this code was included in (null if never exported)
prepaidId - ID! The prepaid this code applies to
redemptions - [PrepaidCodeRedemption!]! List of redemptions for this prepaid code (limited by maxRedemptionsPerPrepaid)
redemptionsCount - Int! Total count of redemptions for this prepaid code
updatedAt - DateTime! Timestamp when the prepaid code was last updated
Example
{
  "activatedAt": "2007-12-03T10:15:30Z",
  "code": "xyz789",
  "companyId": 4,
  "createdAt": "2007-12-03T10:15:30Z",
  "drbBook": 123,
  "drbSeries": "abc123",
  "drbTicket": 123,
  "id": "4",
  "maxRedemptions": 123,
  "prepaid": Prepaid,
  "prepaidBookId": 4,
  "prepaidExport": SimplePrepaidExport,
  "prepaidId": "4",
  "redemptions": [PrepaidCodeRedemption],
  "redemptionsCount": 123,
  "updatedAt": "2007-12-03T10:15:30Z"
}

PrepaidCodePage

Description

Paginated result for prepaid codes

Fields
Field Name Description
nodes - [PrepaidCode!]! List of prepaid codes in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [PrepaidCode],
  "pageInfo": PageInfo
}

PrepaidCodeQueryInput

Description

Pagination input for querying prepaid codes. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
code - String Filter by prepaid code string
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
prepaidBookId - ID Filter by prepaid book ID
prepaidId - ID Filter by prepaid ID
Example
{
  "after": "xyz789",
  "before": "xyz789",
  "code": "xyz789",
  "first": 987,
  "last": 123,
  "prepaidBookId": 4,
  "prepaidId": 4
}

PrepaidCodeRedemption

Description

Represents a redemption of a prepaid code

Fields
Field Name Description
createdAt - DateTime! Timestamp when the redemption was created
id - ID! Unique identifier for the redemption
location - Location! The location where this code was redeemed
locationId - ID! The location where this code was redeemed
prepaidCode - PrepaidCode! The prepaid code that was redeemed
prepaidCodeId - ID! The prepaid code that was redeemed
redeemedAt - DateTime! When this code was redeemed
redeemedBy - Employee The employee who redeemed this code (null if redeemed without an employee)
redeemedById - ID The employee who redeemed this code (null if redeemed without an employee)
updatedAt - DateTime! Timestamp when the redemption was last updated
visitId - ID The visit ID associated with this redemption (null if not associated with a visit)
Example
{
  "createdAt": "2007-12-03T10:15:30Z",
  "id": "4",
  "location": Location,
  "locationId": "4",
  "prepaidCode": PrepaidCode,
  "prepaidCodeId": "4",
  "redeemedAt": "2007-12-03T10:15:30Z",
  "redeemedBy": Employee,
  "redeemedById": "4",
  "updatedAt": "2007-12-03T10:15:30Z",
  "visitId": 4
}

PrepaidCodeRedemptionPage

Description

Paginated result for prepaid code redemptions

Fields
Field Name Description
nodes - [PrepaidCodeRedemption!]! List of redemptions in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [PrepaidCodeRedemption],
  "pageInfo": PageInfo
}

PrepaidCodeRedemptionQueryInput

Description

Pagination input for querying prepaid code redemptions. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
code - String Filter by prepaid code string
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
prepaidId - ID Filter by prepaid ID
Example
{
  "after": "xyz789",
  "before": "xyz789",
  "code": "abc123",
  "first": 987,
  "last": 123,
  "prepaidId": "4"
}

PrepaidPage

Description

Paginated result for prepaids

Fields
Field Name Description
nodes - [Prepaid!]! List of prepaids in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [Prepaid],
  "pageInfo": PageInfo
}

PrepaidQueryInput

Description

Pagination input for querying prepaids. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
code - String Filter by prepaid code string
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
Example
{
  "after": "xyz789",
  "before": "xyz789",
  "code": "xyz789",
  "first": 123,
  "last": 123
}

PreviewMembershipCarChangeInput

Fields
Input Field Description
carId - ID Required when intent is remove or cancel_removal. Must be one of the membership's currently linked cars.
intent - MembershipCarChangeIntent! The kind of change to preview
membershipId - ID! Membership being changed
Example
{
  "carId": "4",
  "intent": "add",
  "membershipId": "4"
}

Price

Description

Represents a price for a wash package with billing details

Fields
Field Name Description
amount - Int! Price amount in cents (e.g., 1999 = $19.99)
archivedReason - ArchivedReason Why this price was archived: USER (manually by a user), SYSTEM (automatically during archive-and-replace), or null if not archived
availabilitySchedule - Schedule A schedule that describes when this price is available for purchase (null for always available)
availableInPos - Boolean! Whether this price is currently available for selection in the POS
availableInUnattended - Boolean! Whether this price is currently available for selection in unattended purchase flow
availableOnline - Boolean! Whether this price is currently available for selection online
billingFrequency - BillingFrequency Billing frequency for subscription prices (null for one-time prices)
createdAt - DateTime! When this price was created
currency - String! Currency code (e.g., 'USD', 'EUR')
discount - Discount An (optional) promotional discount that will be applied to this price at sign-up
displayName - String Operator-editable customer-facing name. When null, the UI falls back to product.name at render time.
id - ID! Unique identifier for the price
internalName - String Admin-only annotation. When set, shown as the primary label in admin tables with the resolved display name as the secondary label.
isArchived - Boolean! Whether this price is archived and no longer active
isDefault - Boolean! Whether this is a default price for the product (automatically assigned to new locations)
name - String! Display name for this price
pricingProfile - PricingProfile The pricing profile this price applies to Use pricingProfiles instead
pricingProfiles - [PricingProfile!]! The pricing profiles this price applies to
product - SimpleProduct The product this price belongs to (null for v1 pricing-profile prices). Lightweight projection — full Product is available via a separate product(id:) query.
sortOrder - Int! Sort order for displaying the price in the POS
tiers - [PriceTier!]! Pricing tiers for graduated pricing (empty for flat-rate prices)
trialDuration - Int Duration of the free trial period (used with trialUnits)
trialUnits - TrialUnits Units for the trial duration (DAYS, WEEKS, or MONTHS)
updatedAt - DateTime! When this price was last updated
washPackage - WashPackage The wash package this price applies to (null for v2 product-catalog prices)
Example
{
  "amount": 123,
  "archivedReason": "CASCADE",
  "availabilitySchedule": Schedule,
  "availableInPos": false,
  "availableInUnattended": true,
  "availableOnline": true,
  "billingFrequency": "MONTHLY",
  "createdAt": "2007-12-03T10:15:30Z",
  "currency": "xyz789",
  "discount": Discount,
  "displayName": "abc123",
  "id": 4,
  "internalName": "abc123",
  "isArchived": false,
  "isDefault": true,
  "name": "xyz789",
  "pricingProfile": PricingProfile,
  "pricingProfiles": [PricingProfile],
  "product": SimpleProduct,
  "sortOrder": 987,
  "tiers": [PriceTier],
  "trialDuration": 123,
  "trialUnits": "DAYS",
  "updatedAt": "2007-12-03T10:15:30Z",
  "washPackage": WashPackage
}

PriceTier

Description

A pricing tier for graduated pricing. Each tier defines a unit price that applies starting at a given quantity.

Fields
Field Name Description
fromQuantity - Int! The quantity at which this tier begins
id - ID! Unique identifier for the tier
unitAmount - Int! Price per unit in cents for this tier
Example
{
  "fromQuantity": 123,
  "id": "4",
  "unitAmount": 123
}

PricingProfile

Description

Represents a Pricing profile in the system

Fields
Field Name Description
createdAt - DateTime! Timestamp when the pricing profile was created
description - String Pricing profile description
id - ID! Unique Pricing profile identifier
locations - [Location!]! Locations associated with the pricing profile
name - String! Pricing profile name
prices - [Price!]! Prices associated with the pricing profile
updatedAt - DateTime! Timestamp when the pricing profile was last updated
Example
{
  "createdAt": "2007-12-03T10:15:30Z",
  "description": "abc123",
  "id": 4,
  "locations": [Location],
  "name": "abc123",
  "prices": [Price],
  "updatedAt": "2007-12-03T10:15:30Z"
}

ProductType

Description

Product type discriminator.

Values
Enum Value Description

GIFT_CARD

PREPAID_WASH_BOOK

RETAIL_WASH

SUBSCRIPTION

Example
"GIFT_CARD"

RRule

Description

RFC-5545 compliant recurrence rule scalar

Example
RRule

RemoveCarFromMembershipInput

Fields
Input Field Description
carId - ID!
membershipId - ID!
Example
{"carId": 4, "membershipId": "4"}

RollerupCustomer

Description

Represents a Rollerup customer with their subscriptions

Fields
Field Name Description
city - String City
country - String Country
createdAt - DateTime! Timestamp when the customer was created
email - EmailAddress Customer's email address
id - ID! Unique identifier
isActiveMember - Boolean! Whether the customer is an active member. True if the customer has at least one car assigned to a membership (i.e. a membership_car exists). This is independent of subscription billing status.
name - String Customer's full name
notes - [Note!]! List of active (non-archived) notes for this customer
phone - PhoneNumber Customer's phone number in E.164 format
state - String State
street1 - String Street address line 1
street2 - String Street address line 2
subscriptions - [RollerupSubscription!]! List of subscriptions for this customer
updatedAt - DateTime! Timestamp when the customer was last updated
zip - String ZIP/postal code
Example
{
  "city": "abc123",
  "country": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "email": "test@test.com",
  "id": "4",
  "isActiveMember": true,
  "name": "abc123",
  "notes": [Note],
  "phone": "+17895551234",
  "state": "abc123",
  "street1": "xyz789",
  "street2": "abc123",
  "subscriptions": [RollerupSubscription],
  "updatedAt": "2007-12-03T10:15:30Z",
  "zip": "xyz789"
}

RollerupSubscription

Fields
Field Name Description
billingCustomerId - String Latest billing provider customer ID (e.g., Stripe 'cus_...') associated with this subscription
billingFrequency - String! Billing frequency
billingSubscriptionId - String Latest billing provider subscription ID (e.g., Stripe 'sub_...') associated with this subscription
cancelAt - DateTime Timestamp when the subscription is scheduled to be cancelled
cancelledAt - DateTime Timestamp when the subscription was cancelled
createdAt - DateTime! Timestamp when the subscription was created
currentPeriodEnd - DateTime! Current period end
currentPeriodStart - DateTime! Current period start
customer - RollerupCustomer Customer for this subscription
customerId - String Customer ID
defaultPaymentMethod - PaymentMethod Default payment method for this subscription
id - String! Subscription ID
location - Location Current location for this subscription
locationId - String Current location ID associated with this subscription
memberships - [Membership!]! Memberships belonging to this subscription
soldAtLocation - SimpleLocation Location where this subscription was sold
soldAtLocationId - String Location ID where this subscription was sold
soldBy - User Employee who sold this subscription
soldById - String Employee ID who sold this subscription
status - String! Status of this subscription
Example
{
  "billingCustomerId": "xyz789",
  "billingFrequency": "abc123",
  "billingSubscriptionId": "xyz789",
  "cancelAt": "2007-12-03T10:15:30Z",
  "cancelledAt": "2007-12-03T10:15:30Z",
  "createdAt": "2007-12-03T10:15:30Z",
  "currentPeriodEnd": "2007-12-03T10:15:30Z",
  "currentPeriodStart": "2007-12-03T10:15:30Z",
  "customer": RollerupCustomer,
  "customerId": "abc123",
  "defaultPaymentMethod": PaymentMethod,
  "id": "xyz789",
  "location": Location,
  "locationId": "abc123",
  "memberships": [Membership],
  "soldAtLocation": SimpleLocation,
  "soldAtLocationId": "abc123",
  "soldBy": User,
  "soldById": "abc123",
  "status": "xyz789"
}

Schedule

Description

A schedule defining availability of a resource (e.g. a price or discount).

All date/time values in a Schedule follow a floating-time convention: they are serialized as UTC but should be interpreted as local times relative to the context in which the schedule is evaluated (typically the location's time zone). For example, a startDate of 2026-02-17T00:00:00Z means "midnight local time on Feb 17", not "midnight UTC".

Fields
Field Name Description
durationMinutes - Int Duration of each recurring event in minutes (required if rrule is present). For example, a recurring event from 8am-9am local time can be represented by: { "rrule": "RRULE:FREQ=DAILY;BYHOUR=8;BYMINUTE=0;BYSECOND=0", "durationMinutes": 60 }
endDate - DateTime When the schedule expires (null means no expiration). Stored as UTC but interpreted as a floating local time — see the Schedule type description.
rrule - RRule Recurrence pattern (null means no recurrence). This follows the RRULE property format from iCalendar (RFC-5545). Note that there are redundant degrees of freedom between the rrule's UNTIL and COUNT rules and the endDate property on the Schedule type. In practice, the value resulting in the soonest expiration will take effect.
startDate - DateTime When the resource becomes active (null means active from when the schedule is created). Stored as UTC but interpreted as a floating local time — see the Schedule type description.
Example
{
  "durationMinutes": 987,
  "endDate": "2007-12-03T10:15:30Z",
  "rrule": RRule,
  "startDate": "2007-12-03T10:15:30Z"
}

ScheduleInput

Description

Input for creating a new Schedule. All DateTime values follow the same floating-time convention described on the Schedule type.

For fixed schedules: one or both of startDate and endDate must be set. For recurring schedules: rrule and durationMinutes must be set.

Fields
Input Field Description
durationMinutes - Int Duration of each recurring event in minutes (required if rrule is present). For example, a recurring event from 8am-9am local time can be represented by: { "rrule": "RRULE:FREQ=DAILY;BYHOUR=8;BYMINUTE=0;BYSECOND=0", "durationMinutes": 60 }
endDate - DateTime When the schedule expires (null means no expiration). Stored as UTC but interpreted as a floating local time.
rrule - RRule Recurrence pattern (null means no recurrence). This follows the RRULE property format from iCalendar (RFC-5545). Note that there are redundant degrees of freedom between the rrule's UNTIL and COUNT rules and the endDate property on the Schedule type. In practice, the value resulting in the soonest expiration will take effect. Additional iCalendar properties (such as DTSTART) are not supported; to restrict the start date of a recurring event, use the startDate property.
startDate - DateTime When the resource becomes active (null means active from when the schedule is created). Stored as UTC but interpreted as a floating local time.
Example
{
  "durationMinutes": 123,
  "endDate": "2007-12-03T10:15:30Z",
  "rrule": RRule,
  "startDate": "2007-12-03T10:15:30Z"
}

SimpleCompany

Description

Simplified company type with minimal fields

Fields
Field Name Description
features - [String!]! Client-visible feature flags enabled for this company
id - ID! Unique identifier for the company
maxCarsPerFamilyMembership - Int Maximum number of cars per family membership
name - String! Company name
slug - String! Company Slug
timezone - String! Company Timezone
Example
{
  "features": ["xyz789"],
  "id": "4",
  "maxCarsPerFamilyMembership": 123,
  "name": "xyz789",
  "slug": "xyz789",
  "timezone": "abc123"
}

SimpleLocation

Description

Represents a location in the system with only primitives and no sensitive settings

Fields
Field Name Description
city - String
createdAt - DateTime!
externalId - String
id - ID!
isVirtual - Boolean!
name - String!
shortName - String
state - USStateCode
street - String
timezone - String!
updatedAt - DateTime!
zip - USPostalCode
Example
{
  "city": "abc123",
  "createdAt": "2007-12-03T10:15:30Z",
  "externalId": "xyz789",
  "id": "4",
  "isVirtual": true,
  "name": "xyz789",
  "shortName": "abc123",
  "state": USStateCode,
  "street": "abc123",
  "timezone": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z",
  "zip": USPostalCode
}

SimpleOwnerPlan

Description

Simple flat representation of an owner plan without nested relations.

Fields
Field Name Description
city - String City
createdAt - DateTime! Timestamp when the owner plan was created
description - String Description of the owner plan
email - String Email address for the owner
expiresAt - DateTime When this owner plan expires (null if no expiration)
id - ID! Unique identifier for the owner plan
name - String! Name of the owner plan
phone - String Phone number for the owner
state - String State
street1 - String Street address line 1
street2 - String Street address line 2
updatedAt - DateTime! Timestamp when the owner plan was last updated
washPackageId - ID! The wash package ID that this owner plan provides
zip - String ZIP code
Example
{
  "city": "abc123",
  "createdAt": "2007-12-03T10:15:30Z",
  "description": "xyz789",
  "email": "abc123",
  "expiresAt": "2007-12-03T10:15:30Z",
  "id": "4",
  "name": "abc123",
  "phone": "abc123",
  "state": "xyz789",
  "street1": "xyz789",
  "street2": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z",
  "washPackageId": 4,
  "zip": "abc123"
}

SimpleOwnerPlansPage

Description

Paginated result for simple owner plan queries

Fields
Field Name Description
nodes - [SimpleOwnerPlan!]! List of owner plans in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [SimpleOwnerPlan],
  "pageInfo": PageInfo
}

SimplePaidInvoiceLineItem

Fields
Field Name Description
id - ID!
price - Int The price of the product that was sold
productName - String The name of the product that was sold (from Stripe at sync time)
quantity - Int The quantity of the product that was sold
Example
{
  "id": 4,
  "price": 987,
  "productName": "abc123",
  "quantity": 987
}

SimplePrepaidExport

Description

Minimal prepaid export fields for list display (e.g. on Prepaid.exports).

Fields
Field Name Description
exportedAt - DateTime! When this export was created
exportedBy - Employee The employee who created this export
exportedCodeCount - Int! Number of codes included in this export
id - ID! Unique identifier for the export
Example
{
  "exportedAt": "2007-12-03T10:15:30Z",
  "exportedBy": Employee,
  "exportedCodeCount": 123,
  "id": "4"
}

SimpleProduct

Description

Lightweight projection of Product — scalar fields only, no relational joins or computed aggregates. Used by list payloads like Price.product so paginated responses don't fan out into per-row activeLocationCount and productPrices resolutions.

Fields
Field Name Description
id - ID! Unique identifier for the product
isArchived - Boolean! Whether this product is archived. Mirrors Product.isArchived — lets list payloads render an 'on archived product' indicator without a second per-row query.
name - String! Human-readable name for the product
productType - ProductType! The kind of product
Example
{
  "id": 4,
  "isArchived": false,
  "name": "abc123",
  "productType": "GIFT_CARD"
}

SimpleRollerupCustomer

Fields
Field Name Description
city - String
country - String
createdAt - DateTime!
email - EmailAddress
id - ID!
name - String
phone - PhoneNumber
state - String
street1 - String
street2 - String
updatedAt - DateTime!
zip - String
Example
{
  "city": "xyz789",
  "country": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "email": "test@test.com",
  "id": 4,
  "name": "abc123",
  "phone": "+17895551234",
  "state": "abc123",
  "street1": "abc123",
  "street2": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z",
  "zip": "xyz789"
}

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"xyz789"

StripeAccount

Description

Represents a Stripe account in the system

Fields
Field Name Description
city - String City
companyId - ID The company this Stripe account belongs to
createdAt - DateTime! Timestamp when the account was created
id - String! Unique Stripe account identifier
name - String Account name
requirements - StripeAccountRequirements Stripe account requirements for onboarding
state - USStateCode State
street - String Street address
updatedAt - DateTime! Timestamp when the account was last updated
zip - USPostalCode ZIP or postal code
Example
{
  "city": "xyz789",
  "companyId": 4,
  "createdAt": "2007-12-03T10:15:30Z",
  "id": "abc123",
  "name": "xyz789",
  "requirements": StripeAccountRequirements,
  "state": USStateCode,
  "street": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z",
  "zip": USPostalCode
}

StripeAccountPage

Description

Paginated result for Stripe account queries

Fields
Field Name Description
nodes - [StripeAccount!]! List of Stripe accounts in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [StripeAccount],
  "pageInfo": PageInfo
}

StripeAccountQueryInput

Description

Pagination input for querying Stripe accounts. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
first - Int The number of items to return from the beginning of the list (forward pagination)
last - Int The number of items to return from the end of the list (backward pagination)
Example
{
  "after": "xyz789",
  "before": "xyz789",
  "first": 123,
  "last": 987
}

StripeAccountRequirements

Description

Stripe account requirements for onboarding and compliance

Fields
Field Name Description
currentlyDue - [String!] Currently due requirements
disabledReason - String Disabled reason
eventuallyDue - [String!] Eventually due requirements
pastDue - [String!] Past due requirements
pendingVerification - [String!] Pending verification requirements
Example
{
  "currentlyDue": ["xyz789"],
  "disabledReason": "xyz789",
  "eventuallyDue": ["abc123"],
  "pastDue": ["abc123"],
  "pendingVerification": ["xyz789"]
}

StripeCustomer

Description

Represents a Stripe customer in the system

Fields
Field Name Description
companyId - ID! The company this Stripe customer belongs to
createdAt - DateTime! Timestamp when the customer was created
defaultPaymentMethodId - String Default payment method ID
description - String Customer description
email - String Customer email address
id - String! Unique Stripe customer identifier
isDeleted - Boolean! Whether the customer is deleted
isPhoneValid - Boolean! Whether the phone number is valid
memberships - [StripeCustomerMembership!]! Customer memberships with detailed information
name - String Customer name
phone - String Customer phone number
phoneE164 - String Customer phone number in E.164 format
referralCode - String! Customer referral code
updatedAt - DateTime! Timestamp when the customer was last updated
Example
{
  "companyId": "4",
  "createdAt": "2007-12-03T10:15:30Z",
  "defaultPaymentMethodId": "abc123",
  "description": "xyz789",
  "email": "xyz789",
  "id": "xyz789",
  "isDeleted": false,
  "isPhoneValid": false,
  "memberships": [StripeCustomerMembership],
  "name": "abc123",
  "phone": "xyz789",
  "phoneE164": "xyz789",
  "referralCode": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z"
}

StripeCustomerMembership

Description

Represents a customer membership with subscription details

Fields
Field Name Description
banId - String Ban ID if plate is banned
cancelAtPeriodEnd - Boolean! Cancel at period end
canceledAt - DateTime Canceled at timestamp
companyId - String! Company ID
createdAt - DateTime! Created timestamp
currentPeriodEnd - DateTime Current period end
currentPeriodStart - DateTime Current period start
description - String Product description
hasBan - Boolean! Whether the plate is banned
id - String! Subscription ID
name - String Product name
recurringInterval - String Recurring interval
recurringIntervalCount - Int Recurring interval count
soldByBadge - String Sold by employee badge
soldByName - String Sold by employee name
status - String! Subscription status
stripeAccountId - String! Stripe account ID
stripeCustomerId - String! Customer ID
updatedAt - DateTime! Updated timestamp
Example
{
  "banId": "xyz789",
  "cancelAtPeriodEnd": false,
  "canceledAt": "2007-12-03T10:15:30Z",
  "companyId": "abc123",
  "createdAt": "2007-12-03T10:15:30Z",
  "currentPeriodEnd": "2007-12-03T10:15:30Z",
  "currentPeriodStart": "2007-12-03T10:15:30Z",
  "description": "abc123",
  "hasBan": false,
  "id": "abc123",
  "name": "abc123",
  "recurringInterval": "xyz789",
  "recurringIntervalCount": 123,
  "soldByBadge": "xyz789",
  "soldByName": "xyz789",
  "status": "xyz789",
  "stripeAccountId": "abc123",
  "stripeCustomerId": "xyz789",
  "updatedAt": "2007-12-03T10:15:30Z"
}

SubscriptionChangeType

Values
Enum Value Description

downgrade

upgrade

Example
"downgrade"

TrialUnits

Description

Trial period units for free trial durations

Values
Enum Value Description

DAYS

Duration specified in days

MONTHS

Duration specified in months

WEEKS

Duration specified in weeks
Example
"DAYS"

USPostalCode

Description

Postal code scalar that enforces valid US postal code format

Example
USPostalCode

USStateCode

Description

State code scalar that enforces valid 2-character USPS state code format

Example
USStateCode

UpdateCustomerInput

Description

Input for updating a Rollerup customer. Only fields provided are updated.

Fields
Input Field Description
email - EmailAddress Customer email
id - ID! Customer ID
name - String Customer name
phone - PhoneNumber Customer phone
Example
{
  "email": "test@test.com",
  "id": "4",
  "name": "abc123",
  "phone": "+17895551234"
}

UpdateOwnerPlanCarInput

Description

Input for updating a car on an owner plan

Fields
Input Field Description
id - ID! The ID of the owner plan car to update (required)
nickname - String Nickname for this vehicle
plate - String License plate number
state - String State/region of registration
Example
{
  "id": "4",
  "nickname": "abc123",
  "plate": "abc123",
  "state": "xyz789"
}

UpdateOwnerPlanInput

Description

Input for updating an existing owner plan. All fields except 'id' are optional.

Fields
Input Field Description
city - String City
description - String Description of the owner plan
email - String Email address for the owner
expiresAt - DateTime When this owner plan expires (null for no expiration)
id - ID! The ID of the owner plan to update (required)
name - String Name of the owner plan
phone - String Phone number for the owner
state - String State
street1 - String Street address line 1
street2 - String Street address line 2
washPackageId - ID The wash package ID that this owner plan provides
zip - String ZIP code
Example
{
  "city": "xyz789",
  "description": "xyz789",
  "email": "abc123",
  "expiresAt": "2007-12-03T10:15:30Z",
  "id": 4,
  "name": "abc123",
  "phone": "abc123",
  "state": "abc123",
  "street1": "xyz789",
  "street2": "xyz789",
  "washPackageId": 4,
  "zip": "abc123"
}

UpdateUserInput

Description

Input for updating an existing user. All fields except 'id' are optional

Fields
Input Field Description
email - EmailAddress Update the user's email address (must be valid email format)
externalId - String Update the external system identifier
groupIds - [String!] Update the list of group IDs the user belongs to
id - ID! The unique identifier of the user to update
name - String Update the user's full name
phone - PhoneNumber Update the user's phone number (must be valid phone format)
resetPassword - Boolean If true, generates a new temporary password that must be changed on next login
username - String Update the username for authentication. If username was not set before, a temporary password will be returned in the response
Example
{
  "email": "test@test.com",
  "externalId": "abc123",
  "groupIds": ["xyz789"],
  "id": "4",
  "name": "abc123",
  "phone": "+17895551234",
  "resetPassword": false,
  "username": "abc123"
}

UpdateWashPackageInput

Description

Input for updating an existing wash package. All fields except 'id' are optional.

Fields
Input Field Description
description - String An optional detailed description of the package
externalId - String An optional reference ID to link this Rollerup package to a system external to Rollerup
id - ID! The ID of the Wash package to update
name - String A friendly name for the package
Example
{
  "description": "xyz789",
  "externalId": "abc123",
  "id": "4",
  "name": "abc123"
}

User

Description

Represents a user in the system

Fields
Field Name Description
company - SimpleCompany! The company this user belongs to
createdAt - DateTime! Timestamp when the user was created
email - EmailAddress Email address of the user
externalId - String External system identifier for the user
groups - [Group!]! Groups this user belongs to
id - ID! Unique identifier for the user
isActive - Boolean! Indicates if the user is active and able to authenticate. If not can be reactivated with 'reactivateUser' mutation
name - String Full name of the user
permissions - [String!]! List of permissions granted to this user (derived from groups and direct assignments)
phone - PhoneNumber Phone number of the user
updatedAt - DateTime! Timestamp when the user was last updated
username - String Username used for authentication
Example
{
  "company": SimpleCompany,
  "createdAt": "2007-12-03T10:15:30Z",
  "email": "test@test.com",
  "externalId": "xyz789",
  "groups": [Group],
  "id": "4",
  "isActive": true,
  "name": "abc123",
  "permissions": ["abc123"],
  "phone": "+17895551234",
  "updatedAt": "2007-12-03T10:15:30Z",
  "username": "xyz789"
}

UserPage

Description

Paginated result for user queries

Fields
Field Name Description
nodes - [User!]! List of users in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [User],
  "pageInfo": PageInfo
}

UserQueryInput

Description

Pagination input for querying users. Supports both forward and backward pagination. Use 'first' and 'after' for forward pagination, or 'last' and 'before' for backward pagination.

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
email - String if provided, filter users by email
first - Int The number of items to return from the beginning of the list (forward pagination)
includeInactive - Boolean When true, include inactive users in results. Defaults to false (only active users returned). Default = false
last - Int The number of items to return from the end of the list (backward pagination)
name - String if provided, filter users by name
phone - String if provided, filter users by phone
username - String if provided, filter users by username
Example
{
  "after": "xyz789",
  "before": "abc123",
  "email": "xyz789",
  "first": 987,
  "includeInactive": false,
  "last": 123,
  "name": "xyz789",
  "phone": "abc123",
  "username": "abc123"
}

Visit

Description

Represents a visit to a location

Fields
Field Name Description
createdAt - DateTime! The timestamp when the visit was created
employee - Employee The employee who processed the visit
id - ID! The unique identifier for the visit
imageUrl - String The URL of the image of the car. This is a signed URL for our object storage that will expire.
isExternalMember - Boolean! Whether or not this is a member in an external system. Primarily useful during onboarding. Will always be false if visit type is not 'member'.
isSale - Boolean! Whether or not this visit included a membership signup or wash purchase.
laneId - String The lane ID where the visit occurred
lprOverridden - Boolean Whether the LPR data has been overridden
lprPlate - String The plate as seen by LPR
lprState - String The state as seen by LPR
plate - String The plate number of the vehicle
plateImageUrl - String The URL of the plate image. This is a signed URL for our object storage that will expire.
rfidTag - String The RFID tag of the vehicle
state - String The state of the vehicle
status - String! The status of the visit
stripeSubscriptionId - String The Stripe subscription ID for the visit Will be replaced with Membership IDs
timeTotal - Float The total time the visit took in seconds.
timeWaitingForAttendant - Float The time the visit spent waiting for the attendant in seconds.
timeWaitingForGate - Float The time the visit spent waiting for the gate to open in seconds.
timeWithAttendant - Float The time the visit spent with the attendant in seconds.
updatedAt - DateTime! The timestamp when the visit was last updated
visitType - String The type of visit
washPackage - WashPackage The wash package for the visit
Example
{
  "createdAt": "2007-12-03T10:15:30Z",
  "employee": Employee,
  "id": "4",
  "imageUrl": "abc123",
  "isExternalMember": false,
  "isSale": false,
  "laneId": "xyz789",
  "lprOverridden": true,
  "lprPlate": "abc123",
  "lprState": "abc123",
  "plate": "xyz789",
  "plateImageUrl": "abc123",
  "rfidTag": "xyz789",
  "state": "abc123",
  "status": "abc123",
  "stripeSubscriptionId": "abc123",
  "timeTotal": 987.65,
  "timeWaitingForAttendant": 123.45,
  "timeWaitingForGate": 987.65,
  "timeWithAttendant": 987.65,
  "updatedAt": "2007-12-03T10:15:30Z",
  "visitType": "xyz789",
  "washPackage": WashPackage
}

VisitsInput

Description

Options for setting pagination and filtering for the visits query

Fields
Input Field Description
after - String A cursor for pagination, returns items after this cursor (forward pagination)
before - String A cursor for pagination, returns items before this cursor (backward pagination)
carId - String If set will only return visits matching this car ID
first - Int The number of items to return from the beginning of the list (forward pagination)
isSale - Boolean If set will only return visits that are sales
last - Int The number of items to return from the end of the list (backward pagination)
locationId - String
plate - String If set will only return visits matching this plate number (case insensitive)
state - String If set will only return visits matching this state (case insensitive)
status - String If set will only return visits matching this status (case insensitive)
visitType - String If set will only return visits matching this visit type (case insensitive)
Example
{
  "after": "abc123",
  "before": "abc123",
  "carId": "xyz789",
  "first": 987,
  "isSale": true,
  "last": 987,
  "locationId": "xyz789",
  "plate": "abc123",
  "state": "xyz789",
  "status": "xyz789",
  "visitType": "xyz789"
}

VisitsPage

Description

Paginated result for visit queries

Fields
Field Name Description
nodes - [Visit!]! List of visits in the current page
pageInfo - PageInfo! Pagination metadata including cursors and page position
Example
{
  "nodes": [Visit],
  "pageInfo": PageInfo
}

WashPackage

Description

Represents a Wash package in Rollerup

Fields
Field Name Description
createdAt - DateTime! Timestamp when the package was created
description - String An optional detailed description of the package
externalId - String An optional reference ID to link this Rollerup package to a system external to Rollerup
id - ID! Unique Wash package identifier
name - String! A friendly name for the package
updatedAt - DateTime! Timestamp when the package was last updated
Example
{
  "createdAt": "2007-12-03T10:15:30Z",
  "description": "xyz789",
  "externalId": "abc123",
  "id": "4",
  "name": "abc123",
  "updatedAt": "2007-12-03T10:15:30Z"
}