GraphQL Schema
RollerUp GraphQL API schema reference
API Endpoints
https://api.rollerup.tech/graphql
Queries
car
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": "xyz789",
"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": "abc123",
"nickname": "xyz789",
"plate": "xyz789",
"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
externalBillingId
id
isActiveMember
isExternallyManaged
name
notes {
...NoteFragment
}
phone
state
street1
street2
subscriptions {
...RollerupSubscriptionFragment
}
updatedAt
zip
}
}
Variables
{"id": 4}
Response
{
"data": {
"customer": {
"city": "xyz789",
"country": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"email": "test@test.com",
"externalBillingId": "xyz789",
"id": 4,
"isActiveMember": false,
"isExternallyManaged": true,
"name": "xyz789",
"notes": [Note],
"phone": "+17895551234",
"state": "xyz789",
"street1": "abc123",
"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
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": 123,
"id": 4,
"maxRedemptions": 987,
"name": "xyz789",
"percentOff": 987,
"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
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": "xyz789",
"id": 4,
"isActive": true,
"name": "xyz789",
"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
}
}
}
fleet
Example
Query
query fleet($id: ID!) {
fleet(id: $id) {
businessName
city
company {
...SimpleCompanyFragment
}
contactName
country
createdAt
createdBy {
...EmployeeFragment
}
customer {
...RollerupCustomerFragment
}
customerId
description
email
fleetInvitation {
...FleetInvitationFragment
}
id
location {
...SimpleLocationFragment
}
locationId
membership {
...SimpleMembershipFragment
}
membershipId
phone
price {
...PriceFragment
}
priceId
state
street1
street2
subscription {
...RollerupSubscriptionFragment
}
subscriptionId
updatedAt
updatedBy {
...EmployeeFragment
}
zip
}
}
Variables
{"id": 4}
Response
{
"data": {
"fleet": {
"businessName": "abc123",
"city": "abc123",
"company": SimpleCompany,
"contactName": "abc123",
"country": "xyz789",
"createdAt": "2007-12-03T10:15:30Z",
"createdBy": Employee,
"customer": RollerupCustomer,
"customerId": "4",
"description": "xyz789",
"email": "test@test.com",
"fleetInvitation": FleetInvitation,
"id": 4,
"location": SimpleLocation,
"locationId": 4,
"membership": SimpleMembership,
"membershipId": 4,
"phone": "+17895551234",
"price": Price,
"priceId": "4",
"state": USStateCode,
"street1": "abc123",
"street2": "abc123",
"subscription": RollerupSubscription,
"subscriptionId": "abc123",
"updatedAt": "2007-12-03T10:15:30Z",
"updatedBy": Employee,
"zip": USPostalCode
}
}
}
fleets
Response
Returns a FleetPage!
Arguments
| Name | Description |
|---|---|
input - FleetsQueryInput
|
Example
Query
query fleets($input: FleetsQueryInput) {
fleets(input: $input) {
nodes {
...FleetFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{"input": FleetsQueryInput}
Response
{
"data": {
"fleets": {
"nodes": [Fleet],
"pageInfo": PageInfo
}
}
}
group
Example
Query
query group($id: ID!) {
group(id: $id) {
description
id
isAdmin
name
permissions
slug
}
}
Variables
{"id": 4}
Response
{
"data": {
"group": {
"description": "xyz789",
"id": "4",
"isAdmin": false,
"name": "xyz789",
"permissions": ["abc123"],
"slug": "xyz789"
}
}
}
groups
Response
Returns [Group!]!
Example
Query
query groups {
groups {
description
id
isAdmin
name
permissions
slug
}
}
Response
{
"data": {
"groups": [
{
"description": "abc123",
"id": 4,
"isAdmin": true,
"name": "abc123",
"permissions": ["xyz789"],
"slug": "abc123"
}
]
}
}
isCarActive
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
Example
Query
query location($id: ID!) {
location(id: $id) {
cashEnabled
city
companyId
createdAt
externalId
id
interiorEnabled
isVirtual
name
shortName
state
street
stripeAccountId
stripeTerminalLocationId
taxEnabled
timezone
tipsEnabled
updatedAt
zip
}
}
Variables
{"id": "4"}
Response
{
"data": {
"location": {
"cashEnabled": false,
"city": "xyz789",
"companyId": 4,
"createdAt": "2007-12-03T10:15:30Z",
"externalId": "xyz789",
"id": "4",
"interiorEnabled": true,
"isVirtual": false,
"name": "abc123",
"shortName": "abc123",
"state": USStateCode,
"street": "xyz789",
"stripeAccountId": "abc123",
"stripeTerminalLocationId": "xyz789",
"taxEnabled": true,
"timezone": "xyz789",
"tipsEnabled": true,
"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
}
}
}
membership
Description
Get a single membership by ID. Returns null if not found.
Response
Returns a Membership
Arguments
| Name | Description |
|---|---|
id - ID!
|
Membership ID |
Example
Query
query membership($id: ID!) {
membership(id: $id) {
active
cancelAt
carLimit
createdAt
currentPeriodEnd
currentPeriodStart
endedAt
id
isExternallyManaged
isFleet
membershipCars {
...MembershipCarFragment
}
price {
...PriceFragment
}
priceId
status
trialEndAt
}
}
Variables
{"id": 4}
Response
{
"data": {
"membership": {
"active": false,
"cancelAt": "2007-12-03T10:15:30Z",
"carLimit": 987,
"createdAt": "2007-12-03T10:15:30Z",
"currentPeriodEnd": "2007-12-03T10:15:30Z",
"currentPeriodStart": "2007-12-03T10:15:30Z",
"endedAt": "2007-12-03T10:15:30Z",
"id": "xyz789",
"isExternallyManaged": false,
"isFleet": true,
"membershipCars": [MembershipCar],
"price": Price,
"priceId": "xyz789",
"status": "xyz789",
"trialEndAt": "2007-12-03T10:15:30Z"
}
}
}
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"
}
]
}
}
membershipSearch
Description
Search memberships using flexible filters (plate, RFID, name, card last four, start date). Supports cursor-based pagination. Multiple filters are combined using AND logic.
Results carry only the SimpleMembership projection — they do not surface which specific car matched a plate/state/rfid filter, nor whether that car is currently linked or scheduled for removal. To inspect car-level detail for a result, follow up with membership(id:) and read membershipCars.
Response
Returns a MembershipSearchPage!
Arguments
| Name | Description |
|---|---|
input - MembershipSearchInput!
|
Example
Query
query membershipSearch($input: MembershipSearchInput!) {
membershipSearch(input: $input) {
nodes {
...SimpleMembershipFragment
}
pageInfo {
...PageInfoFragment
}
}
}
Variables
{"input": MembershipSearchInput}
Response
{
"data": {
"membershipSearch": {
"nodes": [SimpleMembership],
"pageInfo": PageInfo
}
}
}
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": "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": "xyz789"
}
}
}
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": false,
"isUpdate": true,
"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": true,
"id": 4,
"originalCar": Car
}
]
}
}
prepaid
Description
Retrieve a single prepaid by its unique 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": "xyz789",
"exportableCodeCount": 987,
"exports": [SimplePrepaidExport],
"id": "4",
"importedFromSitewatch": false,
"maxRedemptionsPerPrepaid": 123,
"name": "abc123",
"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.
Example
Query
query prepaidExportDownloadUrl($prepaidExportId: ID!) {
prepaidExportDownloadUrl(prepaidExportId: $prepaidExportId)
}
Variables
{"prepaidExportId": 4}
Response
{
"data": {
"prepaidExportDownloadUrl": "abc123"
}
}
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
currentPrice {
...PriceFragment
}
immediateTotal
lineItems {
...MembershipCarChangePreviewLineItemFragment
}
newVehicleQuantity
nextBillingDate
nextInvoiceTotal
targetPrice {
...PriceFragment
}
}
}
Variables
{"input": PreviewMembershipCarChangeInput}
Response
{
"data": {
"previewMembershipCarChange": {
"changeType": "downgrade",
"currentPrice": Price,
"immediateTotal": 123,
"lineItems": [MembershipCarChangePreviewLineItem],
"newVehicleQuantity": 987,
"nextBillingDate": "2007-12-03T10:15:30Z",
"nextInvoiceTotal": 987,
"targetPrice": Price
}
}
}
pumpWashCodeByCode
Description
Find the most recent pump wash code matching an exact 5-digit code, or null if none exists.
Response
Returns a PumpWashCode
Arguments
| Name | Description |
|---|---|
code - String!
|
Example
Query
query pumpWashCodeByCode($code: String!) {
pumpWashCodeByCode(code: $code) {
activatedAt
code
createdAt
expiration
id
locationId
pumpWashControllerId
pumpWashPackage {
...PumpWashPackageFragment
}
pumpWashPackageId
redeemedAt
redeemedById
updatedAt
visitId
}
}
Variables
{"code": "abc123"}
Response
{
"data": {
"pumpWashCodeByCode": {
"activatedAt": "2007-12-03T10:15:30Z",
"code": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"expiration": "2007-12-03T10:15:30Z",
"id": "4",
"locationId": "4",
"pumpWashControllerId": 4,
"pumpWashPackage": PumpWashPackage,
"pumpWashPackageId": 4,
"redeemedAt": "2007-12-03T10:15:30Z",
"redeemedById": "4",
"updatedAt": "2007-12-03T10:15:30Z",
"visitId": 4
}
}
}
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": "abc123",
"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
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": "xyz789",
"groups": [Group],
"id": 4,
"isActive": false,
"name": "abc123",
"permissions": ["abc123"],
"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": "xyz789",
"groups": [Group],
"id": "4",
"isActive": true,
"name": "xyz789",
"permissions": ["abc123"],
"phone": "+17895551234",
"updatedAt": "2007-12-03T10:15:30Z",
"username": "abc123"
}
}
}
visit
Description
Get a single visit by ID
Example
Query
query visit($id: ID!) {
visit(id: $id) {
car {
...CarFragment
}
carId
createdAt
employee {
...EmployeeFragment
}
id
imageUrl
isExternalMember
isSale
laneId
locationId
lprOverridden
lprPlate
lprState
membershipId
plate
plateImageUrl
rfidTag
state
status
stripeSubscriptionId
timeTotal
timeWaitingForAttendant
timeWaitingForGate
timeWithAttendant
updatedAt
visitType
washPackage {
...WashPackageFragment
}
washPackageId
}
}
Variables
{"id": "4"}
Response
{
"data": {
"visit": {
"car": Car,
"carId": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"employee": Employee,
"id": 4,
"imageUrl": "xyz789",
"isExternalMember": true,
"isSale": true,
"laneId": "xyz789",
"locationId": "xyz789",
"lprOverridden": true,
"lprPlate": "abc123",
"lprState": "abc123",
"membershipId": "xyz789",
"plate": "abc123",
"plateImageUrl": "abc123",
"rfidTag": "abc123",
"state": "abc123",
"status": "xyz789",
"stripeSubscriptionId": "abc123",
"timeTotal": 987.65,
"timeWaitingForAttendant": 987.65,
"timeWaitingForGate": 987.65,
"timeWithAttendant": 123.45,
"updatedAt": "2007-12-03T10:15:30Z",
"visitType": "abc123",
"washPackage": WashPackage,
"washPackageId": "abc123"
}
}
}
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
includesInterior
name
updatedAt
}
}
Variables
{"id": 4}
Response
{
"data": {
"washPackage": {
"createdAt": "2007-12-03T10:15:30Z",
"description": "abc123",
"externalId": "abc123",
"id": 4,
"includesInterior": false,
"name": "xyz789",
"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
includesInterior
name
updatedAt
}
}
Response
{
"data": {
"washPackages": [
{
"createdAt": "2007-12-03T10:15:30Z",
"description": "xyz789",
"externalId": "abc123",
"id": 4,
"includesInterior": false,
"name": "abc123",
"updatedAt": "2007-12-03T10:15:30Z"
}
]
}
}
Mutations
addCarToFleet
Response
Returns an ID!
Arguments
| Name | Description |
|---|---|
input - AddCarToFleetInput!
|
Example
Query
mutation addCarToFleet($input: AddCarToFleetInput!) {
addCarToFleet(input: $input)
}
Variables
{"input": AddCarToFleetInput}
Response
{"data": {"addCarToFleet": "4"}}
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": "abc123",
"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": "abc123",
"state": "xyz789",
"updatedAt": "2007-12-03T10:15:30Z"
}
}
}
archiveNote
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": "abc123",
"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"
}
}
}
cancelCarRemovalFromFleet
Response
Returns an ID!
Arguments
| Name | Description |
|---|---|
input - CancelCarRemovalFromFleetInput!
|
Example
Query
mutation cancelCarRemovalFromFleet($input: CancelCarRemovalFromFleetInput!) {
cancelCarRemovalFromFleet(input: $input)
}
Variables
{"input": CancelCarRemovalFromFleetInput}
Response
{"data": {"cancelCarRemovalFromFleet": "4"}}
cancelFleet
Response
Returns an ID!
Arguments
| Name | Description |
|---|---|
input - CancelFleetInput!
|
Example
Query
mutation cancelFleet($input: CancelFleetInput!) {
cancelFleet(input: $input)
}
Variables
{"input": CancelFleetInput}
Response
{"data": {"cancelFleet": 4}}
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": "xyz789",
"percentOff": 987,
"redeemBy": "2007-12-03T10:15:30Z",
"updatedAt": "2007-12-03T10:15:30Z"
}
}
}
createFleet
Response
Returns a FleetInvitationPayload!
Arguments
| Name | Description |
|---|---|
input - CreateFleetInput!
|
Example
Query
mutation createFleet($input: CreateFleetInput!) {
createFleet(input: $input) {
code
fleet {
...FleetFragment
}
}
}
Variables
{"input": CreateFleetInput}
Response
{
"data": {
"createFleet": {
"code": "abc123",
"fleet": Fleet
}
}
}
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": "abc123",
"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": "xyz789",
"expiresAt": "2007-12-03T10:15:30Z",
"id": "4",
"name": "xyz789",
"phone": "abc123",
"state": "abc123",
"street1": "abc123",
"street2": "abc123",
"updatedAt": "2007-12-03T10:15:30Z",
"washPackage": WashPackage,
"washPackageId": "4",
"zip": "xyz789"
}
}
}
createPumpWashCode
Description
Create a pump wash code from a controller/PLC event
Response
Returns a PumpWashCode!
Arguments
| Name | Description |
|---|---|
input - CreatePumpWashCodeInput!
|
Example
Query
mutation createPumpWashCode($input: CreatePumpWashCodeInput!) {
createPumpWashCode(input: $input) {
activatedAt
code
createdAt
expiration
id
locationId
pumpWashControllerId
pumpWashPackage {
...PumpWashPackageFragment
}
pumpWashPackageId
redeemedAt
redeemedById
updatedAt
visitId
}
}
Variables
{"input": CreatePumpWashCodeInput}
Response
{
"data": {
"createPumpWashCode": {
"activatedAt": "2007-12-03T10:15:30Z",
"code": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"expiration": "2007-12-03T10:15:30Z",
"id": "4",
"locationId": 4,
"pumpWashControllerId": 4,
"pumpWashPackage": PumpWashPackage,
"pumpWashPackageId": 4,
"redeemedAt": "2007-12-03T10:15:30Z",
"redeemedById": 4,
"updatedAt": "2007-12-03T10:15:30Z",
"visitId": "4"
}
}
}
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
includesInterior
name
updatedAt
}
}
Variables
{"input": CreateWashPackageInput}
Response
{
"data": {
"createWashPackage": {
"createdAt": "2007-12-03T10:15:30Z",
"description": "xyz789",
"externalId": "xyz789",
"id": 4,
"includesInterior": true,
"name": "abc123",
"updatedAt": "2007-12-03T10:15:30Z"
}
}
}
deactivateUser
Description
Deactivate a user account, preventing them from logging in. Requires 'users:manage' permission
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": "abc123",
"groups": [Group],
"id": 4,
"isActive": false,
"name": "xyz789",
"permissions": ["abc123"],
"phone": "+17895551234",
"updatedAt": "2007-12-03T10:15:30Z",
"username": "xyz789"
}
}
}
deleteOwnerPlan
Description
Delete an owner plan (soft delete)
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
externalBillingId
id
isActiveMember
isExternallyManaged
name
notes {
...NoteFragment
}
phone
state
street1
street2
subscriptions {
...RollerupSubscriptionFragment
}
updatedAt
zip
}
}
Variables
{"input": MergeCustomersInput}
Response
{
"data": {
"mergeCustomers": {
"city": "xyz789",
"country": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"email": "test@test.com",
"externalBillingId": "abc123",
"id": 4,
"isActiveMember": false,
"isExternallyManaged": true,
"name": "xyz789",
"notes": [Note],
"phone": "+17895551234",
"state": "abc123",
"street1": "abc123",
"street2": "abc123",
"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
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": "xyz789",
"groups": [Group],
"id": "4",
"isActive": true,
"name": "abc123",
"permissions": ["abc123"],
"phone": "+17895551234",
"updatedAt": "2007-12-03T10:15:30Z",
"username": "abc123"
}
}
}
redeemPumpWashCode
Description
Redeem a pump wash code for a company/location
Response
Returns a PumpWashCode!
Arguments
| Name | Description |
|---|---|
input - RedeemPumpWashCodeInput!
|
Example
Query
mutation redeemPumpWashCode($input: RedeemPumpWashCodeInput!) {
redeemPumpWashCode(input: $input) {
activatedAt
code
createdAt
expiration
id
locationId
pumpWashControllerId
pumpWashPackage {
...PumpWashPackageFragment
}
pumpWashPackageId
redeemedAt
redeemedById
updatedAt
visitId
}
}
Variables
{"input": RedeemPumpWashCodeInput}
Response
{
"data": {
"redeemPumpWashCode": {
"activatedAt": "2007-12-03T10:15:30Z",
"code": "xyz789",
"createdAt": "2007-12-03T10:15:30Z",
"expiration": "2007-12-03T10:15:30Z",
"id": 4,
"locationId": "4",
"pumpWashControllerId": "4",
"pumpWashPackage": PumpWashPackage,
"pumpWashPackageId": "4",
"redeemedAt": "2007-12-03T10:15:30Z",
"redeemedById": 4,
"updatedAt": "2007-12-03T10:15:30Z",
"visitId": "4"
}
}
}
removeCarFromFleet
Response
Returns an ID!
Arguments
| Name | Description |
|---|---|
input - RemoveCarFromFleetInput!
|
Example
Query
mutation removeCarFromFleet($input: RemoveCarFromFleetInput!) {
removeCarFromFleet(input: $input)
}
Variables
{"input": RemoveCarFromFleetInput}
Response
{"data": {"removeCarFromFleet": 4}}
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
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
externalBillingId
id
isActiveMember
isExternallyManaged
name
notes {
...NoteFragment
}
phone
state
street1
street2
subscriptions {
...RollerupSubscriptionFragment
}
updatedAt
zip
}
}
Variables
{"input": UpdateCustomerInput}
Response
{
"data": {
"updateCustomer": {
"city": "abc123",
"country": "xyz789",
"createdAt": "2007-12-03T10:15:30Z",
"email": "test@test.com",
"externalBillingId": "abc123",
"id": "4",
"isActiveMember": true,
"isExternallyManaged": false,
"name": "xyz789",
"notes": [Note],
"phone": "+17895551234",
"state": "xyz789",
"street1": "abc123",
"street2": "xyz789",
"subscriptions": [RollerupSubscription],
"updatedAt": "2007-12-03T10:15:30Z",
"zip": "xyz789"
}
}
}
updateFleet
Response
Returns a Fleet!
Arguments
| Name | Description |
|---|---|
input - UpdateFleetInput!
|
Example
Query
mutation updateFleet($input: UpdateFleetInput!) {
updateFleet(input: $input) {
businessName
city
company {
...SimpleCompanyFragment
}
contactName
country
createdAt
createdBy {
...EmployeeFragment
}
customer {
...RollerupCustomerFragment
}
customerId
description
email
fleetInvitation {
...FleetInvitationFragment
}
id
location {
...SimpleLocationFragment
}
locationId
membership {
...SimpleMembershipFragment
}
membershipId
phone
price {
...PriceFragment
}
priceId
state
street1
street2
subscription {
...RollerupSubscriptionFragment
}
subscriptionId
updatedAt
updatedBy {
...EmployeeFragment
}
zip
}
}
Variables
{"input": UpdateFleetInput}
Response
{
"data": {
"updateFleet": {
"businessName": "xyz789",
"city": "abc123",
"company": SimpleCompany,
"contactName": "abc123",
"country": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"createdBy": Employee,
"customer": RollerupCustomer,
"customerId": "4",
"description": "xyz789",
"email": "test@test.com",
"fleetInvitation": FleetInvitation,
"id": 4,
"location": SimpleLocation,
"locationId": "4",
"membership": SimpleMembership,
"membershipId": 4,
"phone": "+17895551234",
"price": Price,
"priceId": "4",
"state": USStateCode,
"street1": "abc123",
"street2": "abc123",
"subscription": RollerupSubscription,
"subscriptionId": "xyz789",
"updatedAt": "2007-12-03T10:15:30Z",
"updatedBy": Employee,
"zip": USPostalCode
}
}
}
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": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"description": "abc123",
"email": "abc123",
"expiresAt": "2007-12-03T10:15:30Z",
"id": "4",
"name": "abc123",
"phone": "abc123",
"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": "xyz789",
"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
includesInterior
name
updatedAt
}
}
Variables
{"input": UpdateWashPackageInput}
Response
{
"data": {
"updateWashPackage": {
"createdAt": "2007-12-03T10:15:30Z",
"description": "abc123",
"externalId": "xyz789",
"id": 4,
"includesInterior": true,
"name": "abc123",
"updatedAt": "2007-12-03T10:15:30Z"
}
}
}
Types
AddCarToFleetInput
AddCarToMembershipInput
Example
{
"membershipId": "4",
"nickname": "abc123",
"plate": "xyz789",
"state": "xyz789",
"targetPriceId": "4"
}
AddCarToOwnerPlanInput
Description
Input for adding a car to an owner plan
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 |
|---|---|
|
|
Archived automatically alongside a parent record (e.g. Price cascade-archived with its Product) |
|
|
Archived automatically by the system (e.g. replaced by a newer version) |
|
|
Archived explicitly by a user |
Example
"CASCADE"
BillingFrequency
Description
Billing frequency options for subscription prices
Values
| Enum Value | Description |
|---|---|
|
|
Billed monthly |
|
|
Billed quarterly (every 3 months) |
|
|
Billed yearly |
Example
"MONTHLY"
Boolean
Description
The Boolean scalar type represents true or false.
CancelCarRemovalFromFleetInput
CancelCarRemovalInput
CancelFleetInput
Fields
| Input Field | Description |
|---|---|
cancelType - CancelType!
|
|
cancellationReason - String
|
|
cancellationReasonId - ID
|
|
id - ID!
|
|
refundAmount - Int
|
|
refundType - RefundType
|
Example
{
"cancelType": "END_OF_PERIOD",
"cancellationReason": "abc123",
"cancellationReasonId": "4",
"id": 4,
"refundAmount": 123,
"refundType": "LAST_PAYMENT"
}
CancelType
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
Example
"END_OF_PERIOD"
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": "xyz789",
"color": "xyz789",
"createdAt": "2007-12-03T10:15:30Z",
"customer": RollerupCustomer,
"customerId": "abc123",
"id": 4,
"isMember": true,
"lastVisitedAt": "2007-12-03T10:15:30Z",
"lastVisitedLocation": Location,
"make": "xyz789",
"membership": Membership,
"membershipId": "xyz789",
"model": "xyz789",
"nickname": "xyz789",
"plate": "xyz789",
"rfidTag": "xyz789",
"state": "abc123",
"stripeCustomer": StripeCustomer,
"totalVisits": 123,
"updatedAt": "2007-12-03T10:15:30Z",
"year": "abc123"
}
CarPage
Card
Description
Represents a card used to make a payment.
Example
{
"brand": "abc123",
"expMonth": 987,
"expYear": 123,
"id": "4",
"last4": "xyz789"
}
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": "xyz789",
"customerId": "abc123",
"first": 987,
"last": 987,
"search": "abc123"
}
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": "xyz789",
"percentOff": 987,
"redeemBy": "2007-12-03T10:15:30Z"
}
CreateFleetInput
Fields
| Input Field | Description |
|---|---|
businessName - String!
|
|
cars - [FleetSignupCarInput!]
|
|
city - String
|
|
contactName - String
|
|
country - String
|
|
description - String
|
|
email - EmailAddress!
|
|
locationId - ID!
|
|
phone - PhoneNumber!
|
|
price - FleetPriceInput!
|
|
productId - ID!
|
|
state - USStateCode
|
|
street1 - String
|
|
street2 - String
|
|
zip - USPostalCode
|
Example
{
"businessName": "xyz789",
"cars": [FleetSignupCarInput],
"city": "xyz789",
"contactName": "xyz789",
"country": "xyz789",
"description": "xyz789",
"email": "test@test.com",
"locationId": 4,
"phone": "+17895551234",
"price": FleetPriceInput,
"productId": "4",
"state": USStateCode,
"street1": "xyz789",
"street2": "xyz789",
"zip": USPostalCode
}
CreateNoteInput
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": "abc123",
"description": "xyz789",
"email": "abc123",
"expiresAt": "2007-12-03T10:15:30Z",
"name": "xyz789",
"phone": "abc123",
"state": "xyz789",
"street1": "xyz789",
"street2": "abc123",
"washPackageId": 4,
"zip": "abc123"
}
CreatePriceTierInput
CreatePumpWashCodeInput
Fields
| Input Field | Description |
|---|---|
code - String!
|
5-digit numeric code received from the PLC |
controllerId - ID!
|
Pump wash controller that generated this code |
expiration - DateTime
|
Expiration timestamp; defaults to now + 31 days when omitted |
packageNumber - Int!
|
Package number that maps to pump_wash_packages.package_number (1-14) |
Example
{
"code": "xyz789",
"controllerId": "4",
"expiration": "2007-12-03T10:15:30Z",
"packageNumber": 987
}
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": ["xyz789"],
"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 |
includesInterior - Boolean
|
Whether this package includes interior cleaning. Default = false |
name - String!
|
A friendly name for the package |
Example
{
"description": "xyz789",
"externalId": "xyz789",
"includesInterior": false,
"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) |
rfid - String
|
Filter by vehicle RFID tag (exact match). Only matches currently-linked cars. |
Example
{
"after": "xyz789",
"before": "xyz789",
"email": "abc123",
"first": 987,
"isActiveMember": false,
"last": 987,
"lastFour": "xyz789",
"name": "xyz789",
"phone": "abc123",
"plate": "xyz789",
"rfid": "xyz789"
}
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": 987,
"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 |
|---|---|
|
|
Apply discount to all payments indefinitely |
|
|
Apply discount only to the first payment |
|
|
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": true,
"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": "abc123",
"id": "4",
"isActive": false,
"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": "xyz789",
"before": "abc123",
"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
}
Fleet
Fields
| Field Name | Description |
|---|---|
businessName - String!
|
|
city - String
|
|
company - SimpleCompany!
|
|
contactName - String
|
|
country - String
|
|
createdAt - DateTime!
|
|
createdBy - Employee!
|
|
customer - RollerupCustomer
|
|
customerId - ID
|
|
description - String
|
|
email - EmailAddress!
|
|
fleetInvitation - FleetInvitation
|
|
id - ID!
|
|
location - SimpleLocation!
|
|
locationId - ID!
|
|
membership - SimpleMembership
|
|
membershipId - ID
|
|
phone - PhoneNumber!
|
|
price - Price!
|
|
priceId - ID!
|
|
state - USStateCode
|
|
street1 - String
|
|
street2 - String
|
|
subscription - RollerupSubscription
|
|
subscriptionId - String
|
|
updatedAt - DateTime!
|
|
updatedBy - Employee!
|
|
zip - USPostalCode
|
Example
{
"businessName": "abc123",
"city": "abc123",
"company": SimpleCompany,
"contactName": "xyz789",
"country": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"createdBy": Employee,
"customer": RollerupCustomer,
"customerId": "4",
"description": "abc123",
"email": "test@test.com",
"fleetInvitation": FleetInvitation,
"id": 4,
"location": SimpleLocation,
"locationId": "4",
"membership": SimpleMembership,
"membershipId": "4",
"phone": "+17895551234",
"price": Price,
"priceId": 4,
"state": USStateCode,
"street1": "abc123",
"street2": "abc123",
"subscription": RollerupSubscription,
"subscriptionId": "abc123",
"updatedAt": "2007-12-03T10:15:30Z",
"updatedBy": Employee,
"zip": USPostalCode
}
FleetInvitation
Example
{
"code": "xyz789",
"consumedAt": "2007-12-03T10:15:30Z",
"createdAt": "2007-12-03T10:15:30Z",
"id": "4",
"invalidatedAt": "2007-12-03T10:15:30Z",
"signupCars": [FleetSignupCar]
}
FleetInvitationPayload
FleetPage
FleetPriceInput
Fields
| Input Field | Description |
|---|---|
amount - Int!
|
|
discount - CreateDiscountInput
|
|
tiers - [CreatePriceTierInput!]!
|
|
trialDuration - Int
|
|
trialUnits - TrialUnits
|
Example
{
"amount": 123,
"discount": CreateDiscountInput,
"tiers": [CreatePriceTierInput],
"trialDuration": 123,
"trialUnits": "DAYS"
}
FleetSignupCar
Fields
| Field Name | Description |
|---|---|
failureReason - FleetSignupCarFailureReason
|
|
nickname - String
|
|
plate - String!
|
|
state - String!
|
|
status - FleetSignupCarStatus!
|
Example
{
"failureReason": "OWNER_OR_EMPLOYEE_CAR",
"nickname": "abc123",
"plate": "xyz789",
"state": "xyz789",
"status": "FAILED"
}
FleetSignupCarFailureReason
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
Example
"OWNER_OR_EMPLOYEE_CAR"
FleetSignupCarInput
FleetSignupCarStatus
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
|
|
|
Example
"FAILED"
FleetsQueryInput
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
Example
{
"description": "xyz789",
"id": "4",
"isAdmin": true,
"name": "xyz789",
"permissions": ["abc123"],
"slug": "abc123"
}
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": 987,
"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 |
interiorEnabled - Boolean!
|
Whether the interior cleaning queue is enabled for this 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 |
tipsEnabled - Boolean!
|
Whether tips are enabled for this location |
updatedAt - DateTime!
|
Timestamp when the location was last updated |
zip - USPostalCode
|
ZIP or postal code |
Example
{
"cashEnabled": true,
"city": "xyz789",
"companyId": 4,
"createdAt": "2007-12-03T10:15:30Z",
"externalId": "xyz789",
"id": 4,
"interiorEnabled": false,
"isVirtual": false,
"name": "xyz789",
"shortName": "abc123",
"state": USStateCode,
"street": "xyz789",
"stripeAccountId": "abc123",
"stripeTerminalLocationId": "abc123",
"taxEnabled": true,
"timezone": "xyz789",
"tipsEnabled": true,
"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": "abc123",
"before": "abc123",
"first": 987,
"last": 123
}
Membership
Fields
| Field Name | Description |
|---|---|
active - Boolean!
|
Whether this membership is active |
cancelAt - DateTime
|
Timestamp when the subscription is scheduled to be cancelled |
carLimit - Int!
|
Maximum number of cars allowed on this membership |
createdAt - DateTime!
|
Timestamp when the membership was created |
currentPeriodEnd - DateTime
|
End of the current billing period |
currentPeriodStart - DateTime
|
Start of the current billing period |
endedAt - DateTime
|
Timestamp when the subscription ended |
id - String!
|
Membership ID |
isExternallyManaged - Boolean!
|
Whether the membership is managed by an external billing system (e.g. drb). Externally-managed memberships cannot be edited via the API. |
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 |
status - String
|
Status of the underlying subscription (e.g. active, trialing, past_due, canceled) |
trialEndAt - DateTime
|
Timestamp when the trial ends, if trialing |
Example
{
"active": false,
"cancelAt": "2007-12-03T10:15:30Z",
"carLimit": 987,
"createdAt": "2007-12-03T10:15:30Z",
"currentPeriodEnd": "2007-12-03T10:15:30Z",
"currentPeriodStart": "2007-12-03T10:15:30Z",
"endedAt": "2007-12-03T10:15:30Z",
"id": "xyz789",
"isExternallyManaged": false,
"isFleet": true,
"membershipCars": [MembershipCar],
"price": Price,
"priceId": "xyz789",
"status": "xyz789",
"trialEndAt": "2007-12-03T10:15:30Z"
}
MembershipCar
Description
A car linked to a subscription membership, including scheduled end-of-period removal.
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 |
|---|---|
|
|
Adding a new car to the membership |
|
|
Cancelling a previously-scheduled removal |
|
|
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 |
currentPrice - Price!
|
The current price that will be replaced |
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 |
targetPrice - Price!
|
The target price that will be applied |
Example
{
"changeType": "downgrade",
"currentPrice": Price,
"immediateTotal": 987,
"lineItems": [MembershipCarChangePreviewLineItem],
"newVehicleQuantity": 123,
"nextBillingDate": "2007-12-03T10:15:30Z",
"nextInvoiceTotal": 987,
"targetPrice": Price
}
MembershipCarChangePreviewLineItem
Description
A line item from the upcoming invoice preview.
Example
{
"amount": 987,
"description": "abc123",
"proration": true,
"quantity": 123
}
MembershipSearchInput
Description
Input for searching memberships 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) |
cardLast4 - String
|
Filter by last four digits of payment method (card or bank account) |
email - String
|
Filter by customer email address (case-insensitive prefix match) |
first - Int
|
The number of items to return from the beginning of the list (forward pagination) |
includeInactive - Boolean!
|
Include inactive memberships in results, otherwise just includes active, trialing, or past due. Default = false |
includePastCars - Boolean!
|
When filtering by plate, state, or rfid, also match against cars that were previously linked but have since been removed. Has no effect without one of those car filters. Default = false |
last - Int
|
The number of items to return from the end of the list (backward pagination) |
name - String
|
Filter by customer name (case-insensitive; matches the start of any word in the name) |
phone - String
|
Filter by phone number (E.164 exact match if the input parses as a phone number, otherwise prefix match) |
plate - String
|
Filter by vehicle license plate (case-insensitive, normalized). The matched car is not surfaced in results; use membership(id:) to see which linked car matched and whether it is currently active. |
rfid - String
|
Filter by RFID tag. The matched car is not surfaced in results; use membership(id:) to see which linked car matched and whether it is currently active. |
startDate - DateTime
|
Filter to memberships starting on or after this date |
state - String
|
Filter by vehicle plate state (2-letter code). The matched car is not surfaced in results; use membership(id:) to see which linked car matched and whether it is currently active. |
Example
{
"after": "xyz789",
"before": "xyz789",
"cardLast4": "abc123",
"email": "xyz789",
"first": 123,
"includeInactive": false,
"includePastCars": true,
"last": 123,
"name": "xyz789",
"phone": "xyz789",
"plate": "abc123",
"rfid": "xyz789",
"startDate": "2007-12-03T10:15:30Z",
"state": "xyz789"
}
MembershipSearchPage
Description
Paginated result for membership search queries
Fields
| Field Name | Description |
|---|---|
nodes - [SimpleMembership!]!
|
List of memberships matching the search criteria |
pageInfo - PageInfo!
|
Pagination metadata including cursors and page position |
Example
{
"nodes": [SimpleMembership],
"pageInfo": PageInfo
}
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.
Example
{"sourceId": "4", "targetId": 4}
MutateUserResponse
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": "xyz789",
"plate": "xyz789",
"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": "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": "xyz789",
"updatedAt": "2007-12-03T10:15:30Z",
"washPackage": WashPackage,
"washPackageId": 4,
"zip": "abc123"
}
OwnerVisit
Description
A wash record for an owner plan
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
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": true,
"isUpdate": true,
"lineItems": [SimplePaidInvoiceLineItem],
"location": SimpleLocation,
"stripeChargeId": "abc123",
"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": "xyz789",
"cardLast4": "abc123",
"customerId": "xyz789",
"employeeId": "4",
"endDate": "2020-07-19",
"endTime": "2007-12-03T10:15:30Z",
"first": 987,
"includeRecharges": true,
"includeSales": true,
"includeUpdates": false,
"last": 123,
"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": "xyz789",
"cardLast4": "abc123",
"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 |
|---|---|
|
|
|
|
|
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": "xyz789",
"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": "xyz789",
"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 |
overwritten - Boolean!
|
Whether this book has been overwritten (its codes replaced by a colliding DRB import) |
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",
"overwritten": false,
"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": "xyz789",
"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 |
overwritten - Boolean!
|
Whether this code's containing book has been overwritten by a colliding DRB import. Always false for codes not in a book. |
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": "abc123",
"companyId": 4,
"createdAt": "2007-12-03T10:15:30Z",
"drbBook": 987,
"drbSeries": "abc123",
"drbTicket": 123,
"id": "4",
"maxRedemptions": 987,
"overwritten": false,
"prepaid": Prepaid,
"prepaidBookId": 4,
"prepaidExport": SimplePrepaidExport,
"prepaidId": 4,
"redemptions": [PrepaidCodeRedemption],
"redemptionsCount": 987,
"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": "abc123",
"before": "abc123",
"code": "abc123",
"first": 123,
"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": "abc123",
"code": "abc123",
"first": 123,
"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": "abc123",
"before": "abc123",
"code": "xyz789",
"first": 987,
"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": false,
"availableOnline": false,
"billingFrequency": "MONTHLY",
"createdAt": "2007-12-03T10:15:30Z",
"currency": "abc123",
"discount": Discount,
"displayName": "abc123",
"id": 4,
"internalName": "xyz789",
"isArchived": false,
"isDefault": false,
"name": "abc123",
"pricingProfile": PricingProfile,
"pricingProfiles": [PricingProfile],
"product": SimpleProduct,
"sortOrder": 987,
"tiers": [PriceTier],
"trialDuration": 987,
"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.
Example
{
"fromQuantity": 987,
"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": "xyz789",
"id": 4,
"locations": [Location],
"name": "xyz789",
"prices": [Price],
"updatedAt": "2007-12-03T10:15:30Z"
}
ProductType
Description
Product type discriminator.
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
Example
"GIFT_CARD"
PumpWashCode
Description
Represents a generated pump wash code
Fields
| Field Name | Description |
|---|---|
activatedAt - DateTime
|
|
code - String!
|
|
createdAt - DateTime!
|
|
expiration - DateTime
|
|
id - ID!
|
|
locationId - ID!
|
|
pumpWashControllerId - ID!
|
|
pumpWashPackage - PumpWashPackage
|
The pump wash package this code grants |
pumpWashPackageId - ID
|
|
redeemedAt - DateTime
|
|
redeemedById - ID
|
Employee who redeemed the code, if redeemed |
updatedAt - DateTime!
|
|
visitId - ID
|
Visit the code was redeemed on, if redeemed |
Example
{
"activatedAt": "2007-12-03T10:15:30Z",
"code": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"expiration": "2007-12-03T10:15:30Z",
"id": 4,
"locationId": 4,
"pumpWashControllerId": 4,
"pumpWashPackage": PumpWashPackage,
"pumpWashPackageId": "4",
"redeemedAt": "2007-12-03T10:15:30Z",
"redeemedById": 4,
"updatedAt": "2007-12-03T10:15:30Z",
"visitId": 4
}
PumpWashPackage
Description
Represents a pump wash package — a wash package offered through a pump wash controller
Fields
| Field Name | Description |
|---|---|
id - ID!
|
|
packageNumber - Int!
|
|
washPackage - WashPackage!
|
The underlying wash package this pump wash package maps to |
washPackageId - ID!
|
Example
{
"id": "4",
"packageNumber": 123,
"washPackage": WashPackage,
"washPackageId": 4
}
RRule
Description
RFC-5545 compliant recurrence rule scalar
Example
RRule
RedeemPumpWashCodeInput
RefundType
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
|
|
|
Example
"LAST_PAYMENT"
RemoveCarFromFleetInput
RemoveCarFromMembershipInput
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 |
externalBillingId - String
|
for externally managed customers only, the id in the external system |
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. |
isExternallyManaged - Boolean!
|
Whether the customer is managed by an external billing system (e.g. drb). Externally-managed customers cannot be edited via the API. |
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": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"email": "test@test.com",
"externalBillingId": "xyz789",
"id": 4,
"isActiveMember": true,
"isExternallyManaged": false,
"name": "xyz789",
"notes": [Note],
"phone": "+17895551234",
"state": "xyz789",
"street1": "xyz789",
"street2": "abc123",
"subscriptions": [RollerupSubscription],
"updatedAt": "2007-12-03T10:15:30Z",
"zip": "abc123"
}
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 |
isExternallyManaged - Boolean!
|
Whether the subscription is managed by an external billing system (e.g. drb). Externally-managed subscriptions cannot be edited via the API. |
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 |
startedAt - DateTime
|
Timestamp when the subscription started |
status - String!
|
Status of this subscription |
Example
{
"billingCustomerId": "abc123",
"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": "xyz789",
"defaultPaymentMethod": PaymentMethod,
"id": "xyz789",
"isExternallyManaged": false,
"location": Location,
"locationId": "abc123",
"memberships": [Membership],
"soldAtLocation": SimpleLocation,
"soldAtLocationId": "xyz789",
"soldBy": User,
"soldById": "abc123",
"startedAt": "2007-12-03T10:15:30Z",
"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": 123,
"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": 987,
"name": "xyz789",
"slug": "xyz789",
"timezone": "abc123"
}
SimpleLocation
Description
Represents a location in the system with only primitives and no sensitive settings
Example
{
"city": "xyz789",
"createdAt": "2007-12-03T10:15:30Z",
"externalId": "abc123",
"id": 4,
"isVirtual": true,
"name": "xyz789",
"shortName": "abc123",
"state": USStateCode,
"street": "abc123",
"timezone": "abc123",
"updatedAt": "2007-12-03T10:15:30Z",
"zip": USPostalCode
}
SimpleMembership
Description
Lightweight membership projection for list / search results. Carries denormalized subscription status and customer identity, omits nested relations like linked cars. Fetch a full Membership via the membership(id:) query when detail is needed.
Fields
| Field Name | Description |
|---|---|
cancelAt - DateTime
|
Timestamp when the subscription is scheduled to be cancelled |
carLimit - Int!
|
Maximum number of cars allowed on this membership |
createdAt - DateTime!
|
Timestamp when the membership was created |
currentPeriodEnd - DateTime
|
End of the current billing period |
currentPeriodStart - DateTime
|
Start of the current billing period |
customerEmail - EmailAddress
|
Customer email |
customerId - String
|
Customer ID |
customerName - String
|
Customer name |
customerPhone - PhoneNumber
|
Customer phone (E.164) |
endedAt - DateTime
|
Timestamp when the subscription ended |
id - ID!
|
Membership ID |
isExternallyManaged - Boolean!
|
Whether the membership is managed by an external billing system (e.g. drb) |
isFleet - Boolean!
|
Whether this membership uses fleet-style billing / management |
priceId - String!
|
Price ID |
status - String
|
Status of the underlying subscription (e.g. active, trialing, past_due, canceled) |
trialEndAt - DateTime
|
Timestamp when the trial ends, if trialing |
Example
{
"cancelAt": "2007-12-03T10:15:30Z",
"carLimit": 123,
"createdAt": "2007-12-03T10:15:30Z",
"currentPeriodEnd": "2007-12-03T10:15:30Z",
"currentPeriodStart": "2007-12-03T10:15:30Z",
"customerEmail": "test@test.com",
"customerId": "xyz789",
"customerName": "abc123",
"customerPhone": "+17895551234",
"endedAt": "2007-12-03T10:15:30Z",
"id": "4",
"isExternallyManaged": false,
"isFleet": false,
"priceId": "abc123",
"status": "xyz789",
"trialEndAt": "2007-12-03T10:15:30Z"
}
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": "xyz789",
"createdAt": "2007-12-03T10:15:30Z",
"description": "abc123",
"email": "xyz789",
"expiresAt": "2007-12-03T10:15:30Z",
"id": "4",
"name": "xyz789",
"phone": "xyz789",
"state": "xyz789",
"street1": "abc123",
"street2": "abc123",
"updatedAt": "2007-12-03T10:15:30Z",
"washPackageId": 4,
"zip": "xyz789"
}
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
Example
{
"id": "4",
"price": 987,
"productName": "xyz789",
"quantity": 123
}
SimplePrepaidExport
Description
Minimal prepaid export fields for list display (e.g. on Prepaid.exports).
Example
{
"exportedAt": "2007-12-03T10:15:30Z",
"exportedBy": Employee,
"exportedCodeCount": 987,
"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 |
|---|---|
availableForFleets - Boolean!
|
Whether this product is available for fleet plans |
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
{
"availableForFleets": false,
"id": 4,
"isArchived": false,
"name": "abc123",
"productType": "GIFT_CARD"
}
SimpleRollerupCustomer
Fields
| Field Name | Description |
|---|---|
city - String
|
|
country - String
|
|
createdAt - DateTime!
|
|
email - EmailAddress
|
|
externalBillingId - String
|
for externally managed customers only, the id in the external system |
id - ID!
|
|
isExternallyManaged - Boolean!
|
Whether the customer is managed by an external billing system (e.g. drb). Externally-managed customers cannot be edited via the API. |
name - String
|
|
phone - PhoneNumber
|
|
state - String
|
|
street1 - String
|
|
street2 - String
|
|
updatedAt - DateTime!
|
|
zip - String
|
Example
{
"city": "xyz789",
"country": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"email": "test@test.com",
"externalBillingId": "xyz789",
"id": "4",
"isExternallyManaged": false,
"name": "abc123",
"phone": "+17895551234",
"state": "abc123",
"street1": "xyz789",
"street2": "xyz789",
"updatedAt": "2007-12-03T10:15:30Z",
"zip": "abc123"
}
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": "abc123",
"companyId": 4,
"createdAt": "2007-12-03T10:15:30Z",
"id": "abc123",
"name": "abc123",
"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": "abc123",
"before": "xyz789",
"first": 123,
"last": 123
}
StripeAccountRequirements
Description
Stripe account requirements for onboarding and compliance
Example
{
"currentlyDue": ["xyz789"],
"disabledReason": "abc123",
"eventuallyDue": ["abc123"],
"pastDue": ["abc123"],
"pendingVerification": ["abc123"]
}
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": "abc123",
"isDeleted": true,
"isPhoneValid": true,
"memberships": [StripeCustomerMembership],
"name": "abc123",
"phone": "xyz789",
"phoneE164": "xyz789",
"referralCode": "abc123",
"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": "abc123",
"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": true,
"id": "xyz789",
"name": "abc123",
"recurringInterval": "abc123",
"recurringIntervalCount": 987,
"soldByBadge": "xyz789",
"soldByName": "abc123",
"status": "abc123",
"stripeAccountId": "abc123",
"stripeCustomerId": "abc123",
"updatedAt": "2007-12-03T10:15:30Z"
}
SubscriptionChangeType
Values
| Enum Value | Description |
|---|---|
|
|
|
|
|
Example
"downgrade"
TrialUnits
Description
Trial period units for free trial durations
Values
| Enum Value | Description |
|---|---|
|
|
Duration specified in days |
|
|
Duration specified in months |
|
|
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.
Field semantics:
- Omitted fields are unchanged.
- For
emailandphone, an explicit null clears the field.namecannot be cleared.
Constraints:
- A customer must always have at least one of
emailorphone. An update that would leave both null is rejected with a VALIDATION error. - Updating
emailto a value already used by another customer in the same company is rejected with a CONFLICT error (code: CUSTOMER_EMAIL_CONFLICT, withconflictingCustomerIdin extensions) so the client can prompt a merge.
Fields
| Input Field | Description |
|---|---|
email - EmailAddress
|
Customer email. Omit to leave unchanged; pass null to clear. |
id - ID!
|
Customer ID |
name - String
|
Customer name. Null/omitted is treated as no change. |
phone - PhoneNumber
|
Customer phone. Omit to leave unchanged; pass null to clear. |
Example
{
"email": "test@test.com",
"id": "4",
"name": "abc123",
"phone": "+17895551234"
}
UpdateFleetInput
Fields
| Input Field | Description |
|---|---|
businessName - String
|
|
cars - [FleetSignupCarInput!]
|
|
city - String
|
|
contactName - String
|
|
country - String
|
|
description - String
|
|
email - EmailAddress
|
|
id - ID!
|
|
phone - PhoneNumber
|
|
state - USStateCode
|
|
street1 - String
|
|
street2 - String
|
|
zip - USPostalCode
|
Example
{
"businessName": "xyz789",
"cars": [FleetSignupCarInput],
"city": "abc123",
"contactName": "xyz789",
"country": "abc123",
"description": "abc123",
"email": "test@test.com",
"id": 4,
"phone": "+17895551234",
"state": USStateCode,
"street1": "abc123",
"street2": "xyz789",
"zip": USPostalCode
}
UpdateOwnerPlanCarInput
Description
Input for updating a car on an owner plan
Example
{
"id": 4,
"nickname": "abc123",
"plate": "xyz789",
"state": "abc123"
}
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": "abc123",
"description": "xyz789",
"email": "abc123",
"expiresAt": "2007-12-03T10:15:30Z",
"id": "4",
"name": "abc123",
"phone": "abc123",
"state": "abc123",
"street1": "abc123",
"street2": "abc123",
"washPackageId": 4,
"zip": "xyz789"
}
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": "xyz789",
"groupIds": ["abc123"],
"id": 4,
"name": "xyz789",
"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 |
includesInterior - Boolean
|
Whether this package includes interior cleaning |
name - String
|
A friendly name for the package |
Example
{
"description": "xyz789",
"externalId": "xyz789",
"id": "4",
"includesInterior": true,
"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": false,
"name": "abc123",
"permissions": ["xyz789"],
"phone": "+17895551234",
"updatedAt": "2007-12-03T10:15:30Z",
"username": "xyz789"
}
UserPage
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": "xyz789",
"email": "abc123",
"first": 987,
"includeInactive": false,
"last": 123,
"name": "abc123",
"phone": "xyz789",
"username": "xyz789"
}
Visit
Description
Represents a visit to a location
Fields
| Field Name | Description |
|---|---|
car - Car
|
The car associated with the visit |
carId - String
|
The id of the car associated with the visit |
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 |
locationId - String!
|
The id of the location 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 |
membershipId - String
|
If this visit is a member visit, the ID of the membership |
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 |
washPackageId - String
|
The ID of the wash package for the visit |
Example
{
"car": Car,
"carId": "abc123",
"createdAt": "2007-12-03T10:15:30Z",
"employee": Employee,
"id": 4,
"imageUrl": "abc123",
"isExternalMember": false,
"isSale": true,
"laneId": "xyz789",
"locationId": "xyz789",
"lprOverridden": false,
"lprPlate": "xyz789",
"lprState": "xyz789",
"membershipId": "xyz789",
"plate": "abc123",
"plateImageUrl": "abc123",
"rfidTag": "xyz789",
"state": "abc123",
"status": "xyz789",
"stripeSubscriptionId": "xyz789",
"timeTotal": 987.65,
"timeWaitingForAttendant": 987.65,
"timeWaitingForGate": 123.45,
"timeWithAttendant": 123.45,
"updatedAt": "2007-12-03T10:15:30Z",
"visitType": "abc123",
"washPackage": WashPackage,
"washPackageId": "abc123"
}
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
|
|
membershipId - String
|
If set will only return visits matching this membership ID |
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": "xyz789",
"before": "abc123",
"carId": "xyz789",
"first": 123,
"isSale": false,
"last": 987,
"locationId": "xyz789",
"membershipId": "abc123",
"plate": "xyz789",
"state": "abc123",
"status": "xyz789",
"visitType": "abc123"
}
VisitsPage
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 |
includesInterior - Boolean!
|
Whether this package includes interior cleaning |
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": "abc123",
"externalId": "abc123",
"id": 4,
"includesInterior": false,
"name": "abc123",
"updatedAt": "2007-12-03T10:15:30Z"
}