> This page is for version API (default).
> For other versions, use one of these documentation indexes:
> - API (default): https://docs.getthera.com/api/llms.txt
> - API + Legacy Read: https://docs.getthera.com/api-legacy-read/llms.txt
> - API + Legacy Full: https://docs.getthera.com/api-legacy-full/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getthera.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getthera.com/_mcp/server.

# Get All Company Affiliations

GET https://api.getthera.com/users/{userId}/affiliations

Gets all team and org permissions across all orgs for a given user, along with the contracts on which they're the worker.

Reference: https://docs.getthera.com/thera-api/company/company-api/get-all-company-affiliations

## Authentication

- `X-Thera-API-Key` header (required) — API Key authentication via header

## Servers

- `https://api.getthera.com` (Production, default)
- `https://api.staging.getthera.com` (Staging)

## Request

### Path parameters

- `userId` (string, required)

## Response

### 200

- `affiliationsByCompany` (map from string to CompanyAffiliation, required)

## Types

### CompanyAffiliation

- `company` (Company, required)
- `contracts` (list of Contract, required)
- `teams` (map from string to TeamRoleAndDetails, required)
- `orgRoleAndDetails` (list of OrgRoleAndDetails, optional)

### Company

- `companyID` (string, required)
- `companyName` (string, required)
- `dbaName` (string, required)
- `email` (string, required)
- `stripeCustomerId` (string, required)
- `defaultCurrency` (string, required) — The currency of the bank accounts that have been or will be attached to Thera to pay their employees.
- `defaultPaymentMethodID` (string, required) — The ID of the payment method that this company has attached to Thera to pay their employees.
- `defaultPaymentMethodStatus` (enum, required) — Some bank accounts require micro-deposit verification before they can be used. This status is used to denote whether we are still waiting on micro-deposit verification for this company's default payment method.
  - Allowed values: `MICRO_DEPOSIT_VERIFICATION`, `READY`
- `address` (Address, required)
- `mailingAddress` (Address, required) — If null, mailing address is the same as `address`.
- `w2Payroll` (W2Payroll, required) — If present, this company has chosen to use Thera for their W2 Payroll
- `ein` (string, required) — Employer Identification Number. We collect this for US companies.
- `phoneNumber` (string, required) — The company's phone number in the E.164 format.
- `fastPayments` (boolean, required)
- `flags` (Flags, required)
- `settings` (CompanySettings, required)
- `bankAccount` (BankAccountResponseMetadata, required)
- `ledgerAccountIdsByCurrency` (map from string to string, required)
- `v2LedgerAccountIdsByCurrency` (map from string to string, required)
- `teamsById` (map from string to Team, required)
- `urls` (list of string, required) — URLs for the business website(s). At least one is required for banking companies.
- `payInRequestProcessing` (boolean, optional)
- `logoS3Key` (string, optional) — s3 key of the company's logo.
- `subscriptionPricing` (SubscriptionPricing, optional) — An override used to change the pricing of each contractor's subscription. If no value is present, we use the standard $25 / month / active contractor.
- `theraBanking` (boolean, optional) — If true, use Thera banking to run payrolls.
- `dwollaBanking` (boolean, optional) — If true, run contractor payroll through Dwolla (payroll FBO + optional cash account) instead of TP. Only takes effect once the Dwolla payroll FBO is VERIFIED; wins over `theraBanking` when both are set. Ops-only, like `theraBanking`.
- `payInMonthlyTotals` (map from string to MonthlyPayInTotals, optional) — Posted pay-in totals for the last seven months, currency code to that currency's own seven slots. Slot 0 is payInTotalsAnchorMonth and each later slot is the month after, so the last slot is the newest. Amounts are minor units. Held here so the Payroll Expenses graph can read its months straight off the company instead of listing every pay-in, which does not stay fast as a company grows.
- `payInTotalsAnchorMonth` (string, optional) — The month payInMonthlyTotals slot 0 covers, `YYYY-MM` in UTC. Without it a company that went quiet for the whole window would read its stale slots as the current one.
- `stripeMultipleAccountInfo` (StripeMultipleAccountCustomerInfo, optional)
- `companyDescription` (string, optional)
- `tp` (TpCompanyInformation, optional) — This company's Thera banking details, including its onboarding stage.
- `dwolla` (DwollaCompanyInformation, optional) — Present once this company has been created as a Dwolla Verified Business Customer. The customer's Dwolla Balance is the company's cash (FBO) account on Dwolla.
- `dwollaTermsAcceptance` (DwollaTermsAcceptance, optional) — The company admin accepting the updated Terms of Service that move the company onto Dwolla. Dwolla onboarding and Dwolla payroll both require it. Kept on the company, not on `dwolla`, because it is accepted before the Dwolla customer exists.
- `dwollaPendingCertification` (DwollaPendingCertification, optional) — The beneficial ownership certification the admin gave during onboarding while Alloy KYB held the Dwolla customer back. Sent to Dwolla once the customer is created after approval, then cleared. Kept on the company, not on `dwolla`, because it is given before the Dwolla customer exists.
- `dwollaAccountAttempt` (integer, optional) — Which set of Dwolla customers this company is on, starting at 1 when empty. It goes into each customer's correlationId (`<companyId>_<attempt>`, `<companyId>_cash_<attempt>`) and email alias, so raising it and clearing `dwolla` creates new Dwolla customers instead of re-linking the old ones. Kept on the company, not on `dwolla`, so clearing `dwolla` keeps it.
- `alloyKyb` (AlloyKybInformation, optional) — Latest Alloy KYB evaluations for this company. Dwolla customer creation is gated on an APPROVED decision when Alloy KYB is enabled.
- `kybDocuments` (list of KybDocument, optional) — Every KYB document the company uploaded, kept once per company so the same document is never asked for twice. A document collected for one partner account is resent from here when another one asks for the same thing.
- `kybDocumentsEmailSentAt` (string, optional) — When the "we need a bit more information" email was last sent to company.email, so a burst of partner requests sends one email.
- `onboarderUserId` (string, optional) — The user who onboarded (or is onboarding) this company. If this user signs in and `TpCompanyInformation` is not null but `tp.onboardingComplete` is false, they will be directed on onboarding.
- `creationTimestamp` (datetime, optional)
- `mercoaCompanyDetails` (MercoaCompanyDetails, optional)
- `companyAccountingInformation` (CompanyAccountingInformation, optional)
- `companyBankingDetails` (CompanyBankingDetails, optional) — Banking details for a company. Company incorporation fields (establishedOn, incorporationState, legalStructure, naics) are optional and can be saved separately before beneficiary submission via the updateCompanyIncorporationInfo endpoint.
- `incorporationDetails` (IncorporationDetails, optional)
- `lastContractorsBillingInfo` (LastContractorBillingInfo, optional)
- `whiteLabelClientId` (string, optional) — If this company was created under a white-label client's domain, this field points to that WhiteLabelClient record. Inferred from hostname at signup time. Null for companies that signed up at app.getthera.com directly.
- `firstPayrollReadyEmailSent` (boolean, optional) — True once we've sent this company the "ready to run your first payroll" email, triggered the first time either their default payment method or their Thera banking disbursement account becomes ready. Used as a guard to avoid sending this email twice if both become ready around the same time.
- `firstPayrollReminderEmailSent` (boolean, optional) — True once we've sent this company's admins the "your first payroll is in 3 days" reminder email, triggered 3 business days before the company's first-ever payroll (combined across the W2 and contractor tracks, whichever comes first). Guards against duplicate sends if the daily reminder is ever triggered more than once.
- `firstPayrollCompleteEmailSent` (boolean, optional) — True once we've sent this company's admins the "congrats on your first payroll" email, triggered when the company's first-ever distinct paid day happens - combined across BOTH the W2 and contractor payment tracks, whichever comes first. Guards against duplicate sends across the multiple code paths that can trigger this.
- `secondPayrollCompleteEmailSent` (boolean, optional) — True once we've sent this company's admins the "how was your second payroll" email, triggered when the company's second-ever distinct paid day happens - combined across BOTH the W2 and contractor payment tracks. Only ever checked after firstPayrollCompleteEmailSent is true. Guards against duplicate sends across the multiple code paths that can trigger this.
- `orgChartExternals` (list of OrgChartExternalMember, optional) — Placeholder people shown on the org chart who are NOT on Thera payroll (e.g. an external CEO/owner that real workers report up to). Display-only: no contract, login, or payroll record. Managed only through the org chart.

### Contract

- `companyID` (string, required)
- `employeeUserID` (string, required)
- `id` (string, required)
- `name` (string, required)
- `jobTitle` (string, required)
- `employmentStatus` (enum, required)
  - Allowed values: `ACTIVE`, `INACTIVE`
- `startDate` (string, required)
- `wageType` (enum, required)
  - Allowed values: `HOURLY`, `DAILY`, `MONTHLY`, `SEMIMONTHLY`, `BIWEEKLY`, `WEEKLY`, `MILESTONE`
- `rate` (long, required)
- `contractCurrency` (string, required)
- `milestoneDetails` (MilestoneDetails, required)
- `contractFileID` (string, required)
- `lastPayDate` (string, required)
- `scopeOfWork` (string, required)
- `type` (enum, required)
  - Allowed values: `EMPLOYEE`, `CONTRACTOR`
- `contractDocumentType` (enum, required) — This is null if it's a W2 employee
  - Allowed values: `NO_CONTRACT`, `USER_PROVIDED`, `CONTRACT_WIZARD`, `CUSTOM_CONTRACT`
- `contractDocumentID` (string, required)
- `w2Payroll` (EmploymentW2PayrollDetails, required)
- `eor` (EORDetails, required)
- `companySigningAuthorityUserId` (string, required)
- `documents` (EmploymentDocuments, required)
- `payCycle` (PayCycle, required)
- `contractType` (enum, required)
  - Allowed values: `FIXED_RATE`, `FLEXIBLE_RATE`, `MILESTONE`, `TIME_TRACKING`
- `contractSetting` (ContractSetting, required)
- `isApiContract` (boolean, required) — If true, means that this contract was created by our external-facing APIs. We may want to differentiate these in future, such as preventing them from being deleted.
- `customFields` (map from string to string, required) — Custom fields in the custom contract signature document.
- `workerCanSubmitWork` (boolean, optional)
- `clientCanSubmitWork` (boolean, optional)
- `teamId` (string, optional)
- `managerUserId` (string, optional) — The userId of the manager this worker reports to. Powers the org chart.
- `numberOfHours` (long, optional) — Number of hours for fixed rate contracts. Used for display purposes on the contract.
- `country` (string, optional)
- `terminationDetails` (ContractTerminationDetails, optional)
- `externalId` (string, optional) — An external ID that a company can assign to a user. It doesn't have to be unique between contracts, and its only use is to be displayed.
- `createdByUserId` (string, optional)
- `creationTimestamp` (datetime, optional)
- `customContractTemplateID` (string, optional) — Template ID of the selected custom contract
- `renewalDetails` (ContractRenewalDetails, optional) — Details about the contract renewal, if applicable
- `previousAgreements` (list of PreviousAgreement, optional) — Signed agreements this contract had before a renewal or a resend replaced them, oldest first.
- `agreementSentOn` (string, optional) — Date (YYYY-MM-DD) the current agreement was sent for signing by a renewal or a resend. Unset for an agreement sent when the contract was created.
- `agreementEffectiveDate` (string, optional) — Date (YYYY-MM-DD) the current agreement takes effect, when a renewal set one. Unset means the start date.
- `signedAgreement` (SignedAgreement, optional) — The signed agreement in force, which a withdrawn renewal points the contract back to.
- `companySubscriptionChargedLast` (datetime, optional) — The last month this contract was included in charge for active contractors for their company.
- `billedPeriodEnds` (list of string, optional) — Billing period end dates (YYYY-MM-DD) the contractor subscription fee has already been collected for on this contract, at most one per month, most recent 6 kept.
- `scheduledContractorChanges` (ScheduledContractorChangesMap, optional) — Pending/applied/cancelled scheduled rate changes for contractor contracts
- `scheduledW2Changes` (ScheduledW2ChangesMap, optional) — Pending/applied/cancelled scheduled rate changes for W2 employee contracts
- `requiresI9` (boolean, optional) — If true, this US employee must complete Form I-9 (employee Section 1 + employer Section 2).
- `i9DocumentID` (string, optional) — Id of the I-9 Document, set once the employee submits Section 1.
- `i9SigningAuthorityUserId` (string, optional) — User id of the company signer chosen to complete I-9 Section 2 for this employee.
- `i9ResetCount` (integer, optional) — How many times the employer has sent this employee's I-9 back to be filled in again (because Section 1 held wrong details). Capped at 2 resets; unset means none yet.
- `invoicePaidAtleastOnce` (boolean, optional) — True once at least one invoice for this contract has been paid.

