EarnIn: Why Wait for Payday? icon

EarnIn Cash Out data API

Activehours, Inc. · Lending

EarnIn: Why Wait for Payday? is Activehours, Inc.'s Android client for U.S. hourly and salaried workers who want wages they have already earned before payday. Members sign in with a U.S. phone number, connect a checking account through Plaid and related aggregators, and Cash Out a portion of hours already worked to a linked debit card or an EarnIn deposit account. Lightning Speed can land the transfer in minutes for a fee; standard ACH takes longer. The same home stack covers Balance Shield low-balance alerts and auto-transfers, Tip Yourself savings jars, an EarnIn Card and deposit account with paycheck routing and Early Pay, credit monitoring, and optional rent reporting. EarnIn is a financial technology company, not a bank — Cash Out Link banking is provided by Lead Bank, Member FDIC, and some deposit products have sat at Evolve Bank & Trust. The app competes with Dave, Brigit, MoneyLion and Albert in the U.S. earned-wage and cash-advance niche; Cash Out Link is not available in all states.

Cash Out headroom is stamped as maxAvailableInCents against dailyLimitInCents and periodLimitInCents, while the linked checking snapshot carries bankBalanceInCents and bankAccountLastFour. A posted transfer records cashoutCashAmountCents, tipCents, feeCents and publicActivationGuid; Lightning Speed quotes actualFeeInCents on pull-forward eligibility. Tip Yourself jars expose availableTotalCents and per-jar balanceCents, paycheck routing uses routingAmountCents versus estimatedPaycheckCents, and credit monitoring returns bureau score with factor tiles. Lending-ops, overdraft-warning and payroll-routing tools consume that member ledger; openData Studio turns it into callable open data.

