> ## Documentation Index
> Fetch the complete documentation index at: https://docs.truv.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Resolve a sandbox scenario

> A dry run: send the input a user would supply and get back the scenario that would answer it, along with the fields it constrained and the tier it came from.

If multiple scenarios match, Truv selects the scenario with more matching fields, excluding `is_refresh`. If there is still a tie, a scenario that sets `is_refresh` wins, and then the oldest scenario. A `404` means none of your scenarios matches the input, and the task would fall through to Truv's built-in test data.



## OpenAPI

````yaml POST /v1/sandbox/scenarios/resolve/
openapi: 3.0.1
info:
  title: Truv API
  description: Truv API Documentation
  termsOfService: https://www.truv.com/legal/terms-of-use
  contact:
    email: support@truv.com
  version: v1
servers:
  - url: https://prod.truv.com
security:
  - ClientID: []
    AccessKey: []
tags:
  - name: Users
  - name: Bridge Token
  - name: Companies and Data Providers
  - name: Key Management
  - name: Account Links
  - name: Data Refresh
  - name: Customization Templates
  - name: Webhooks
  - name: Orders
  - name: Tasks
  - name: VOIE Reports
  - name: VOA Reports
  - name: Income Insights Reports
  - name: DDS Reports
  - name: Employment
  - name: Identity
  - name: Benefit Letters
  - name: Shifts
  - name: Pay Statements
  - name: Tax Documents
  - name: Parsed Documents
  - name: Reports
  - name: Uploaded Documents
  - name: Bank Accounts
  - name: Bank Statements
  - name: Deposit Switch Reports
  - name: Insurance Reports
  - name: Income Report
  - name: Scoring Attributes
  - name: Accounts
  - name: Transactions
  - name: Recurring Transactions
  - name: Document Collections
  - name: Sandbox
paths:
  /v1/sandbox/scenarios/resolve/:
    parameters: []
    post:
      tags:
        - Sandbox
      summary: Resolve a sandbox scenario
      description: >-
        A dry run: send the input a user would supply and get back the scenario
        that would answer it, along with the fields it constrained and the tier
        it came from.


        If multiple scenarios match, Truv selects the scenario with more
        matching fields, excluding `is_refresh`. If there is still a tie, a
        scenario that sets `is_refresh` wins, and then the oldest scenario. A
        `404` means none of your scenarios matches the input, and the task would
        fall through to Truv's built-in test data.
      operationId: v1_sandbox_scenarios_resolve
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SandboxScenarioResolveRequest'
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxScenarioResolveResponse'
        '400':
          description: >-
            The supplied fields are ambiguous or not supported by the data
            source.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxError400'
        '401':
          description: HTTP 401 Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error401'
        '403':
          description: The key is not a sandbox key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SandboxError403'
        '404':
          description: No sandbox scenario matches this input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorNotFound'