### TeamRoleAndDetails

We may allow granular changes to roles so creating this wrapper type to future-proof

- `role` (enum, required)
  - Allowed values: `role_admin`, `role_org_manager`, `role_people_manager`, `role_people_manager_and_payer`, `role_viewer_sensitive`, `role_apar_team_manager`
- `permissions` (list of enum, required) — Extra permissions can only be added to People Manager and People Manager + Payer roles.
  - Allowed values: `perm_adjust_payroll_and_payments`, `perm_approve_agreement_details_requests`, `perm_approve_payroll_and_payments`, `perm_manage_people_and_contracts`, `perm_manage_team_admins`, `perm_manage_team_settings`, `perm_pay_invoices`, `perm_view_nonsensitive_employee_info`, `perm_view_sensitive_employee_info`, `perm_view_sensitive_payroll_info`

### OrgRoleAndDetails

We may allow granular changes to roles so creating this wrapper type to future-proof

- `role` (enum, required)
  - Allowed values: `role_admin`, `role_manager`, `role_org_manager`, `role_apar_admin`, `role_apar_manager`

### Address

- `city` (string, required)
- `country` (string, required)
- `line1` (string, required)
- `postalCode` (string, required)
- `line2` (string, optional)
- `state` (string, optional)

### W2Payroll

- `zealId` (string, required) — deprecated! Use checkId instead.
- `checkId` (string, required)
- `checkPlaidProcessorToken` (string, required)
- `migrationRequired` (boolean, required) — If true, this company must migrate data from a previous payroll provider into Thera.
- `payFrequency` (enum, required) — double check if this is still needed
  - Allowed values: `weekly`, `biweekly`, `semimonthly`, `monthly`, `quarterly`, `annually`
- `checkPayScheduleIdByUserId` (map from string to set of string, required) — Pay Schedule IDs by Thera User ID
- `lastSubscriptionPayDate` (string, required)
- `forceSetupInProgress` (boolean, required) — Used to keep W2 payroll marked as setup in progress. Main function for this is post-payroll migration, if we fail to create user / contracts for all employees that were migrated, this will remain false until we can sort it out. Also can be useful in other miscellaneous situations where we need to hide W2 payroll.
- `onboardingFlowComplete` (boolean, required) — If true, indicates that this company has completed our multi-step onboarding process, and should not be brought back into this flow. This field does not indicate the company's readiness to run payroll.
- `numberOfEmployeesToMigrate` (integer, optional) — Number of employees, active or inactive, who were already paid on the calendar year that the company onboarded to Thera. Only present if `migrationRequired` is `true`.
- `autopilotEnabledByPayScheduleId` (map from string to boolean, optional) — What the customer set autopilot to, per pay cycle.
- `scheduledHoursPerWeekByPayScheduleId` (map from string to double, optional) — Weekly hours seeded onto hourly employees' regular earning lines, per Pay Schedule ID. A pay cycle with no entry seeds the standard full-time week. Zero seeds no hours at all, so the employer enters the real ones before approving. A per-employee value on the employment overrides this.
- `activePaymentMethodId` (string, optional)
- `onboardStatus` (enum, optional) — This has been added to be able to know when a company transitions into a blocking state. We need to know the previous state in order to know when the transition occurs. This should not be depended on by the app for now.
  - Allowed values: `completed`, `needs_attention`, `blocking`
- `implementationStatus` (enum, optional) — This has been added to be able to know when a company transitions into a completed state so that we can notify the client that they're ready to run payroll. We need to know when the previous state in order to know when the transition occurs. This should not be depended on by the app for now.
  - Allowed values: `completed`, `needs_attention`, `in_review`
- `onboardingStartedAt` (string, optional) — UTC ISO timestamp of when the company first submitted US payroll onboarding and its Check company was created. Empty for companies that started before this field existed, so empty does not mean onboarding hasn't started. Used to limit the incomplete-onboarding Slack alert to companies that started after this shipped.
- `onboardingCompletedAt` (string, optional) — UTC ISO timestamp of when onboardingFlowComplete was first set to true. Used to determine when to send post-onboarding reminders (e.g. workers comp after 7 days).
- `nyHireGuideEmailSentAt` (string, optional) — UTC ISO timestamp of when the "hiring in New York" guide email was sent to this company. Set once, on the company's first New York hire after this shipped, so the email is never sent again.

### Flags

- `paymentsVersion` (integer, required) — The Thera payment system that the company will be using. 1 is the original payment system, 2 is the current one. This will match the `paymentsVersion` of the `Company` that invites the contractor to the platform.
- `csv` (boolean, required)
- `cards` (boolean, required) — Determines if this company can pay in with card instead of just bank accounts.
- `allowedPayoutCurrencies` (set of string, required)
- `externalIds` (boolean, required)
- `autoPayExposed` (boolean, required)
- `mfaEnabled` (boolean, required)
- `isActive` (boolean, optional)
- `live` (boolean, optional)
- `offPlatformPayIns` (boolean, optional)
- `eorTrackerLink` (string, optional)
- `companyStatus` (enum, optional)
  - Allowed values: `TEST`, `CLIENT`, `INACTIVE`
- `freePayoutsPerMonth` (integer, optional) — If present, this determines the number of free payouts that contractors at this company get per month. This takes precedence over the company's other rate settings.
- `customContract` (CustomContract, optional)
- `separateRevenue` (boolean, optional)
- `chargeCompanyWithActiveWorkersModel` (boolean, optional)
- `blockContractorWithdrawals` (boolean, optional)
- `isTheraAdvanceCompany` (boolean, optional)
- `hasWorkersCompCoverage` (boolean, optional)
- `workersCompExempt` (boolean, optional) — If true, the company has told us workers' comp does not apply to them, typically because every employee is an owner. Suppresses the reminders without claiming they bought coverage, which is what hasWorkersCompCoverage means.
- `isCopilotEnabled` (boolean, optional)
- `maxPaymentsPerDay` (integer, optional) — Maximum number of payments (pay-ins) allowed in a rolling 24-hour window. Defaults to 10 if not set.
- `achPayrollDelayDays` (integer, optional) — Number of business days to delay finalizing contractor-invoice.
- `plaidMicroDepositsEnabled` (boolean, optional) — If true, connecting a bank account offers micro-deposit verification (same-day and instant micro-deposits) when this company connects a bank account. Defaults to false: companies connect via instant auth only.
- `blockPayins` (boolean, optional) — If true, all pay-in attempts (manual and auto-pay) are rejected.
- `allowExternalApiPay` (boolean, optional) — If true, this company may use the external API pay-contractor.
- `contractRenewalsExposed` (boolean, optional) — If true, this company's admins can see and turn on contract renewals.

### CompanySettings

- `paymentAllowedDaysBeforeDueDate` (integer, required)
- `defaultVerificationSetting` (VerificationSetting, required)
- `enabledApps` (EnabledApps, required)
- `requestedToEnableApps` (RequestedToEnableApps, required)
- `isTpOnboardingSkipped` (boolean, required)
- `autoApproveTimeOffRequests` (boolean, required)
- `isKYCMandated` (boolean, required)
- `timeOffSettings` (TimeOffSettings, optional)
- `timeTrackingSettings` (TimeTrackingSettings, optional)
- `active` (boolean, optional)
- `autoPayAheadOfHolidaysWeekends` (boolean, optional) — If enabled, autopay will run early for invoices that would normally be due on holidays or weekends. The autopay will execute based on the previous valid business day as the effective due date.
- `blockContractorInvoiceSubmission` (boolean, optional) — If true, contractors at this company cannot submit new invoices (work or other items) at all. Does not affect already-open invoices, admin/CSV-created invoices, or auto-generated recurring invoices.
- `googleCalendarSettings` (GoogleCalendarSettings, optional)
- `checkeeperSettings` (CheckeeperSettings, optional) — Per-company persisted state for paper checks. Today this is just the running check-number counter; v2 will likely add default mail method, default address kind, custom signer image, etc.
- `contractRenewals` (ContractRenewalSettings, optional) — Yearly contract renewals. When enabled, each active contractor contract with a renewal date gets a new agreement sent for signing ahead of that date, dated from it, and the date moves on a year.

### BankAccountResponseMetadata

- `plaidAccessToken` (string, required)
- `owningTheraUserId` (string, required)
- `verified` (boolean, required) — Whether the bank account is verified.

### Team

- `name` (string, required)
- `defaultPayCycles` (map from enum to DefaultPayCycle, required) — These pay cycles should be suggested to users when creating a contract with that `WageType`.
- `autoPay` (TeamAutoPay, optional) — We will eventually make this non-optional once all types have them
- `autoApproveInvoice` (boolean, optional) — If enabled, all invoices will be automatically approved for payment.
- `paymentAllowedDaysBeforeDueDate` (integer, optional) — Number of days before an invoice's due date that it becomes available for payment for contracts belonging to this team. When unset, callers should fall back to `CompanySettings.paymentAllowedDaysBeforeDueDate`.

### SubscriptionPricing

- `contractorSubscriptionPrice` (long, required)
- `w2PayrollCompanyPrice` (list of SubscriptionPrice, required)
- `w2PayrollEmployeePrice` (list of SubscriptionPrice, required)

### MonthlyPayInTotals

One currency's seven monthly pay-in totals, oldest slot first. A wrapper rather than a bare list because the field it sits in is a map, and the pair of nested containers is worth naming where it is read.

- `amounts` (list of long, required) — Seven totals in minor units, oldest first. Missing months are zero, not absent.

### StripeMultipleAccountCustomerInfo

- `mainAccount` (StripeAccountInfo, required)
- `revenueAccount` (StripeAccountInfo, required)
- `eorAccount` (StripeAccountInfo, required)

### TpCompanyInformation

- `payrollFboOnboardingStage` (enum, required)
  - Allowed values: `BANKING_DETAILS`, `SUBMITTED`, `DISBURSEMENT_ACCOUNT_APPROVED`, `DISBURSEMENT_ACCOUNT_REJECTED`, `DEPOSIT_ACCOUNT_APPROVED`, `DEPOSIT_ACCOUNT_REJECTED`
- `businessApplicationId` (string, optional)
- `primaryPersonApplicationId` (string, optional)
- `depositAccount` (TpDepositAccount, optional)
- `disbursementAccount` (TpDisbursementAccount, optional)
- `lastInterestPaidMonth` (date, optional)
- `withdrawalTpBankInfo` (list of WithdrawalTpBankInfo, optional)

### DwollaCompanyInformation

Dwolla counterpart of TpCompanyInformation. The top-level fields are the payroll FBO account: a Verified Business Customer whose Dwolla Balance receives payroll ACH debits. `cashAccount` (same shape) is the optional cash account.

- `customerId` (string, required)
- `customerStatus` (enum, required)
  - Allowed values: `UNVERIFIED`, `RETRY`, `DOCUMENT`, `VERIFIED`, `SUSPENDED`, `DEACTIVATED`
- `onboardingStage` (enum, required) — Our own progress through Dwolla KYB, derived from the customer, owner and certification statuses.
  - Allowed values: `CUSTOMER_CREATED`, `BENEFICIAL_OWNERS_ADDED`, `OWNERSHIP_CERTIFIED`, `VERIFIED`, `NEEDS_RETRY`, `NEEDS_DOCUMENTS`, `SUSPENDED`, `DEACTIVATED`, `AWAITING_CERTIFICATION`
- `beneficialOwners` (list of DwollaBeneficialOwnerInfo, required)
- `businessClassification` (string, required) — Dwolla industry classification id the customer was created with.
- `bankFundingSources` (map from string to DwollaBankFundingSource, required) — Deprecated, no longer written or read. Dwolla funding source ids now live on the payment method (PlaidPostVerificationPaymentMethodDetails.dwollaPayrollFundingSourceId / dwollaCashFundingSourceId). Kept so company records written before the move still deserialize.
- `createdAt` (datetime, required)
- `updatedAt` (datetime, required)
- `beneficialOwnershipStatus` (enum, optional)
  - Allowed values: `UNCERTIFIED`, `CERTIFIED`, `RECERTIFY`