Screenshots

  • EarnIn: Why Wait for Payday? screenshot 1
  • EarnIn: Why Wait for Payday? screenshot 2
  • EarnIn: Why Wait for Payday? screenshot 3
  • EarnIn: Why Wait for Payday? screenshot 4
  • EarnIn: Why Wait for Payday? screenshot 5
  • EarnIn: Why Wait for Payday? screenshot 6
  • EarnIn: Why Wait for Payday? screenshot 7
  • EarnIn: Why Wait for Payday? screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Sign in with contact and credential

    POST /v1/members/sign-in osint

    Starts the member session from the sign-in screen and returns sessionId plus nonce for the subsequent token exchange.

    Auth: Unauthenticated PKCE sign-in. Body carries clientId, contact, credential, credentialType, codeChallenge and codeChallengeMethod. The response sessionId, nonce and confirmationId feed the token exchange.

    • clientId
    • contact
    • credential
    • credentialType
    • codeChallenge
    • codeChallengeMethod
    • resultCode
    • sessionId
    • nonce
    • confirmationId
    POST /v1/members/sign-in HTTP/1.1
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    Content-Type: application/json
    
    {
      "clientId": "<clientId>",
      "contact": "+15555550114",
      "credential": "<pin>",
      "credentialType": "Pin",
      "codeChallenge": "<pkceChallenge>",
      "codeChallengeMethod": "S256"
    }
    {
      "resultCode": "RequiresOtp",
      "sessionId": "ses_8f21c0ab",
      "nonce": "n-4e7c1a90",
      "confirmationId": "cfm_12ab"
    }
  • Exchange session for access token

    POST /v1/members/sign-in/token osint

    Trades the login session and PKCE verifier for a short-lived accessToken used as Bearer on Cash Out, bank and savings calls.

    Auth: Unauthenticated token exchange after sign-in/OTP. Body carries sessionId, nonce and the PKCE codeVerifier. The response accessToken is sent as Authorization: Bearer on later calls; the refreshToken rotates through a session-refresh call.

    • sessionId
    • nonce
    • codeVerifier
    • resultCode
    • accessToken
    • refreshToken
    • expiresAt
    POST /v1/members/sign-in/token HTTP/1.1
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    Content-Type: application/json
    
    {
      "sessionId": "ses_8f21c0ab",
      "nonce": "n-4e7c1a90",
      "codeVerifier": "<pkceVerifier>"
    }
    {
      "resultCode": "Success",
      "accessToken": "<jwt>",
      "refreshToken": "rt_9c31e2",
      "expiresAt": "2026-10-20T18:12:00.000-0700"
    }
  • Read Cash Out limits and usage

    GET /v1/wages/limits openfinance

    Loads the home Cash Out tile: remaining maxAvailableInCents against daily and pay-period caps, plus Tip Max Boost eligibility.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • maxAvailableInCents
    • dailyLimitInCents
    • dailyUsedInCents
    • periodLimitInCents
    • hasMaxDecreasedDueToRestoreFailure
    • tipMaxBoostEligibility
    GET /v1/wages/limits HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "maxAvailableInCents": 12500,
      "dailyLimitInCents": 15000,
      "dailyUsedInCents": 2500,
      "periodLimitInCents": 75000,
      "hasMaxDecreasedDueToRestoreFailure": false,
      "tipMaxBoostEligibility": {
        "allowTipMaxBoostCreation": true,
        "allowTipMaxBoostConsumption": true
      }
    }
  • Read linked bank snapshot

    GET /v1/linked-accounts/primary openbanking

    Returns the linked checking account shown on home: bankName, last four, live bankBalanceInCents and whether routing/account numbers are missing.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • bankName
    • bankAccountLastFour
    • displayBankAccountLastFour
    • bankBalanceInCents
    • bankBalanceTimeElapsed
    • accountOrRoutingNumberMissing
    GET /v1/linked-accounts/primary HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "bankName": "Chase",
      "bankAccountLastFour": "4412",
      "displayBankAccountLastFour": "4412",
      "bankBalanceInCents": 18640,
      "bankBalanceTimeElapsed": "12 min ago",
      "accountOrRoutingNumberMissing": false
    }
  • Create a Cash Out

    POST /v1/advances openfinance

    Posts a Cash Out from the confirm screen: cash and earnings amounts, optional tip, Lightning Speed fee and the resulting publicActivationGuid.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • mobileCashoutGuid
    • cashoutCashAmountCents
    • cashoutEarningsAmountCents
    • tipCents
    • feeCents
    • userTransferSpeedPreference
    • publicActivationGuid
    • fulfillmentDate
    • committedCashoutCount
    • attemptedCashoutCount
    POST /v1/advances HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    Content-Type: application/json
    
    {
      "mobileCashoutGuid": "csh_01J8GUID",
      "cashoutCashAmountCents": 10000,
      "cashoutEarningsAmountCents": 10000,
      "tipCents": 99,
      "feeCents": 399,
      "userTransferSpeedPreference": "Instant"
    }
    {
      "cashoutData": {
        "publicActivationGuid": "act_44c1",
        "cashoutCashAmountCents": 10000,
        "cashoutEarningsAmountCents": 10000,
        "tipCents": 99,
        "feeCents": 399,
        "fulfillmentDate": 1760986860000
      },
      "committedCashoutCount": 3,
      "attemptedCashoutCount": 3
    }
  • Quote Lightning Speed pull-forward

    GET /v1/advances/speed-quote openfinance

    Reads Lightning Speed eligibility and the tiered actualFeeInCents schedule before the member upgrades an ACH Cash Out.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • isEligible
    • maxAvailableInCents
    • pullForwardType
    • inCashoutE69
    • lightningSpeedFeeInfo
    • type
    • discountedLsReason
    • standardFeeInCents
    • actualFeeInCents
    • feeSchema
    • tiers
    GET /v1/advances/speed-quote HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "isEligible": true,
      "maxAvailableInCents": 12500,
      "pullForwardType": "USE_NEXT_DAY_LIMIT",
      "inCashoutE69": false,
      "lightningSpeedFeeInfo": {
        "type": "Tiered",
        "discountedLsReason": null,
        "standardFeeInCents": 399,
        "actualFeeInCents": 399,
        "feeSchema": "Tiered",
        "tiers": [
          {
            "start": 0,
            "end": 2500,
            "standardFeeInCents": 299,
            "actualFeeInCents": 299
          },
          {
            "start": 2501,
            "end": 15000,
            "standardFeeInCents": 399,
            "actualFeeInCents": 399
          }
        ]
      }
    }
  • Read earnings recognition method

    GET /v1/income/method openfinance

    Tells the Cash Out calculator whether payroll earnings are AccruingEarnings and which preselectedEarningsMethod (WEV work-email versus GPS) to use.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • payrollEarningsStatus
    • preselectedEarningsMethod
    GET /v1/income/method HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "payrollEarningsStatus": "AccruingEarnings",
      "preselectedEarningsMethod": "WEV"
    }
  • Read supplemental unpaid earnings

    GET /v1/income/unpaid-window openfinance

    Returns hours-already-worked earningsInCents for the unpaid window, the next calendar payday and Instant Earnings enrollment.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • earningsInCents
    • unpaidDaysStartDate
    • unpaidDaysEndDate
    • nextCalendarPayDate
    • workLocation
    • isEnrolledInInstantEarnings
    GET /v1/income/unpaid-window HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "earningsInCents": 18400,
      "unpaidDaysStartDate": "2026-10-13",
      "unpaidDaysEndDate": "2026-10-19",
      "nextCalendarPayDate": "2026-10-24",
      "workLocation": "Store 4412",
      "isEnrolledInInstantEarnings": true
    }
  • Read Tip Yourself total balances

    GET /v1/savings/balances openfinance

    Loads Tip Yourself vault totals: availableTotalCents versus pending deposits and withdrawals across all jars.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • savingsUserBalanceTotals
    • pendingDepositTotalCents
    • pendingWithdrawalTotalCents
    • availableTotalCents
    • presentTotalCents
    • nonCancellableTotalCents
    • cancellableDepositsTotalCents
    GET /v1/savings/balances HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "savingsUserBalanceTotals": {
        "pendingDepositTotalCents": 2500,
        "pendingWithdrawalTotalCents": 0,
        "availableTotalCents": 48000,
        "presentTotalCents": 50500,
        "nonCancellableTotalCents": 1200,
        "cancellableDepositsTotalCents": 2500
      }
    }
  • List Tip Yourself jars

    GET /v1/savings/jars openfinance

    Lists each Tip Yourself jar with goalCents, balanceCents and the two quick-tip amounts used on the save screen.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • tipJars
    • tipJarId
    • tipJarType
    • name
    • goalCents
    • balanceCents
    • standardTipJarSettings
    • quickTipAmountCents1
    • quickTipAmountCents2
    • balanceTotals
    GET /v1/savings/jars HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "tipJars": [
        {
          "tipJarId": 4412,
          "tipJarType": "StandardTipJar",
          "name": "Rainy day",
          "goalCents": 100000,
          "balanceCents": 48000,
          "standardTipJarSettings": {
            "standardTipJarSettingsId": 88,
            "tipJarId": 4412,
            "quickTipAmountCents1": 500,
            "quickTipAmountCents2": 1000
          }
        }
      ],
      "balanceTotals": {
        "availableTotalCents": 48000,
        "presentTotalCents": 48000,
        "pendingDepositTotalCents": 0,
        "pendingWithdrawalTotalCents": 0,
        "nonCancellableTotalCents": 0,
        "cancellableDepositsTotalCents": 0
      }
    }
  • Read credit-monitoring dashboard

    GET /v1/credit/overview openfinance

    Loads the credit-monitoring home: current score.value and ratingTier inside score.current, factor tiles (paymentHistory, creditUsage) and scoreHistory.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • score
    • current
    • previous
    • range
    • value
    • date
    • ratingTier
    • scoreFactors
    • paymentHistory
    • creditUsage
    • creditStartDate
    • scoreHistory
    • alerts
    • nextUpdateDate
    GET /v1/credit/overview HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "score": {
        "current": {
          "value": 718,
          "date": "2026-10-15",
          "ratingTier": "GOOD"
        },
        "previous": {
          "value": 705,
          "date": "2026-07-15",
          "ratingTier": "GOOD"
        },
        "range": {
          "min": 300,
          "max": 850
        }
      },
      "scoreFactors": {
        "paymentHistory": 97,
        "paymentHistoryTier": "EXCELLENT",
        "creditUsage": 22,
        "creditUsageTier": "GOOD",
        "creditStartDate": "2014-03-01",
        "creditStartDateTier": "GOOD"
      },
      "scoreHistory": {
        "scores": [
          {"value": 705, "date": "2026-07-15", "ratingTier": "GOOD"},
          {"value": 718, "date": "2026-10-15", "ratingTier": "GOOD"}
        ],
        "range": {"min": 300, "max": 850}
      },
      "alerts": {},
      "nextUpdateDate": "2026-11-15"
    }
  • Connect a bank account

    POST /v1/linked-accounts openbanking

    Completes the Plaid (or other aggregator) handoff from the bank-link screen and returns the new connection's id, bankName and status.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • provider
    • providerInstitutionId
    • authorizationCode
    • initializer
    • id
    • bankId
    • bankName
    • active
    • status
    • created
    POST /v1/linked-accounts HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    Content-Type: application/json
    
    {
      "provider": "Plaid",
      "providerInstitutionId": "ins_3",
      "authorizationCode": "public-sandbox-link-token",
      "initializer": "cash_out_onboarding"
    }
    {
      "id": "bcn_88c1",
      "bankId": "ins_3",
      "bankName": "Chase",
      "active": true,
      "status": "Healthy",
      "created": "2026-10-20T11:02:00.000-0700"
    }
  • Read paycheck-routing settings

    GET /v1/deposit-account/routing openfinance

    Loads Early Pay / paycheck-router amounts: how many cents of the estimated paycheck are routed to the EarnIn account versus the pay-period max.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • routingAmountCents
    • existingRoutingAmountCents
    • estimatedPaycheckCents
    • payPeriodMaxCents
    • recommendedRoutingAmountCents
    • estimatedStartDate
    GET /v1/deposit-account/routing HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "routingAmountCents": 40000,
      "existingRoutingAmountCents": 25000,
      "estimatedPaycheckCents": 125000,
      "payPeriodMaxCents": 75000,
      "recommendedRoutingAmountCents": 45000,
      "estimatedStartDate": "2026-10-24"
    }
  • Page EarnIn account activity and balances

    POST /v1/deposit-account/activity openbanking

    Pages the EarnIn Card / deposit-account ledger (activityType, activityStatus, amountCents) together with ccCBalances.availableBalanceAmountCents and totalEarningsAmountCents.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • filterByType
    • includeBalances
    • pageSize
    • deviceDateTime
    • nextPageKey
    • activityStream
    • activityDate
    • activityId
    • activityStatus
    • activityType
    • amountCents
    • description
    • isLastPage
    • balances
    • totalEarningsAmountCents
    • earningsAccuralStartDate
    • ccCBalances
    • availableBalanceAmountCents
    • cashAmountCents
    POST /v1/deposit-account/activity HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    Content-Type: application/json
    
    {
      "filterByType": null,
      "includeBalances": true,
      "pageSize": 20,
      "deviceDateTime": "2026-10-20T12:00:00.000-0700",
      "nextPageKey": null
    }
    {
      "activityStream": [
        {
          "activityDate": "2026-10-20T09:14:00.000-0700",
          "activityId": "acty_991",
          "activityStatus": "POSTED",
          "activityType": "TRANSFER_OUT",
          "amountCents": 10399,
          "description": "Cash Out to Chase •4412"
        }
      ],
      "isLastPage": false,
      "nextPageKey": "pg_2",
      "balances": {
        "totalEarningsAmountCents": 4150,
        "earningsAccuralStartDate": "2026-10-13",
        "ccCBalances": {
          "availableBalanceAmountCents": 22150,
          "cashAmountCents": 18000,
          "availableOnCardAmountCents": 18000,
          "cardBalanceAmountCents": 18000,
          "depositAccountBalanceAmountCents": 4150,
          "earningsSinceAmountCents": 4150
        }
      }
    }
  • Read EarnIn Card homescreen

    GET /v1/cards/overview openbanking

    Loads the EarnIn Card home: currentBalanceCents, streamed earnings on the card, monthlyFeeCents and each cardToken / last four.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • currentBalanceCents
    • securedAccountCents
    • streamedEarningsCents
    • monthlyFeeCents
    • featureStatus
    • cards
    • cardLastFour
    • cardStatus
    • cardToken
    • pinSet
    • isCardReplacement
    GET /v1/cards/overview HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "currentBalanceCents": 18000,
      "securedAccountCents": 0,
      "streamedEarningsCents": 4150,
      "monthlyFeeCents": 0,
      "featureStatus": "ACTIVE",
      "cards": [
        {
          "cardLastFour": "8821",
          "cardStatus": "ACTIVE",
          "cardToken": "ctok_7e21",
          "pinSet": true,
          "isCardReplacement": false
        }
      ]
    }
  • Read card spend and ATM limits

    GET /v1/cards/{cardToken}/limits openbanking

    Returns per-card finance details used on the card-controls screen: dailySpendLimitCents, ATM cash-advance cap and nameOnCard.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • nameOnCard
    • last4
    • dailySpendLimitCents
    • atmCashAdvanceDailyLimitCents
    • interestPercentage
    • cashAdvancePercentage
    GET /v1/cards/ctok_7e21/limits HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "nameOnCard": "ALEX RIVERA",
      "last4": "8821",
      "dailySpendLimitCents": 200000,
      "atmCashAdvanceDailyLimitCents": 50000,
      "interestPercentage": 0.0,
      "cashAdvancePercentage": 0.0
    }
  • Enroll Balance Shield auto-transfer

    PUT /v1/low-balance-transfers/enrollment openfinance

    Turns on Balance Shield auto Cash Out when the linked balance falls below selectedAutoTransferThresholdInCents, capturing the Lightning Speed fee and enrollmentStatus.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • selectedAutoTransferThresholdInCents
    • automaticTransferOption
    • tipInCents
    • bashProductType
    • enrollmentStatus
    • cashoutInCents
    • maxAutoTransferThresholdsInCents
    • feeAmountInCents
    PUT /v1/low-balance-transfers/enrollment HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    Content-Type: application/json
    
    {
      "selectedAutoTransferThresholdInCents": 5000,
      "automaticTransferOption": "LS",
      "tipInCents": 99,
      "bashProductType": "BASH"
    }
    {
      "selectedAutoTransferThresholdInCents": 5000,
      "enrollmentStatus": "ENROLLED",
      "tipInCents": 99,
      "cashoutInCents": 0,
      "maxAutoTransferThresholdsInCents": [2500, 5000, 10000],
      "feeAmountInCents": 399
    }
  • List pending Cash Out restores

    GET /v1/advances/pending-recoveries openfinance

    Lists ACH restores still waiting to debit the linked bank after payday: restoreInfos with bankAccountId, fundsTransferId and amountInCents, plus totalOutstandingAmountInCents.

    Auth: Authorization: Bearer accessToken issued by POST /v1/members/sign-in/token. Device id, platform and client-version headers accompany every call.

    • restoreInfos
    • bankAccountId
    • fundsTransferId
    • amountInCents
    • totalOutstandingAmountInCents
    • next
    • previous
    GET /v1/advances/pending-recoveries HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Device-Id: <deviceId>
    X-Client-Platform: android
    X-Client-Version: <appVersion>
    {
      "restoreInfos": [
        {
          "bankAccountId": "ba_88c1",
          "fundsTransferId": "ft_restore_12",
          "amountInCents": 10399
        }
      ],
      "totalOutstandingAmountInCents": 10399,
      "next": null,
      "previous": null
    }