components:
  schemas:
    SandboxScenarioResolveRequest:
      description: The input a user would supply, to be resolved against your scenarios.
      type: object
      properties:
        data_source:
          description: >-
            Data source to resolve against. Inferred from the supplied fields
            when omitted, the same way a write infers it.
          type: string
          enum:
            - payroll
            - docs
            - financial_accounts
            - education
            - credit
            - insurance
          example: payroll
        product:
          description: >-
            Product of the task being simulated. Scenarios pinned to other
            products are skipped.
          type: string
          enum:
            - income
            - employment
            - deposit_switch
            - pll
            - insurance
            - transactions
            - assets
            - admin
            - credit
            - education
          example: income
        username:
          description: The login the user would type.
          type: string
          maxLength: 255
          example: acme.salaried
        password:
          description: The password the user would type.
          type: string
          maxLength: 255
          example: s4ndb0x
        provider_id:
          description: Provider the connection would go through.
          type: string
          maxLength: 64
          example: adp
        company_domain:
          description: Company the connection would be made for.
          type: string
          maxLength: 128
          example: acme.com
        is_refresh:
          description: Whether the task would be a data refresh.
          type: boolean
          nullable: true
          example: false
        filenames:
          description: Filenames the user would upload. Document upload only.
          type: array
          items:
            type: string
            maxLength: 255
          example: []
        ssn_last4:
          description: Last four SSN digits. Education and credit only.
          type: string
          maxLength: 4
        date_of_birth:
          description: Date of birth. Education only.
          type: string
          format: date
        phone:
          description: Phone number, normalized to E.164 before matching. Credit only.
          type: string
          maxLength: 32
      example:
        data_source: payroll
        product: income
        username: acme.salaried
        password: s4ndb0x
        provider_id: adp
    SandboxScenarioResolveResponse:
      description: The scenario that would answer the supplied input, and why it won.
      type: object
      properties:
        scenario:
          $ref: '#/components/schemas/SandboxScenario'
        matched_on:
          description: Matcher fields the winning scenario actually constrained.
          type: array
          items:
            type: string
          example:
            - password
            - provider_id
            - username
        tier:
          description: Where the winning scenario came from.
          type: string
          enum:
            - client
          example: client
    SandboxError400:
      description: A sandbox configuration error.
      type: object
      properties:
        error:
          description: ''
          type: object
          properties:
            code:
              description: >-
                `data_source_required` when the matching fields fit more than
                one data source, `unsupported_data_source` when one of them is
                not accepted by the source, `reserved_credential` when a login
                or filename collides with one of Truv's own documented sandbox
                credentials, `sandbox_limit_exceeded` when a quota would be
                exceeded, and `incorrect_parameters` for any other field
                validation failure.
              type: string
              enum:
                - data_source_required
                - unsupported_data_source
                - reserved_credential
                - sandbox_limit_exceeded
                - incorrect_parameters
              example: reserved_credential
            message:
              description: ''
              type: string
              example: >-
                Username 'goodlogin' is reserved for Truv's documented sandbox
                logins.
    Error401:
      description: ''
      type: object
      properties:
        error:
          description: ''
          type: object
          properties:
            code:
              description: ''
              type: string
              example: authentication_failed
            message:
              description: ''
              type: string
              example: No such token
    SandboxError403:
      description: The request authenticated with a key that is not a sandbox key.
      type: object
      properties:
        error:
          description: ''
          type: object
          properties:
            code:
              description: ''
              type: string
              enum:
                - env_not_sandbox
              example: env_not_sandbox
            message:
              description: ''
              type: string
              example: >-
                Sandbox configuration requires a sandbox key; this key is
                'prod'.
    ErrorNotFound:
      description: ''
      type: object
      properties:
        error:
          description: ''
          type: object
          properties:
            code:
              description: ''
              type: string
              example: not_found
            message:
              description: ''
              type: string
              example: Requested object not found.
    SandboxScenario:
      description: >-
        A client-authored sandbox case - what it matches on, how it behaves, and
        the data it returns.
      type: object
      properties:
        id:
          description: Unique identifier of the scenario.
          type: string
          readOnly: true
          maxLength: 64
          example: 7b9f0c2a4d6e4f1b8c3a5d7e9f0b1c2d
        data_source:
          description: >-
            Data source the scenario answers for. Inferred from which matching
            fields are set when omitted, and refused as ambiguous when more than
            one source accepts that set. Cannot be changed after create - to use
            another data source, create a new scenario.
          type: string
          enum:
            - payroll
            - docs
            - financial_accounts
            - education
            - credit
            - insurance
          example: payroll
        label:
          description: >-
            How the scenario is recognized in a list. Unique per data source
            within your account.
          type: string
          maxLength: 128
          example: Acme - salaried, biweekly
        description:
          description: Free-form notes about what the case covers.
          type: string
          maxLength: 2000
          example: Full-time salaried user with two paystubs
        products:
          description: >-
            Products the scenario applies to. Payroll scenarios use `income`,
            `employment`, `deposit_switch` and `pll`; a scenario pinned only to
            products its data source never serves never matches. Empty, the
            default, matches every product.
          type: array
          items:
            type: string
            enum:
              - income
              - employment
              - deposit_switch
              - pll
              - insurance
              - transactions
              - assets
              - admin
              - credit
              - education
          example:
            - income
        enabled:
          description: Whether the scenario takes part in resolution.
          type: boolean
          default: true
          example: true
        username:
          description: The login the user types, matched exactly.
          type: string
          nullable: true
          maxLength: 255
          example: acme.salaried
        password:
          description: The password the user types. Omit it to match on username alone.
          type: string
          nullable: true
          maxLength: 255
          example: s4ndb0x
        provider_id:
          description: >-
            Narrows the match to one data provider. Null when the scenario does
            not set it.
          type: string
          nullable: true
          maxLength: 64
          example: null
        company_domain:
          description: >-
            Narrows the match to one company. Null when the scenario does not
            set it.
          type: string
          nullable: true
          maxLength: 128
          example: null
        is_refresh:
          description: >-
            `true` matches data refreshes only, `false` initial verifications
            only. Null, the default, matches both. Supported on every data
            source, but it does not count toward matching fields and cannot be
            the only field set. It breaks a tie only when matching fields are
            equal.
          type: boolean
          nullable: true
          example: null
        filenames:
          description: Uploaded filenames that select this case. Document upload only.
          type: array
          items:
            type: string
            maxLength: 255
          example: []
        ssn_last4:
          description: >-
            Last four SSN digits that select this case. Education and credit
            only, so null on a payroll scenario.
          type: string
          nullable: true
          maxLength: 4
          example: null
        date_of_birth:
          description: >-
            Date of birth that selects this case. Education only, so null on a
            payroll scenario.
          type: string
          format: date
          nullable: true
          example: null
        phone:
          description: >-
            Phone number that selects this case, stored in E.164. Credit only,
            so null on a payroll scenario.
          type: string
          nullable: true
          maxLength: 32
          example: null
        behavior_status:
          description: Terminal status the task settles on.
          type: string
          enum:
            - done
            - error
            - login_error
            - account_locked
            - mfa_error
            - config_error
            - no_data
            - unavailable
            - unable_to_reset
            - not_supported
          default: done
          example: done
        behavior_error_message:
          description: >-
            Error message surfaced on a failing task. Empty on a scenario that
            succeeds.
          type: string
          maxLength: 500
          example: ''
        behavior_duration_seconds:
          description: Artificial delay before the task settles.
          type: integer
          minimum: 0
          maximum: 120
          default: 0
          example: 0
        behavior_mfa:
          allOf:
            - $ref: '#/components/schemas/SandboxBehaviorMfa'
          description: >-
            MFA screens replayed before the data is returned. Empty unless the
            scenario declares any.
          example: {}
        payload:
          $ref: '#/components/schemas/SandboxPayrollPayload'
        created_at:
          description: Time when the scenario was created.
          type: string
          format: date-time
          readOnly: true
          example: '2026-09-17T10:04:11.482913Z'
        updated_at:
          description: Time when the scenario was last updated.
          type: string
          format: date-time
          readOnly: true
          example: '2026-09-17T10:04:11.482931Z'
    SandboxBehaviorMfa:
      description: >-
        Multi-factor authentication (MFA) screens replayed before the scenario's
        data is returned.
      type: object
      properties:
        challenges:
          description: Screens to replay, in order.
          type: array
          items:
            $ref: '#/components/schemas/SandboxMfaChallenge'
      example:
        challenges:
          - type: TEXT
            label: Enter the code we sent to your phone
            answer: '12345'
          - type: OPTIONS
            label: Where should we send your code?
            options:
              - value: sms
                label: Text message
              - value: email
                label: Email
            answers:
              - sms
              - email
    SandboxPayrollPayload:
      description: >-
        Scenario content. The shape depends on the scenario's `data_source`; the
        `payroll` shape is documented here. Required unless `behavior_status` is
        a failure status, in which case the scenario carries no data.
      type: object
      properties:
        flags:
          $ref: '#/components/schemas/SandboxScenarioFlags'
        employments:
          description: Employment records to return.
          type: array
          items:
            $ref: '#/components/schemas/SandboxPayrollEmployment'
    SandboxMfaChallenge:
      description: >-
        One MFA screen to replay. Send `answer` for a single accepted response
        or `answers` for several - `answer` wins if both are present, and a
        challenge carrying neither prompts and accepts anything the user types.
      type: object
      required:
        - type
      properties:
        type:
          description: >-
            How the challenge is rendered: `TEXT` prompts for a value, `OPTIONS`
            renders a select built from `options`.
          type: string
          enum:
            - TEXT
            - OPTIONS
          example: TEXT
        label:
          description: Question shown to the user.
          type: string
          maxLength: 255
          example: Enter the code we sent to your phone
        options:
          description: >-
            Choices for an `OPTIONS` challenge. Ignored on a `TEXT` challenge,
            and an option carrying no `value` is dropped because nothing could
            match it.
          type: array
          maxItems: 20
          items:
            $ref: '#/components/schemas/SandboxMfaChallengeOption'
        answer:
          description: The one answer accepted. Use this or `answers`, not both.
          type: string
          maxLength: 255
          example: '12345'
        answers:
          description: >-
            Every answer accepted, when more than one will do. Use this or
            `answer`, not both.
          type: array
          maxItems: 20
          items:
            type: string
            maxLength: 255
          example:
            - sms
            - email
    SandboxScenarioFlags:
      description: Fraud markers reported alongside the scenario's data.
      type: object
      properties:
        is_fraudulent:
          description: >-
            Reserved for upcoming document-upload scenarios. Has no effect on a
            payroll task.
          type: boolean
          default: false
          example: false
        is_suspicious:
          description: >-
            Flag the connection as suspicious. The link reports `is_suspicious:
            true`, and the task still completes with the scenario's data.
          type: boolean
          default: false
          example: true
    SandboxPayrollEmployment:
      description: One employment record returned by the scenario.
      type: object
      properties:
        profile:
          $ref: '#/components/schemas/SandboxProfile'
        company:
          $ref: '#/components/schemas/SandboxCompany'
        job_title:
          description: Job title.
          type: string
          nullable: true
          maxLength: 128
          example: Staff Engineer
        job_type:
          description: Type of employment.
          type: string
          nullable: true
          enum:
            - F
            - P
            - S
            - D
            - C
            - V
          example: F
        start_date:
          description: Date employment started.
          type: string
          format: date
          nullable: true
          example: '2022-03-01'
        end_date:
          description: >-
            Date employment ended. Must not be earlier than `start_date`. Set
            it, with `is_active` false, to author a terminated employment.
          type: string
          format: date
          nullable: true
          example: null
        original_hire_date:
          description: Date first hired, when it differs from `start_date`.
          type: string
          format: date
          nullable: true
          example: '2019-07-08'
        is_active:
          description: Whether the employment is current.
          type: boolean
          nullable: true
          example: true
        manager_name:
          description: Name of the manager.
          type: string
          nullable: true
          maxLength: 128
          example: Jenny McDouglas
        income:
          description: Income amount, expressed in `income_unit`.
          type: string
          format: decimal
          nullable: true
          example: '124800.00'
        income_unit:
          description: Period the `income` amount covers.
          type: string
          nullable: true
          enum:
            - YEARLY
            - MONTHLY
            - WEEKLY
            - DAILY
            - HOURLY
          example: YEARLY
        income_currency:
          description: ISO 4217 currency code for `income`.
          type: string
          nullable: true
          maxLength: 3
          example: USD
        pay_rate:
          description: >-
            Rate of pay. Kept only when `income_unit` is `YEARLY`; dropped
            otherwise.
          type: string
          format: decimal
          nullable: true
          example: '60.00'
        pay_frequency:
          description: >-
            How often the user is paid. `A` paired with `income_unit: YEARLY` is
            dropped, and the cadence is derived from the statements instead.
          type: string
          nullable: true
          enum:
            - M
            - SM
            - W
            - BW
            - A
            - SA
            - C
          example: BW
        bank_accounts:
          description: Direct-deposit allocations.
          type: array
          items:
            $ref: '#/components/schemas/SandboxBankAccount'
        paystubs:
          description: Pay statements.
          type: array
          items:
            $ref: '#/components/schemas/SandboxPaystub'
        w2s:
          description: W-2s. Each one must reference a document library entry.
          type: array
          items:
            $ref: '#/components/schemas/SandboxW2'
        shifts:
          description: Scheduled shifts and their time entries.
          type: array
          items:
            $ref: '#/components/schemas/SandboxShift'
    SandboxMfaChallengeOption:
      description: One choice offered by an `OPTIONS` challenge.
      type: object
      required:
        - value
        - label
      properties:
        value:
          description: Value the answer is compared against.
          type: string
          maxLength: 128
          example: sms
        label:
          description: Label shown for the choice.
          type: string
          maxLength: 255
          example: Text message
    SandboxProfile:
      description: The identity a payroll provider reports for the user.
      type: object
      properties:
        full_name:
          description: Full name.
          type: string
          nullable: true
          maxLength: 255
          example: Jane Roe
        first_name:
          description: First name.
          type: string
          nullable: true
          maxLength: 50
          example: Jane
        last_name:
          description: Last name.
          type: string
          nullable: true
          maxLength: 50
          example: Roe
        ssn:
          description: >-
            Social security number as `NNN-NN-NNNN`. Sandbox SSNs must be
            synthetic: the area number has to be in the 900-999 range the SSA
            never issues. Anything else is refused.
          type: string
          nullable: true
          maxLength: 11
          example: 991-91-9991
        date_of_birth:
          description: Date of birth.
          type: string
          format: date
          nullable: true
          example: '1988-04-12'
        email:
          description: Email address.
          type: string
          format: email
          nullable: true
          example: jane.roe@acme.com
        phone:
          description: Phone number.
          type: string
          nullable: true
          maxLength: 32
          example: '4155554193'
        home_address:
          $ref: '#/components/schemas/SandboxAddress'
    SandboxCompany:
      description: The employer record a payroll provider reports.
      type: object
      properties:
        name:
          description: Company name.
          type: string
          nullable: true
          maxLength: 255
          example: Acme Inc.
        ein:
          description: Employer identification number.
          type: string
          nullable: true
          maxLength: 32
          example: '123456789'
        domain:
          description: Company domain.
          type: string
          nullable: true
          maxLength: 128
          example: acme.com
        phone:
          description: Company phone number.
          type: string
          nullable: true
          maxLength: 32
          example: '4155554193'
        address:
          $ref: '#/components/schemas/SandboxAddress'
    SandboxBankAccount:
      description: A direct-deposit account and its allocation.
      type: object
      properties:
        bank_name:
          description: Name of the bank.
          type: string
          nullable: true
          maxLength: 255
          example: Acme CU
        account_name:
          description: Name of the account.
          type: string
          nullable: true
          maxLength: 255
          example: Everyday
        account_number:
          description: Account number.
          type: string
          nullable: true
          maxLength: 20
          example: '1234567890'
        routing_number:
          description: >-
            Routing number. Truv can restrict a client to an allowlist of
            sandbox test routing numbers; with no allowlist configured, any
            value is accepted.
          type: string
          nullable: true
          maxLength: 12
          example: '111000025'
        account_type:
          description: Type of account.
          type: string
          nullable: true
          enum:
            - C
            - S
          example: C
        deposit_type:
          description: How the allocation is expressed.
          type: string
          nullable: true
          enum:
            - E
            - P
            - A
          example: A
        deposit_value:
          description: The percentage or amount allocated, depending on `deposit_type`.
          type: string
          format: decimal
          nullable: true
          example: '500.00'
    SandboxPaystub:
      description: One pay statement.
      type: object
      required:
        - pay_date
      properties:
        pay_date:
          description: Date the statement was paid.
          type: string
          format: date
          example: '2026-08-14'
        period_start:
          description: First day of the pay period.
          type: string
          format: date
          nullable: true
          example: '2026-08-01'
        period_end:
          description: Last day of the pay period.
          type: string
          format: date
          nullable: true
          example: '2026-08-14'
        currency:
          description: ISO 4217 currency code.
          type: string
          nullable: true
          maxLength: 3
          example: USD
        gross_pay:
          description: Gross pay for the period.
          type: string
          format: decimal
          nullable: true
          example: '4800.00'
        net_pay:
          description: Net pay for the period.
          type: string
          format: decimal
          nullable: true
          example: '3312.00'
        gross_pay_ytd:
          description: Year-to-date gross pay.
          type: string
          format: decimal
          nullable: true
          example: '76800.00'
        net_pay_ytd:
          description: Year-to-date net pay.
          type: string
          format: decimal
          nullable: true
          example: '52992.00'
        hours:
          description: Hours worked in the period.
          type: string
          format: decimal
          nullable: true
          example: '80.00'
        basis_of_pay:
          description: How pay is calculated.
          type: string
          nullable: true
          enum:
            - S
            - H
            - W
            - D
            - M
            - C
          example: S
        earnings:
          description: Earnings lines for the period.
          type: array
          maxItems: 200
          items:
            $ref: '#/components/schemas/SandboxEarning'
        earnings_ytd:
          description: Year-to-date earnings lines.
          type: array
          maxItems: 200
          items:
            $ref: '#/components/schemas/SandboxEarning'
        deductions:
          description: Deductions for the period, keyed by name.
          type: object
          additionalProperties:
            type: string
            format: decimal
          example:
            Federal Tax: '1056.00'
            Social Security: '297.60'
            Medicare: '69.60'
            State Tax: '64.80'
        deductions_ytd:
          description: Year-to-date deductions, keyed by name.
          type: object
          additionalProperties:
            type: string
            format: decimal
          example:
            Federal Tax: '16896.00'
            Social Security: '4761.60'
            Medicare: '1113.60'
            State Tax: '1036.80'
        document_id:
          description: >-
            Sandbox document library entry to serve as this statement's file.
            See [Upload a sandbox
            document](/api-reference/sandbox/v1_sandbox_documents_create).
          type: string
          nullable: true
          maxLength: 64
          example: a41d7e9c05b24f6b8e3c1d5a7f92b604
      example:
        pay_date: '2026-08-14'
        period_start: '2026-08-01'
        period_end: '2026-08-14'
        currency: USD
        gross_pay: '4800.00'
        net_pay: '3312.00'
        gross_pay_ytd: '76800.00'
        net_pay_ytd: '52992.00'
        hours: '80.00'
        basis_of_pay: S
        earnings:
          - name: Regular
            amount: '4800.00'
            rate: '60.00'
            units: '80.00'
        earnings_ytd:
          - name: Regular
            amount: '76800.00'
            rate: '60.00'
            units: '1280.00'
        deductions:
          Federal Tax: '1056.00'
          Social Security: '297.60'
          Medicare: '69.60'
          State Tax: '64.80'
        deductions_ytd:
          Federal Tax: '16896.00'
          Social Security: '4761.60'
          Medicare: '1113.60'
          State Tax: '1036.80'
        document_id: a41d7e9c05b24f6b8e3c1d5a7f92b604
    SandboxW2:
      description: >-
        A W-2. Every W-2 must reference a file, or it is dropped when the task
        is served.
      type: object
      required:
        - year
        - document_id
      properties:
        year:
          description: Tax year.
          type: string
          maxLength: 4
          example: '2025'
        fields:
          description: Per-box values.
          type: object
          example:
            wages: '124800.00'
        document_id:
          description: >-
            Sandbox document library entry to serve as the W-2 file. See [Upload
            a sandbox
            document](/api-reference/sandbox/v1_sandbox_documents_create).
          type: string
          maxLength: 64
          example: 3f1c8a90b7d2416e9a5c0e4f2b8d6a17
    SandboxShift:
      description: A scheduled shift and the time recorded against it.
      type: object
      properties:
        start_date:
          description: First day of the shift.
          type: string
          format: date
          nullable: true
          example: '2026-08-18'
        end_date:
          description: Last day of the shift.
          type: string
          format: date
          nullable: true
          example: '2026-08-18'
        timezone:
          description: IANA time zone the shift is recorded in.
          type: string
          nullable: true
          maxLength: 64
          example: America/Chicago
        time_entries:
          description: Time entries recorded against the shift.
          type: array
          items:
            $ref: '#/components/schemas/SandboxTimeEntry'
    SandboxAddress:
      description: A postal address.
      type: object
      properties:
        street:
          description: Street address.
          type: string
          nullable: true
          maxLength: 255
          example: 1 Main St
        city:
          description: City.
          type: string
          nullable: true
          maxLength: 128
          example: Austin
        state:
          description: State or region.
          type: string
          nullable: true
          maxLength: 64
          example: TX
        zip:
          description: Postal code.
          type: string
          nullable: true
          maxLength: 16
          example: '78701'
        country:
          description: Country.
          type: string
          nullable: true
          maxLength: 64
          example: US
    SandboxEarning:
      description: One earnings line on a pay statement.
      type: object
      required:
        - name
      properties:
        name:
          description: Name of the earnings line.
          type: string
          maxLength: 128
          example: Regular
        amount:
          description: Amount earned on this line.
          type: string
          format: decimal
          nullable: true
          example: '4800.00'
        rate:
          description: Rate of pay for this line.
          type: string
          format: decimal
          nullable: true
          example: '60.00'
        units:
          description: Units worked at this rate.
          type: string
          format: decimal
          nullable: true
          example: '80.00'
    SandboxTimeEntry:
      description: One clock-in and clock-out pair inside a shift.
      type: object
      required:
        - entry_date
      properties:
        entry_date:
          description: Date of the entry.
          type: string
          format: date
          example: '2026-08-18'
        start:
          description: Clock-in time, 24-hour.
          type: string
          nullable: true
          example: '08:00'
        end:
          description: Clock-out time, 24-hour.
          type: string
          nullable: true
          example: '16:30'
  securitySchemes:
    ClientID:
      type: apiKey
      description: Client ID
      name: X-Access-Client-Id
      in: header
    AccessKey:
      type: apiKey
      description: Client Access Key
      name: X-Access-Secret
      in: header

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.