- `balanceFundingSourceId` (string, optional) — The company's Dwolla Balance (cash / FBO). Only exists once the customer is verified.
- `email` (string, optional) — Email the Dwolla customer was created with (admin email; `+tc` alias for the cash account).
- `cashAccount` (DwollaCompanyInformation, optional) — Company cash account (TP deposit FBO counterpart): a second Verified Business Customer with its own Dwolla Balance, opened when onboarding with `setupCashAccount`. The top-level fields are the payroll FBO.
- `businessType` (string, optional) — Dwolla businessType the customer was created with (llc, corporation, partnership, soleProprietorship).
- `verificationDirectives` (list of DwollaVerificationDirective, optional) — Outstanding Dwolla verification directives (the customer's `_embedded.errors`). Empty once nothing is pending.
- `verificationActions` (list of string, optional) — Dwolla action links currently on the customer, e.g. retry-verification, retry-with-full-ssn, verify-with-document, verify-business-with-document, verify-controller-and-business-with-document, upload-dba-document, certify-beneficial-ownership.
- `documentRequests` (list of DwollaDocumentRequest, optional) — The documents Dwolla is asking for on this account, the way Dwolla's dashboard lists them, rebuilt on every refresh from the customer's links, its verification directives and its owners' statuses. Empty when Dwolla wants nothing.
- `ownershipCertifications` (list of DwollaOwnershipCertification, optional) — Audit trail of every beneficial ownership certification the Account Admin submitted for this customer.
- `documents` (list of DwollaStoredDocument, optional) — Every verification document sent to Dwolla for this customer or its beneficial owners, with the S3 key of Thera's own copy, so documents can be resent to Dwolla or another bank partner without asking again.

### DwollaTermsAcceptance

Auditable record of a company admin accepting the updated Terms of Service for Dwolla.

- `accepted` (boolean, required)
- `acceptedByUserId` (string, required)
- `acceptedAt` (string, required) — When it was accepted, in UTC, e.g. "2026-10-23 14:05:12 UTC".
- `ipAddress` (string, optional)
- `userAgent` (string, optional)

### DwollaPendingCertification

The admin's beneficial ownership certification, kept until the Dwolla customer exists to receive it.

- `certifiedByUserId` (string, required)
- `certifiedAt` (string, required) — When the admin certified, as an ISO instant.
- `certificationText` (string, required)
- `ipAddress` (string, optional)
- `userAgent` (string, optional)

### AlloyKybInformation

- `decision` (enum, required)
  - Allowed values: `PENDING`, `APPROVED`, `DENIED`, `ERROR`
- `business` (AlloyEvaluationResult, required)
- `owners` (list of AlloyEvaluationResult, required)
- `submittedAt` (string, required)
- `updatedAt` (string, required)
- `decidedAt` (string, optional) — When `decision` first became APPROVED or DENIED.
- `journeyApplicationToken` (string, optional) — Alloy journey application token, when KYB runs through an Alloy journey.
- `lastWebhookEvent` (string, optional) — Event type of the last Alloy webhook received for this company.
- `lastWebhookAt` (string, optional) — When the last Alloy webhook for this company was processed.
- `documentRequests` (list of AlloyDocumentRequest, optional) — Documents Alloy reviewers asked for, open and submitted.

### KybDocument

- `id` (string, required)
- `category` (enum, required) — What a KYB document proves. CONTROLLER_ID and OWNER_ID are a person's government ID; BUSINESS is an EIN letter, formation document or proof of address.
  - Allowed values: `CONTROLLER_ID`, `OWNER_ID`, `BUSINESS`
- `documentType` (string, required) — Dwolla document type (passport, license, idCard, other).
- `s3Key` (string, required) — S3 key of Thera's copy of the file.
- `uploadedByUserId` (string, required)
- `uploadedAt` (string, required) — When the company uploaded it, in UTC, e.g. "2026-10-23 14:05:12 UTC".
- `submissions` (list of KybDocumentSubmission, required)
- `businessKind` (enum, optional) — For BUSINESS documents, which one it is. Empty when the company did not say (documents uploaded before this existed).
  - Allowed values: `EIN_LETTER`, `FORMATION`, `PROOF_OF_ADDRESS`, `DBA`, `GOOD_STANDING`
- `personKind` (enum, optional) — For CONTROLLER_ID and OWNER_ID documents, which person document it is. Empty means PHOTO_ID.
  - Allowed values: `PHOTO_ID`, `PROOF_OF_ADDRESS`, `SSN_DOCUMENT`
- `ownerFirstName` (string, optional) — Owner the document belongs to, for OWNER_ID documents. Matched by name across partner accounts.
- `ownerLastName` (string, optional)

### MercoaCompanyDetails

- `entityId` (string, required)

### CompanyAccountingInformation

- `rutterAccessToken` (string, required)
- `rutterAccountIdByTheraFeeType` (map from enum to string, required)
- `setting` (CompanyAccountingSetting, required)

### CompanyBankingDetails

Banking details for a company. Company incorporation fields (establishedOn, incorporationState, legalStructure, naics) are optional and can be saved separately before beneficiary submission via the updateCompanyIncorporationInfo endpoint.

- `callerUserBeneficiaryInformation` (CompanyBeneficiary, required) — Whoever is filling out the onboarding form must fill out beneficiary information even if they don't own 25% or more of the company.
- `beneficiaries` (list of AddCompanyBeneficiary, required) — Must include anyone with 25% or greater ownership (excluding the caller user, since they will be covered by the field `callerUserBeneficiaryInformation`).
- `establishedOn` (date, optional) — Date the company was established. Optional - can be saved separately.
- `incorporationState` (string, optional) — State where the company is incorporated. Optional - can be saved separately.
- `legalStructure` (enum, optional) — Legal structure of the company. Optional - can be saved separately.
  - Allowed values: `ccorp`, `corp`, `estate`, `foreign_entity`, `llc`, `llp`, `lp`, `nonprofit`, `partnership`, `scheme`, `scorp`, `soleprop`, `trust`
- `naics` (string, optional) — NAICS sector code that accurately describes the industry the business operates in. Optional - can be saved separately.
- `businessClassification` (string, optional) — Dwolla business classification id picked by the admin. Used to open the Dwolla customer once Alloy KYB approves; falls back to a classification derived from naics when missing.

### IncorporationDetails

- `incorporationId` (string, required)
- `registrationDate` (string, required)
- `appointedAgent` (boolean, required)
- `state` (string, optional)
- `experience` (string, optional)
- `progress` (string, optional)
- `industry` (string, optional)
- `agent` (string, optional)
- `packageType` (string, optional)
- `dbaService` (boolean, optional)
- `worryFreeCompliance` (boolean, optional)
- `einDocuments` (list of string, optional)
- `tradeMarkCompany` (boolean, optional)
- `status` (string, optional)
- `phone` (string, optional)
- `documents` (list of IncorporationDocument, optional)
- `updatedAt` (string, optional)
- `userPersonalAddress` (Address, optional)

### LastContractorBillingInfo

- `contractorCount` (integer, required)
- `recentInvoicePaidMonth` (datetime, required) — The most recent billing month for which the company has successfully paid its invoice. Used to determine whether billing should run for the current cycle. If absent, it indicates no invoices have been paid yet.
- `amountInCompanyCurrency` (string, required)

### OrgChartExternalMember

A non-payroll placeholder person shown on the org chart (e.g. an external CEO/owner).

- `id` (string, required)
- `name` (string, required)
- `jobTitle` (string, optional)
- `teamName` (string, optional)
- `email` (string, optional) — Optional email. If a real Thera worker later joins this company with the same email, the org chart resolves the placeholder to that worker automatically (dropping the External tag).
- `managerUserId` (string, optional) — The worker userId or other external id this person reports to. Absent = top of the chart.

### MilestoneDetails

- `milestones` (map from string to Milestone, required)

### EmploymentW2PayrollDetails

- `recurrences` (map from UUID to Recurrence, required)
- `checkCompanyId` (string, required)
- `checkEmployeeId` (string, required)
- `zealEmployeeId` (string, optional)
- `zealCompanyId` (string, optional)
- `timeTrackingEnabled` (boolean, optional)
- `overtimePolicyId` (string, optional)
- `allowEmployeeEdit` (boolean, optional)
- `allowHistoricalEntries` (boolean, optional)
- `scheduledHoursPerWeek` (double, optional) — Hours this employee is scheduled for each week, used to seed their regular earning line. Overrides the company default. Unset falls back to the company default, then to the standard full-time hours for the pay frequency. Zero means do not seed any hours: the payroll line is created empty so the employer must enter the real hours before approving.
- `firstPayDate` (date, optional) — Payday this employee's first paycheck lands on. On-cycle payroll skips them entirely on every cycle paying out before it, so a hire agreed to a later first check is not swept into an earlier run. Unset means the next payday on their cycle, which is what every employee got before this was settable.
- `firstPayPeriodStartDate` (date, optional) — First day of work that first paycheck covers. Set it when the check has to reach back past its own cycle, which is the normal case for someone hired after the deadline of the cycle their start date falls in: without it that earlier stretch is never paid by any run. Unset falls back to the employee's start date.
- `firstPayAmountInCents` (long, optional) — Gross pay for the first paycheck, replacing the prorated figure rather than adding to it. Unset prorates the covered period from the employee's earning rate, which is the safe default; set it when the first check was agreed at some other number.

### EORDetails

- `payslips` (list of EORPayslip, required)

### EmploymentDocuments

- `generic` (map from string to GenericEmploymentDocument, required) — Keys are S3 Keys, values are display names

### PayCycle

- `cycleStartDate` (date, required) — The contractor's contract's start date
- `cycleEnd` (PayCycleEnd, required)
- `paymentDueDays` (integer, required)
- `firstPayDate` (date, required)
- `timezone` (string, optional) — This field is currently not used. Adheres to Timezone DB version tzdata2022g.
- `lastPayDate` (date, optional)
- `firstPayTotal` (long, optional)
- `lastPayTotal` (long, optional)
- `itemRecurrencesById` (map from string to ItemRecurrence, optional)

### ContractSetting

- `verificationSetting` (VerificationSetting, required)

### ContractTerminationDetails

- `terminatingUserId` (string, required)
- `endDate` (date, required)
- `endDateRecordedOn` (date, optional)

### ContractRenewalDetails

- `renewalDate` (string, required)
- `renewedByUserId` (string, required)
- `renewalRecordedOn` (string, required)
- `skipped` (boolean, optional) — If true, no new agreement is sent for this contract's renewals until an admin sets a renewal date again.

### PreviousAgreement

- `contractFileId` (string, required) — S3 key of the signed PDF.
- `replacedOn` (string, required) — Date (YYYY-MM-DD) a newer agreement replaced this one.

### SignedAgreement

- `documentId` (string, required) — PandaDoc document the signed file on the contract came from.
- `effectiveDate` (string, optional) — Date (YYYY-MM-DD) it took effect. Unset means the start date.

### ScheduledContractorChangesMap

- `entries` (map from UUID to ScheduledContractorChange, required)

### ScheduledW2ChangesMap

- `entries` (map from UUID to ScheduledW2Change, required)

### CustomContract

- `templateId` (string, optional) — deprecated! Template ID for this custom contract
- `pandadocTemplates` (list of PandadocTemplates, optional)

### VerificationSetting

- `kycEnabled` (boolean, required)
- `complianceEnabled` (boolean, required)

### EnabledApps

- `payroll` (boolean, required)
- `ap` (boolean, required)
- `ar` (boolean, required)
- `banking` (boolean, required)

### RequestedToEnableApps

- `ap` (boolean, required)
- `ar` (boolean, required)

### TimeOffSettings

- `policies` (list of TimeOffPolicy, required)
- `defaultTimeOffPolicies` (set of string, required)
- `associatedUserIdsByPolicyId` (map from string to set of string, required)

### TimeTrackingSettings

- `timeTrackingEnabled` (boolean, required)
- `allowEmployeeEdit` (boolean, required)
- `requireNoteOnEdit` (boolean, required)
- `flagEditedEntries` (boolean, required)
- `allowHistoricalEntries` (boolean, required)
- `backtrackWindowDays` (integer, required)
- `submitLeadDays` (integer, required)
- `hardLockTime` (string, required)
- `hardLockTimezone` (string, required)
- `workweekStart` (string, required)
- `overtimePolicies` (list of OvertimePolicy, required)
- `defaultOvertimePolicyId` (string, optional)

### GoogleCalendarSettings

- `refreshToken` (string, optional)
- `accessToken` (string, optional)
- `tokenExpiryTime` (long, optional) — Epoch milliseconds when the access token expires.
- `calendarId` (string, optional) — The ID of the Google Calendar created for this company.
- `connectedByUserId` (string, optional) — The admin user who connected Google Calendar.
- `syncEnabled` (boolean, optional) — Master toggle for calendar sync.
- `syncPto` (boolean, optional) — Whether to sync approved PTO events.
- `syncBirthdays` (boolean, optional) — Whether to sync birthday events.
- `syncAnniversaries` (boolean, optional) — Whether to sync work anniversary events.
- `syncHolidays` (boolean, optional) — Whether to sync holiday events.
- `icalFeedToken` (string, optional) — Secret token for the unauthenticated iCal feed URL.
- `shareWithAdmins` (boolean, optional) — Whether to share the calendar with all org admins.

### CheckeeperSettings

Per-company persisted state for paper checks. Today this is just the running check-number counter; v2 will likely add default mail method, default address kind, custom signer image, etc.

- `lastCheckNumber` (long, optional) — Highest check number assigned by Thera to this company's paper checks. The next-issued check uses lastCheckNumber + 1. Scoped per-company: uniqueness across companies is not required (banks reconcile per account, not globally). Seed: a missing value is treated as 100000 so the first check issued is #100001.

### ContractRenewalSettings

Yearly contract renewals. When enabled, each active contractor contract with a renewal date gets a new agreement sent for signing ahead of that date, dated from it, and the date moves on a year.

- `enabled` (boolean, required)
- `daysBeforeRenewal` (integer, optional) — How many days before the renewal date the new agreement is sent. Defaults to 30 when unset.

### DefaultPayCycle

- `cycleEnd` (PayCycleEnd, required)
- `paymentDueDays` (integer, required)

### TeamAutoPay

- `enabled` (boolean, required) — If enabled, all fixed rate invoices will automatically be paid x days in advance of their due date, where x is the number of days that the company has set for their invoices to be available ahead of their due date.
- `paymentMethodId` (string, optional) — ID of the payment method auto-pay charges.
- `disabledReason` (enum, optional) — Set by the system when auto-pay is automatically disabled. Null when disabled manually by an admin. When present, auto-pay is paused and the system will re-enable it automatically once the condition is resolved (e.g. account funded). Cleared by the system on re-enable, or by an admin explicitly disabling the team's auto-pay.
  - Allowed values: `INSUFFICIENT_FUNDS`
- `requiredBalance` (double, optional) — The payroll amount (in USD) that failed due to insufficient funds. Used to determine when the account has been sufficiently funded to re-enable auto-pay. Only set when disabledReason is INSUFFICIENT_FUNDS. Cleared alongside disabledReason.
- `insufficientFundsNotifiedAt` (string, optional) — ISO 8601 timestamp of when the first insufficient funds email was sent to admins. Used as the reference point for scheduling follow-up notifications. Cleared when auto-pay is re-enabled or manually disabled by an admin.
- `followUpCount` (integer, optional) — Tracks how many follow-up notifications have been sent after the initial insufficient funds email. 0 or absent = only initial email sent. 1 = day-2 follow-up email sent. 2 = day-4 follow-up email sent. No further follow-ups after this. Cleared when auto-pay is re-enabled or manually disabled by an admin.

### SubscriptionPrice

- `endDate` (date, required)
- `price` (long, required)

### StripeAccountInfo

- `stripeCustomerId` (string, required)
- `defaultPaymentMethodId` (string, required)

### TpDepositAccount

- `info` (TpAccountInfo, required)
- `depositFboOnboardingStage` (enum, required)
  - Allowed values: `BANKING_DETAILS`, `SUBMITTED`, `DISBURSEMENT_ACCOUNT_APPROVED`, `DISBURSEMENT_ACCOUNT_REJECTED`, `DEPOSIT_ACCOUNT_APPROVED`, `DEPOSIT_ACCOUNT_REJECTED`

### TpDisbursementAccount

- `info` (TpAccountInfo, required)

### WithdrawalTpBankInfo

- `counterPartyId` (string, required)
- `accountNumber` (string, required)
- `routingNumber` (string, required)
- `type` (string, required)
- `nameOnAccount` (string, required)

### DwollaBeneficialOwnerInfo

- `id` (string, required)
- `firstName` (string, required)
- `lastName` (string, required)
- `verificationStatus` (enum, required)
  - Allowed values: `VERIFIED`, `DOCUMENT`, `INCOMPLETE`
- `verificationActions` (list of string, optional) — Dwolla action links on the owner, e.g. retry-verification, verify-with-document.

### DwollaBankFundingSource

- `fundingSourceId` (string, required)
- `status` (enum, required)
  - Allowed values: `UNVERIFIED`, `VERIFIED`
- `name` (string, required)
- `removed` (boolean, required)

### DwollaVerificationDirective

- `code` (string, required) — Dwolla directive code, e.g. POBoxNotAllowed, EINDocumentRequired, AdditionalReviewRequired.
- `message` (string, required)
- `actions` (list of string, required) — Names of the Dwolla action links attached to the directive (empty when nothing can be done but wait).
- `path` (string, optional)

### DwollaDocumentRequest

One document Dwolla is asking for, with the title and explanation Dwolla's dashboard shows for it.

- `party` (enum, required)
  - Allowed values: `CONTROLLER`, `BUSINESS`, `DBA`, `OWNER`
- `title` (string, required) — What Dwolla asks for, e.g. "Controller ID Required" or "Address Not Associated With Business".
- `description` (string, required) — What to upload, in Dwolla's words when a directive gave them.
- `directiveCodes` (list of string, required) — The Dwolla directives behind this request, e.g. AddressNotAssociatedWithBusiness.
- `businessKind` (enum, optional) — For BUSINESS and DBA requests, the business document Dwolla named. Empty when any business document will do.
  - Allowed values: `EIN_LETTER`, `FORMATION`, `PROOF_OF_ADDRESS`, `DBA`, `GOOD_STANDING`
- `beneficialOwnerId` (string, optional) — For OWNER requests, the Dwolla beneficial owner the document is for.
- `ownerName` (string, optional)

### DwollaOwnershipCertification

Auditable record of the Account Admin certifying beneficial ownership: the checkbox and the submit are the two proactive actions Dwolla requires, and the exact text shown is stored with them.

- `certifiedByUserId` (string, required)
- `certifiedAt` (string, required)
- `certificationText` (string, required)
- `dwollaStatus` (string, required) — Certification status Dwolla returned (certified).
- `ipAddress` (string, optional)
- `userAgent` (string, optional)

### DwollaStoredDocument

One verification document sent to Dwolla, linked to Thera's stored copy.

- `s3Key` (string, required) — S3 key of Thera's copy of the file.
- `documentType` (string, required) — Dwolla document type (passport, license, idCard, other).
- `uploadedByUserId` (string, required)
- `uploadedAt` (string, required) — When it was sent to Dwolla, in UTC, e.g. "2026-10-23 14:05:12 UTC".
- `beneficialOwnerId` (string, optional) — Dwolla beneficial owner the document was sent for; empty for the business or controller.
- `dwollaDocumentId` (string, optional) — Dwolla document id returned by the upload.
- `status` (string, optional) — Dwolla document status when it was sent (pending or reviewed).

### AlloyEvaluationResult

- `externalEntityId` (string, required)
- `decision` (enum, required)
  - Allowed values: `PENDING`, `APPROVED`, `DENIED`, `ERROR`
- `evaluationToken` (string, optional)
- `entityToken` (string, optional)
- `outcome` (string, optional) — Raw Alloy summary.outcome, e.g. Approved, Denied, Manual Review.
- `missingFields` (list of string, optional) — Inputs Alloy reported as required but missing (evaluation not run).

### AlloyDocumentRequest

A document an Alloy reviewer asked for, from a manual review whose outcome or reason mentions documents. SUBMITTED once a document was sent to Alloy for it, either uploaded by the company or reused from kybDocuments.

- `externalEntityId` (string, required) — The Alloy entity the reviewer asked about (companyId for the business, companyId-owner-N for an owner).
- `category` (enum, required) — What a KYB document proves. CONTROLLER_ID and OWNER_ID are a person's government ID; BUSINESS is an EIN letter, formation document or proof of address.
  - Allowed values: `CONTROLLER_ID`, `OWNER_ID`, `BUSINESS`
- `status` (enum, required)
  - Allowed values: `OPEN`, `SUBMITTED`
- `requestedAt` (string, required)
- `businessKind` (enum, optional) — The specific business document the reviewer named in the reason, when it names one.
  - Allowed values: `EIN_LETTER`, `FORMATION`, `PROOF_OF_ADDRESS`, `DBA`, `GOOD_STANDING`
- `personKind` (enum, optional) — For CONTROLLER_ID and OWNER_ID requests, which person document is needed. Empty means PHOTO_ID.
  - Allowed values: `PHOTO_ID`, `PROOF_OF_ADDRESS`, `SSN_DOCUMENT`
- `flag` (string, optional) — The Alloy flag this request comes from, e.g. "FEIN Unmatched", when the reviewer's reason names one.
- `acceptedDocuments` (list of string, optional) — Documents that satisfy this request, to show the company, e.g. ["CP 575", "147C"].
- `verify` (string, optional) — What the reviewer checks on the document, e.g. "Legal name + EIN". For ops, not the company.
- `reviewToken` (string, optional)
- `outcome` (string, optional) — The reviewer's outcome, as Alloy sent it.
- `reasons` (list of string, optional) — The reviewer's reason(s), as Alloy sent them. Shown to the company so it knows what to upload.
- `notes` (list of string, optional) — The reviewer's notes on the review, as Alloy sent them, e.g. "Business Address, EIN Document, Passport ID". Emailed to the company.
- `kybDocumentId` (string, optional) — The kybDocuments entry sent to Alloy for this request.
- `alloyDocumentToken` (string, optional)
- `submittedAt` (string, optional)

### KybDocumentSubmission

One time a stored KYB document was sent to a partner.

- `partner` (enum, required)
  - Allowed values: `DWOLLA_PAYROLL`, `DWOLLA_CASH`, `ALLOY`
- `externalId` (string, required) — The partner's document id.
- `submittedAt` (string, required) — When it was sent, in UTC, e.g. "2026-10-23 14:05:12 UTC".
- `partnerOwnerId` (string, optional) — The partner's beneficial owner id, for OWNER_ID documents.

### CompanyAccountingSetting

- `syncSetting` (CompanyAccountingSyncSetting, required)

### CompanyBeneficiary

- `dateOfBirth` (date, required)
- `emailAddress` (string, required)
- `firstName` (string, required)
- `lastName` (string, required)
- `phoneNumber` (string, required)
- `physicalAddress` (RequestAddress, required)
- `ownershipPercentage` (integer, required)
- `title` (string, required)
- `isControlPerson` (boolean, required) — Person with significant responsibility to control, manage or direct the business. Exactly one person must be given this role at the company.
- `middleName` (string, optional) — Middle name or initial, if they have one
- `mailingAddress` (RequestAddress, optional) — Only required if different from physical address
- `citizenship` (string, optional) — Two-letter ISO country code for person's nationality/citizenship (e.g., "US", "CA", "MX"). Optional, only required if Non-US person.
- `tin` (string, optional) — U.S. Social Security or IRS tax ID number of the person (optional for non-US persons, use identificationNumber instead).
- `identificationNumber` (string, optional) — International identification number for non-US persons (tax ID, passport number, etc.). Max 30 chars.
- `identificationNumberType` (string, optional) — Type of international identification number (e.g., "passport", "tax_id", "national_id"). Max 30 chars.
- `foreignIdDocumentS3Key` (string, optional) — S3 key for foreign identity document (passport or national ID) for non-US owners. Required for beneficiaries with non-US addresses.
- `makeOrgAdmin` (boolean, optional)
- `w8BenDocumentS3Key` (string, optional) — S3 key for w8Ben document for non-US owners. Required for beneficiaries with non-US addresses.

### AddCompanyBeneficiary

- `makeOrgAdmin` (boolean, required)
- `beneficiary` (CompanyBeneficiary, required)

### IncorporationDocument

- `name` (string, required)
- `s3Key` (string, required)

### Milestone

- `name` (string, required)
- `description` (string, required)
- `amount` (long, required)
- `status` (enum, required)
  - Allowed values: `CREATED`, `COMPLETE`
- `fileID` (string, optional)

### Recurrence

- `frequency` (Frequency, required)
- `details` (RecurrenceDetails, required)

### EORPayslip

- `payDate` (date, required)
- `currency` (string, required)
- `totalAmount` (long, required)
- `s3Key` (string, required)

### GenericEmploymentDocument

- `name` (string, required)
- `uploadDate` (date, required)

### PayCycleEnd

- `type`: `weekly`
  - `dayOfWeek` (enum, required)
    - Allowed values: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`
- `type`: `biweekly`
  - `dayOfWeek` (enum, required)
    - Allowed values: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`
- `type`: `monthly`
  - `value` (MonthlyPayCycleEnd, required)
- `type`: `semimonthly`
  - `value` (SemiMonthlyPayCycleEnd, required)

### ItemRecurrence

- `itemType` (enum, required)
  - Allowed values: `EXPENSE`, `BONUS`, `COMMISSION`, `OTHER`, `OVERTIME`
- `description` (string, required)
- `amount` (long, required)
- `firstInvoiceDate` (date, required) — The selected date of the first invoice item during the first invoice item creation
- `paymentCurrency` (string, required)
- `deletedDateTime` (datetime, optional)

### ScheduledContractorChange

- `id` (UUID, required)
- `effectiveDate` (date, required)
- `newRate` (long, required)
- `newWageType` (enum, required)
  - Allowed values: `HOURLY`, `DAILY`, `MONTHLY`, `SEMIMONTHLY`, `BIWEEKLY`, `WEEKLY`, `MILESTONE`
- `newCurrency` (string, required)
- `newPaymentDueDays` (integer, required)
- `newCycleEnd` (PayCycleEnd, required)
- `oldRate` (long, required)
- `status` (enum, required)
  - Allowed values: `PENDING`, `APPLIED`, `CANCELLED`
- `createdAt` (string, required)
- `createdByUserId` (string, required)
- `note` (string, optional)
- `paymentOption` (string, optional)
- `confirmedAmount` (long, optional)
- `oldWageType` (string, optional)

### ScheduledW2Change

- `id` (UUID, required)
- `effectiveDate` (date, required)
- `newAmount` (long, required)
- `newPayScheduleId` (string, required)
- `oldAmount` (long, required)
- `status` (enum, required)
  - Allowed values: `PENDING`, `APPLIED`, `CANCELLED`
- `createdAt` (string, required)
- `createdByUserId` (string, required)
- `newPeriod` (string, optional)
- `note` (string, optional)
- `oldPeriod` (string, optional)

### PandadocTemplates

- `templateId` (string, required) — Template ID for this custom contract
- `name` (string, required) — Name of this custom contract

### TimeOffPolicy

- `id` (string, required)
- `policyName` (string, required)
- `payType` (enum, required)
  - Allowed values: `UNPAID`, `PAID`, `US_HOLIDAY`
- `leaveType` (string, required)
- `allowanceType` (AllowanceType, required)
- `midYearJoiningAllowance` (enum, required)
  - Allowed values: `FULL_AMOUNT`, `PRORATED_AMOUNT`
- `accrualType` (map from enum to enum, required) — Whether the policy allowance is per month or per year
  - Allowed values: `MONTHLY`, `ANNUAL`
- `autoDeductEnabled` (map from enum to boolean, required) — Whether to automatically create deductions for PTO overages
- `createdByUserId` (string, required)
- `creationTimestamp` (long, required)
- `lastUpdationTimestamp` (long, required)
- `timeOffPolicyAddedFor` (set of enum, required)
  - Allowed values: `EMPLOYEE`, `CONTRACTOR`
- `deletionDetails` (TimeOffTerminationDetails, optional)
- `holidayDefinitions` (list of Holiday, optional)
- `accrualConfigByEmploymentType` (map from enum to AccrualConfig, optional)
- `carryoverConfigByEmploymentType` (map from enum to CarryoverConfig, optional)
- `negativeBalanceBehaviorByEmploymentType` (map from enum to enum, optional)
  - Allowed values: `BLOCK`, `WARN`, `APPROVAL_QUEUE`

### OvertimePolicy

- `id` (string, required)
- `name` (string, required)
- `isDefault` (boolean, required)
- `basis` (enum, required)
  - Allowed values: `WEEKLY`, `DAILY`, `BOTH`
- `otMultiplier` (double, required)
- `doubleOtMultiplier` (double, required)
- `state` (string, optional)
- `weeklyOtThreshold` (double, optional)
- `dailyOtThreshold` (double, optional)
- `dailyDoubleOtThreshold` (double, optional)
- `weeklyDoubleOtThreshold` (double, optional)
- `seventhConsecutiveDayOt` (boolean, optional)

### TpAccountInfo

- `applicationId` (string, required)
- `ledgerAccountId` (string, required)
- `id` (string, optional)

### CompanyAccountingSyncSetting

- `invoiceEnabled` (boolean, required)
- `vendorEnabled` (boolean, required)

### RequestAddress

- `city` (string, required)
- `country` (string, required)
- `line1` (string, required)
- `line2` (string, optional)
- `postalCode` (string, optional)
- `state` (string, optional)

### Frequency

- `type`: `perPaycheck`
  - `metadata` (string, required)

### RecurrenceDetails

- `type`: `deduction`
  - `deductionTemplateId` (string, required)
  - `deductionType` (string, required)
- `type`: `earning`
  - `value` (Earning, required)

### MonthlyPayCycleEnd

- `type`: `dayOfMonth`
  - `value` (integer, required)
- `type`: `lastDayOfMonth`
- `type`: `lastDayOfWeekOfMonth`
  - `value` (enum, required)
    - Allowed values: `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`

### SemiMonthlyPayCycleEnd

- `type`: `fifteenthAndEndOfMonth`
- `type`: `dayOfMonth`
  - `value` (integer, required)

### AllowanceType

- `type`: `limitedAllowance`
  - `allowedNumberOfDays` (double, required)
- `type`: `unlimitedAllowance`

### TimeOffTerminationDetails

- `terminatingUserId` (string, required)
- `deletionTimestamp` (long, required)

### Holiday

- `id` (string, required)
- `name` (string, required)
- `type` (enum, required)
  - Allowed values: `FEDERAL`, `CUSTOM`
- `enabled` (boolean, required)
- `dateRule` (string, optional)
- `startDate` (date, optional)
- `endDate` (date, optional)
- `createdBy` (string, optional)
- `createdAt` (long, optional)

### AccrualConfig

V2 accrual configuration. You set basis + frequency + annualAllowance, and ratePerPeriod = annualAllowance / periodsPerYear is derived. For HOURS_WORKED, 1 day = 8 hours.

- `basis` (enum, required)
  - Allowed values: `CALENDAR`, `HOURS_WORKED`
- `frequency` (enum, required)
  - Allowed values: `DAILY`, `WEEKLY`, `BIWEEKLY`, `SEMI_MONTHLY`, `MONTHLY`, `ANNUALLY`, `PER_PAY_CYCLE`
- `ratePerPeriod` (double, required) — Derived: annualAllowance / periodsPerYear. In hours if HOURS_WORKED, days if CALENDAR.
- `annualAllowance` (double, optional) — Total allowance per year. In hours if basis=HOURS_WORKED (e.g. 576), in days if basis=CALENDAR (e.g. 20). ratePerPeriod is derived from this.
- `accrualCap` (double, optional) — Accruals pause once balance reaches this cap (in days). Null = no cap.
- `waitingPeriodDays` (integer, optional) — Days from hire date before first accrual runs (probation period).
- `cliffDays` (integer, optional) — Days from hire before a one-time cliff grant fires. No incremental accrual before cliff.
- `cliffGrantDays` (double, optional) — Lump-sum days granted when cliff vesting triggers.
- `anniversaryTiers` (list of AnniversaryAccrualTier, optional) — Ordered tenure-based accrual rate overrides. On each accrual date, the tier with the highest yearsOfService that is \<= the employee's full years of service is applied.
- `accrualHoursEarned` (double, optional) — PTO hours granted each time a full accrualPerHoursWorked hours of work is completed (e.g. 2 in '2 hours per 50 worked'). Set with accrualPerHoursWorked this defines the accrual: the grant is all-or-nothing per completed block, never a proportion of a partial one.
- `accrualPerHoursWorked` (double, optional) — Hours that must be worked to earn accrualHoursEarned PTO hours (e.g. 50 in '2 hours per 50 worked'). Nothing is granted until a full block completes, so 2 per 50 grants 2 hours at 50 worked hours and nothing at 25. Hours left over carry forward and count towards the next block across payroll runs.

### CarryoverConfig

Defines how unused balance behaves at year-end rollover for a given employment type.

- `type` (enum, required)
  - Allowed values: `NONE`, `FULL`, `CAPPED`
- `carryoverCapDays` (double, optional) — Max days that carry forward. Only relevant when type = CAPPED.
- `rolloverMonthDay` (string, optional) — MM-DD when rollover occurs. Defaults to 01-01 (Jan 1).
- `carriedDaysExpiryMonthDay` (string, optional) — MM-DD by which carried days must be used (e.g. 03-31). Null = carried days never expire.

### Earning

- `type`: `reimbursement`
  - `amount` (long, required)
  - `name` (string, required)
- `type`: `bonus`
  - `amount` (long, required)
  - `name` (string, required)
  - `description` (string, optional)
- `type`: `commission`
  - `amount` (long, required)
  - `name` (string, required)
  - `description` (string, optional)
- `type`: `shareholderHsa`
  - `amount` (long, required)
  - `name` (string, required)
  - `description` (string, optional)
- `type`: `shareholderBenefits`
  - `amount` (long, required)
  - `name` (string, required)
  - `description` (string, optional)

### AnniversaryAccrualTier

A tenure-based override for the accrual rate. Applied once the employee has served at least yearsOfService full years.

- `yearsOfService` (integer, required) — Minimum full years of service before this tier applies (e.g. 3 means Year 3+).
- `ratePerPeriod` (double, required) — Days accrued per frequency period at this tenure tier.

## Examples

**Response**

```json
{
  "affiliationsByCompany": {
    "affiliationsByCompany": {
      "company": {
        "companyID": "companyID",
        "companyName": "companyName",
        "dbaName": "dbaName",
        "email": "email",
        "stripeCustomerId": "stripeCustomerId",
        "defaultCurrency": "defaultCurrency",
        "defaultPaymentMethodID": "defaultPaymentMethodID",
        "defaultPaymentMethodStatus": "MICRO_DEPOSIT_VERIFICATION",
        "address": {
          "city": "city",
          "country": "country",
          "line1": "line1",
          "postalCode": "postalCode",
          "line2": "line2",
          "state": "state"
        },
        "mailingAddress": {
          "city": "city",
          "country": "country",
          "line1": "line1",
          "postalCode": "postalCode",
          "line2": "line2",
          "state": "state"
        },
        "w2Payroll": {
          "zealId": "zealId",
          "checkId": "checkId",
          "checkPlaidProcessorToken": "checkPlaidProcessorToken",
          "migrationRequired": true,
          "payFrequency": "weekly",
          "checkPayScheduleIdByUserId": {
            "checkPayScheduleIdByUserId": [
              "checkPayScheduleIdByUserId"
            ]
          },
          "lastSubscriptionPayDate": "lastSubscriptionPayDate",
          "forceSetupInProgress": true,
          "onboardingFlowComplete": true,
          "numberOfEmployeesToMigrate": 1,
          "autopilotEnabledByPayScheduleId": {
            "autopilotEnabledByPayScheduleId": true
          },
          "scheduledHoursPerWeekByPayScheduleId": {
            "scheduledHoursPerWeekByPayScheduleId": 1.1
          },
          "activePaymentMethodId": "activePaymentMethodId",
          "onboardStatus": "completed",
          "implementationStatus": "completed",
          "onboardingStartedAt": "onboardingStartedAt",
          "onboardingCompletedAt": "onboardingCompletedAt",
          "nyHireGuideEmailSentAt": "nyHireGuideEmailSentAt"
        },
        "ein": "ein",
        "phoneNumber": "phoneNumber",
        "fastPayments": true,
        "flags": {
          "paymentsVersion": 1,
          "csv": true,
          "cards": true,
          "allowedPayoutCurrencies": [
            "allowedPayoutCurrencies"
          ],
          "externalIds": true,
          "autoPayExposed": true,
          "mfaEnabled": true,
          "isActive": true,
          "live": true,
          "offPlatformPayIns": true,
          "eorTrackerLink": "eorTrackerLink",
          "companyStatus": "TEST",
          "freePayoutsPerMonth": 1,
          "customContract": {
            "templateId": "templateId",
            "pandadocTemplates": [
              {
                "templateId": "templateId",
                "name": "name"
              },
              {
                "templateId": "templateId",
                "name": "name"
              }
            ]
          },
          "separateRevenue": true,
          "chargeCompanyWithActiveWorkersModel": true,
          "blockContractorWithdrawals": true,
          "isTheraAdvanceCompany": true,
          "hasWorkersCompCoverage": true,
          "workersCompExempt": true,
          "isCopilotEnabled": true,
          "maxPaymentsPerDay": 1,
          "achPayrollDelayDays": 1,
          "plaidMicroDepositsEnabled": true,
          "blockPayins": true,
          "allowExternalApiPay": true,
          "contractRenewalsExposed": true
        },
        "settings": {
          "paymentAllowedDaysBeforeDueDate": 1,
          "defaultVerificationSetting": {
            "kycEnabled": true,
            "complianceEnabled": true
          },
          "enabledApps": {
            "payroll": true,
            "ap": true,
            "ar": true,
            "banking": true
          },
          "requestedToEnableApps": {
            "ap": true,
            "ar": true
          },
          "isTpOnboardingSkipped": true,
          "autoApproveTimeOffRequests": true,
          "isKYCMandated": true,
          "timeOffSettings": {
            "policies": [
              {
                "id": "id",
                "policyName": "policyName",
                "payType": "UNPAID",
                "leaveType": "leaveType",
                "allowanceType": {
                  "type": "limitedAllowance",
                  "allowedNumberOfDays": 1.1
                },
                "midYearJoiningAllowance": "FULL_AMOUNT",
                "accrualType": {
                  "EMPLOYEE": "MONTHLY"
                },
                "autoDeductEnabled": {
                  "EMPLOYEE": true
                },
                "createdByUserId": "createdByUserId",
                "creationTimestamp": 1000000,
                "lastUpdationTimestamp": 1000000,
                "timeOffPolicyAddedFor": [
                  "EMPLOYEE"
                ],
                "holidayDefinitions": [],
                "accrualConfigByEmploymentType": {},
                "carryoverConfigByEmploymentType": {},
                "negativeBalanceBehaviorByEmploymentType": {}
              },
              {
                "id": "id",
                "policyName": "policyName",
                "payType": "UNPAID",
                "leaveType": "leaveType",
                "allowanceType": {
                  "type": "limitedAllowance",
                  "allowedNumberOfDays": 1.1
                },
                "midYearJoiningAllowance": "FULL_AMOUNT",
                "accrualType": {
                  "EMPLOYEE": "MONTHLY"
                },
                "autoDeductEnabled": {
                  "EMPLOYEE": true
                },
                "createdByUserId": "createdByUserId",
                "creationTimestamp": 1000000,
                "lastUpdationTimestamp": 1000000,
                "timeOffPolicyAddedFor": [
                  "EMPLOYEE"
                ],
                "holidayDefinitions": [],
                "accrualConfigByEmploymentType": {},
                "carryoverConfigByEmploymentType": {},
                "negativeBalanceBehaviorByEmploymentType": {}
              }
            ],
            "defaultTimeOffPolicies": [
              "defaultTimeOffPolicies"
            ],
            "associatedUserIdsByPolicyId": {
              "associatedUserIdsByPolicyId": [
                "associatedUserIdsByPolicyId"
              ]
            }
          },
          "timeTrackingSettings": {
            "timeTrackingEnabled": true,
            "allowEmployeeEdit": true,
            "requireNoteOnEdit": true,
            "flagEditedEntries": true,
            "allowHistoricalEntries": true,
            "backtrackWindowDays": 1,
            "submitLeadDays": 1,
            "hardLockTime": "hardLockTime",
            "hardLockTimezone": "hardLockTimezone",
            "workweekStart": "workweekStart",
            "overtimePolicies": [
              {
                "id": "id",
                "name": "name",
                "isDefault": true,
                "basis": "WEEKLY",
                "otMultiplier": 1.1,
                "doubleOtMultiplier": 1.1,
                "state": "state",
                "weeklyOtThreshold": 1.1,
                "dailyOtThreshold": 1.1,
                "dailyDoubleOtThreshold": 1.1,
                "weeklyDoubleOtThreshold": 1.1,
                "seventhConsecutiveDayOt": true
              },
              {
                "id": "id",
                "name": "name",
                "isDefault": true,
                "basis": "WEEKLY",
                "otMultiplier": 1.1,
                "doubleOtMultiplier": 1.1,
                "state": "state",
                "weeklyOtThreshold": 1.1,
                "dailyOtThreshold": 1.1,
                "dailyDoubleOtThreshold": 1.1,
                "weeklyDoubleOtThreshold": 1.1,
                "seventhConsecutiveDayOt": true
              }
            ],
            "defaultOvertimePolicyId": "defaultOvertimePolicyId"
          },
          "active": true,
          "autoPayAheadOfHolidaysWeekends": true,
          "blockContractorInvoiceSubmission": true,
          "googleCalendarSettings": {
            "refreshToken": "refreshToken",
            "accessToken": "accessToken",
            "tokenExpiryTime": 1000000,
            "calendarId": "calendarId",
            "connectedByUserId": "connectedByUserId",
            "syncEnabled": true,
            "syncPto": true,
            "syncBirthdays": true,
            "syncAnniversaries": true,
            "syncHolidays": true,
            "icalFeedToken": "icalFeedToken",
            "shareWithAdmins": true
          },
          "checkeeperSettings": {
            "lastCheckNumber": 1000000
          },
          "contractRenewals": {
            "enabled": true,
            "daysBeforeRenewal": 1
          }
        },
        "bankAccount": {
          "plaidAccessToken": "plaidAccessToken",
          "owningTheraUserId": "owningTheraUserId",
          "verified": true
        },
        "ledgerAccountIdsByCurrency": {
          "ledgerAccountIdsByCurrency": "ledgerAccountIdsByCurrency"
        },
        "v2LedgerAccountIdsByCurrency": {
          "v2LedgerAccountIdsByCurrency": "v2LedgerAccountIdsByCurrency"
        },
        "teamsById": {
          "teamsById": {
            "name": "name",
            "defaultPayCycles": {
              "WEEKLY": {
                "cycleEnd": {
                  "type": "weekly",
                  "dayOfWeek": "MONDAY"
                },
                "paymentDueDays": 1
              }
            },
            "autoPay": {
              "enabled": true,
              "paymentMethodId": "paymentMethodId",
              "disabledReason": "INSUFFICIENT_FUNDS",
              "requiredBalance": 1.1,
              "insufficientFundsNotifiedAt": "insufficientFundsNotifiedAt",
              "followUpCount": 1
            },
            "autoApproveInvoice": true,
            "paymentAllowedDaysBeforeDueDate": 1
          }
        },
        "urls": [
          "urls",
          "urls"
        ],
        "payInRequestProcessing": true,
        "logoS3Key": "logoS3Key",
        "subscriptionPricing": {
          "contractorSubscriptionPrice": 1000000,
          "w2PayrollCompanyPrice": [
            {
              "endDate": "2023-01-15",
              "price": 1000000
            },
            {
              "endDate": "2023-01-15",
              "price": 1000000
            }
          ],
          "w2PayrollEmployeePrice": [
            {
              "endDate": "2023-01-15",
              "price": 1000000
            },
            {
              "endDate": "2023-01-15",
              "price": 1000000
            }
          ]
        },
        "theraBanking": true,
        "dwollaBanking": true,
        "payInMonthlyTotals": {
          "payInMonthlyTotals": {
            "amounts": [
              1000000,
              1000000
            ]
          }
        },
        "payInTotalsAnchorMonth": "payInTotalsAnchorMonth",
        "stripeMultipleAccountInfo": {
          "mainAccount": {
            "stripeCustomerId": "stripeCustomerId",
            "defaultPaymentMethodId": "defaultPaymentMethodId"
          },
          "revenueAccount": {
            "stripeCustomerId": "stripeCustomerId",
            "defaultPaymentMethodId": "defaultPaymentMethodId"
          },
          "eorAccount": {
            "stripeCustomerId": "stripeCustomerId",
            "defaultPaymentMethodId": "defaultPaymentMethodId"
          }
        },
        "companyDescription": "companyDescription",
        "tp": {
          "payrollFboOnboardingStage": "BANKING_DETAILS",
          "businessApplicationId": "businessApplicationId",
          "primaryPersonApplicationId": "primaryPersonApplicationId",
          "depositAccount": {
            "info": {
              "applicationId": "applicationId",
              "ledgerAccountId": "ledgerAccountId",
              "id": "id"
            },
            "depositFboOnboardingStage": "BANKING_DETAILS"
          },
          "disbursementAccount": {
            "info": {
              "applicationId": "applicationId",
              "ledgerAccountId": "ledgerAccountId",
              "id": "id"
            }
          },
          "lastInterestPaidMonth": "2023-01-15",
          "withdrawalTpBankInfo": [
            {
              "counterPartyId": "counterPartyId",
              "accountNumber": "accountNumber",
              "routingNumber": "routingNumber",
              "type": "type",
              "nameOnAccount": "nameOnAccount"
            },
            {
              "counterPartyId": "counterPartyId",
              "accountNumber": "accountNumber",
              "routingNumber": "routingNumber",
              "type": "type",
              "nameOnAccount": "nameOnAccount"
            }
          ]
        },
        "dwolla": {
          "customerId": "customerId",
          "customerStatus": "UNVERIFIED",
          "onboardingStage": "CUSTOMER_CREATED",
          "beneficialOwners": [
            {
              "id": "id",
              "firstName": "firstName",
              "lastName": "lastName",
              "verificationStatus": "VERIFIED",
              "verificationActions": [
                "verificationActions",
                "verificationActions"
              ]
            },
            {
              "id": "id",
              "firstName": "firstName",
              "lastName": "lastName",
              "verificationStatus": "VERIFIED",
              "verificationActions": [
                "verificationActions",
                "verificationActions"
              ]
            }
          ],
          "businessClassification": "businessClassification",
          "bankFundingSources": {
            "bankFundingSources": {
              "fundingSourceId": "fundingSourceId",
              "status": "UNVERIFIED",
              "name": "name",
              "removed": true
            }
          },
          "createdAt": "2024-01-15T09:30:00Z",
          "updatedAt": "2024-01-15T09:30:00Z",
          "beneficialOwnershipStatus": "UNCERTIFIED",
          "balanceFundingSourceId": "balanceFundingSourceId",
          "email": "email",
          "cashAccount": {
            "customerId": "customerId",
            "customerStatus": "UNVERIFIED",
            "onboardingStage": "CUSTOMER_CREATED",
            "beneficialOwners": [
              {
                "id": "id",
                "firstName": "firstName",
                "lastName": "lastName",
                "verificationStatus": "VERIFIED"
              },
              {
                "id": "id",
                "firstName": "firstName",
                "lastName": "lastName",
                "verificationStatus": "VERIFIED"
              }
            ],
            "businessClassification": "businessClassification",
            "bankFundingSources": {
              "bankFundingSources": {
                "fundingSourceId": "fundingSourceId",
                "status": "UNVERIFIED",
                "name": "name",
                "removed": true
              }
            },
            "createdAt": "2024-01-15T09:30:00Z",
            "updatedAt": "2024-01-15T09:30:00Z",
            "beneficialOwnershipStatus": "UNCERTIFIED",
            "balanceFundingSourceId": "balanceFundingSourceId",
            "email": "email",
            "cashAccount": {
              "customerId": "customerId",
              "customerStatus": "UNVERIFIED",
              "onboardingStage": "CUSTOMER_CREATED",
              "beneficialOwners": [],
              "businessClassification": "businessClassification",
              "bankFundingSources": {},
              "createdAt": "2024-01-15T09:30:00Z",
              "updatedAt": "2024-01-15T09:30:00Z"
            },
            "businessType": "businessType",
            "verificationDirectives": [],
            "verificationActions": [
              "verificationActions",
              "verificationActions"
            ],
            "documentRequests": [],
            "ownershipCertifications": [],
            "documents": []
          },
          "businessType": "businessType",
          "verificationDirectives": [
            {
              "code": "code",
              "message": "message",
              "actions": [
                "actions",
                "actions"
              ],
              "path": "path"
            },
            {
              "code": "code",
              "message": "message",
              "actions": [
                "actions",
                "actions"
              ],
              "path": "path"
            }
          ],
          "verificationActions": [
            "verificationActions",
            "verificationActions"
          ],
          "documentRequests": [
            {
              "party": "CONTROLLER",
              "title": "title",
              "description": "description",
              "directiveCodes": [
                "directiveCodes",
                "directiveCodes"
              ],
              "businessKind": "EIN_LETTER",
              "beneficialOwnerId": "beneficialOwnerId",
              "ownerName": "ownerName"
            },
            {
              "party": "CONTROLLER",
              "title": "title",
              "description": "description",
              "directiveCodes": [
                "directiveCodes",
                "directiveCodes"
              ],
              "businessKind": "EIN_LETTER",
              "beneficialOwnerId": "beneficialOwnerId",
              "ownerName": "ownerName"
            }
          ],
          "ownershipCertifications": [
            {
              "certifiedByUserId": "certifiedByUserId",
              "certifiedAt": "certifiedAt",
              "certificationText": "certificationText",
              "dwollaStatus": "dwollaStatus",
              "ipAddress": "ipAddress",
              "userAgent": "userAgent"
            },
            {
              "certifiedByUserId": "certifiedByUserId",
              "certifiedAt": "certifiedAt",
              "certificationText": "certificationText",
              "dwollaStatus": "dwollaStatus",
              "ipAddress": "ipAddress",
              "userAgent": "userAgent"
            }
          ],
          "documents": [
            {
              "s3Key": "s3Key",
              "documentType": "documentType",
              "uploadedByUserId": "uploadedByUserId",
              "uploadedAt": "uploadedAt",
              "beneficialOwnerId": "beneficialOwnerId",
              "dwollaDocumentId": "dwollaDocumentId",
              "status": "status"
            },
            {
              "s3Key": "s3Key",
              "documentType": "documentType",
              "uploadedByUserId": "uploadedByUserId",
              "uploadedAt": "uploadedAt",
              "beneficialOwnerId": "beneficialOwnerId",
              "dwollaDocumentId": "dwollaDocumentId",
              "status": "status"
            }
          ]
        },
        "dwollaTermsAcceptance": {
          "accepted": true,
          "acceptedByUserId": "acceptedByUserId",
          "acceptedAt": "acceptedAt",
          "ipAddress": "ipAddress",
          "userAgent": "userAgent"
        },
        "dwollaPendingCertification": {
          "certifiedByUserId": "certifiedByUserId",
          "certifiedAt": "certifiedAt",
          "certificationText": "certificationText",
          "ipAddress": "ipAddress",
          "userAgent": "userAgent"
        },
        "dwollaAccountAttempt": 1,
        "alloyKyb": {
          "decision": "PENDING",
          "business": {
            "externalEntityId": "externalEntityId",
            "decision": "PENDING",
            "evaluationToken": "evaluationToken",
            "entityToken": "entityToken",
            "outcome": "outcome",
            "missingFields": [
              "missingFields",
              "missingFields"
            ]
          },
          "owners": [
            {
              "externalEntityId": "externalEntityId",
              "decision": "PENDING",
              "evaluationToken": "evaluationToken",
              "entityToken": "entityToken",
              "outcome": "outcome",
              "missingFields": [
                "missingFields",
                "missingFields"
              ]
            },
            {
              "externalEntityId": "externalEntityId",
              "decision": "PENDING",
              "evaluationToken": "evaluationToken",
              "entityToken": "entityToken",
              "outcome": "outcome",
              "missingFields": [
                "missingFields",
                "missingFields"
              ]
            }
          ],
          "submittedAt": "submittedAt",
          "updatedAt": "updatedAt",
          "decidedAt": "decidedAt",
          "journeyApplicationToken": "journeyApplicationToken",
          "lastWebhookEvent": "lastWebhookEvent",
          "lastWebhookAt": "lastWebhookAt",
          "documentRequests": [
            {
              "externalEntityId": "externalEntityId",
              "category": "CONTROLLER_ID",
              "status": "OPEN",
              "requestedAt": "requestedAt",
              "businessKind": "EIN_LETTER",
              "personKind": "PHOTO_ID",
              "flag": "flag",
              "acceptedDocuments": [],
              "verify": "verify",
              "reviewToken": "reviewToken",
              "outcome": "outcome",
              "reasons": [],
              "notes": [],
              "kybDocumentId": "kybDocumentId",
              "alloyDocumentToken": "alloyDocumentToken",
              "submittedAt": "submittedAt"
            },
            {
              "externalEntityId": "externalEntityId",
              "category": "CONTROLLER_ID",
              "status": "OPEN",
              "requestedAt": "requestedAt",
              "businessKind": "EIN_LETTER",
              "personKind": "PHOTO_ID",
              "flag": "flag",
              "acceptedDocuments": [],
              "verify": "verify",
              "reviewToken": "reviewToken",
              "outcome": "outcome",
              "reasons": [],
              "notes": [],
              "kybDocumentId": "kybDocumentId",
              "alloyDocumentToken": "alloyDocumentToken",
              "submittedAt": "submittedAt"
            }
          ]
        },
        "kybDocuments": [
          {
            "id": "id",
            "category": "CONTROLLER_ID",
            "documentType": "documentType",
            "s3Key": "s3Key",
            "uploadedByUserId": "uploadedByUserId",
            "uploadedAt": "uploadedAt",
            "submissions": [
              {
                "partner": "DWOLLA_PAYROLL",
                "externalId": "externalId",
                "submittedAt": "submittedAt",
                "partnerOwnerId": "partnerOwnerId"
              },
              {
                "partner": "DWOLLA_PAYROLL",
                "externalId": "externalId",
                "submittedAt": "submittedAt",
                "partnerOwnerId": "partnerOwnerId"
              }
            ],
            "businessKind": "EIN_LETTER",
            "personKind": "PHOTO_ID",
            "ownerFirstName": "ownerFirstName",
            "ownerLastName": "ownerLastName"
          },
          {
            "id": "id",
            "category": "CONTROLLER_ID",
            "documentType": "documentType",
            "s3Key": "s3Key",
            "uploadedByUserId": "uploadedByUserId",
            "uploadedAt": "uploadedAt",
            "submissions": [
              {
                "partner": "DWOLLA_PAYROLL",
                "externalId": "externalId",
                "submittedAt": "submittedAt",
                "partnerOwnerId": "partnerOwnerId"
              },
              {
                "partner": "DWOLLA_PAYROLL",
                "externalId": "externalId",
                "submittedAt": "submittedAt",
                "partnerOwnerId": "partnerOwnerId"
              }
            ],
            "businessKind": "EIN_LETTER",
            "personKind": "PHOTO_ID",
            "ownerFirstName": "ownerFirstName",
            "ownerLastName": "ownerLastName"
          }
        ],
        "kybDocumentsEmailSentAt": "kybDocumentsEmailSentAt",
        "onboarderUserId": "onboarderUserId",
        "creationTimestamp": "2024-01-15T09:30:00Z",
        "mercoaCompanyDetails": {
          "entityId": "entityId"
        },
        "companyAccountingInformation": {
          "rutterAccessToken": "rutterAccessToken",
          "rutterAccountIdByTheraFeeType": {
            "BANK_ACCOUNT": "rutterAccountIdByTheraFeeType"
          },
          "setting": {
            "syncSetting": {
              "invoiceEnabled": true,
              "vendorEnabled": true
            }
          }
        },
        "companyBankingDetails": {
          "callerUserBeneficiaryInformation": {
            "dateOfBirth": "2023-01-15",
            "emailAddress": "emailAddress",
            "firstName": "firstName",
            "lastName": "lastName",
            "phoneNumber": "phoneNumber",
            "physicalAddress": {
              "city": "city",
              "country": "country",
              "line1": "line1",
              "line2": "line2",
              "postalCode": "postalCode",
              "state": "state"
            },
            "ownershipPercentage": 1,
            "title": "title",
            "isControlPerson": true,
            "middleName": "middleName",
            "mailingAddress": {
              "city": "city",
              "country": "country",
              "line1": "line1",
              "line2": "line2",
              "postalCode": "postalCode",
              "state": "state"
            },
            "citizenship": "citizenship",
            "tin": "tin",
            "identificationNumber": "identificationNumber",
            "identificationNumberType": "identificationNumberType",
            "foreignIdDocumentS3Key": "foreignIdDocumentS3Key",
            "makeOrgAdmin": true,
            "w8BenDocumentS3Key": "w8BenDocumentS3Key"
          },
          "beneficiaries": [
            {
              "makeOrgAdmin": true,
              "beneficiary": {
                "dateOfBirth": "2023-01-15",
                "emailAddress": "emailAddress",
                "firstName": "firstName",
                "lastName": "lastName",
                "phoneNumber": "phoneNumber",
                "physicalAddress": {
                  "city": "city",
                  "country": "country",
                  "line1": "line1"
                },
                "ownershipPercentage": 1,
                "title": "title",
                "isControlPerson": true,
                "middleName": "middleName",
                "citizenship": "citizenship",
                "tin": "tin",
                "identificationNumber": "identificationNumber",
                "identificationNumberType": "identificationNumberType",
                "foreignIdDocumentS3Key": "foreignIdDocumentS3Key",
                "makeOrgAdmin": true,
                "w8BenDocumentS3Key": "w8BenDocumentS3Key"
              }
            },
            {
              "makeOrgAdmin": true,
              "beneficiary": {
                "dateOfBirth": "2023-01-15",
                "emailAddress": "emailAddress",
                "firstName": "firstName",
                "lastName": "lastName",
                "phoneNumber": "phoneNumber",
                "physicalAddress": {
                  "city": "city",
                  "country": "country",
                  "line1": "line1"
                },
                "ownershipPercentage": 1,
                "title": "title",
                "isControlPerson": true,
                "middleName": "middleName",
                "citizenship": "citizenship",
                "tin": "tin",
                "identificationNumber": "identificationNumber",
                "identificationNumberType": "identificationNumberType",
                "foreignIdDocumentS3Key": "foreignIdDocumentS3Key",
                "makeOrgAdmin": true,
                "w8BenDocumentS3Key": "w8BenDocumentS3Key"
              }
            }
          ],
          "establishedOn": "2023-01-15",
          "incorporationState": "incorporationState",
          "legalStructure": "ccorp",
          "naics": "naics",
          "businessClassification": "businessClassification"
        },
        "incorporationDetails": {
          "incorporationId": "incorporationId",
          "registrationDate": "registrationDate",
          "appointedAgent": true,
          "state": "state",
          "experience": "experience",
          "progress": "progress",
          "industry": "industry",
          "agent": "agent",
          "packageType": "packageType",
          "dbaService": true,
          "worryFreeCompliance": true,
          "einDocuments": [
            "einDocuments",
            "einDocuments"
          ],
          "tradeMarkCompany": true,
          "status": "status",
          "phone": "phone",
          "documents": [
            {
              "name": "name",
              "s3Key": "s3Key"
            },
            {
              "name": "name",
              "s3Key": "s3Key"
            }
          ],
          "updatedAt": "updatedAt",
          "userPersonalAddress": {
            "city": "city",
            "country": "country",
            "line1": "line1",
            "postalCode": "postalCode",
            "line2": "line2",
            "state": "state"
          }
        },
        "lastContractorsBillingInfo": {
          "contractorCount": 1,
          "recentInvoicePaidMonth": "2024-01-15T09:30:00Z",
          "amountInCompanyCurrency": "amountInCompanyCurrency"
        },
        "whiteLabelClientId": "whiteLabelClientId",
        "firstPayrollReadyEmailSent": true,
        "firstPayrollReminderEmailSent": true,
        "firstPayrollCompleteEmailSent": true,
        "secondPayrollCompleteEmailSent": true,
        "orgChartExternals": [
          {
            "id": "id",
            "name": "name",
            "jobTitle": "jobTitle",
            "teamName": "teamName",
            "email": "email",
            "managerUserId": "managerUserId"
          },
          {
            "id": "id",
            "name": "name",
            "jobTitle": "jobTitle",
            "teamName": "teamName",
            "email": "email",
            "managerUserId": "managerUserId"
          }
        ]
      },
      "contracts": [
        {
          "companyID": "companyID",
          "employeeUserID": "employeeUserID",
          "id": "id",
          "name": "name",
          "jobTitle": "jobTitle",
          "employmentStatus": "ACTIVE",
          "startDate": "startDate",
          "wageType": "HOURLY",
          "rate": 1000000,
          "contractCurrency": "contractCurrency",
          "milestoneDetails": {
            "milestones": {
              "milestones": {
                "name": "name",
                "description": "description",
                "amount": 1000000,
                "status": "CREATED",
                "fileID": "fileID"
              }
            }
          },
          "contractFileID": "contractFileID",
          "lastPayDate": "lastPayDate",
          "scopeOfWork": "scopeOfWork",
          "type": "EMPLOYEE",
          "contractDocumentType": "NO_CONTRACT",
          "contractDocumentID": "contractDocumentID",
          "w2Payroll": {
            "recurrences": {
              "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32": {
                "frequency": {
                  "type": "perPaycheck",
                  "metadata": "metadata"
                },
                "details": {
                  "type": "deduction",
                  "deductionTemplateId": "deductionTemplateId",
                  "deductionType": "deductionType"
                }
              }
            },
            "checkCompanyId": "checkCompanyId",
            "checkEmployeeId": "checkEmployeeId",
            "zealEmployeeId": "zealEmployeeId",
            "zealCompanyId": "zealCompanyId",
            "timeTrackingEnabled": true,
            "overtimePolicyId": "overtimePolicyId",
            "allowEmployeeEdit": true,
            "allowHistoricalEntries": true,
            "scheduledHoursPerWeek": 1.1,
            "firstPayDate": "2023-01-15",
            "firstPayPeriodStartDate": "2023-01-15",
            "firstPayAmountInCents": 1000000
          },
          "eor": {
            "payslips": [
              {
                "payDate": "2023-01-15",
                "currency": "currency",
                "totalAmount": 1000000,
                "s3Key": "s3Key"
              },
              {
                "payDate": "2023-01-15",
                "currency": "currency",
                "totalAmount": 1000000,
                "s3Key": "s3Key"
              }
            ]
          },
          "companySigningAuthorityUserId": "companySigningAuthorityUserId",
          "documents": {
            "generic": {
              "generic": {
                "name": "name",
                "uploadDate": "2023-01-15"
              }
            }
          },
          "payCycle": {
            "cycleStartDate": "2023-01-15",
            "cycleEnd": {
              "type": "weekly",
              "dayOfWeek": "MONDAY"
            },
            "paymentDueDays": 1,
            "firstPayDate": "2023-01-15",
            "timezone": "timezone",
            "lastPayDate": "2023-01-15",
            "firstPayTotal": 1000000,
            "lastPayTotal": 1000000,
            "itemRecurrencesById": {
              "itemRecurrencesById": {
                "itemType": "EXPENSE",
                "description": "description",
                "amount": 1000000,
                "firstInvoiceDate": "2023-01-15",
                "paymentCurrency": "paymentCurrency",
                "deletedDateTime": "2024-01-15T09:30:00Z"
              }
            }
          },
          "contractType": "FIXED_RATE",
          "contractSetting": {
            "verificationSetting": {
              "kycEnabled": true,
              "complianceEnabled": true
            }
          },
          "isApiContract": true,
          "customFields": {
            "customFields": "customFields"
          },
          "workerCanSubmitWork": true,
          "clientCanSubmitWork": true,
          "teamId": "teamId",
          "managerUserId": "managerUserId",
          "numberOfHours": 1000000,
          "country": "country",
          "terminationDetails": {
            "terminatingUserId": "terminatingUserId",
            "endDate": "2023-01-15",
            "endDateRecordedOn": "2023-01-15"
          },
          "externalId": "externalId",
          "createdByUserId": "createdByUserId",
          "creationTimestamp": "2024-01-15T09:30:00Z",
          "customContractTemplateID": "customContractTemplateID",
          "renewalDetails": {
            "renewalDate": "renewalDate",
            "renewedByUserId": "renewedByUserId",
            "renewalRecordedOn": "renewalRecordedOn",
            "skipped": true
          },
          "previousAgreements": [
            {
              "contractFileId": "contractFileId",
              "replacedOn": "replacedOn"
            },
            {
              "contractFileId": "contractFileId",
              "replacedOn": "replacedOn"
            }
          ],
          "agreementSentOn": "agreementSentOn",
          "agreementEffectiveDate": "agreementEffectiveDate",
          "signedAgreement": {
            "documentId": "documentId",
            "effectiveDate": "effectiveDate"
          },
          "companySubscriptionChargedLast": "2024-01-15T09:30:00Z",
          "billedPeriodEnds": [
            "billedPeriodEnds",
            "billedPeriodEnds"
          ],
          "scheduledContractorChanges": {
            "entries": {
              "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32": {
                "id": "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                "effectiveDate": "2023-01-15",
                "newRate": 1000000,
                "newWageType": "HOURLY",
                "newCurrency": "newCurrency",
                "newPaymentDueDays": 1,
                "newCycleEnd": {
                  "type": "weekly",
                  "dayOfWeek": "MONDAY"
                },
                "oldRate": 1000000,
                "status": "PENDING",
                "createdAt": "createdAt",
                "createdByUserId": "createdByUserId",
                "note": "note",
                "paymentOption": "paymentOption",
                "confirmedAmount": 1000000,
                "oldWageType": "oldWageType"
              }
            }
          },
          "scheduledW2Changes": {
            "entries": {
              "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32": {
                "id": "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                "effectiveDate": "2023-01-15",
                "newAmount": 1000000,
                "newPayScheduleId": "newPayScheduleId",
                "oldAmount": 1000000,
                "status": "PENDING",
                "createdAt": "createdAt",
                "createdByUserId": "createdByUserId",
                "newPeriod": "newPeriod",
                "note": "note",
                "oldPeriod": "oldPeriod"
              }
            }
          },
          "requiresI9": true,
          "i9DocumentID": "i9DocumentID",
          "i9SigningAuthorityUserId": "i9SigningAuthorityUserId",
          "i9ResetCount": 1,
          "invoicePaidAtleastOnce": true
        },
        {
          "companyID": "companyID",
          "employeeUserID": "employeeUserID",
          "id": "id",
          "name": "name",
          "jobTitle": "jobTitle",
          "employmentStatus": "ACTIVE",
          "startDate": "startDate",
          "wageType": "HOURLY",
          "rate": 1000000,
          "contractCurrency": "contractCurrency",
          "milestoneDetails": {
            "milestones": {
              "milestones": {
                "name": "name",
                "description": "description",
                "amount": 1000000,
                "status": "CREATED",
                "fileID": "fileID"
              }
            }
          },
          "contractFileID": "contractFileID",
          "lastPayDate": "lastPayDate",
          "scopeOfWork": "scopeOfWork",
          "type": "EMPLOYEE",
          "contractDocumentType": "NO_CONTRACT",
          "contractDocumentID": "contractDocumentID",
          "w2Payroll": {
            "recurrences": {
              "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32": {
                "frequency": {
                  "type": "perPaycheck",
                  "metadata": "metadata"
                },
                "details": {
                  "type": "deduction",
                  "deductionTemplateId": "deductionTemplateId",
                  "deductionType": "deductionType"
                }
              }
            },
            "checkCompanyId": "checkCompanyId",
            "checkEmployeeId": "checkEmployeeId",
            "zealEmployeeId": "zealEmployeeId",
            "zealCompanyId": "zealCompanyId",
            "timeTrackingEnabled": true,
            "overtimePolicyId": "overtimePolicyId",
            "allowEmployeeEdit": true,
            "allowHistoricalEntries": true,
            "scheduledHoursPerWeek": 1.1,
            "firstPayDate": "2023-01-15",
            "firstPayPeriodStartDate": "2023-01-15",
            "firstPayAmountInCents": 1000000
          },
          "eor": {
            "payslips": [
              {
                "payDate": "2023-01-15",
                "currency": "currency",
                "totalAmount": 1000000,
                "s3Key": "s3Key"
              },
              {
                "payDate": "2023-01-15",
                "currency": "currency",
                "totalAmount": 1000000,
                "s3Key": "s3Key"
              }
            ]
          },
          "companySigningAuthorityUserId": "companySigningAuthorityUserId",
          "documents": {
            "generic": {
              "generic": {
                "name": "name",
                "uploadDate": "2023-01-15"
              }
            }
          },
          "payCycle": {
            "cycleStartDate": "2023-01-15",
            "cycleEnd": {
              "type": "weekly",
              "dayOfWeek": "MONDAY"
            },
            "paymentDueDays": 1,
            "firstPayDate": "2023-01-15",
            "timezone": "timezone",
            "lastPayDate": "2023-01-15",
            "firstPayTotal": 1000000,
            "lastPayTotal": 1000000,
            "itemRecurrencesById": {
              "itemRecurrencesById": {
                "itemType": "EXPENSE",
                "description": "description",
                "amount": 1000000,
                "firstInvoiceDate": "2023-01-15",
                "paymentCurrency": "paymentCurrency",
                "deletedDateTime": "2024-01-15T09:30:00Z"
              }
            }
          },
          "contractType": "FIXED_RATE",
          "contractSetting": {
            "verificationSetting": {
              "kycEnabled": true,
              "complianceEnabled": true
            }
          },
          "isApiContract": true,
          "customFields": {
            "customFields": "customFields"
          },
          "workerCanSubmitWork": true,
          "clientCanSubmitWork": true,
          "teamId": "teamId",
          "managerUserId": "managerUserId",
          "numberOfHours": 1000000,
          "country": "country",
          "terminationDetails": {
            "terminatingUserId": "terminatingUserId",
            "endDate": "2023-01-15",
            "endDateRecordedOn": "2023-01-15"
          },
          "externalId": "externalId",
          "createdByUserId": "createdByUserId",
          "creationTimestamp": "2024-01-15T09:30:00Z",
          "customContractTemplateID": "customContractTemplateID",
          "renewalDetails": {
            "renewalDate": "renewalDate",
            "renewedByUserId": "renewedByUserId",
            "renewalRecordedOn": "renewalRecordedOn",
            "skipped": true
          },
          "previousAgreements": [
            {
              "contractFileId": "contractFileId",
              "replacedOn": "replacedOn"
            },
            {
              "contractFileId": "contractFileId",
              "replacedOn": "replacedOn"
            }
          ],
          "agreementSentOn": "agreementSentOn",
          "agreementEffectiveDate": "agreementEffectiveDate",
          "signedAgreement": {
            "documentId": "documentId",
            "effectiveDate": "effectiveDate"
          },
          "companySubscriptionChargedLast": "2024-01-15T09:30:00Z",
          "billedPeriodEnds": [
            "billedPeriodEnds",
            "billedPeriodEnds"
          ],
          "scheduledContractorChanges": {
            "entries": {
              "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32": {
                "id": "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                "effectiveDate": "2023-01-15",
                "newRate": 1000000,
                "newWageType": "HOURLY",
                "newCurrency": "newCurrency",
                "newPaymentDueDays": 1,
                "newCycleEnd": {
                  "type": "weekly",
                  "dayOfWeek": "MONDAY"
                },
                "oldRate": 1000000,
                "status": "PENDING",
                "createdAt": "createdAt",
                "createdByUserId": "createdByUserId",
                "note": "note",
                "paymentOption": "paymentOption",
                "confirmedAmount": 1000000,
                "oldWageType": "oldWageType"
              }
            }
          },
          "scheduledW2Changes": {
            "entries": {
              "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32": {
                "id": "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
                "effectiveDate": "2023-01-15",
                "newAmount": 1000000,
                "newPayScheduleId": "newPayScheduleId",
                "oldAmount": 1000000,
                "status": "PENDING",
                "createdAt": "createdAt",
                "createdByUserId": "createdByUserId",
                "newPeriod": "newPeriod",
                "note": "note",
                "oldPeriod": "oldPeriod"
              }
            }
          },
          "requiresI9": true,
          "i9DocumentID": "i9DocumentID",
          "i9SigningAuthorityUserId": "i9SigningAuthorityUserId",
          "i9ResetCount": 1,
          "invoicePaidAtleastOnce": true
        }
      ],
      "teams": {
        "teams": {
          "role": "role_admin",
          "permissions": [
            "perm_adjust_payroll_and_payments",
            "perm_adjust_payroll_and_payments"
          ]
        }
      },
      "orgRoleAndDetails": [
        {
          "role": "role_admin"
        },
        {
          "role": "role_admin"
        }
      ]
    }
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.getthera.com/users/userId/affiliations"

headers = {"X-Thera-API-Key": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.getthera.com/users/userId/affiliations';
const options = {method: 'GET', headers: {'X-Thera-API-Key': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.getthera.com/users/userId/affiliations"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-Thera-API-Key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.getthera.com/users/userId/affiliations")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-Thera-API-Key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.getthera.com/users/userId/affiliations")
  .header("X-Thera-API-Key", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.getthera.com/users/userId/affiliations', [
  'headers' => [
    'X-Thera-API-Key' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.getthera.com/users/userId/affiliations");
var request = new RestRequest(Method.GET);
request.AddHeader("X-Thera-API-Key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["X-Thera-API-Key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.getthera.com/users/userId/affiliations")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```