Data categories

  • earned wages
  • cash outs
  • bank balances
  • savings jars
  • credit scores
  • paycheck routing
  • card balances
  • identity

Where teams use this data

  • Earned-wage limit monitor

    A lending-ops bot reads maxAvailableInCents against dailyLimitInCents and periodLimitInCents, plus earningsInCents for the unpaid window, and alerts when headroom drops after a restore failure (hasMaxDecreasedDueToRestoreFailure).

  • Overdraft auto-transfer trigger

    A cash-flow tool combines bankBalanceInCents with Balance Shield selectedAutoTransferThresholdInCents and Lightning Speed actualFeeInCents so an auto Cash Out fires before the linked checking account goes NSF.

  • Paycheck-routing planner

    Payroll and Early Pay tooling compares routingAmountCents to estimatedPaycheckCents and payPeriodMaxCents, then pages activityStream rows (activityType, activityStatus) against availableBalanceAmountCents on the EarnIn account.

  • Credit and savings sidecar

    A household-finance dashboard overlays credit-monitoring score.value and creditUsage with Tip Yourself availableTotalCents / per-jar balanceCents so members see bureau health next to rainy-day savings.

Frequently asked questions

What Cash Out fields does EarnIn expose?

The limits call (GET /v1/wages/limits) returns maxAvailableInCents against dailyLimitInCents, dailyUsedInCents and periodLimitInCents. Creating an advance (POST /v1/advances) posts cashoutCashAmountCents, tipCents, feeCents and userTransferSpeedPreference, and returns publicActivationGuid plus fulfillmentDate.

