Employer Cancellation

Employer Cancellation

A cancellation request records that an employer is ending payroll with Salsa. It carries the reason they are leaving, the jurisdictional filing instructions, and optional context about the decision. Salsa derives the filing and tax payment responsibility end date from the request, so the reason and the jurisdictional details are what actually drive behavior. Existing requests are readable via employer(id:).cancellationRequests.

📘

New to our GraphQL API? Start with basic concepts.

Creating a cancellation request

input CreateCancellationRequestInput {
    employerId: ID!
    "Last day the subscription is active"
    subscriptionEndDate: Date
    feedbackNotes: String
    reason: EmployerCancellationReason!
    details: CancellationJurisdictionalDetailsInput!
    statedReasons: [String!]
    destinationProvider: String
    leavingPartnerPlatform: Boolean
}

"Exactly one country branch must be provided."
input CancellationJurisdictionalDetailsInput @oneOf {
    usaDetails: UnitedStatesEmployerCancellationDetailsInput
    canDetails: CanadaEmployerCancellationDetailsInput
}

input UnitedStatesEmployerCancellationDetailsInput {
    salsaResponsibleForFilingsAndTaxPayments: Boolean!
    "The last quarter Salsa is responsible for filing and tax payments"
    lastQuarter: Int
    "The last year Salsa is responsible for filing and tax payments"
    lastYear: Int
}

input CanadaEmployerCancellationDetailsInput {
    "Whether Salsa is responsible for filings at year-end"
    salsaResponsibleForFilings: Boolean!
    lastYear: Int
}
FieldTypeRequiredNotes
employerIdID!yesEmployer being cancelled.
reasonEmployerCancellationReason!yesCLOSING_BUSINESS or SWITCHING_PAYROLL_PROVIDER. Drives the filing responsibility end date. Treat the enum as open and handle unrecognized values.
detailsCancellationJurisdictionalDetailsInput!yes@oneOf — supply exactly one of usaDetails or canDetails.
subscriptionEndDateDatenoLast active day of the subscription. Supersedes the deprecated effectiveDate.
feedbackNotesStringnoFree-form notes captured with the request.
statedReasons[String!]noThe employer's own reasons from your cancellation form, stored verbatim.
destinationProviderStringnoPayroll provider the employer is moving to.
leavingPartnerPlatformBooleannotrue when the employer is leaving your platform entirely, not just Salsa payroll.

The last three fields are pure pass-through context; they do not affect filing or tax calculations.

Filing responsibility

filingAndTaxPaymentResponsibilityEndDate on the returned details is derived, not supplied. When salsaResponsibleForFilingsAndTaxPayments is false, responsibility ends with the last pay date on service and lastQuarter/lastYear are optional. When it is true, lastQuarter and lastYear are required for U.S. employers and the reason selects the rule: SWITCHING_PAYROLL_PROVIDER resolves to the end of the requested quarter, while CLOSING_BUSINESS extends through the end of the filing year (covering zero filings, annual returns and worker forms). Requesting a quarter earlier than the most recently closed one is rejected. Canada takes canDetails with salsaResponsibleForFilings and lastYear; responsibility is resolved at year-end granularity.

Example

mutation CreateCancellationRequest($input: CreateCancellationRequestInput!) {
  createCancellationRequest(input: $input) {
    cancellationRequest {
      id
      effectiveDate
      reason
      details {
        salsaResponsibleForFilings
        salsaResponsibleForTaxPayments
        filingAndTaxPaymentResponsibilityEndDate
      }
    }
  }
}
{
  "input": {
    "employerId": "er_200010001",
    "subscriptionEndDate": "2026-09-30",
    "reason": "SWITCHING_PAYROLL_PROVIDER",
    "statedReasons": ["It costs too much", "I couldn't get the help I needed"],
    "destinationProvider": "ADP",
    "leavingPartnerPlatform": true,
    "details": {
      "usaDetails": {
        "salsaResponsibleForFilingsAndTaxPayments": true,
        "lastQuarter": 3,
        "lastYear": 2026
      }
    },
    "feedbackNotes": "Switching to ADP, Q3 2026."
  }
}

Deleting a cancellation request

A pending cancellation submitted in error can be removed with deleteCancellationRequest, which takes the request id and returns the deleted request.

mutation DeleteCancellationRequest($input: DeleteCancellationRequestInput!) {
  deleteCancellationRequest(input: $input) {
    cancellationRequest {
      id
    }
  }
}

Did this page help you?