Can I read the linked bank balance and payday earnings?

Yes. GET /v1/linked-accounts/primary returns bankName, bankAccountLastFour and bankBalanceInCents. GET /v1/income/unpaid-window adds earningsInCents for the unpaid window, nextCalendarPayDate and isEnrolledInInstantEarnings.

How does EarnIn authenticate members?

Sign-in posts contact, credential and a PKCE codeChallenge to POST /v1/members/sign-in. POST /v1/members/sign-in/token then trades sessionId, nonce and codeVerifier for accessToken and refreshToken. Later calls send Authorization: Bearer plus device, platform and client-version headers.

Is there savings, card or credit data beyond Cash Out?

Yes. Tip Yourself totals sit at GET /v1/savings/balances (availableTotalCents), with per-jar goalCents and balanceCents from GET /v1/savings/jars. The EarnIn Card overview returns currentBalanceCents and streamedEarningsCents. GET /v1/credit/overview returns score.value, ratingTier and creditUsage.

Apps similar to EarnIn: Why Wait for Payday?

  • Dave — Dave ExtraCash advances $25–$500 with no credit check, interest, or late fees, typically authorized within five minutes after linking a bank, next to a Dave checking account that can receive pay up to two days early.
  • Brigit — Brigit Instant Cash advances $25–$500 with no credit check, interest, late fees, or tips, depositing in minutes after a bank link, and pairs the advance with a Credit Builder that reports payments to Experian, Equifax and TransUnion.
  • Tilt — Tilt Cash Advance (the former Empower app) sends $10–$500 with no interest, no late fees and no credit check, with optional instant delivery that may carry a fee, plus a FinWise Bank line of credit and WebBank credit cards.
  • MoneyLion — MoneyLion Instacash advances up to $500 with no interest, no credit check and no mandatory fees, arriving in 1–5 business days for free or instantly for an optional Turbo fee, with a path to $1,000 for qualifying MoneyLion Spend direct deposits.
  • Current — Current Paycheck Advance lets eligible members who add payroll draw up to $1,000 with no credit check, with free delivery in about three days or optional Instant Access that may take up to an hour for a fee.
  • FloatMe — FloatMe is a $6.99/month US membership that offers interest-free cash advances of up to $200 with no credit check and no late fees, repaid on the next payday, plus low-balance alerts and in-app credit monitoring.
  • Klover — Klover is a US cash-advance app that lets users access money before payday with no interest and no late fees after linking a bank, advertising advances of up to $750 plus optional points from surveys and ads that can raise the amount.
  • Possible Finance — Possible Finance offers a paycheck Advance of up to $300 available right away and a Loan of up to $500 that can be repaid over time.

Topics

  • EarnIn API
  • Cash Out data
  • maxAvailableInCents
  • bankBalanceInCents
  • Lightning Speed
  • Tip Yourself
  • Balance Shield
  • Activehours

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote